ggtree學(xué)習(xí) 第一章:樹文件的輸入、輸出和操作

原文鏈接《 Data Integration, Manipulation and Visualization of Phylogenetic Trees

1、樹文件輸入

1.1系統(tǒng)發(fā)育樹構(gòu)建綜述

系統(tǒng)發(fā)育樹是一種描述一群生物之間親緣關(guān)系的樹,它可以根據(jù)生物的遺傳序列來構(gòu)建。根狀的系統(tǒng)發(fā)育樹表示一種進(jìn)化歷史模型,該模型由樹節(jié)點(diǎn)之間的祖先-后代關(guān)系和不同親緣程度的姐妹或表親生物體的聚類關(guān)系所描述,如圖1.1所示。在傳染病研究中,系統(tǒng)發(fā)育樹通常由病原體基因或基因組序列構(gòu)建,以顯示哪個(gè)病原體樣本在遺傳上更接近另一個(gè)樣本,從而為未觀察到的潛在流行病學(xué)聯(lián)系和暴發(fā)的潛在來源提供見解。

image.png
圖1.1:系統(tǒng)發(fā)育樹的組成。外部節(jié)點(diǎn)(綠色圓圈),也稱為尖端,代表采樣和測序的實(shí)際生物體(例如傳染病研究中的病毒)。它們是進(jìn)化生物學(xué)術(shù)語中的分類群。內(nèi)部節(jié)點(diǎn)(藍(lán)色圓圈)代表提示的假想祖先。根(紅色圓圈)是這棵樹中所有物種的共同祖先。水平線是分支,代表以時(shí)間或遺傳分化為單位測量的進(jìn)化變化(灰色數(shù))。底部的欄提供了這些分支長度的比例。
系統(tǒng)發(fā)育樹可以用基于距離的方法或基于字符的方法由遺傳序列構(gòu)建?;诰嚯x的方法,包括UPGMA (unweighted pair group method with算術(shù)均值法)和NJ (Neighbor-joining法),都是基于序列間的兩兩遺傳距離矩陣?;谧址姆椒ǎㄗ畲蠊?jié)約法(MP) (Fitch 1971)
、最大似然法(ML) (J. Felsenstein 1981)和貝葉斯馬爾科夫鏈蒙特卡羅法(BMCMC) (Rannala and Yang 1996),基于描述遺傳特征演化的數(shù)學(xué)模型,并根據(jù)其最優(yōu)性準(zhǔn)則尋找最佳的系統(tǒng)發(fā)育樹。
最大簡約(MP)方法假設(shè)進(jìn)化變化是罕見的,并將特征狀態(tài)變化的數(shù)量最小化(例如,DNA替換的數(shù)量)。這一標(biāo)準(zhǔn)類似于奧卡姆的剃刀,即能夠解釋數(shù)據(jù)的最簡單的假設(shè)就是最好的假設(shè)。不加權(quán)簡約法假設(shè)不同字符(核苷酸或氨基酸)的突變是等可能的,而加權(quán)法假設(shè)突變的不均等可能(例如,第三個(gè)密碼子位置比其他密碼子位置更容易發(fā)生突變;而且過渡突變的頻率比反轉(zhuǎn)突變高)。MP方法的概念是直接和直觀的,這可能是它在生物學(xué)家中流行的原因,他們更關(guān)心研究問題,而不是分析的計(jì)算細(xì)節(jié)。然而,這種方法有幾個(gè)缺點(diǎn),特別是樹推理可能會(huì)受到眾所周知的系統(tǒng)錯(cuò)誤——長分枝吸引(long-branch attraction, LBA)——的影響,它錯(cuò)誤地將遠(yuǎn)親譜系推斷為近親 (Joseph Felsenstein 1978)。這是因?yàn)镸P方法較差地考慮了從現(xiàn)有遺傳數(shù)據(jù)中很難觀察到的許多序列進(jìn)化因素(如逆轉(zhuǎn)和收斂)。
最大似然法(ML)和貝葉斯馬爾可夫鏈蒙特卡羅法(BMCMC)是構(gòu)建系統(tǒng)發(fā)育樹最常用的兩種方法,也是科學(xué)出版物中最常用的方法。ML和BMCMC方法需要序列演化的替代模型。不同的序列數(shù)據(jù)有不同的替代模型來表述DNA、密碼子和氨基酸的進(jìn)化過程。目前有幾種核苷酸取代模型,包括JC69、K2P、F81、HKY和GTR (Arenas 2015)。這些模型可結(jié)合各站點(diǎn)間的比率變化(記作+ Γ) (Z. Yang 1994)和不變站點(diǎn)的比例(記作+I) (Shoemaker and Fitch 1989)使用。之前的研究 (Lemmon and Moriarty 2004)表明,對(duì)替代模型的錯(cuò)誤說明可能會(huì)導(dǎo)致系統(tǒng)發(fā)育推斷的偏差。推薦對(duì)最適合的替換模型進(jìn)行過程測試。
ML方法的最優(yōu)準(zhǔn)則是找到給定序列數(shù)據(jù)的最大似然樹。ML方法的過程很簡單:計(jì)算一棵樹的可能性,并優(yōu)化其拓?fù)浜头种?以及替代模型參數(shù),如果不是固定的),直到找到最好的樹。啟發(fā)式搜索,例如那些在PhyMLRAxML中實(shí)現(xiàn)的搜索,通常用于基于似然準(zhǔn)則尋找最佳樹。貝葉斯方法基于給定的替換模型,通過MCMC對(duì)樹進(jìn)行抽樣,找到后驗(yàn)概率最大的樹。BMCMC的優(yōu)點(diǎn)之一是,在MCMC過程中,可以自然、方便地從采樣樹中獲得包含后驗(yàn)枝概率的參數(shù)方差和樹的拓?fù)洳淮_定性。此外,拓?fù)洳淮_定性對(duì)其他參數(shù)估計(jì)的影響也自然地集成到BMCMC系統(tǒng)發(fā)育框架中。
在一個(gè)簡單的系統(tǒng)發(fā)育樹中,與樹分支/節(jié)點(diǎn)相關(guān)的數(shù)據(jù)可以是分支長度(表明遺傳或時(shí)間發(fā)散)和譜系支持,如bootstrap程序估計(jì)的bootstrap值或BMCMC分析中從采樣樹中總結(jié)的后驗(yàn)進(jìn)化枝概率。

1.2系統(tǒng)發(fā)育樹格式

有幾種文件格式設(shè)計(jì)用于存儲(chǔ)系統(tǒng)發(fā)育樹以及與節(jié)點(diǎn)和分支相關(guān)的數(shù)據(jù)。三種常用的格式是Newick3, NEXUS (Maddison et al. 1997)和Phylip (Joseph Felsenstein 1989)。一些格式(例如,NHX)是從Newick格式擴(kuò)展而來的。大多數(shù)進(jìn)化生物學(xué)軟件都支持Newick和NEXUS格式作為輸入,而一些軟件工具則通過引入新的規(guī)則/數(shù)據(jù)塊來存儲(chǔ)進(jìn)化推理,從而輸出更新的標(biāo)準(zhǔn)文件(如 BEAST
MrBayes)。在其他情況下(例如,PAMLr8s),輸出日志文件只能由它們自己的單一軟件識(shí)別。

1.2.1 Newich 格式

Newick樹格式是用計(jì)算機(jī)可讀形式表示樹的標(biāo)準(zhǔn)格式。


image.png

用于演示Newick文本編碼樹結(jié)構(gòu)的示例樹。尖端對(duì)齊到右邊,樹枝的長度被標(biāo)記在每個(gè)樹枝的中間。
圖1.2中所示的根樹可以用以下字符序列表示為Newick樹文本。

((t2:0.04,t1:0.34):0.89,(t5:0.37,(t4:0.03,t3:0.67):0.9):0.59); 

