Phylip进化树的使用,偏重于文件格式的获取

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的选择,需要补充一点,如果是做物种的系统发育关系,则外群应该选择远缘关系的,如果是做群体即一个物种下的,则外群要选择近缘的



Date: 2013-04-30 13:46:42 CST

Author: gaorongchao

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0

你可能感兴趣的:(Phylip进化树的使用,偏重于文件格式的获取)