Phylip进化树的使用,偏重于文件格式的获取
Table of Contents
- 1 关于这个软件
- 2 mix.exe格式
- 3 pars.exe
- 4 附录:phylip软件子程序说明
1 关于这个软件
这个软件包含的内容很多,里面有许多的程序。后面我会附上我从别处看到的一 个总结,这里我们只是侧重于,对于这些程序所需要的输入文件的格式进行说明, 并讨论具体的实现方法。
这里我知道的需要两种格式。一种是mix.exe 和dnaml,dnamlk等需要的, 另外就是pars.exe等需要的。我没有用到所有的程序,所以我只是总结一下这 两种格式的获取。
2 mix.exe格式
4 5
ab 01001
acd 00101
m 10110
n 10000
这里的要点就是第一行,写明Sample的数目,和mark的数目。 然后后面的每一行都是“名字 状态”。名字和状态之间不是tab 键获得的。也就是要通过空格保证mark开始的位置都是对齐的。 我们用perl来实现就很简单了,只需要对名字这个参数用printf. 程序如下:
#首先自己要得到一个没有排序的完全的文件 #格式大概是这样 #a 01010 #b 00010 #也就是没有对齐的,如果你的样品非常的多,当然你可以手动处理,但是还是稍显麻烦 use stric; use waarnings; my @information; open(OUT,"out.txt")||die("can not open"); open(IN,"in.txt") ||die("can not open"); while(<IN>) { chomp; @information=split/\s+/,$_; $number=@information; printf OUT "%s-10s",$information[0]; print OUT "@information[0..$number-1]; } close IN; close OUT;
3 pars.exe
这种格式就稍微复杂一些了
1: I9311 AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA 2: AP TTTTTTTTTT AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA TTTTTTTTTT 3: 4: AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA 5: TTTTTTTTTT TTTTTTTTTT TTTTTTTTTT TTTTTTTTTT TTTTTTTTTT 6: 7: AAAAAAAAA 8: TTTTTTTTT 9:
这种格式的特点就是:一行50个,然后分成5段,每段10个,第一行放不下的,要放到第四行
程序如下,具体的就不多说了。
1: use strict; 2: use warnings; 3: 4: my (@information,$i,@file,$file,$key,$m,$geshi,%hash,$value); 5: open(OUT,">geshi_out.txt"); 6: open(IN,"all.txt")||die("can not open"); 7: while(<IN>) 8: { 9: chomp; 10: @information=split/\s+/,$_; 11: print "$information[0]\n"; 12: $hash{$information[0]}=$information[1]; 13: } 14: close IN; 15: 16: for($i=0;$i<50;$i+=50) 17: { 18: foreach $key (sort keys %hash) 19: { 20: printf OUT "%-10s",$key; 21: foreach($m=$i;$m<$i+41;$m+=10) 22: { 23: $value=$hash{$key}; 24: $geshi=substr($value,$m,10); 25: print OUT "$geshi "; 26: } 27: print OUT "\n"; 28: } 29: print OUT "\n"; 30: } 31: 32: for($i=0;$i<26341;$i+=50) 33: { 34: foreach $key (sort keys %hash) 35: { 36: printf OUT "%-10s", ; 37: foreach($m=$i;$m<$i+41;$m+=10) 38: { 39: $value=$hash{$key}; 40: $geshi=substr($value,$m,10); 41: print OUT "$geshi "; 42: } 43: print OUT "\n"; 44: } 45: print OUT "\n"; 46: }
4 附录:phylip软件子程序说明
PHYLIP是一个综合的系统发生分析软件包,由华盛顿大学的Joseph Felsenstein开发的。现在该软件包可完成许多系统发生分析。软件包中可用的方法包括了简约法、距离矩阵和似然法,以及bootstrap和一致性树。可以处理的数据类型有分子序列、基因频率、限制性位点、距离矩阵和二进制离散字符。 用户界面: 程序通过一个菜单来控制,用户设置选项。数据从一个文本文件中读入程序,这个文本文件不能是有特殊格式的文字处理器(office word)。有些序列比对程序,如clustalX,可将数据文件写为PHYLIP格式。 而大部分的程序自动寻找在infile文件中的数据。如果它们没有找到这个文件,它们将提示用户自己输入数据文件名。输出的内容将被写到特定的文件中,如:outfile和outtree。Outtree中的树是newick格式的,这是一个正式的标准,由1986年被主要系统发生软件包的作者所确定的。 Getting started 注意保持记录。 记录每步的实验过程是非常重要的,甚至是在计算分析时。也许你会对许多的结果文件感到头痛,那么最好的方法就是给 结果文件改一个有意义的名字。 序列比对。 PHYLIP的输入文件是比对过的序列,并且是PHYLIP格式的。文件的后缀名是.phy的。比对可用clustalX: http://www-igbmc.u-strasbg.fr/BioInfo/ClustalX/Top.html 一定要把比对的序列保存为phylip格式的。 PHYLIP程序的运行 这些程序要按照一定的顺序来运行。前一个程序的输出作为下一个程序的输入。如何合理的组合这些程序也很关键。 在windows中,PHYLIP程序可通过双击程序的图标来启动,或是在命令行中输入程序的名称来启动。我们建议使用命令行方式,因为你也许能看到一些错误提示。它启动的方是:开始->所有程序->附件->命令提示符。 大部分PHYLIP程序运行方法相同。程序把infile作为默认输入文件,如果没有找到它将要求用户输入数据文件的名称。输出结果写在outfile文件中。有些则写在outfile和outtree或plotfile中。 因为大部分程序使用默认的输入和输出文件名,所以在下一步的分析前,要重命名你想保存的文件。比如,你用Dnadist得到了距离矩阵(outfile),你还想试试不同的设置,那么再做矩阵计算前,你可以把outfile重命名为dnadist_out_F84,或其它名称,这样你就能区别两次的结果了。 程序 距离方法: 顺序使用这些程序。首先,用dandist或protdist程序计算序列比对结果的距离矩阵。接着这个矩阵被fitch、kitsch或 neighbor程序转换为树。Dandist和protdist程序的输出文件是outfile。在运行fitch、kitsch或neighbor 前,outfile应该重命名为infile或另外的名字。fitch、kitsch和neighbor的输出文件是outfile和outtree。 Dnadist DNA距离矩阵计算器 Protdist 蛋白质距离矩阵计算器 Fitch 没有分子时钟的Fitch-Margoliash树 Kitsch 有分子时钟的Fitch-Margoliash树 Neighbor Neighbor-Joining和UPGMA树 基于字符的方法 这些程序读入一个序列对,它们的输出文件是outfile和outtree。 Dnapars DNA简约法 Dnapenny DNA简约法using branch-and-bound Dnaml DNA最大似然,无分子时钟 Dnamlk DNA最大似然,有分子时钟 Protpars 蛋白质简约法 Proml 蛋白质最大似然法 重抽样工具 该程序生成一系列的特殊的随机样本,保存在outfile中。这些样本在后继的分析中作为一个序列对文件,要设置选项M(use multiple datasets)。 Seqboot 生成随机样本,用bootstrap和jack-knife方法。 画树 这些程序可画newick格式的树。如,danml程序生成的树。Drawgram和drawtree生成文件为plotfile,而retree生成outtree。 Drawgram 画有根树 Drawtree 画无根树 Retree interactive tree-rearrangement一致树 用多重树构建一致树。如,dnapars可生成多重树,可用consense程序来汇总。Bootstrap的结果也由它来汇总为一棵majority rule tree。 Consense draws consensus trees from multiple trees 树的距离 计算多个树间的基于拓朴结构的距离。该方法可用来比较不同分析方法的结果。 Treedist 计算树拓朴结构间的距离 Quick start 这里以DNA序列数据为例说明。构建和画树,用F84进化模式的NJ方法。 距离方法 比对你的DNA序列并且保存比对结果为PHYLIP格式,如:alignment.phy。启动dnadist程序,双击图标或在命令行中输入dnadist。 Dnadist首先检查该程序所在文件夹中是否有infile文件。如果没有找到infile,它就会提示你输入序列比对文件。 Dnadist: can't find input file "infile" Please enter a new file name> alignment.phy 注意,将程序与数据文件放在同一个文件夹中,使用起来会容易一些。如果数据文件在另外的文件夹中,你就要输入该文件的全部路径,比如文件在D:/data文件夹中, Dnadist: can't find input file "infile" Please enter a new file name> D:\data\alignment.phy 所有的PHYLIP程序都是菜单提示的。下面就是dnadist的菜单。每行都是以一个字母或数字开始的。通过输入每行前面的字母或数字,来修改相应的程序设置。例如,输入”D”按回车将循环得到不同的进化模式。修改完后输入“Y”,按回车,开始运行该程序。 Nucleic acid sequence Distance Matrix program, version 3.66 Settings for this run: D Distance (F84, Kimura, Jukes-Cantor, LogDet)? F84 G Gamma distributed rates across sites? No T Transition/transversion ratio? 2.0 C One category of substitution rates? Yes W Use weights for sites? No F Use empirical base frequencies? Yes L Form of distance matrix? Square M Analyze multiple data sets? No I Input sequences interleaved? Yes 0 Terminal type (IBM PC, ANSI, none)? ANSI 1 Print out the data at start of run No 2 Print indications of progress of run Yes Y to accept these or type the letter for one to change y 两两序列的距离保存在outfile文件中。你可以将它重命名为outfile.txt,那么以后双击它时就可自动用记事本打开了。 Distances calculated for species Rabbit .... Human ... Opossum .. Chicken . Frog Distances written to file "outfile" Done. 接着把outfile重命名为infile,运行neighbor程序(输入neighbor)。该程序从infile文件中读取距离数据。这里不需要设置,输入Y按回车。 Neighbor-Joining/UPGMA method version 3.66 Settings for this run: N Neighbor-joining or UPGMA tree? Neighbor-joining O Outgroup root? No, use as outgroup species 1 L Lower-triangular data matrix? No R Upper-triangular data matrix? No S Subreplicates? No J Randomize input order of species? No. Use input order M Analyze multiple data sets? No 0 Terminal type (IBM PC, ANSI, none)? ANSI 1 Print out the data at start of run No 2 Print indications of progress of run Yes 3 Print out tree Yes 4 Write out trees onto tree file? Yes Y to accept these or type the letter for one to change y 运行完之后,树包含在outfile和outtree。可以用文本编辑器来看outfile中的树。 画树 下面我们用drawgram程序把outtree画成一棵好看的树吧。首先,把outtree重命名为intree,并把font文件的其中 一个重命名为fontfile,启动drawgram程序。该程序首先寻找文件fontfile,如果找不到它(如果你没有把字体文件之一改为fontfile 的话),它会提示输入一个字体文件。接着就会出现菜单。你需要将选项P对应的最终画图设备改为MS-windows bitmap。它还要要求你输入树的维数,比如说640x400。设置好后输入Y按回车。 Drawgram打开一个新的窗口,你可以看到一棵树,如果你满意这个结果,选择file菜单中的plot。在当前文件夹中出现一个plotfile文件。如果你将它重命名为plotfile.bmp,就可用图形工具将它打开了。 树支的长度是核苷酸或氨基酸改变的数目,改变的数目用dandist程序进化模式来估算。 氨基酸序列 所用的程序与上面所举的例子类似。只要把dnadist换成protdist就行了。 ################ 详细说明 ################# 除了基于距离的方法外,还有基于字符的方法:最大简约法和最大似然法。 根据实际情况,除了数据分析和画之外,我们还要验证数据的可靠性,比如用bootstrap方法。 如果运行有些程序之前,你还运行过别的程序,在文件夹中已经存在了outfile文件的话,程序会有这样的提示: Dnadist: the file "outfile" that you wanted to use as output file already exists. Do you want to Replace it, Append to it, write to a new File, or Quit? (please type R, A, F, or Q) #####DNA数据#### Dnadist的菜单 Nucleic acid sequence Distance Matrix program, version 3.66 Settings for this run: D Distance (F84, Kimura, Jukes-Cantor, LogDet)? F84 G Gamma distributed rates across sites? No T Transition/transversion ratio? 2.0 C One category of substitution rates? Yes W Use weights for sites? No F Use empirical base frequencies? Yes L Form of distance matrix? Square M Analyze multiple data sets? No I Input sequences interleaved? Yes 0 Terminal type (IBM PC, ANSI, none)? ANSI 1 Print out the data at start of run No 2 Print indications of progress of run Yes D——距离计算方法,进化模式。是争对替换问题和转换颠换的。Jukes-Cantor距离假设所有替换的概率都相等。Kimura距离有两个不同的替换率,一个对应转换,一个对应颠换。这些模式都假设每个碱基的频率是相等,且等于0.25。F84距离,转换和颠换率不同,碱基的频率也不同。 LogDet距离在序列间有较大的碱基频率差异时使用。LogDet距离不能复制含糊的代码,必须是确定的序列。 (下面是一些摘抄的他人问题,或有益) 最近用phylip的N-J来建系统进化树,得到的图型如下图。特征如下:一是无根,二是进化速率恒定(表现为分支等长)。可是我从文献看到的进化树(Phylip,N-J),一幅是有根树;另一幅无根,但分支不等长。 请问:N-J能否构建有根树?如果是无根树,分支节点后的分支一定是等长么?请不吝赐教。 附3幅图: ….. 我用的软件是phylip3.65。流程:clustx-seqboot-dnadist-consense-treeview显示。请指点 另外,在neighbor.exe中,O,即outgroup root?选项,我用的是默认值,即use as spieces 1。是否是这里的影响?该如何选择outgroup。请您指导。 你的可能是巧合吧,我和你的方法一样,作出来也不是等长的。你可以再试试别的建树方法。不同的算法有不同的适用目标。一般来说,最大简约性法适用于符合以下条件的多序列:i 所要比较的序列的碱基差别小,ii 对于序列上的每一个碱基有近似相等的变异率,iii 没有过多的颠换/转换的倾向,iv 所检验的序列的碱基数目较多(大于几千个碱基);用最大可能性法分析序列则不需以上的诸多条件,但是此种方法计算极其耗时。如果其它方法也是这样的结果,那可能是你的数据的问题了 等长的是拓朴树,只反应进化关系;不等长是进化树,其长短代表进化的距离远近。跟有根无根没关系。选outgroup一定要选你处理数据之外的一个远缘序列,然后指定他是outgroup。如果没有就不指定outgroup。 对于outgroup的选择,需要补充一点,如果是做物种的系统发育关系,则外群应该选择远缘关系的,如果是做群体即一个物种下的,则外群要选择近缘的