Phylip進化樹的使用,偏重於檔案格式的獲取

gaorongchao1990626發表於2013-04-30

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

相關文章