Phylip進化樹的使用,偏重於檔案格式的獲取
Table of Contents
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的選擇,需要補充一點,如果是做物種的系統發育關係,則外群應該選擇遠緣關係的,如果是做群體即一個物種下的,則外群要選擇近緣的