一、引言
GENBANK是目前最大而权威的分子序列数据库,调用其中数据可以进行分子系统发育树的构建。
1、序列数据获取(以皿蛛系统发育树为例)
在GenBank中,每一个物种或阶元都有一个taxid,他是taxa的ID。而且taxa之间存在父子关系。我们的研究对象是蜘蛛目(Aranaea),其taxaid为6893,其父级阶元是蛛形纲(Arachnida),taxaid为6854。按照递归查询的原则,只要有自6893以下所有taxa的父子关系对照表,就能查询到目前在GenBank中记录的所有蜘蛛的名录。事实上,这个想法已经可以实现了!NCBI有一个public的ftp(ftp.ncbi.nlm.nih.gov),从中的/pub/taxonomy/taxdmp.zip压缩包中可以下载到相应的信息。taxadmp.zip含有9个文件,其中比较重要的是其中的names.dmp和nodes.dmp。通过查看readme.txt文档,得知其中names.dmp为genbank中所有taxaid的基本信息,nodes.dmp为taxaid有关父子关系的信息。将两个文件通过NCBI_TAXDMP_NAMES.nopi和NCBI_TAXDMP_NODES.nopi导入文件导入到DB中,再递归查询并筛选出属于6893以下阶元的文件,便可得到GenBank中有记录的所有spider的名录。在我的DB中,导入的这两个表称为NCBI_TAXDMP_NAMES和NCBI_TAXDMP_NODES。为了和DB中其他表格协同,特新建了MV_SIG_TAXDMP_NAMES和MV_SIG_TAXDMP_NAMES_ID两个物化视图。
在Gen其每一条序列数据都有唯一的GI号,它就是序列的身份证。在得知TaxaID后,建立GI、Gene和TaxaID的对应关系就十分重要。在DB中,这个表称为SIG_NUCL,它有4个字段,分别是tax_id,GI,Gene和Flag。其中,Gene的外键是SIG_Gene表中值。由于同一个taxa的某一个基因可能有多个序列,且长短不一,最终要选哪个必须由研究者手动来定,所以表中增设了Flag开关,1代表选取某序列,0代表暂存但在计算中不使用。
以上说得元数据在更新时一定要小心,以免造成破化。建议采用自动手动结合的方式进行更新。
实战:Linyphiidae分析系统发育树构建。
元数据:taxaid——DB中获得
GI ——NCBI提供的Entrez在线检索器用脚本代码生成结果xml文件,再从xml文件中获得某一个taxaid的GI列表。见entrez.txt
序列数据:得到GI列表后,通过R语言脚本read_genbank.r获得序列数据,并转换为fasta格式文件存储待用。
其他工具:序列对齐工具ClustalX2,跑树工具BEAST工具包。
例子:为了运算速度快,只选择4种皿蛛进行分子系统发育树构建。分别是187178Bolyphantes alticeps,187180Neriene variabilis,187181Neriene radiate,233285Pimoa sp. X131,Bolyphantes属于皿蛛亚科,两种盖蛛属于M-EClade,外群为Pimoa。
1. 首先,用R脚本生成待所有taxa序列的fasta文件,再导入ClustalX2进行自动对齐,再用NOTEPAD++进行手动对齐,之后导出为aln文件。
2. 对齐之后,为了满足BEAST对于格式的要求,再Mesquite中将aln文件转换为nex格式。方法是:(1)在Mesquite中打开aln文件,在弹出的对话框中选择Clustal(DNA/RNA),将nex保存在aln同一目录。但是,由于BEAST软件并不能识别这种复杂格式的nex,还需要在Mesquite中将其导出为简单格式的nex文件。做法是打开gi_seq_aln.nex文件,(忽略提示错误),选择export->Simplified_Nexus导入。导出后的nex只包含文件头,taxa标签和对齐后的序列信息,之前nex的参数文件都不见了。
3. 使用BEAST跑树。
A. 首先,打开BEAUti,生成跑BEAST所需的xml文件。具体做法参考BEAST使用说明。
(1)首先是定义校准点。在taxa标签下,将具有最近共同祖先MRCAs的taxa组成一组,表示可以设定校正点。在本例中,除Pimoa外,所有皿蛛为MRCA,强制单系,以Pimoa为外群。在实际应用中,可设置多个tMRCA,但taxa之间不能有重复,否则Beast时会报错。
(2)设置分子进化模型Site Models。Substitution Model:GTR。Base frequeencies: Empirical. Site Heterogeneity Model选为Gamma
(3) 设置分子钟模型Clock Models。 将Molecular Clock Model选为“Relaxed Clock:Uncorrelated Lognormal”, estimate不选择,fix mean rate of molecular clock model不选择。
(4)设置Trees。选择Tree Prior为Speciation:Birth-Death Process,starting tree处选择User defined.此处可以import一颗ML树作为BEAST的起始树。具体做法是在file菜单下点import data,将nex格式的ML树导入。需要注意的是,这一nex树不能用mesquite直接生成的simplified nex,格式要更加简化。translate标记要取消,而且脚本以begin tree开始,end结束,以newick格式记录树形及支长。在引入自定义的Starting tree后,tMRCA的设定便有了限制,tMRCA的taxa分组不能和Starting tree拓扑结构冲突,否则在BEAST的时候会报错。
(5) 设置Prior。在tmrca(Linyphiidae)中选择Lognormal,参数为0,2,125(参考Dimitrov,2012)。
(4)Operators。全部默认设置
(5)设置MCMC。链长设为1000000,Echo设为10000,Log设为200(这些参数需要根据研究需要自定义)。
(6)生成XML文档(忽略)。
B.运行BEAST。在BEAST中打开xml文件,运行后生成后缀为trees和log的文件。
由于BEAST跑树计算量非常大,而且要持续数天,因此不建议在PC上运行,最好在服务器上运算。从运算效率上考虑,建议使用Linux平台的操作系统,我选择的是CentOS。BEAST在CentOS系统中的安装步骤:
1.从BEAST官网下载运行在Linux/Unix系统下的tgz包,之后在PC上用7zip解压,将解压好的文件夹拷到root目录下。
2.变更best文件夹的权限。最简单的办法就是输入如下命令,使所有文件夹和文件对所有用户都有最大权限。
chmod -R 777 [beast目录]
3.由于BEAST是基于Java虚拟机运行的程序,因此在CentOS中首先要安装并运行Java。由于BEAST在运行中需要CentOS的图形界面,因此要在gnome桌面模式下运行。
4. 在/beast/bin目录下找到beast程序,运行BEAST。弹出的对话框打开编辑好的xml文件,就会自动运行beast,结果trees和log文件存储在bin目录下。需要说明一点,如果在windowsPC下编辑生成的xml文件,在CentOS平台下不能直接使用,由于EOF在UNIX和DOS/WINDOWS下编码不同,直接使用会报错。解决方法是在NOTEPAD++的EDIT菜单下将文件的EOF模式设置为UNIX格式,保存后将其上传至服务器,再用BEAST打开就OK了。
C. 运行Tracer分析结果。用Tracer打开log文件分析。这个过程可以看出跑树结果的好坏。
(1)Tracer显示了BEAST后得到的各种参数,包括likelihood,meanRate(平均进化速率),coefficientOfVariation(每一分支分子进化的变异系数,表示分子变化的速率在不同分支上是否等速),root和每一个tMRCA分化时间的估计值等等。同时选中root.height和tMRCA,可以通过箱线图和边界密度图显示预设的化石校正点估计值是否一致。
(2)Tracer作为一个通用工具,不仅可以分析BEAST跑出的bayers树,还可以分析MrBayers等跑出来的树。对于MrBayers跑出来的树,可以做如下分析:
a. 确定Burnin的值,在tracer中加载两轮.p文件,分析trace图,改变Burnin的值,直到trace图显示lnl值能够围绕一个值小幅波动为止。一般来说,bayers分析burnin值不超过15%。
b. 和议完成后,可以通过PSRF参数评价树的好坏。
sump burnin=250(在此为1000个样品,即任何相当于你取样的25%的值),参数总结summarize the parameter,程序会输出一个关于样品(sample)的替代模型参数的总结表,包括mean,mode和95 % credibility interval of each parameter,要保证所有参数PSRF(the potential scale reduction factor)的值接近1.0,如果不接近,分析时间要延长.RSRF值在*.vstat文件中。c. 和议完成的Bayers树,每个节点还会有probs值,该值表示某一结点的支持度。
D. 运行TreeAnnotator得到合议树。用TreeAnnotator打开trees文件,设定参数得到合议树。特别要指出的是,TreeAnnotator中Output File文件默认是让选择,其实直接取一个输出的文件名点ok即可。需要注意的是,由于jvm有内存限制,对于超过10000棵树需要和议时,不能直接运行treeannotator,而是进入beast的lib目录,运行以下代码启动treeannotator。
java -Xmx2048m -Xms2048m -classpath beast.jar dr.app.tools.TreeAnnotator
代码中的2048为jvm可调用内存的限值,运算量越大,这个值应调的越高。
E.最后用FIGTREE打开tree文件,分析和议得到的Dated Phylogeny。 为了使结果更为直观,可以在Figtree中显示tMRCA中node的值及95%HPD