Newick格式以分號(hào)結(jié)束。內(nèi)部節(jié)點(diǎn)由一對(duì)匹配的圓括號(hào)表示。括號(hào)之間是該節(jié)點(diǎn)的后代節(jié)點(diǎn)。例如(t2:0.04,t1:0.34)表示t2和t1的父節(jié)點(diǎn),它們是直系后代。同級(jí)節(jié)點(diǎn)由逗號(hào)分隔,提示由名稱表示。分支長度(從父節(jié)點(diǎn)到子節(jié)點(diǎn))由子節(jié)點(diǎn)之后和冒號(hào)前面的實(shí)數(shù)表示。與內(nèi)部節(jié)點(diǎn)或分支相關(guān)聯(lián)的奇異數(shù)據(jù)(例如,引導(dǎo)值)可以編碼為節(jié)點(diǎn)標(biāo)簽,并用冒號(hào)前的簡單文本/數(shù)字表示。
Newick樹的格式是由Meacham在1984年開發(fā)的 PHYLIP (Retief 2000)包。Newick格式現(xiàn)在是最廣泛使用的樹格式,使用的是 PHYLIP, PAUP* (Wilgenbusch and Swofford 2003), TREE-PUZZLE (Schmidt et al. 2002), MrBayes和許多其他應(yīng)用。Phylip tree格式包含了一種基于MSA序列在同一文件中構(gòu)建的相應(yīng)Newick樹文本的Phylip多重序列對(duì)齊(MSA)。

1.2.2 NEXUS tree format

NEXUS格式 (Maddison et al. 1997)
將Newick樹形文本與相關(guān)信息組織成稱為塊的獨(dú)立單元。NEXUS塊具有以下結(jié)構(gòu)

#NEXUS
...
BEGIN characters;
...
END;

上面的示例樹可以保存為以下NEXUS格式:

#NEXUS
[R-package APE, Fri Dec 31 09:56:12 2021]

BEGIN TAXA;
    DIMENSIONS NTAX = 5;
    TAXLABELS
        t2
        t1
        t5
        t4
        t3
    ;
END;
BEGIN TREES;
    TRANSLATE
        1   t2,
        2   t1,
        3   t5,
        4   t4,
        5   t3
    ;
    TREE * UNTITLED = [&R] ((1:0.04,2:0.34):0.89,(3:0.37,(4:0.03,5:0.67):0.9):0.59);
END;

可以使用方括號(hào)放置注釋。大多數(shù)程序都能識(shí)別出一些塊,包括TAXA(包含分類單元信息)、DATA(包含數(shù)據(jù)矩陣,如序列比對(duì))和TREE(包含系統(tǒng)發(fā)育樹,即Newick樹文本)。值得注意的是,塊可以非常多樣化,其中一些塊只能被一個(gè)特定的程序識(shí)別。例如,由 PAUP*導(dǎo)出的NEXUS文件有一個(gè)包含PAUP*命令的PAUP塊,而 FigTree導(dǎo)出的NEXUS文件有一個(gè)包含可視化設(shè)置的FigTree塊。NEXUS將不同類型的數(shù)據(jù)組織成不同的塊,而支持讀取NEXUS的程序可以解析一些它們識(shí)別到的塊,并忽略那些它們無法識(shí)別的塊。這是一種很好的機(jī)制,允許不同的程序使用相同的格式,而不會(huì)在出現(xiàn)不支持的數(shù)據(jù)類型時(shí)崩潰。值得注意的是,大多數(shù)程序只支持TAXA、DATA和TREE塊的解析,因此,能夠從NEXUS中通用地讀取所有類型的數(shù)據(jù)塊的程序/平臺(tái)將對(duì)系統(tǒng)發(fā)育數(shù)據(jù)集成非常有用。
數(shù)據(jù)塊廣泛用于存儲(chǔ)序列對(duì)齊。為此,用戶可以以Phylip格式存儲(chǔ)樹和序列數(shù)據(jù),這實(shí)際上分別是Phylip多序列對(duì)齊和Newick樹文本。它用于系統(tǒng)發(fā)育分析包(PHYLIP)。

1.2.3新Hampshire擴(kuò)展格式

Newick、NEXUS和phylip主要用于存儲(chǔ)系統(tǒng)發(fā)育樹和與內(nèi)部節(jié)點(diǎn)或分支相關(guān)的基本奇異數(shù)據(jù)( basic singular data)。除了分支和節(jié)點(diǎn)上的奇異數(shù)據(jù)注釋(上面提到過),基于Newick(也稱為New Hampshire)的新Hampshire擴(kuò)展格式(New Hampshire eXtended format, NHX)被開發(fā)出來,用來引入標(biāo)簽,將多個(gè)數(shù)據(jù)字段與樹節(jié)點(diǎn)(內(nèi)部節(jié)點(diǎn)和提示)關(guān)聯(lián)起來。標(biāo)簽放置在分支長度之后,必須在[&&NHX and]之間包裝,這使得它可能與NEXUS格式兼容,因?yàn)樗x了[和]之間的注釋字符。NHX也是 PHYLDOG (Boussau et al. 2013) 和 RevBayes (H?hna et al. 2016)。r (ATV) (Zmasek and Eddy 2001)是一個(gè)java工具,它支持顯示以NHX格式存儲(chǔ)的注釋數(shù)據(jù),但是這個(gè)包不再更新了。
下面是一個(gè)NHX格式的文檔

(((ADH2:0.1[&&NHX:S=human], ADH1:0.11[&&NHX:S=human]):0.05
[&&NHX:S=primates:D=Y:B=100],ADHY:0.1[&&NHX:S=nematode],
ADHX:0.12[&&NHX:S=insect]):0.1[&&NHX:S=metazoa:D=N],(ADH4:0.09
[&&NHX:S=yeast],ADH3:0.13[&&NHX:S=yeast],ADH2:0.12[&&NHX:S=yeast],
ADH1:0.11[&&NHX:S=yeast]):0.1[&&NHX:S=Fungi])[&&NHX:D=N];

1.2.4 Jplace 格式

為了存儲(chǔ)映射到系統(tǒng)發(fā)育樹上的NGS短序列(用于宏基因組分類),Matsen提出了這種系統(tǒng)發(fā)育位置的jplace格式 (Frederick A. Matsen et al. 2012)。Jplace格式基于JSON,包含四個(gè)鍵:樹、字段、位置、元數(shù)據(jù)和版本。樹值包含從Newick樹格式擴(kuò)展而來的樹文本,方法是將邊緣標(biāo)簽放在括號(hào)中(如果可用),然后在分支長度之后,將邊緣編號(hào)放在花括號(hào)中,放在邊緣標(biāo)簽之后。字段值包含位置數(shù)據(jù)的頭信息。位置的值是一個(gè)pquery列表。每個(gè)pquery包含兩個(gè)鍵:p表示位置,n表示名稱或nm表示具有多重性的名稱。p的值是該pquery的位置列表。
下面是一個(gè)jplace格式文件

{
"tree": "(((((((A:4{1},B:4{2}):6{3},C:5{4}):8{5},D:6{6}):
3{7},E:21{8}):10{9},((F:4{10},G:12{11}):14{12},H:8{13}):
13{14}):13{15},((I:5{16},J:2{17}):30{18},(K:11{19},
L:11{20}):2{21}):17{22}):4{23},M:56{24});",
"placements": [
{"p":[24, -61371.300778, 0.333344, 0.000003, 0.003887],
"n":["AA"]
},
{"p":[[1, -61312.210786, 0.333335, 0.000001, 0.000003],
[2, -61322.210823, 0.333322, 0.000003, 0.000003],
[3, -61352.210823, 0.333322, 0.000961, 0.000003]],
"n":["BB"]
},
{"p":[[8, -61312.229128, 0.200011, 0.000001, 0.000003],
[9, -61322.229179, 0.200000, 0.000003, 0.000003],
[10, -61342.229223, 0.199992, 0.000003, 0.000003]],
"n":["CC"]
}
],
"metadata": {"info": "a jplace sample file"},
"version" : 2,
"fields": ["edge_num", "likelihood", "like_weight_ratio",
"distal_length", "pendant_length"
]
}

Jplace是 PPLACER (Frederick A. Matsen, Kodner, and Armbrust 2010b)和 (EPA) (Berger, Krompass, and Stamatakis 2011)的輸出格式。但是這兩個(gè)程序不包含可視化工具。PPLACER提供placeviz來將jplace文件轉(zhuǎn)換為系統(tǒng)演化xml或Newick格式,Archaeopteryx可以將其可視化。

1.2.5軟件輸出

