BAMM(Bayesian Analysis of Macroevolutionary Mixtures)是一種根據(jù)系統(tǒng)發(fā)生樹對物種形成宫莱、滅絕和性狀進化的復雜動力學建模的程序丈攒。
官網(wǎng):http://bamm-project.org/
BAMM下載頁面:http://bamm-project.org/download.html
說明書鏈接:http://bamm-project.org/quickstart.html#incomplete-taxon-sampling
win版本下載后只包含了.exe和.dll,需要放置在同一目錄下使用授霸。為了學習需要示例數(shù)據(jù)巡验,下載源文件或僅下載文件列表里的example。https://github.com/macroevolution/bamm
首先將以下文件放在同一目錄下:
1.分子鐘估算后帶時間標記的系統(tǒng)發(fā)生樹
2.control文件(參數(shù)設(shè)置)
3.BAMM程序
在使用前用R的ape包檢查樹是否符合分析條件
library(ape)
v <- read.tree("myPhylogeny.tre")
is.ultrametric(v)
is.binary.tree(v)
# Now to check min branch length:
min(v$edge.length)
樹的枝長以百萬年為單位
然后是control文件碘耳,類似于一個腳本显设,里面是對參數(shù)的設(shè)置,在example文件夾里有diversification和 trait辛辨,在diversification里找divcontrol.txt文件捕捂,打開可以看到里面的參數(shù)設(shè)定,每行都有注釋解說斗搞。默認的設(shè)定對大多是百萬年級別的樹有用绞蹦,根據(jù)情況需要調(diào)整來獲取理想結(jié)果。先復制一份到BAMM所在目錄下榜旦,這里也放出來看看幽七,主要需要修改的是前面幾個。
# BAMM configuration file for speciation/extinction analysis
# ==========================================================
#
# Format
# ------
#
# - Each option is specified as: option_name = option_value
# - Comments start with # and go to the end of the line
# - True is specified with "1" and False with "0"
################################################################################
# GENERAL SETUP AND DATA INPUT
################################################################################
#設(shè)置模式
modeltype = speciationextinction
# Specify "speciationextinction" or "trait" analysis
#系統(tǒng)發(fā)生樹文件名稱(樹文件要跟BAMM運行程序放在一個文件路徑里)
treefile = whaletree.tre
# File name of the phylogenetic tree to be analyzed
#輸出文件的名稱
runInfoFilename = run_info.txt
# File name to output general information about this run
sampleFromPriorOnly = 0
# Whether to perform analysis sampling from prior only (no likelihoods computed)
#后略
其中溅呢,先驗概率模塊可以用R的BAMMtools包自動生成
library(BAMMtools)
tr <- read.tree("treePathway")
setBAMMpriors(tr)
運行后會生成一個叫做 myPriors.txt 的文本問件在工作目錄下澡屡,內(nèi)容如下圖【輸入getwd()查詢R目前的工作路徑】
將這些數(shù)據(jù)替換掉控制文件中相對應(yīng)的數(shù)據(jù)
需要注意的是猿挚,這個生成的數(shù)據(jù)是一套對多個數(shù)據(jù)有效的設(shè)定根據(jù)樹的時間枝長尺度進行縮放的結(jié)果,并不一定適用于所有數(shù)據(jù)驶鹉。作者對于先驗概率對數(shù)據(jù)的影響有較大篇幅的解說绩蜻,看了一遍啥都沒看懂,數(shù)學能力強的可以進一步了解室埋。
將myPriors.txt 里的內(nèi)容復制办绝,替換control文件里的 # PRIORS 部分,檢查一下后最好重命名一下control文件姚淆,如命名為 ‘ testcontrol ’孕蝉。
這里用BioGeobears包里的Psychotria_5.2.newick樹文件從頭試一遍。
樹文件放在BAMM所在目錄下腌逢,將工作目錄轉(zhuǎn)過來比較方便降淮。
打開Rstudio,輸入
library(BAMMtools)
wd <- "C:\\BAMM所在路徑\\BAMM"
setwd(wd)
tr <- read.tree("Psychotria_5.2.newick")
setBAMMpriors(tr)
得到myPriors.txt 內(nèi)容如下搏讶,復制替換control文件佳鳖,開頭的樹文件名稱更改,保存關(guān)閉后重命名為 testcontrol.txt
(2023.3.3補:我看到有的文章先驗設(shè)置了多個媒惕,1系吩、2、3妒蔚、4淑玫、5、10面睛,都跑了一遍絮蒿,結(jié)果一致。在不太好解釋的情況下這樣設(shè)置可能是比較好的選擇叁鉴,就怕不同的先驗算出不同后驗結(jié)果)
###############################################
# Prior block chosen by BAMMtools::setBAMMpriors
expectedNumberOfShifts = 1.0
lambdaInitPrior = 0.461956997597441
lambdaShiftPrior = 0.221402412787889
muInitPrior = 0.461956997597441
#### End Prior block
######################
打開win系統(tǒng)的命令提示符(不是那個bamm.exe, 是從電腦開始菜單里找的CMD)
從cmd去調(diào)用bamm.exe土涝,不是直接點開用的,直接點只會閃一下指令框
cd "C:\\BAMM所在路徑\\BAMM"
bamm -c testcontrol.txt
再回到Rstudio里實行可視化
evdata <- getEventData(tr, eventdata = "event_data.txt",burnin = 0.1)
plot(eventdata,method='polar',lwd=3,pal='RdYlGn')
incompsampling模式
如果是采樣不充分的系統(tǒng)樹幌墓,可以使用incompsampling模式但壮,說明書鏈接為:http://bamm-project.org/advanced.html#incompsampling
對于較少不完整的系統(tǒng)發(fā)育:不完整的分類單元抽樣可能會對系統(tǒng)發(fā)育樹的物種形成和滅絕分析產(chǎn)生偏差。如果您有一個不完全采樣的樹(例如常侣,您的目標分類群的總現(xiàn)存物種豐富度的某些分數(shù) < 1)蜡饵,您可以輕松指定此采樣分數(shù)以在物種缺失的假設(shè)下生成對物種形成和滅絕的無偏估計隨機從樹上。在您的控制文件中胳施,您可以通過設(shè)置參數(shù)來指定已采樣物種的百分比globalSamplingFraction溯祸。具體來說,您應(yīng)該在控制文件中進行以下設(shè)置:
useGlobalSamplingProbability = 1
globalSamplingFraction = XYZ
其中 XYZ 是進化枝中包含在系統(tǒng)發(fā)育中的總分類群的百分比(例如,如果你的進化枝有 100 個物種而你的樹有 73 個焦辅,你應(yīng)該設(shè)置)博杖。XYZ = 0.73
但是如果你的物種不是隨機抽樣的呢?BAMM 允許您將多個級別的此類非隨機性合并到您的分析中筷登√旮考慮以下示例。假設(shè)您希望對由兩個屬組成的進化枝執(zhí)行多樣化分析:fu和bar前方。在 fu分支中狈醉,您對某些物種 A 和 B 進行了采樣,但另外 8 個物種仍未采樣惠险。在第二個屬欄中苗傅,您對物種 C、D莺匠、E 和 F 進行了采樣金吗,并且僅缺少一個物種十兢。您可以得出結(jié)論趣竣,您在fu中有 0.2 (2 / 10) 個物種,在bar中有 0.8 個物種(4 / 5)旱物。此外遥缕,由于這些是您的焦點樹中僅有的兩個屬,您知道系統(tǒng)發(fā)育的骨干具有 1.0 的采樣概率(因為進化枝中沒有包含 fu 和 bar 的其他屬)宵呛。我們可以如下在這棵樹上“繪制”相關(guān)的采樣分數(shù)单匣,分別使用紅色、藍色和黑色作為 fu 宝穗、 bar和backbone 采樣分數(shù)户秤。
我們可以直接解釋 BAMM 中這種類型的不完整抽樣。我們需要做兩件事逮矛。首先鸡号,我們告訴 BAMM 我們不會使用單一的全局抽樣概率,而是指定進化枝或物種特定的抽樣概率须鼎。在控制文件中鲸伴,您設(shè)置. 然后,您必須指定一個文件名晋控,該文件名使用參數(shù)給出相關(guān)的采樣分數(shù)汞窗。這個文件的格式有點奇特。在文件的第一行赡译,您給出主干采樣概率(此處示例中為 1.0)仲吏。useGlobalSamplingProbability = 0sampleProbsFilename
現(xiàn)在,您為系統(tǒng)發(fā)育中的每個樣本物種添加一條單獨的線(本例中為 A、B蜘矢、C狂男、D、E品腹、F)岖食。每行包含以下內(nèi)容,中間用tab符合隔開(不能用空格):
speciesName cladeName samplingFraction
對于物種 A舞吭,相關(guān)行將如下所示:
A fu 0.2
所有物種的完整文件如下所示:
1.0
A fu 0.2
B fu 0.2
C bar 0.8
D bar 0.8
E bar 0.8
F bar 0.8
對于許多數(shù)據(jù)集泡垃,這是使用不完整采樣信息的一種簡單方法。假設(shè)您正在為所有雀形目鳥類的多樣化動態(tài)建模羡鸥。如果您擁有鳥類的所有科蔑穴,但這些科中的抽樣不完整,則可以直接合并此抽樣惧浴,前提是您可以合理地假設(shè)單系科存和。
如果主干抽樣分數(shù)不太可能等于 1.0,則指定主干抽樣分數(shù)可能會帶來一些挑戰(zhàn)衷旅。這是一個不等于 1 的示例捐腿。繼續(xù)上面的例子,假設(shè)在我們的焦點進化枝中還有其他幾個總計 7 個物種沒有被采樣柿顶。前提是我們(合理地)確信該屬不屬于我們的屬fu和bar茄袖,這意味著這些譜系必須從系統(tǒng)發(fā)育的骨干(黑色)部分分支出來。一種可能的修正是假設(shè) 2 個采樣的骨干譜系是總共 9 個中的 2 個(包括來自其他屬的 7 個未采樣的分類群)嘁锯,或 0.22宪祥。另一種可能性是將主干分數(shù)設(shè)置為等于整個進化枝的總采樣分數(shù)。本例中家乘,我們從fu和bar中一共采樣了 6 個物種, 共計 15 種蝗羊。另有7種未從其他屬中取樣。您可以將骨干分數(shù)設(shè)置為 6 / (15 + 7) = 0.27仁锯。這些都不是完美的解決方案耀找,但我們認為 - 一般來說 - 如果采樣分類單元的百分比在您的樹中變化很大孝冒,則最好使用進化枝特定的采樣分數(shù)