计算分子进化-搞懂PAML的正选择分析

许多基因组的文章里都会提到使用PAML进行基因的正选择分析(positive selection), 网上也有一些教程介绍如何用PAML进行分析。无论是文章,还是教程,大多只介绍了过程,读完之后,是能够做相应的分析了,但却不知道为什么要这样子做,这篇教程就做这一方面的补充。

我们应该知道组成蛋白序列的氨基酸对应的核苷酸突变可以分为两类,同义置换(synonymous substitution)和非同义置换(nonsynonymous substitution),通过计算非同一置换速率和同义置换速率的比值, omega=dN/dS, 我们可以衡量蛋白的选择压力。如果选择不影响物种适应环境,那么比值两者的速率应该相等,因此比值为1,如果非同义突变会降低物种的适应性,那么dN < dS, 因此比值小于1, 如果非同义突变让提高物种的适应性,那么dN > dS, 则比值大于1. 于是乎,非同义突变率显著高于同义突变即为蛋白质适应性进化的证据。

接下来,我们以书中被子植物光敏色素(phy)的适应性进化作为例子结合理论来讲解,数据方式如下

# PAML的安装和配置不再赘述
# codeml的配置文件
wget http://abacus.gene.ucl.ac.uk/ziheng/data/phyACF.codeml.ctl 
# 15个物种的codon联配结果, 包含gap
wget http://abacus.gene.ucl.ac.uk/ziheng/data/phyACF.txt
# 15个物种的系统发育树
wget http://abacus.gene.ucl.ac.uk/ziheng/data/phyACF.trees

下载的配置文件phyACF.codeml.ctl信息显示如下

      seqfile = phyACF.txt
     treefile = phyACF.trees

      outfile = mlc   * main result file name
        noisy = 3 * 0,1,2,3,9: how much rubbish on the screen
      verbose = 0  * 1: detailed output, 0: concise output
      runmode = 0

      seqtype = 1  * 1:codons; 2:AAs; 3:codons-->AAs
    CodonFreq = 2  * 0:1/61 each, 1:F1X4, 2:F3X4, 3:Fcodon
       aaDist = 0  * 0:equal, +:geometric; -:linear, 1-6:G1974,Miyata,c,p,v,a

        model = 2
      NSsites = 2

        icode = 0  * 0:universal code; 1:mammalian mt; 2-10:see below

    fix_kappa = 0  * 1: kappa fixed, 0: kappa to be estimated
        kappa = 5  * initial or fixed kappa
    fix_omega = 0  * 1: omega or omega_1 fixed, 0: estimate
        omega = 0.1

    fix_alpha = 1  * 0: estimate gamma shape parameter; 1: fix it at alpha
        alpha = .0  * initial or fixed alpha, 0:infinity (constant rate)
        ncatG = 3  * # of categories in dG of NSsites models

        clock = 0   * 0:no clock, 1:global clock; 2:local clock; 3:TipDate
        getSE = 0  * 0: don't want them, 1: want S.E.s of estimates
 RateAncestor = 1  * (0,1,2): rates (alpha>0) or ancestral states (1 or 2)

   Small_Diff = .5e-6
*    cleandata = 1  * remove sites with ambiguity data (1:yes, 0:no)?
*        ndata = 3
       method = 0  * 0: simultaneous; 1: one branch at a time

虽然参数很多,但正选择分析上, 我们所需要修改的参数是 model, NSsites, fix_omega, omega 这四项,来决定codeml的分析模式。

首先, 修改配置文件中的 model = 0 和 NSsites = 0. 此时, codeml会计算全局omega.

使用codeml phyACF.codeml.ctl 运行,输出结果在当前目录的mlc文件中。里面信息很多,我们重点关注如下几项

...
lnL(ntime: 27  np: 29): -29984.121043      +0.000000
...
Detailed output identifying parameters

kappa (ts/tv) =  1.98351

omega (dN/dS) =  0.08975

lnL是似然值(likeilhood value)的自然对数,之所以是负数,是因为计算出似然值是一个非常小的小数,如果不取对数,结果显示就是0,难以使用。

从结果来看,我们算出的全局omega非常小,约为0.09。这很容易理解,因为我们都知道一个蛋白序列,保守的位点肯定远远多于不保守的位点,那么平均下来,整体的值就会很小。因此正选择通常分析的是系统发育关系的特定谱系或者是蛋白质的某几个位点。

接下来,我们修改 model = 2 和 NSsites = 0, 此时codeml会分析我们提供系统发育树中某个分支(foreground)相对于其他分支(background)是否处于正选择。 问题来了,codeml如何判断哪个是foreground,哪些是background呢?此时需要看下 phyACF.trees.

1