RAxML (Stamatakis 2014)可以通過將bootstrap值存儲(chǔ)為內(nèi)部節(jié)點(diǎn)標(biāo)簽來輸出Newick格式。RAxML支持的另一種方式是將bootstrap值放在方括號(hào)內(nèi)和分支長度之后。這不能被大多數(shù)支持Newick格式的軟件支持,方括號(hào)將被忽略。
BEAST (Bouckaert et al. 2014)的輸出是基于NEXUS的,并且在樹塊中引入了方括號(hào)來存儲(chǔ)BEAST推斷出的進(jìn)化證據(jù)。在括號(hào)內(nèi),如果特征值的長度超過1(例如HPD或替代率范圍),也可以加入花括號(hào)。這些括號(hào)放在節(jié)點(diǎn)長度和分支長度之間(即,如果存在,則放在label之后,冒號(hào)之前)。括號(hào)不是Newick格式定義的,它是NEXUS注釋的保留字符。因此,對(duì)于標(biāo)準(zhǔn)的NEXUS解析器,這些信息將被忽略。
下面是一個(gè)BEAST模塊輸出格式

TREE * TREE1 = [&R] (((11[&length=9.47]:9.39,14[&length=6.47]:6.39)[&length=25.72]:25.44,4[&length=9.14]:8.82)[&length=3.01]:3.1,
(12[&length=0.62]:0.57,(10[&length=1.6]:1.56,(7[&length=5.21]:5.19,
((((2[&length=3.3]:3.26,(1[&length=1.34]:1.32,(6[&length=0.85]:0.83,
13[&length=0.85]:0.83)[&length=2.5]:2.49)[&length=0.97]:0.94)
[&length=0.5]:0.5,9[&length=1.76]:1.76)[&length=2.41]:2.36,
8[&length=2.19]:2.11)[&length=0.27]:0.24,(3[&length=3.33]:3.31,
(15[&length=5.29]:5.27,5[&length=3.29]:3.27)[&length=1.04]:1.04)
[&length=1.98]:2.04)[&length=2.83]:2.84)[&length=5.39]:5.37)
[&length=2.02]:2)[&length=4.35]:4.36)[&length=0];

BEAST輸出可以包含許多不同的進(jìn)化推理,這取決于在BEAUTi中定義的用于運(yùn)行的分析模型。例如在分子時(shí)鐘分析中,它包含速率、長度、高度、后驗(yàn)和相應(yīng)的HPD以及用于不確定度估計(jì)的范圍。速率是該分支的估計(jì)進(jìn)化速率。長度是指樹枝的長度,以年為單位。高度為節(jié)點(diǎn)到根的時(shí)間,后驗(yàn)為貝葉斯演化支可信度值。上面的例子是分子時(shí)鐘分析的輸出樹,應(yīng)該包含這些推論。為了節(jié)省空間,上面只顯示了長度估計(jì)。此外,分子進(jìn)化遺傳學(xué)分析 (MEGA) (Kumar, Stecher, and Tamura 2016)也支持以BEAST兼容的Nexus格式導(dǎo)出樹(見1.3.2節(jié))。
MrBayes (Huelsenbeck and Ronquist 2001)是一個(gè)程序,它使用馬爾可夫鏈蒙特卡羅方法從后驗(yàn)概率分布中采樣。它的輸出文件用兩組方括號(hào)分別注釋節(jié)點(diǎn)和分支。例如下面,節(jié)點(diǎn)的后驗(yàn)分支概率和分支長度估計(jì)

tree con_all_compat = [&U] (8[&prob=1.0]:2.94e-1[&length_mean=2.9e-1],10[&prob=1.0]:2.25e-1[&length_mean=2.2e-1],((((1[&prob=1.0]:1.43e-1
[&length_mean=1.4e-1],2[&prob=1.0]:1.92e-1[&length_mean=1.9e-1])[&prob=1.0]:
1.24e-1[&length_mean=1.2e-1],9[&prob=1.0]:2.27e-1[&length_mean=2.2e-1])
[&prob=1.0]:1.72e-1[&length_mean=1.7e-1],12[&prob=1.0]:5.11e-1
[&length_mean=5.1e-1])[&prob=1.0]:1.76e-1[&length_mean=1.7e-1],
(((3[&prob=1.0]:5.46e-2[&length_mean=5.4e-2],(6[&prob=1.0]:1.03e-2
[&length_mean=1.0e-2],7[&prob=1.0]:7.13e-3[&length_mean=7.2e-3])[&prob=1.0]:
6.93e-2[&length_mean=6.9e-2])[&prob=1.0]:6.03e-2[&length_mean=6.0e-2],
(4[&prob=1.0]:6.27e-2[&length_mean=6.2e-2],5[&prob=1.0]:6.31e-2
[&length_mean=6.3e-2])[&prob=1.0]:6.07e-2[&length_mean=6.0e-2])[&prob=1.0]:,
1.80e-1[&length_mean=1.8e-1]11[&prob=1.0]:2.37e-1[&length_mean=2.3e-1])
[&prob=1.0]:4.05e-1[&length_mean=4.0e-1])[&prob=1.0]:1.16e+000
[&length_mean=1.162699558201079e+000])[&prob=1.0][&length_mean=0];

為了節(jié)省空間,刪除了大部分推理,只包含分枝概率的prob和分枝長度的平均值的length_mean。此文件的完整版本還包含prob_stddev、prob_range、probb (percent)、probb +-sd(概率推斷)和length_median、length_95%_HPD(每個(gè)分支)。
BEAST和MrBayes的輸出預(yù)計(jì)將被支持NEXUS的軟件不進(jìn)行推理分析(作為注釋刪除)。FigTree支持對(duì)BEAST和MrBayes輸出進(jìn)行解析,并提供可用于在樹上顯示或注釋的推理。但是從那里提取這些數(shù)據(jù)進(jìn)行進(jìn)一步的分析仍然是一個(gè)挑戰(zhàn)。

HyPhy (Pond, Frost, and Muse 2005)可以進(jìn)行大量的系統(tǒng)發(fā)育分析,包括祖先序列重建。對(duì)于祖先序列重建,這些序列和Newick樹文本以NEXUS格式存儲(chǔ),作為主要的分析輸出。它沒有完全遵循NEXUS的定義,只是將祖先節(jié)點(diǎn)標(biāo)簽而不是外部節(jié)點(diǎn)標(biāo)簽放在TAXA中。MATRIX塊包含祖先節(jié)點(diǎn)的序列比對(duì),不能被轉(zhuǎn)回存儲(chǔ)在TREES塊中的樹,因?yàn)樗话?jié)點(diǎn)標(biāo)簽。下面是示例輸出(為了節(jié)省空間,只顯示前72bp的對(duì)齊位置)

#NEXUS

[
Generated by HYPHY 2.0020110620beta(MP) for MacOS(Universal Binary)
on Tue Dec 23 13:52:34 2014

]

BEGIN TAXA;
DIMENSIONS NTAX = 13;
TAXLABELS
'Node1' 'Node2' 'Node3' 'Node4' 'Node5' 'Node12' 'Node13' 'Node15'
'Node18' 'Node20' 'Node22' 'Node24' 'Node26' ;
END;

BEGIN CHARACTERS;
DIMENSIONS NCHAR = 2148;
FORMAT
DATATYPE = DNA

GAP=-
MISSING=?
NOLABELS
;

MATRIX
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATTGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAATGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
ATGGAAGACTTTGTGCGACAGTGCTTCAATCCAATGATCGTCGAGCTTGCGGAAAAGGCAATGAAAGAATAT
END;

BEGIN TREES;
TREE tree = (K,N,(D,(L,(J,(G,((C,(E,O)),(H,(I,(B,(A,(F,M)))))))))));
END;

還有其他一些應(yīng)用程序輸出豐富的信息文本,其中也包含與相關(guān)數(shù)據(jù)相關(guān)的系統(tǒng)發(fā)育樹。例如, r8s (Sanderson 2003)在其日志文件中輸出三棵樹,即TREE、RATE和PHYLO,分別用于按時(shí)間、替換率和絕對(duì)替換縮放的分支。

最大似然系統(tǒng)發(fā)育分析 (PAML) (Ziheng Yang 2007)是一個(gè)用于DNA或蛋白質(zhì)序列系統(tǒng)發(fā)育分析的程序包。兩個(gè)主要程序,BASEML和CODEML,實(shí)現(xiàn)了各種模型。BASEML使用許多可用的核苷酸替換模型(包括JC69、K80、F81、F84、HKY85、T92、TN93和GTR)來估計(jì)樹拓?fù)浣Y(jié)構(gòu)、分支長度和替換參數(shù)。CODEML估計(jì)了密碼子替代模型下的同義和非同義替換率、陽性選擇的似然比檢驗(yàn)(Goldman and Yang 1994)。

