选择压力分析之EasyCodeML完整篇
写在前面(By CJ):
前前后后四年有余,EasyCodeML是我接触生信后,参与开发的第一个Java软件。软件的idea和界面设计来源于Raindy,我负责了Coding部分(即代码实现逻辑)。事实上,我当初应下EasyCodeML的Coding工作,只是在《生物软件交流群》(QQ群)讨论时,一腔热血。我相信Raindy也是一样。我们的想法都很简单,提供一个人人都会使用的,相对方便的操作接口,使一些生信分析变得简单。后来机缘巧合,我们讨论后,便将idea和软件实现整理成文章并发表(当然后面这部分工作,我基本没有参与)。
尽管我只负责Coding,不过我还是拿到了人生中第一篇共同通讯和共同一作。这篇文章也是我参与发表的第一篇软件类文章。这是一个令人开心的事情
。工作既然是做了,那么就要发表出来,也要展示出来。于是,决定转载Raindy关于EasyCodeML的博文。一方面,分享和降低生信分析门槛,是我们开发软件的初衷(如上);另一方面,增加曝光度,也可以让有需要的朋友看到。如果还有其他方面,那么应该是我忘记了。想要了解关于作者和软件的更多信息,那么最好的方式是,或许就看完这篇推文。
以下,与Raindy确定,并转载其发表在QQ空间的全文:
絮语:
自然选择是五种遗传力(突变、重组、选择、基因流、漂变)之一,选择压力分析更是进化分析中不可或缺的一项重要内容。虽然本人也整理过包括《PAML FAQ》、《正选择分析之 Branch site model 篇(By Raindy)》和《EasyCodeML使用指南》等多篇相关的日志教程和一份课件《EasyCodeML选择压力分析_北林》。由于相关内容比较零碎,随着工具的更替及软件功能的完善,这些教程中的一些操作可以通过更快捷的方式实现,特整理此日志以飨尚未同步更新的用户。
如果您的文章使用 EasyCodeML进行选择压力分析,欢迎参考以下格式进行引用:
Gao F, Chen C, Arab DA, Du Z, He Y, Ho SYW. 2019. EasyCodeML: A visual tool for analysis of selection using CodeML. Ecology and Evolution. DOI: 10.1002/ece3.5015.
一、自然选择的检测
非同义替代与同义替换的比值,即:ω 值,也就是通常所说的dN/dS(或Ka/Ks)。
(1)当ω =1时,中性进化 (Neutral selection),即不受选择:
(2)当ω >1时,正选择(Positive selection);
(3)当 0 <ω <1时,负选择(Negative selection,也叫净化选择或纯化选择 Purifying selection)
二、 CodeML中四个常见的模型假设及工作流
在CodeML中,考虑不同序列间(考虑位点)或系统发育上的支系间(考虑支系Lineage)的ω 值不同,主要有以下四类常见的模型:
1. 枝模型(Branch model)主要用于对系统发育树中不同支系 ω值差异性进行界定,主要有三个模型:
(1)One-ratio model:假设系统发育树中所有支系的 ω 值相等;
(2)Free-ratio model:假设系统发育树中所有支系的 ω 值不相等;
(3)Two-ratio model:假设前景枝和背景枝的ω 值不同;
2. 位点模型 (Site model)主要假设数据集中不同氨基酸位点受的选择压力不同(而不考虑不同支系间受的选择压力差异)。
该模型主要用于检测正选择( ω >1)作用,共有8个不同假设的模型:
(1)M0(单一比率),即:One-ratio model,假设所有位点具有相同的 ω 值;
(2)M1a(近中性),假设仅有保守位点(0<ω <1)和中性位点( ω =1)而没有正选择位点( ω >1)存在,这两类位点的比率分别为p0和p1,其对应的ω 值分别为ω0、ω1;
(3)M2a(正选择),该模型在M1基础上增加了第三类ω值,即假设除了保守位点和中性位点外,还存在处于正选择压力下的位点( ω >1),这三类位点的比率分别为p0、p1和p2,其对应的ω 值分别为ω0、ω1和ω2;
(4)M3(离散),假设所有的位点ω 值呈简单的离散分布趋势;
(5)M7(beta),假设所有位点的 ω 属于矩阵(0, 1)并呈beta分布;
(6)M8(beta & ω ) ,该模型在M7基础上增加另一类ω 值(ω >1);
(7)M8a(beta & ω =1),与M8模型类似,但将ω 值固定为1(ω =0);
3. 枝位点模型 (Branch site model):主要假设不同氨基酸位点的和不同支系间受的选择压力均存在差异(既考虑位点间也考虑支系间的 ω 值存在差异),共有四个模型Model A、Model B、Model C和Model D,主要参数如下:
(1)Model A (Model 2, NSites=2, ncatG=ignored)
(2)Model B (Model 2, NSites=3, ncatG=ignored)
(3)Model C (Model 3, NSites=2, ncatG=ignored)
(4)Model D (Model 3, NSites=3, ncatG=2 or 3)
4. 进化枝模型 (Clade Model):与枝位点模型类型,能同时检测多个进化枝(Clade),共有CmC和 CmD 两种模型,主要参数如下:
(1)CmC (Model 3, NSites=2, ncatG=2 or 3)
(2)CmD (Model 3, NSites=3, ncatG=ignored)
CodeML 分析大致工作流简要如下:
(1)配置零假设模型和备选模型的参数(codeml.ctl);
(2)运行CodeML程序进行分析获得对应的LnL和np值;
(3)通过似然率检验(LRT)(卡方检验)获得p值确定零假设模型和备选模型之间是否存在差异;
(4)根据结果进行解读
三、 EasyCodeML的主要功能及其改进
EasyCodeML 是一款以CodeML为内核的、通过可视化交互式的操作进行选择压力分析的工具,并整合了CodeML中主要的基于密码子的模型(Codon-based models)。该软件由 Java 程序语言编写,并已编译好适用于 Windows、Mac OS X和 Linux三个操作系统预编译版本(其他系统操作未测试,不能保证其正常运行)。在运行 EasyCodeML前,请检查对应的操作系统中是否已经安装最近版本的Java运行环境(Java Runtime Environment, JRE 1.6 或更高版本)。与其他的选择压力分析工具比较,EasyCodeML主要功能如下:
1. 两种运行模式
EasyCodeML中提供了两种运行模式,第一种是预置模式(Preset Mode),让用户彻底告别原CodeML晦涩高深的操作,只是轻松点击即可完成,尤其适合新手使用;第二种是定制模式(Custom Mode),让用户根据需要随时调整或修改相关参数,适合于CodeML老手使用;
(1)预置模式(Preset Mode),即在该运行模式下,已经整合了用于选择压力分析的常见成对模型的主要参数,并通过流水线式自动完成分析。这些成对模型包括枝模型(M0 vs. Two-ratio model)、位点模型(M0 vs. M3、M1a vs. M2a、M7 vs. M8, M8a vs. M8)、枝位点模型(Model Anull vs Model A)和进化枝模型(M2a_rel vs. CmC)四大类共7对。用户只需要根据分析目的在该运行模式下,添加自己的数据(格式化后的序列文件和树文件),选择其中一类模型分析即可;
(2)定制模式(Custom Mode),有点类似于PamlX,用户可以任何修改模型中的所有参数以满足分析目的的需要。为了用户调用方便,EasyCodeML在定制模式下“Load”模块中特别整合了一个“Control File Viewer”,可以预加载上述的四大类14个常见模型的参数。用户可以快速载入任何一个模型的预先优化的参数,并在此基础调整部分参数。
2. 可视化标记前景枝(或进化枝)
在CodeML 中,除了位点模型(Site model)外的其他三类模型在分析前都需要先定义前景枝(Foreground branch),但早期的工具一般是通过文本编辑器在树文件的进行手动标记,这对于新手是个大挑战,一是操作繁琐不直观,二是容易标记效率低。
EasyCodeML中提供可视化的前景枝标记功能,所见即所得,具有高效、准确等特点,还可以避免由手动修改造成误标问题。用户只需要在载入的树文件,在需要标记的分支上通过鼠标点击即可完成前景枝的定义。注意:定义前景枝一般是基于一定的生物学证据。如果暂无生物学信息可用,可以将所有可能的分支分别定义为前景枝,并通过不同假设进行检验;
3. 其他附带功能
(1)序列格式转换器,除了可以将多种序列格式转为CodeML分析所需要的PML格式,还可以实现这些序列格式之间的任意转换;
(2)自动完成似然率检验(LRT)分析,让用户省去繁琐处理过程(预置模式下);
(3)“Export”模块可生成准发表级的表格,用户只需要在导出主要结果数据的表格基础上简单修改即可用于发表;
(4)“Check”模块,用于检查序列名称和树文件中的Taxa名称相一致,可以为顺利进行CodeML分析作为铺垫;
(5)支持文件或文件夹拖曳功能,工作目录、序列文件和树文件,可以直接拖入对应的输入框内;
(6)支持多线程操作,主要应用于位点模型(Site model),多线程运行可以充分利用计算机资源;
四、 EasyCodeML选择压力分析简明图解
EasyCodeML运行流程如上图所示
1. 数据准备(序列文件、树文件及其标记)
(1)用于选择压力的序列文件必须是比对后的PML,如果格式尚未转换,可以通过EasyCodeML工具栏下的“Sequence Format Convertor”进行转换,支持拖曳操作,自动识别序列格式类型;如果核苷酸序列,则序列长度必须是3的倍数(Codon方式比对)。
(2)用于选择压力分析的树文件必须是 Newick format (如:Examples/Example1.tree),可以通过Figtree 等软件导出,如图2所示。注意:树中的类别名称(Taxon name)不能带有空格、逗号等非法字符。
(3)除位点模型(Site models)外,与枝相关的模型均需要提前进行前景枝的标记。枝模型(Branch model)和进化枝模型(Clade model)可以标记多个前景枝(或进化枝),但枝位点模型(Branch-site model)只能一次标记一个前景枝,图3。
简明操作Tip:载入Newick格式的树文件后,点击“Label”按钮,自动弹出操作窗口,选择一个分支后,该分支将以橙色显示,并自动标记上#1符号(Clade model 使用$),如果要多个分支需要标记,点击左侧菜单点击2nd、3rd、4th和5th 以同样方式操作Clade Branch Model 和Clade Model最多支持标记五个前景枝(或进化枝)。
2. 运行模式
2.1 预置模式
(1)选择一个本地文件夹作为工作目录,可以直接通过拖曳操作;
(2)选择一个选择分析的模型类型(示例为Clade Model);
(3)载入PAML格式的比对序列(非PAML的序列也可以直接拖入,程序会自动转换为PAML格式);
(4)载入 Newick 格式的树文件(需要事先转换,注意树中的类别名称与比对中的序列名称一致);
(5)通过“Check”检查树文件中类别名称与比对序列的名称一致性;
(6)通过“Lable”模块定义前景枝(Site Model不需要);
(7)保存当前参数配置信息(强制操作,否则不能运行);
(8)启动 CodeML 分析(如果需要静默运行,请勾选In Slient Mode选项,即可不弹出相关提示信息);
(9)自动完成成对模型的似然法检验(LRTs);
(10)通过“Export” 将主要结果及参数导出并生成为准发表级的表格;
(11)启动 Microsoft Excel 查看生成的表格文件;
2.2 定制模式
(1)选择一个本地文件夹作为工作目录;
(2)载入PAML格式的比对序列;
(3)载入 Newick 格式的树文件;
(4)选择当前的数据类型(示例数据为Codon);
(5)检查树文件中类别名称与比对序列的名称一致性;
(6)模块定义前景枝(Site Model不需要);
(7)通过“Load”模块调出 Control File Viewer (Fig. 4);
(8)保存当前参数配置信息(强制项);
(9)启动 CodeML 分析;
(10)查看运行结果,获得LnL1和np1值。同样方式获得备选模型的LnL2和np2值,用于LRT分析;
(11)通过工具栏的“LRT Calculator”进行成对模型的LRTs 分析(Fig. 5);
3. 结果解读
相关的结果解读,详见EasyCodeML的软件文章有参考文献后的两篇示例数据文献
五、 常见问题
1. CodeML中的四类模型应如何选择?
(1)枝模型(Branch model)一般用于检测支系间的选择约束强度(selective constraints, 0 <ω <1)。当比较不同支系间的 ω值是否显著差异时,一般使用成对模型 One-ratio model vs. Free-ratio model;当比较前景枝与背景枝的 ω值是否显著差异时,一般使用成对模型 One-ratio model vs. Two-ratio model ;
(2)位点模型 (Site model)一般用于检测正选择位点(不考虑支系间的ω 差异),常用的成对模型一般有M2a vs. M1a、M8 vs. M7和M8 vs. M8a,后面两对更为常用;
(3)枝位点模型 (Branch site model)一般用于基因复制事件发生后,检测前景枝中正选择作用对部分部分的影响。常用的成对模型为Model A vs. Model A null;
(4)进化枝模型 (Clade Model)与枝位点模型相似,但不限于检测正选择作用,还可以整个进化枝或部分支系上特异位点的选择约束性。常用的成对模型是CmC model vs. M2a_rel model;
2. 为什么我的EasyCodeML 被识别为压缩包?
EasyCodeML.jar,是主程序文件,正常情况下,直接双击即可运行。但如果*.jar文件被识别为压缩包,则程序会被系统关联的解压缩软件进行解压缩处理。解决办法是去除*.jar与解压缩软件的关联,比如 WinRAR之类的,在参数设置去除 jar 的关联即可
3. 为什么找到的正选择位点在原始比对序列中找不到?
最主要原因可能是比对序列中带有gap,codeml 默认忽略gap所带的一列数据 (即启用 Clean data =1),从而导致位置发生偏移。因此,分析前最好将带gap的同一列序列全部手工删除,找到正选择位点的氨基酸位置后,再还原对应到原始比对序列上。当然也可以在EasyCodeML主界面中把 Clean data 前面的选项勾选取消掉,重新运行分析即可。
4. 前景枝(进化枝)标记问题
与CodeML相一致,EasyCodeML v1.2 支持枝模型(Branch model)和进化枝模型(Clade model)一次同时标记多个前景枝(或进化枝),但枝位点模型(Branch-site model)只能一次标记一个前景枝,而位点模型(Site model)不需要标记。
六、 参考文献及推荐材料
1. 综述文献
(1)Vitti, J.J., Grossman, S.R., Sabeti, P.C., 2013. Detecting natural selection in genomic data. Annual Reviews of Genetics 47, 97-120.
(2)Sironi, M., Cagliani, R., Forni, D., Clerici, M., 2015. Evolutionary insights into host-pathogen interactions from mammalian sequence data. Nature Reviews Genetics 16, 224-236.
2. 相关软件:
(1)Yang, Z., 2007. PAML 4: Phylogenetic analysis by maximum likelihood. Molecular Biology and Evolution 24, 1586-1591
(2)Egan, A., Mahurkar, A., Crabtree, J., Badger, J., Carlton, J., Silva, J., 2008. IDEA: Interactive Display for Evolutionary Analyses. BMC Bioinformatics 9, 524.
(3)Busset, J., Cabau, C., Meslin, C., Pascal, G., 2011. PhyleasProg: a user-oriented web server for wide evolutionary analyses. Nucleic Acids Research 39, W479-W485.
(4)Xu, B., Yang, Z., 2013. pamlX: A graphical user interface for PAML. Molecular Biology and Evolution 30, 2723–2724.
(5)Maldonado, E., Sunagar, K., Almeida, D., Vasconcelos, V., Antunes, A., 2014. IMPACT_S: integrated multiprogram platform to analyze and combine tests of selection. PLOS ONE 9, e96243.
(6)Maldonado, E., Almeida, D., Escalona, T., Khan, I., Vasconcelos, V., Antunes, A., 2016. LMAP: Lightweight multigene analyses in PAML. BMC Bioinformatics 17, 354.
(7)Schott, R.K., Gow, D., Chang, B.S.W., 2016. BlastPhyMe: A toolkit for rapid generation and analysis of protein-coding sequence datasets. BioRxiv.
3. 示例数据:
(1)Bielawski, J.P., Yang, Z., 2003. Maximum likelihood methods for detecting adaptive evolution after gene duplication. Journal of Structural and Functional Genomics 3, 201-212.
(2)Padhi, A., Verghese, B., Otta, S.K., 2009. Detecting the form of selection in the outer membrane protein C of Enterobacter aerogenes strains and Salmonella species. Microbiological Research 164, 282-289.
七、特别致谢
EasyCodeML测试版自2015年暑假首次推出,至2019年2月11日软件文章被正式接收。四年间EasyCodeML历经无数次的调试和修改,感谢陈程杰博士的辛勤付出,也特别感谢陕西博瑞德生物科技有限公司陈振玺、西南大学家蚕基因组生物学国家重点实验室李寒博士、南京师范大学生命科学学院张麟博士和四川农业大学园艺学院陈清老师等的意见和建议,使得程序日臻完善!