((C.Sorg:1.414715, (F.Tom:1.174355, C.Arab:1.734907):0.401510):7.949045 #1, (Oat3:0.217161, (A.Rice:0.255094, (A.Zea:0.084488, A.Sorg:0.041302):0.239315):0.038530):1.329584, ((A1.Pea1:0.304507, A.Soy:0.370169):0.329161, ((A.Pars:0.912283, (A.Tob:0.154040, (A.Tom:0.051204, A.Pot:0.054514):0.100673):0.456387):0.182221, (A.Zuc:0.729785, A.Arab:0.792669):0.136483):0.130833):0.547791);

我们可以使用iTOL这个网页工具对这个树进行展示,树形如下。

iTOL tree

不难从图中发现,有一个明显和其他格格不入的分支,其中包含C. Sorg(高粱,PhyC)和 C.Arab(拟南芥,PhyC), F.Tom(番茄,PhyF)。我们想要检验这一支,是不是受到了正选择。 为了强调这一支,我们需要在树结构对应的位置上加上#1,表示foreground, 而这在我们下载的.tree文件中已经有了,你可以检查下。

我们运行codeml phyACF.codeml.ctl,关注输出文件mlc里的如下内容

...
lnL(ntime: 27  np: 30): -29983.513876      +0.000000
...
Detailed output identifying parameters

kappa (ts/tv) =  1.99551

w (dN/dS) for branches:  0.08998 0.03881

在dN/dS这一行有两个omega值,第一个是background, 第二个是foreground。虽然后者比前者大,但是也没有超过1。另外,似然比检验(LRT)也显示,这两个模式没有明显差异。

这里,我们提到了似然比检验(likelihood-ratio test, LRT), 这个概念很重要,我们需要稍稍展开说明下。它指的是,根据两个竞争的统计模型的似然值的比值,评估两者的拟合度,其中一个是最大化整个参数空间,另一个则是做一些限制。如果限制条件(零假设)被观测数据所支持,那么两者的似然值的差异不会超过抽样误差。因此,LRT检验的是,比值是不是和1有显著区别,或者说比值的自然对数和0有显著区别。

通常似然比检验的统计量表现为两个对数似然值的差值

\lambda_{\mathrm{LR}}=-2\left[\ell\left(\theta_{0}\right)-\ell(\hat{\theta})\right]

这个统计量,我们可以使用卡方检验(chi2)来分析它的显著性。

# 用R算出
abs(-2*(-29983.513876 - -29984.121043))
# PAML计算chi2, 自由度设置见最后的补充
chi2 1 1.27
df =  1  prob = 0.270475480 = 2.705e-01

对比我们model=2和model=0, 显著性0.27 > 0.05, 不足以拒绝零假设,即我们检测分支的omega相对于全局的omege没有明显差异。

接下来,我们来介绍在所有教程都会提到的branch-site model. 也就是设置model=2 NSsites=2. 它会分析目标分支里的位点是不是受到了正选择。

我们需要建立两个假设,分别是零假设和备择假设

  • 零假设: 检验的分支里的位点不受选择,我们设置参数fix_omega=1, omega = 1
  • 备择假设: 检验的分支里的位点受到正选择,我们设置fix_omege=0, omege = 1.1

在零假设时,输出结果的内容如下,记录lnL= -29704.738847

lnL(ntime: 27  np: 31): -29704.738847      +0.000000
...
Detailed output identifying parameters

kappa (ts/tv) =  2.16177

MLEs of dN/dS (w) for site classes (K=4)

site class             0        1       2a       2b
proportion       0.77433  0.07298  0.13953  0.01315
background w     0.07767  1.00000  0.07767  1.00000
foreground w     0.07767  1.00000  1.00000  1.00000
...

在备择假设时,输出结果的内容如下,记录lnL= -29694.784206

lnL(ntime: 27  np: 31): -29694.784206      +0.000000

...
Detailed output identifying parameters

kappa (ts/tv) =  2.18201

MLEs of dN/dS (w) for site classes (K=4)

site class             0        1       2a       2b
proportion       0.81323  0.07539  0.10194  0.00945
background w     0.07958  1.00000  0.07958  1.00000
foreground w     0.07958  1.00000 17.59530 17.59530

计算统计量

abs(-2 *(-29694.784206 - -29704.738847 ) )
# 19.90928

卡方检验(关于自由度是1, 见最后的补充)

chi2 1 19.9
df =  1  prob = 0.000008160 = 8.160e-06

p远远小于0.01, 为正选择提供了强有力的证据。此时检查mlc输出文件的如下内容,我们还能够确定被选择的位点有哪些。 *表示显著性。

Bayes Empirical Bayes (BEB) analysis (Yang, Wong & Nielsen 2005. Mol. Biol. Evol. 22:1107-1118)
Positive sites for foreground lineages Prob(w>1):
    17 T 0.539
    33 G 0.634
    34 D 0.672
    35 S 0.750
    43 E 0.621
    55 R 0.982*
    61 I 0.643
    66 H 0.924
    71 K 0.701
   102 T 0.974*
   104 V 0.932
   105 S 0.994**
   115 D 0.875
   117 P 0.990*
   120 G 0.819
   130 T 0.976*
....

最后补充下为什么自由度是1, 一方面这是PAML的文档中提到的。。

image.png

另一方面,根据定义,自由度指的是统计量计算时不受限制的变量个数。在我们检验分支的时候,只有一个foreground w是需要自由,所以df=1; 在我们对比branch-sites model时,备择假设相对零假设,只有一个w2是自由(fix_omega = 0), 所以df=1

以上是我在学习正选择分析时的整理结果,由于数学功底太弱,有些疑问我还没有结果,比如说似然值为什么那么小?ML模型参数是如何确定的?输出结果中Bayes Empirical Bayes是怎么运算的?这些还需要不断的学习。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容