BASEML輸出mlb文件,其中包含輸入序列(taxa)比對(duì)和一個(gè)具有分支長度的系統(tǒng)發(fā)育樹,以及替換模型和其他估計(jì)參數(shù)。補(bǔ)充結(jié)果文件rst包含序列比對(duì)(若重建祖先序列則與祖先序列比對(duì))和比對(duì)中每個(gè)位點(diǎn)演化的樸素經(jīng)驗(yàn)貝葉斯(Naive Empirical Bayes, NBE)概率。 CODEML輸出mlc文件,該文件包含樹形結(jié)構(gòu)和同義詞和非同義詞替換率的估計(jì)。CODEML還輸出一個(gè)補(bǔ)充的結(jié)果文件rst,該文件與BASEML類似,不同之處在于該位點(diǎn)被定義為密碼子而不是核苷酸。解析這些文件可能是乏味的,通常需要許多后期處理步驟,并需要編程方面的專業(yè)知識(shí)(例如使用Python5或Perl6)。

引入方括號(hào)用于存儲(chǔ)額外信息是很常見的,包括用于存儲(chǔ)bootstrap值的RAxML、用于注釋的NHX格式、用于邊緣標(biāo)簽的jplace格式、用于進(jìn)化估計(jì)的BEAST格式等。但不同軟件中方括號(hào)的位置不一致,內(nèi)容使用不同的規(guī)則存儲(chǔ)關(guān)聯(lián)數(shù)據(jù),這些屬性使關(guān)聯(lián)數(shù)據(jù)難以解析。對(duì)于大多數(shù)軟件來說,他們只會(huì)忽略方括號(hào),只在文件是兼容的情況下解析樹結(jié)構(gòu)。其中一些包含無效字符(如jplace格式的tree字段中的花括號(hào)),甚至樹結(jié)構(gòu)無法被標(biāo)準(zhǔn)解析器解析。

從不同的進(jìn)化推理軟件產(chǎn)生的不同分析結(jié)果中提取有用的系統(tǒng)發(fā)育/分類單元相關(guān)信息顯示在同一棵系統(tǒng)發(fā)育樹上,并進(jìn)行進(jìn)一步的分析是很困難。FigTree支持BEAST輸出,但不支持其他大多數(shù)包含進(jìn)化推理或相關(guān)數(shù)據(jù)的軟件輸出。對(duì)于那些輸出豐富的文本文件(如r8s、pml等),樹狀結(jié)構(gòu)無法被任何樹查看軟件解析,用戶需要專門知識(shí)從輸出文件中手工提取系統(tǒng)發(fā)育樹和其他有用的結(jié)果數(shù)據(jù)。但這種手工操作速度慢,容易出錯(cuò)。

從該領(lǐng)域常用軟件的不同分析輸出中提取進(jìn)化數(shù)據(jù)的系統(tǒng)發(fā)育樹并不容易。其中的一些(如PAML產(chǎn)出和jplace文件)不需要軟件或編程庫來解析文件的支持,而其他人(例如, BEAST
和MrBayes輸出)可以解析沒有進(jìn)化推理時(shí)存儲(chǔ)在方括號(hào)將省略的評(píng)論,大多數(shù)軟件。雖然FigTree支持可視化由BEAST和MrBayes推斷出的進(jìn)化統(tǒng)計(jì)數(shù)據(jù),但是提取這些數(shù)據(jù)以進(jìn)行進(jìn)一步的分析是不支持的。不同的軟件包為不同的分析實(shí)現(xiàn)不同的算法(例如,PAML用于dN/dS, HyPhy用于祖先序列,BEAST用于skyline分析)。因此,在處理基因組序列數(shù)據(jù)時(shí),需要高效靈活地整合不同的分析推理結(jié)果,以便全面理解、比較和進(jìn)一步分析。這促使我們開發(fā)程序庫來解析來自不同來源的系統(tǒng)發(fā)育樹和數(shù)據(jù)。

1.3使用treeio獲取樹數(shù)據(jù)

系統(tǒng)發(fā)育樹是描述物種進(jìn)化關(guān)系的常用方法。與分類單元種/株相關(guān)的信息可以在系統(tǒng)發(fā)育樹描述的進(jìn)化歷史的背景下進(jìn)一步分析。例如,可以研究樹中流感病毒株的宿主信息,以了解病毒系的宿主范圍。此外,與分類單元毒株直接相關(guān)的這些元數(shù)據(jù)(如隔離宿主、時(shí)間、地點(diǎn)等)也經(jīng)常受到進(jìn)一步進(jìn)化或比較系統(tǒng)發(fā)育模型和分析的影響,以推斷其與病毒進(jìn)化或傳播過程相關(guān)的動(dòng)態(tài)。所有這些元數(shù)據(jù)或其他表型數(shù)據(jù)或?qū)嶒?yàn)數(shù)據(jù)都存儲(chǔ)為與節(jié)點(diǎn)或分支相關(guān)的注釋數(shù)據(jù),并且通常由不同的分析程序以不一致的格式產(chǎn)生。

R語言讀取樹文件仍然是有限制的。Newick和Nexus可以通過幾個(gè)包導(dǎo)入,包括 ape, phylobase。NeXML格式可以被 RNeXML解析。然而,該領(lǐng)域廣泛使用的軟件包的分析結(jié)果并沒有得到很好的支持。SIMMAP輸出可以被phyext2phytools解析。雖然 PHYLOCH可以導(dǎo)入BEAST和MrBayes的輸出文件,但只能解析內(nèi)部節(jié)點(diǎn)屬性,而tip屬性則會(huì)被忽略掉。許多其他軟件輸出主要是需要編程專家來導(dǎo)入帶有相關(guān)數(shù)據(jù)的樹。將外部數(shù)據(jù)(包括實(shí)驗(yàn)和臨床數(shù)據(jù))與系統(tǒng)發(fā)育聯(lián)系起來是進(jìn)化生物學(xué)家面臨的另一個(gè)障礙。

為了填補(bǔ)大多數(shù)樹格式或軟件輸出無法在同一軟件/平臺(tái)中解析的空白,開發(fā)了一個(gè)R包 treeio (Wang et al. 2020),用于解析來自通用進(jìn)化分析軟件的各種樹文件格式和輸出。treeio包是用R編程語言(R Core Team 2016)開發(fā)的。不僅可以解析樹結(jié)構(gòu),還可以解析相關(guān)的數(shù)據(jù)和進(jìn)化推斷,包括NHX注釋、時(shí)鐘速率推斷(來自BEAST)或r8s (Sanderson 2003)程序)、同義和非同義替換(來自CODEML)、祖先序列構(gòu)建(來自HyPhy、BASEML或CODEML)等。目前,treeio能夠讀取以下文件格式:Newick, Nexus, New Hampshire eXtended format (NHX), jplace和Phylip,以及以下分析程序的數(shù)據(jù)輸出:ASTRAL, BEAST, EPA, HyPhy, MEGA, MrBayes, pml, PHYLDOG, PPLACER, r8s, RAxML和RevBayes等。這可以通過treeio中開發(fā)的幾個(gè)解析器函數(shù)實(shí)現(xiàn)(表1.1) (Wang et al. 2020)。

Parser function Description
read.astral parsing output of ASTRAL
read.beast parsing output of BEAST
read.codeml parsing output of CodeML (rst and mlc files)
read.codeml_mlc parsing mlc file (output of CodeML)
read.fasta parsing FASTA format sequence file
read.hyphy parsing output of HYPHY
read.hyphy.seq parsing ancestral sequences from HYPHY output
read.iqtree parsing IQ-Tree Newick string, with the ability to parse SH-aLRT and UFBoot support values
read.jplace parsing jplace file including the output of EPA and pplacer
read.jtree parsing jtree format
read.mega parsing MEGA Nexus output
read.mega_tabular parsing MEGA tabular output
read.mrbayes parsing output of MrBayes
read.newick parsing Newick string, with the ability to parse node label as support values
read.nexus parsing standard NEXUS file (re-exported from ape)
read.nhx parsing NHX file including the output of PHYLDOG and RevBayes
read.paml_rst parsing rst file (output of BaseML or CodeML)
read.phylip parsing phylip file (phylip alignment + Newick string)
read.phylip.seq parsing multiple sequence alignment from phylip file
read.phylip.tree parsing newick string from phylip file
read.phyloxml parsing phyloXML file
read.r8s parsing output of r8s
read.raxml parsing output of RAxML
read.tree parsing newick string (re-exported from ape)

TABLE 1.1: treeio中定義的解析器函數(shù)

treeio包定義了用于系統(tǒng)發(fā)育樹輸入和輸出的基類和函數(shù)??梢詫⒊S密浖@得進(jìn)化證據(jù)推斷數(shù)據(jù)用于R語言分析的基礎(chǔ)程序 。例如,dN / dS值或祖先序列推斷 CODEML (Ziheng Yang 2007),進(jìn)化枝支持值(后)推斷 BEAST (Bouckaert et al. 2014)和短期讀取位置由 EPA (Berger, Krompass, and Stamatakis 2011)和 PPLACER (Frederick A. Matsen, Kodner, and Armbrust 2010a)。這些進(jìn)化證據(jù)可以在R中進(jìn)一步分析,并使用 ggtree (Yu et al. 2017)來注釋系統(tǒng)發(fā)育樹。隨著分析工具和模型的不斷發(fā)展,整合來自不同來源的不同種類的數(shù)據(jù)和分析結(jié)果以在相同的系統(tǒng)發(fā)育樹背景下進(jìn)行整合分析是一個(gè)挑戰(zhàn)。treeio包 (Wang et al. 2020)提供了一個(gè)merge_tree函數(shù),允許組合來自不同來源的樹數(shù)據(jù)。此外,treeio還允許將外部數(shù)據(jù)鏈接到系統(tǒng)發(fā)育樹結(jié)構(gòu)。

解析之后,將通過一個(gè)在tidytree包中定義的S4類treedata來存儲(chǔ)具有關(guān)聯(lián)數(shù)據(jù)的樹結(jié)構(gòu)。這些被解析的數(shù)據(jù)被映射到treedata對(duì)象內(nèi)部的樹分支和節(jié)點(diǎn),因此可以有效地使用 ggtree (Yu et al. 2017)和 ggtreeExtra (Xu, Dai, et al. 2021)可視化地對(duì)樹進(jìn)行注釋。用于系統(tǒng)發(fā)育數(shù)據(jù)解析、集成和注釋的可編程平臺(tái)使我們更容易識(shí)別進(jìn)化動(dòng)力學(xué)和相關(guān)模式(圖1.3,圖1 (Wang et al. 2020))。

image.png
圖1.3:treeio包的概述以及它與tidytree和ggtree的關(guān)系Treeio支持用來自多種文件格式和軟件輸出的數(shù)據(jù)解析樹。樹數(shù)據(jù)對(duì)象存儲(chǔ)具有節(jié)點(diǎn)/分支相關(guān)數(shù)據(jù)的系統(tǒng)發(fā)育樹。Treeio提供了幾個(gè)函數(shù)來操作帶有數(shù)據(jù)的樹。用戶可以將treedata對(duì)象轉(zhuǎn)換為整潔的數(shù)據(jù)框架(每一行表示樹中的一個(gè)節(jié)點(diǎn),每一列表示一個(gè)變量),并使用在tidytree中實(shí)現(xiàn)的整潔接口處理數(shù)據(jù)。樹可以從treedata對(duì)象中提取并導(dǎo)出到Newick和NEXUS文件中,也可以與相關(guān)數(shù)據(jù)一起導(dǎo)出到單個(gè)文件中(可以是BEAST NEXUS或jtree格式)。存儲(chǔ)在treedata對(duì)象中的相關(guān)數(shù)據(jù)可以用于使用ggtree對(duì)樹進(jìn)行注釋。此外,ggtree支持許多樹對(duì)象,包括用于微生物組數(shù)據(jù)的系統(tǒng)進(jìn)化q和用于爆發(fā)數(shù)據(jù)的obkData。phylo、multiPhylo(猿包)、種系4、種系4d(種系基包)、種系log (ade4包)、種系seq(種系seq包)和obkData (OutbreakTools包)是由R社區(qū)定義的樹對(duì)象,用于存儲(chǔ)包含或不包含特定領(lǐng)域數(shù)據(jù)的樹。所有這些樹對(duì)象以及分層聚類結(jié)果(如hclust和樹狀圖對(duì)象)都被ggtree支持。

1.3.1 treeio概述

treeio包 (Wang et al. 2020)定義了S4類,用于存儲(chǔ)系統(tǒng)發(fā)育樹,這些樹包含來自不同來源的不同類型的相關(guān)數(shù)據(jù)或協(xié)變量,包括來自不同軟件包的分析輸出。它還定義了相應(yīng)的解析器函數(shù),用于用注釋數(shù)據(jù)解析系統(tǒng)發(fā)育樹,并將它們作為數(shù)據(jù)對(duì)象存儲(chǔ)在R中,以便進(jìn)一步操作或分析(見表1.1)。定義了幾個(gè)訪問器函數(shù)來方便訪問樹注釋數(shù)據(jù),包括get.field 用于獲取樹對(duì)象中可用的注釋特性的字段get.placements 用于獲得系統(tǒng)發(fā)育放置結(jié)果(即 PPLACER, EPA等的輸出),get.subs用于獲取父節(jié)點(diǎn)到子節(jié)點(diǎn)的遺傳替換,get.tipseq用于得到 tip sequences。

S3類phlo是由 ape (Paradis, Claude, and Strimmer 2004)包中定義的,在R社區(qū)和許多包中被廣泛使用。由于treeio使用S4類,為了使那些可用的R包能夠分析treeio導(dǎo)入的樹,treeio提供了as.phylo函數(shù)將treeio生成的樹對(duì)象轉(zhuǎn)換為只包含樹結(jié)構(gòu)而不包含注釋數(shù)據(jù)的Phylo對(duì)象。另一方面,treeio也提供了as.treedata函數(shù)將phylo對(duì)象與進(jìn)化分析結(jié)果(例如,由ape計(jì)算的bootstrap values或 phangorn (Schliep 2011) 推斷的祖先狀態(tài)等)存儲(chǔ)treedata S4對(duì)象,因此很容易將數(shù)據(jù)映射到樹結(jié)構(gòu)和使用ggtree可視化 ggtree (Yu et al. 2017)。

為了在系統(tǒng)發(fā)育樹中集成不同類型的數(shù)據(jù),treeio (Wang et al. 2020)提供了merge_tree函數(shù)(詳細(xì)信息見2.2.1節(jié)),用于結(jié)合從不同來源導(dǎo)入的進(jìn)化統(tǒng)計(jì)數(shù)據(jù)/證據(jù),包括那些常見的樹文件和分析程序的輸出(表1.1)。還有其他信息,如采樣位置、分類信息、實(shí)驗(yàn)結(jié)果、進(jìn)化特征等,以用戶定義的格式存儲(chǔ)在單獨(dú)的文件中。在treeio中,我們可以使用標(biāo)準(zhǔn)的R IO函數(shù)從用戶文件中讀取這些數(shù)據(jù),并通過在tidytree和treeio包中定義的full_join方法將它們附加到樹對(duì)象(請(qǐng)參閱ggtree中定義的 %<+% operator)。附加后的數(shù)據(jù)將成為節(jié)點(diǎn)或分支的關(guān)聯(lián)屬性,可以與合并的其他數(shù)據(jù)進(jìn)行比較,也可以在樹中直觀顯示 (Yu et al. 2018)。

為了便于存儲(chǔ)與系統(tǒng)發(fā)育樹相關(guān)的復(fù)雜數(shù)據(jù),treeio應(yīng)用write.baset和write.jtree功能可以將一個(gè)treedata對(duì)象導(dǎo)出到單個(gè)文件中(參見第3章)。

1.3.2功能演示

#######1.3.2.1 BEAST輸出解析

file <- system.file("extdata/BEAST", "beast_mcc.tree", package="treeio")
beast <- read.beast(file)
beast
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/BEAST/beast_mcc.tree'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 14 internal nodes.
## 
## Tip labels:
##   A_1995, B_1996, C_1995, D_1987, E_1996, F_1997, ...
## 
## Rooted; includes branch lengths.
## 
## with the following features available:
##   'height', 'height_0.95_HPD', 'height_median',
## 'height_range', 'length', 'length_0.95_HPD',
## 'length_median', 'length_range', 'posterior', 'rate',
## 'rate_0.95_HPD', 'rate_median', 'rate_range'.

由于%不是names中的有效字符,所有包含x%的特性名都會(huì)轉(zhuǎn)換為0.x。例如,length_95%_HPD將被更改為length_0.95_HPD。

不僅樹結(jié)構(gòu),而且BEAST推斷的所有特性都將存儲(chǔ)在S4對(duì)象中。這些特性可以用于樹的注釋(圖5.8)。

1.3.2.2 MEGA輸出解析

分子進(jìn)化遺傳學(xué)分析(MEGA)軟件(Kumar, Stecher,和Tamura 2016)支持導(dǎo)出三種不同格式的樹:Newick,tabular,和Nexus。Newick文件可以使用read.tree或read.newick來解析。newick功能。MEGA Nexus文件類似于BEAST Nexus, treeio (Wang et al. 2020),可以使用read.mega功能來解析。

file <- system.file("extdata/MEGA7", "mtCDNA_timetree.nex", 
                    package = "treeio")
read.mega(file)
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/MEGA7/mtCDNA_timetree.nex'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 7 tips and 6 internal nodes.
## 
## Tip labels:
##   homo_sapiens, chimpanzee, bonobo, gorilla,
## orangutan, sumatran, ...
## 
## Rooted; includes branch lengths.
## 
## with the following features available:
##   'branch_length', 'data_coverage', 'rate',
## 'reltime', 'reltime_0.95_CI', 'reltime_stderr'.

表格輸出包含表格平面文本文件中的樹和相關(guān)信息(本例中的分化時(shí)間)。ead.mega_tabular 功能可以同時(shí)用數(shù)據(jù)解析樹。

file <- system.file("extdata/MEGA7", "mtCDNA_timetree_tabular.txt", 
                    package = "treeio")
read.mega_tabular(file) 
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/MEGA7/mtCDNA_timetree_tabular.txt'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 7 tips and 6 internal nodes.
## 
## Tip labels:
##   chimpanzee, bonobo, homo sapiens, gorilla,
## orangutan, sumatran, ...
## Node labels:
##   , , demoLabel2, , , 
## 
## Rooted; no branch lengths.
## 
## with the following features available:
##   'RelTime', 'CI_Lower', 'CI_Upper', 'Rate', 'Data
## Coverage'.
1.3.2.3解析MrBayes輸出

雖然MrBayes生成的Nexus文件與BEAST的輸出不同,但它們是相似的。treeio包提供了read.mrbayes(),它在內(nèi)部調(diào)用read.beast()來解析MrBayes的輸出。

file <- system.file("extdata/MrBayes", "Gq_nxs.tre", package="treeio")
read.mrbayes(file)
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/MrBayes/Gq_nxs.tre'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 12 tips and 10 internal nodes.
## 
## Tip labels:
##   B_h, B_s, G_d, G_k, G_q, G_s, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   'length_0.95HPD', 'length_mean', 'length_median',
## 'prob', 'prob_range', 'prob_stddev', 'prob_percent',
## 'prob+-sd'.
1.3.2.4 PAML輸出解析

最大似然系統(tǒng)發(fā)育分析(PAML)是一套工具,用于DNA和蛋白質(zhì)序列的系統(tǒng)發(fā)育分析使用最大似然。樹搜索算法是在 BASEMLCODEML中實(shí)現(xiàn)的。treeio中提供的read.paml_rst()函數(shù)可以解析BASEML和CODEML中的rst文件。唯一的區(qū)別是序列中的空間。對(duì)于BASEML,每十個(gè)堿基用一個(gè)空格隔開,而對(duì)于CODEML,每三個(gè)堿基(三聯(lián)體)用一個(gè)空格隔開。

brstfile <- system.file("extdata/PAML_Baseml", "rst", package="treeio")
brst <- read.paml_rst(brstfile)
brst
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/PAML_Baseml/rst'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 13 internal nodes.
## 
## Tip labels:
##   A, B, C, D, E, F, ...
## Node labels:
##   16, 17, 18, 19, 20, 21, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   'subs', 'AA_subs'.

類似地,我們可以從CODEML解析rst文件。

crstfile <- system.file("extdata/PAML_Codeml", "rst", package="treeio")
## type can be one of "Marginal" or "Joint"
crst <- read.paml_rst(crstfile, type = "Joint")
crst
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/PAML_Codeml/rst'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 13 internal nodes.
## 
## Tip labels:
##   A, B, C, D, E, F, ...
## Node labels:
##   16, 17, 18, 19, 20, 21, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   'subs', 'AA_subs'.

樹節(jié)點(diǎn)。treeio (Wang et al. 2020)將自動(dòng)確定每個(gè)分支兩端序列之間的替換。氨基酸替換也將通過將核苷酸序列翻譯成氨基酸序列來確定。這些計(jì)算得到的替換也將存儲(chǔ)在S4對(duì)象中,以便以后進(jìn)行有效的樹注釋(圖5.10)。
CODEML推斷選擇壓力和估計(jì)dN/dS, dN和dS。這些信息存儲(chǔ)在輸出文件mlc中,該文件可由read.codeml_mlc()函數(shù)解析。

mlcfile <- system.file("extdata/PAML_Codeml", "mlc", package="treeio")
mlc <- read.codeml_mlc(mlcfile)
mlc
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/PAML_Codeml/mlc'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 13 internal nodes.
## 
## Tip labels:
##   A, B, C, D, E, F, ...
## Node labels:
##   16, 17, 18, 19, 20, 21, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   't', 'N', 'S', 'dN_vs_dS', 'dN', 'dS', 'N_x_dN',
## 'S_x_dS'.

可以像前面演示的那樣分別解析rst和mlc文件,也可以使用read.codeml()函數(shù)將它們一起解析。

## tree can be one of "rst" or "mlc" to specify
## using tree from which file as base tree in the object
ml <- read.codeml(crstfile, mlcfile, tree = "mlc")
ml
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/PAML_Codeml/rst',
##  '/home/ygc/R/library/treeio/extdata/PAML_Codeml/mlc'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 13 internal nodes.
## 
## Tip labels:
##   A, B, C, D, E, F, ...
## Node labels:
##   16, 17, 18, 19, 20, 21, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   'subs', 'AA_subs', 't', 'N', 'S', 'dN_vs_dS', 'dN',
## 'dS', 'N_x_dN', 'S_x_dS'.

rst和mlc文件中的所有特性都被導(dǎo)入到一個(gè)單獨(dú)的S4對(duì)象中,因此可用于進(jìn)一步的注釋和可視化。例如,我們可以在同一棵系統(tǒng)發(fā)育樹上注釋和顯示dN/dS(來自mlc文件)和氨基酸替換(來自rst文件)(Yu et al. 2017)。

1.3.2.5 HyPhy輸出解析

HyPhy (Hypothesis testing using Phylogenies)是一個(gè)用于分析基因序列的軟件包。由HyPhy推斷出的祖先序列存儲(chǔ)在Nexus輸出文件中,其中包含樹形拓?fù)浜妥嫦刃蛄?。要解析這個(gè)數(shù)據(jù)文件,用戶可以使用read.hyphy.seq()函數(shù)。

ancseq <- system.file("extdata/HYPHY", "ancseq.nex", package="treeio")
read.hyphy.seq(ancseq)
## 13 DNA sequences in binary format stored in a list.
## 
## All sequences of same length: 2148 
## 
## Labels:
## Node1
## Node2
## Node3
## Node4
## Node5
## Node12
## ...
## 
## Base composition:
##     a     c     g     t 
## 0.335 0.208 0.237 0.220 
## (Total: 27.92 kb)

為了將序列映射到樹中,用戶還應(yīng)該提供一個(gè)內(nèi)部的節(jié)點(diǎn)標(biāo)記樹。如果用戶想要確定替換,他們還需要提供提示序列。在這種情況下,替換將自動(dòng)確定,就像我們解析 CODEML的輸出一樣。

nwk <- system.file("extdata/HYPHY", "labelledtree.tree", package="treeio")
tipfas <- system.file("extdata", "pa.fas", package="treeio")
hy <- read.hyphy(nwk, ancseq, tipfas)
hy
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/HYPHY/labelledtree.tree'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 13 internal nodes.
## 
## Tip labels:
##   K, N, D, L, J, G, ...
## Node labels:
##   Node1, Node2, Node3, Node4, Node5, Node12, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   'subs', 'AA_subs'.
1.3.2.6 r8輸出解析

r8s包使用參數(shù)、半?yún)?shù)和非參數(shù)方法松弛分子鐘,以便更好地估計(jì)散度時(shí)間和進(jìn)化速率 (Sanderson 2003)。日志文件中輸出三棵樹,時(shí)間樹、速率樹和絕對(duì)替換樹分別為TREE、RATO和PHYLO。

時(shí)間樹是由散度時(shí)間標(biāo)度的,速率樹是由替換率標(biāo)度的,絕對(duì)替換樹是由替換的絕對(duì)數(shù)量標(biāo)度的。解析文件后,這三棵樹都存儲(chǔ)在一個(gè)multiPhylo對(duì)象中(圖4.15)。

r8s <- read.r8s(system.file("extdata/r8s", "H3_r8s_output.log", package="treeio"))
r8s
## 3 phylogenetic trees
1.3.2.7 RAxML引導(dǎo)分析的解析輸出

RAxML引導(dǎo)分析輸出的Newick樹文本不是標(biāo)準(zhǔn)的,因?yàn)樗鼘⒁龑?dǎo)值存儲(chǔ)在分支長度后的方括號(hào)中。這個(gè)文件通常不能被傳統(tǒng)的Newick解析器解析,比如ape::read.tree()。函數(shù)read.raxml()可以讀取這樣的文件,并將引導(dǎo)程序存儲(chǔ)為一個(gè)額外的特性,它可以用于顯示在樹中,或用于為樹分支著色,等等。

raxml_file <- system.file("extdata/RAxML", 
                          "RAxML_bipartitionsBranchLabels.H3", 
                          package="treeio")
raxml <- read.raxml(raxml_file)
raxml
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/RAxML/RAxML_bipartitionsBranchLabels.H3'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 64 tips and 62 internal nodes.
## 
## Tip labels:
##   A_Hokkaido_M1_2014_H3N2_2014,
## A_Czech_Republic_1_2014_H3N2_2014,
## FJ532080_A_California_09_2008_H3N2_2008,
## EU199359_A_Pennsylvania_05_2007_H3N2_2007,
## EU857080_A_Hong_Kong_CUHK69904_2006_H3N2_2006,
## EU857082_A_Hong_Kong_CUHK7047_2005_H3N2_2005, ...
## 
## Unrooted; includes branch lengths.
## 
## with the following features available:
##   'bootstrap'.
1.3.2.8解析NHX樹

NHX (New Hampshire eXtended)格式是通過引入NHX標(biāo)簽對(duì)Newick的擴(kuò)展。NHX通常用于系統(tǒng)發(fā)育軟件,包括 PHYLDOG (Boussau et al. 2013), RevBayes (H?hna et al. 2014),用于存儲(chǔ)統(tǒng)計(jì)推斷。下面的代碼導(dǎo)入了一個(gè)帶有由PHYLDOG推斷的相關(guān)數(shù)據(jù)的NHX樹(圖3.1A)。

nhxfile <- system.file("extdata/NHX", "phyldog.nhx", package="treeio")
nhx <- read.nhx(nhxfile)
nhx
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/NHX/phyldog.nhx'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 16 tips and 15 internal nodes.
## 
## Tip labels:
##   Prayidae_D27SS7@2825365, Kephyes_ovata@2606431,
## Chuniphyes_multidentata@1277217,
## Apolemia_sp_@1353964, Bargmannia_amoena@263997,
## Bargmannia_elongata@946788, ...
## 
## Rooted; includes branch lengths.
## 
## with the following features available:
##   'Ev', 'ND', 'S'.
1.3.2.9解析Phylip tree

Phylip格式包含多個(gè)序列對(duì)齊的Phylip序列格式與相應(yīng)的Newick樹文本,由分類單元序列構(gòu)建。多序列比對(duì)可通過ggtree的msaplot()函數(shù)或結(jié)合ggmsa包進(jìn)行樹狀結(jié)構(gòu)排序,并顯示在樹的右側(cè)(see also Basic Protocol 5 of (Yu 2020))。

phyfile <- system.file("extdata", "sample.phy", package="treeio")
phylip <- read.phylip(phyfile)
phylip
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/sample.phy'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 13 internal nodes.
## 
## Tip labels:
##   K, N, D, L, J, G, ...
## 
## Unrooted; no branch lengths.
1.3.2.10解析EPA和pplacer輸出

EPA (Berger, Krompass, and Stamatakis 2011)和PPLACER (Frederick A. Matsen, Kodner, and Armbrust 2010a)具有共同的輸出文件格式j(luò)place,可以通過read.jplace()函數(shù)進(jìn)行解析。

jpf <- system.file("extdata/EPA.jplace",  package="treeio")
jp <- read.jplace(jpf)
print(jp)
## 'treedata' S4 object that stored information
## of
##  '/home/ygc/R/library/treeio/extdata/EPA.jplace'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 493 tips and 492 internal nodes.
## 
## Tip labels:
##   CIR000447A, CIR000479, CIR000078, CIR000083,
## CIR000070, CIR000060, ...
## 
## Rooted; includes branch lengths.
## 
## with the following features available:
##   'nplace'.

每個(gè)分支上的進(jìn)化放置數(shù)量將被計(jì)算并存儲(chǔ)為nplace特征,可以使用ggtree將其映射為行大小和/或顏色(Yu et al. 2017)。

1.3.2.11解析jtree格式

jtree是一種基于json的格式,在treeio包中定義(Wang et al. 2020),以支持樹數(shù)據(jù)交換(見 session 3.3)。帶有相關(guān)數(shù)據(jù)的系統(tǒng)發(fā)育樹可以使用write.jtree()函數(shù)導(dǎo)出到單個(gè)jtree文件。jtree可以使用任何JSON解析器輕松解析。jtree格式包含三塊:tree、data和metadata。樹值包含從Newick樹格式擴(kuò)展而來的樹文本,方法是將邊號(hào)放在分支長度之后的花括號(hào)中。數(shù)據(jù)值包含特定于節(jié)點(diǎn)/分支的數(shù)據(jù),而元數(shù)據(jù)值包含額外的元信息。

jtree_file <- tempfile(fileext = '.jtree')
write.jtree(beast, file = jtree_file)
read.jtree(file = jtree_file)
## 'treedata' S4 object that stored information
## of
##  '/tmp/Rtmp5zDeZ2/file1eea82133a2fb.jtree'.
## 
## ...@ phylo:
## 
## Phylogenetic tree with 15 tips and 14 internal nodes.
## 
## Tip labels:
##   K_2013, N_2010, D_1987, L_1980, J_1983, G_1992, ...
## 
## Rooted; includes branch lengths.
## 
## with the following features available:
##   'height', 'height_0.95_HPD', 'height_range',
## 'length', 'length_0.95_HPD', 'length_median',
## 'length_range', 'rate', 'rate_0.95_HPD',
## 'rate_median', 'rate_range', 'height_median',
## 'posterior'.
1.3.3將其他樹狀對(duì)象轉(zhuǎn)換為phylo或treedata

為了擴(kuò)展treeio、tidytree和ggtree的應(yīng)用范圍,treeio (Wang et al. 2020)提供了幾個(gè)as.phylo和as.treedata方法,用于將其他樹狀對(duì)象(如phylo4d和pml)轉(zhuǎn)換為phylo或treedata對(duì)象。因此,用戶可以很容易地將相關(guān)數(shù)據(jù)映射到樹結(jié)構(gòu),將有/沒有數(shù)據(jù)的樹導(dǎo)出到單個(gè)文件,操作和可視化有/沒有數(shù)據(jù)的樹。這些轉(zhuǎn)換函數(shù)(表1.2)創(chuàng)造了使用tidy接口來處理tree和使用圖形語法的ggtree來可視化tree的可能性。
|-|-|-|

Convert function Supported object Description
as.phylo ggtree convert ggtree object to phylo object
as.phylo igraph convert igraph object (only tree graph supported) to phylo object
as.phylo phylo4 convert phylo4 object to phylo object
as.phylo pvclust convert pvclust object to phylo object
as.phylo treedata convert treedata object to phylo object
as.treedata ggtree convert ggtree object to treedata object
as.treedata phylo4 convert phylo4 object to treedata object
as.treedata phylo4d convert phylo4d object to treedata object
as.treedata pml convert pml object to treedata object
as.treedata pvclust convert pvclust object to treedata object

表1.2:樹狀對(duì)象到phylo或 treedata對(duì)象的轉(zhuǎn)換

這里,我們以pml對(duì)象為例,它是在phangorn包中定義的。pml()函數(shù)計(jì)算給定序列比對(duì)和模型的系統(tǒng)發(fā)育樹的可能性,而 optim.pml()函數(shù)優(yōu)化不同的模型參數(shù)。輸出是一個(gè)pml對(duì)象,可以使用 treeio (Wang et al. 2020)的as.treedata將其轉(zhuǎn)換為一個(gè)treedata對(duì)象。存儲(chǔ)在樹狀數(shù)據(jù)對(duì)象中的氨基酸替換(pml估計(jì)的祖先序列)可以使用ggtree進(jìn)行可視化,如圖1.4所示。

library(phangorn)
treefile <- system.file("extdata", "pa.nwk", package="treeio")
tre <- read.tree(treefile)
tipseqfile <- system.file("extdata", "pa.fas", package="treeio")
tipseq <- read.phyDat(tipseqfile,format="fasta")
fit <- pml(tre, tipseq, k=4)
fit <- optim.pml(fit, optNni=FALSE, optBf=T, optQ=T,
                 optInv=T, optGamma=T, optEdge=TRUE,
                 optRooted=FALSE, model = "GTR",
                 control = pml.control(trace =0))

pmltree <- as.treedata(fit)
ggtree(pmltree) + geom_text(aes(x=branch, label=AA_subs, vjust=-.5))
image.png

圖1.4:將pml對(duì)象轉(zhuǎn)換為treedata對(duì)象這允許使用tidytree來處理樹數(shù)據(jù),以及使用ggtree和ggtreeExtra來顯示與相關(guān)數(shù)據(jù)相關(guān)的樹。

1.3.4從樹數(shù)據(jù)對(duì)象中獲取信息

導(dǎo)入樹后,用戶可能希望提取存儲(chǔ)在樹數(shù)據(jù)對(duì)象中的信息。Treeio提供了幾種訪問器方法來提取樹結(jié)構(gòu)、存儲(chǔ)在對(duì)象中的特性/屬性以及它們對(duì)應(yīng)的值。
get.tree()或as.phylo()方法可以將treedata對(duì)象轉(zhuǎn)換為一個(gè)phylo對(duì)象,這是R社區(qū)中的基本樹對(duì)象,許多包都使用phylo對(duì)象。

beast_file <- system.file("examples/MCC_FluA_H3.tree", package="ggtree")
beast_tree <- read.beast(beast_file)
# or get.tree
as.phylo(beast_tree)
## 
## Phylogenetic tree with 76 tips and 75 internal nodes.
## 
## Tip labels:
##   A/Hokkaido/30-1-a/2013, A/New_York/334/2004, A/New_York/463/2005, A/New_York/452/1999, A/New_York/238/2005, A/New_York/523/1998, ...
## 
## Rooted; includes branch lengths.

get.fields方法返回存儲(chǔ)在對(duì)象中并與系統(tǒng)發(fā)育相關(guān)的特征/屬性向量。

get.fields(beast_tree)
##  [1] "height"          "height_0.95_HPD"
##  [3] "height_median"   "height_range"   
##  [5] "length"          "length_0.95_HPD"
##  [7] "length_median"   "length_range"   
##  [9] "posterior"       "rate"           
## [11] "rate_0.95_HPD"   "rate_median"    
## [13] "rate_range"

get.data 方法返回所有關(guān)聯(lián)數(shù)據(jù)的浮點(diǎn)數(shù)。

get.data(beast_tree)
## # A tibble: 151 × 14
##    height height_0.95_HPD height_median height_range
##     <dbl> <list>                  <dbl> <list>      
##  1   19   <dbl [2]>                19   <dbl [2]>   
##  2   17   <dbl [2]>                17   <dbl [2]>   
##  3   14   <dbl [2]>                14   <dbl [2]>   
##  4   12   <dbl [2]>                12   <dbl [2]>   
##  5    9   <dbl [2]>                 9   <dbl [2]>   
##  6   10   <dbl [2]>                10   <dbl [2]>   
##  7   10   <dbl [2]>                10   <dbl [2]>   
##  8   10.8 <dbl [2]>                10.8 <dbl [2]>   
##  9    9   <dbl [2]>                 9   <dbl [2]>   
## 10    9   <dbl [2]>                 9   <dbl [2]>   
## # … with 141 more rows, and 10 more variables:
## #   length <dbl>, length_0.95_HPD <list>,
## #   length_median <dbl>, length_range <list>,
## #   posterior <dbl>, rate <dbl>, rate_0.95_HPD <list>,
## #   rate_median <dbl>, rate_range <list>, node <int>

如果用戶只想使用get.fields獲得features/attributes的部分子集數(shù)據(jù),可以使用get.data或直接使用 [ 或 [[ 提取子集。

beast_tree[, c("node", "height")]
## # A tibble: 151 × 2
##     node height
##    <int>  <dbl>
##  1    10   19  
##  2     9   17  
##  3    36   14  
##  4    31   12  
##  5    29    9  
##  6    28   10  
##  7    39   10  
##  8    90   10.8
##  9    16    9  
## 10     2    9  
## # … with 141 more rows
head(beast_tree[["height_median"]])
## height_median1 height_median2 height_median3 
##             19             17             14 
## height_median4 height_median5 height_median6 
##             12              9             10
1.4總結(jié)

用于推斷分子進(jìn)化的軟件工具(例如,祖先狀態(tài)、分子年代測定和選擇壓力等)正在激增,但沒有一種單一的數(shù)據(jù)格式可以被所有不同的程序使用,并能夠存儲(chǔ)不同類型的系統(tǒng)發(fā)育數(shù)據(jù)。大多數(shù)軟件包都有其獨(dú)特的輸出格式,并且這些格式彼此之間不兼容。解析軟件輸出具有挑戰(zhàn)性,這限制了使用不同工具進(jìn)行聯(lián)合分析。treeio包(Wang et al. 2020)提供了一組函數(shù)(表1.1),用于解析各種類型的系統(tǒng)發(fā)育數(shù)據(jù)文件,以及一組轉(zhuǎn)換器(表1.2),用于將樹狀對(duì)象轉(zhuǎn)換為門或樹狀數(shù)據(jù)對(duì)象。這些系統(tǒng)發(fā)育數(shù)據(jù)可以被整合,從而允許進(jìn)一步的探索和比較。到目前為止,分子進(jìn)化領(lǐng)域的大多數(shù)軟件工具都是孤立的,并且常常不能完全兼容彼此的輸入和輸出文件。這些軟件工具被設(shè)計(jì)用來進(jìn)行分析,而輸出通常在其他軟件中是不可讀的。目前還沒有設(shè)計(jì)任何工具來統(tǒng)一來自不同分析程序的推理數(shù)據(jù)。有效整合不同推理方法的數(shù)據(jù),可以增強(qiáng)對(duì)研究對(duì)象的比較和理解,有助于發(fā)現(xiàn)新的系統(tǒng)模式,產(chǎn)生新的假設(shè)。

隨著系統(tǒng)發(fā)育樹在進(jìn)化背景下識(shí)別模式的應(yīng)用越來越廣泛,越來越多的不同學(xué)科在研究中使用系統(tǒng)發(fā)育樹。例如,空間生態(tài)學(xué)家可以將生物體的地理位置繪制到系統(tǒng)發(fā)育樹中,以了解該物種的生物地理學(xué) (Sch?n et al. 2015);疾病流行病學(xué)家可以將病原體采樣的時(shí)間和地點(diǎn)納入系統(tǒng)發(fā)育分析中,推斷疾病在時(shí)空空間的傳播動(dòng)態(tài) (Y.-Q. He et al. 2013);微生物學(xué)家可以確定不同病原菌株的致病性,并將其繪制到系統(tǒng)發(fā)育樹中,以確定致病性的遺傳決定因素(Bosi et al. 2016);基因組科學(xué)家可以使用系統(tǒng)發(fā)育樹來幫助對(duì)他們的宏基因組序列數(shù)據(jù)進(jìn)行分類((Gupta and Sharma 2015)。treeio等強(qiáng)大的工具可以將不同類型的數(shù)據(jù)導(dǎo)入并映射到系統(tǒng)發(fā)育樹中,這對(duì)于促進(jìn)這些與系統(tǒng)發(fā)育相關(guān)(也被稱為phylodynamics)的研究有著重要意義。這些工具還可以幫助在最高水平上整合不同的元數(shù)據(jù)(時(shí)間、地理、基因型、流行病學(xué)信息)和分析結(jié)果(選擇壓力、進(jìn)化速率),并提供對(duì)研究生物體的全面了解。在流感研究領(lǐng)域,通過在同一種系統(tǒng)發(fā)育樹和進(jìn)化時(shí)間尺度上繪制不同元數(shù)據(jù)和分析結(jié)果來研究流感病毒的phylodynamics(Lam et al. 2015)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容