【比較基因組】基因家族擴張與收縮---CAFE篇

====環境和測試數據準備=====

需要先安裝OrthoFinder,這個參考前面一個帖子。然后今天我們主要來測試CAFE。

?安裝也比較簡單:

下載安裝包之后

https://github.com/hahnlab/CAFE/releases/download/v4.2.1/CAFE-4.2.1.tar.gz

cd CAFE

./configure

make

make install prefix=文件夾

注:在release文件夾中成功安裝了cafe,可以把它加入自己的環境變量。

測試數據準備:一共下載了mouse, rat, cow, horse, cat, marmoset,macaque, gibbon, baboon, orangutan, chimpanzee, 和 human 12個物種的蛋白數據。(我是另外一個博主那里下載的:從https://share.weiyun.com/5ZIjBg8 (密碼:3jzdpm)下載。)

//解壓縮一下就可以了

tar xf twelve_spp_proteins.tar.gz

for i in `ls -1twelve_spp_proteins/*.tar.gz`; do tar xf $i -C twelve_spp_proteins; done

rm twelve_spp_proteins/*.tar.gz

===識別基因家族=====

識別物種內和物種間的基因家族分為如下四步:(當然也可以)

?

1、僅保留每個基因中有代表性的轉錄本,去除可變剪切和冗余基因

2、建立BLAST數據庫,使用blastp進行 all-by-all 的比對

3、使用MCL基于blastp結果進行聚類,基因序列相似的通常是一個基因家族

4、解析MCL的輸出結果,用作CAFE的輸入

第一步:將所有最長的轉錄本合并成單個文件。提取每個基因中最長的轉錄本,然后合并成單個文件。

python python_scripts/cafetutorial_longest_iso.py -d twelve_spp_proteins/

cat twelve_spp_proteins/longest_*.fa | seqkit rmdup - > makeblastdb_input.fa

第二步:All-by-all BLAST

makeblastdb -in makeblastdb_input.fa-dbtype prot -out blastdb

blastp -num_threads 30 -db blastdb -query makeblastdb_input.fa -outfmt 7 -seg yes > blast_output.txt

注:-seg參數過濾低復雜度的序列(即氨基酸編碼為X),-num_threads線程數,此處設置為30。

第三步:使用MCL進行序列聚類

根據BLAST輸出中序列相似性信息尋找聚類。這些聚類將是后續用于CAFE分析的基因家族。聚類這一步將通過mcl處理。使用shell命令將BLAST轉成MCL能夠識別的ABC格式(其實就是挑選三列,兩個ID和Evalue)。

grep -v "#"? blast_output.txt | cut -f 1,2,11 >blast_output.abc

然后,創建網絡文件(.mci)和字典文件(.tab),然后進行聚類

mcxload -abc blast_output.abc --stream-mirror --stream-neg-log10 -stream-tf? 'ceil(200)' -o blast_output.mci -write-tab blast_output.tab

其中:--stream-mirror: 為輸入創建鏡像,即每一個X-Y都有一個Y-X

? ? ? ? ? --stream-neg-log10: 對輸入的數值做-log10轉換

? ? ? ? ? -stream-tf: 對輸入的數值進行一元函數轉換,這里用到的是ceil(200)

根據mci文件進行聚類, 其中主要調整的參數是-I, 它決定了聚類的粒度,值越小那么聚類密度越大,這個值沒有想象中的那么至關重要。一般設置為3,你也可以嘗試用其他值,然后比較結果。最終的目的是正確分析物種間的直系同源基因。

mcl blast_output.mci -I 3

mcxdump -icl out.blast_output.mci.I30 -tabr blast_output.tab -o dump.blast_output.mci.I30

第四步:整理MCL的輸出結果

上一步MCL的輸出還不能直接用于CAFE,還需要對其進行解析并過濾。

?

第一步是將原來的mcl格式轉成CAFE能用的格式。

pythonpython_scripts/cafetutorial_mcl2rawcafe.py? -i dump.blast_output.mci.I30 -o unfiltered_cafe_input.txt -sp "ENSG00 ENSPTR ENSPPY ENSPAN ENSNLE ENSMMUENSCJA ENSRNO ENSMUS ENSFCA ENSECA ENSBTA"

這里的"ENSG00" 是ENSEMBL編號中物種的標識符。

unfiltered_cafe_input.txt文件如下所示:

第二步,將那些基因拷貝數變異特別大的基因家族剔除掉,因為它會造成參數預測出錯。下面的腳本是過濾掉一個或多個物種有超過100個基因拷貝的基因家族,雖然不是特別的嚴格,但效果和根據拷貝數變異過濾類似。

pythonpython_scripts/cafetutorial_clade_and_size_filter.py -iunfiltered_cafe_input.txt -o filtered_cafe_input.txt –s

然后把ID換成物種名字:

sed?-i -e 's/ENSPAN/baboon/' -e 's/ENSFCA/cat/' -e 's/ENSBTA/cow/' -e's/ENSNLE/gibbon/' -e 's/ENSECA/horse/' -e 's/ENSG00/human/' -e's/ENSMMU/macaque/' -e 's/ENSCJA/marmoset/' -e 's/ENSMUS/mouse/' -e's/ENSPPY/orang/' -e 's/ENSRNO/rat/' -e 's/ENSPTR/chimp/' filtered_cafe_input.txt

sed?-i -e 's/ENSPAN/baboon/' -e 's/ENSFCA/cat/' -e 's/ENSBTA/cow/' -e's/ENSNLE/gibbon/' -e 's/ENSECA/horse/' -e 's/ENSG00/human/' -e's/ENSMMU/macaque/' -e 's/ENSCJA/marmoset/' -e 's/ENSMUS/mouse/' -e's/ENSPPY/orang/' -e 's/ENSRNO/rat/' -e 's/ENSPTR/chimp/' large_filtered_cafe_input.txt

第五步:物種樹推斷

構建物種樹主要分為多序列聯配和系統發育樹推測兩步,之后在已有進化樹的基礎上構建超度量樹用作CAFE輸入。

?

多序列聯配一般用的是單拷貝的直系同源基因(其實前面的OrthoFinder就生成的有),分別進行多序列聯配之后然后合并成單個文件。接著用系統發育樹推測軟件進行建樹,可選軟件有

極大似然法: RAxML, PhyML, FastTree

貝葉斯法: MrBayes

推斷超度量樹

超度量樹(ultrametric tree)也叫時間樹,就是將系統發育樹的標度改成時間,從根到所有物種的距離都相同。構建方法有很多,比較常用的就是r8s.

?

這里用cafetutorial_prep_r8s.py構建r8s的批量運行腳本,然后提取超度量樹。

pythonpython_scripts/cafetutorial_prep_r8s.py -i twelve_spp_raxml_cat_tree_midpoint_rooted.txt -o r8s_ctl_file.txt -s 35157236 -p 'human,cat' -c '94'

/gpfs03/home/jingjing/software/r8s1.81/src/r8s -b -f r8s_ctl_file.txt > r8s_tmp.txt

tail -n 1 r8s_tmp.txt | cut -c 16- >twelve_spp_r8s_ultrametric.txt

運行CAFE

運行CAFE有兩種模式,一種是CAFE的命令行模式,先執行cafe進行CAFE的shell, 然后在其中執行命令。另一種是腳本模式,也就是你先把命令編輯完成,然后用cafe script_to_run.sh運行。

CAFE的主要功能就是根據給定的進化樹和基因家族數估計一個或多個 birth-death()參數。參數描述的是基因出現或者消失的概率。

?

編輯cafetutorial_run1.sh。CAFE的命令不能有額外的空格出現在 tree后面的()中,以及lambda 的 -t 后的()中,否則運行時會無法正確解析文件導致報錯。

mkdir -p reports

cafe cafetutorial_run1.sh

這步運行結束后的報告文件在reports/reportrun1.cafe,可以用已有的腳本分析哪些基因家族發生了擴張或者搜索。

python? /gpfs03/home/jingjing/software/CAFE/script/Fulton_python_scripts/cafetutorial_report_analysis.py? -i reports/report_run1.cafe -o reports/summary_run1? ?(注意這些python程序要基于python2才行

在reports文件夾下會出現如下文件

?

summary_run1_node.txt: 統計每個節點中擴張,收縮的基因家族數

summary_run1_fams.txt: 具體發生變化的基因家族

看下CAFE的輸出結果:

Lambda是整個進化樹的預測值

?

# IDs of nodes表示不同節點的編號,這里cat為0,horse為2,cat和horse所在的節點是1.

?

最后是每個基因家族的結果。以最開始的表示行為例,第一列對應輸入基因家族的編號;第二列是Newick的進化樹,cat_61中的61表示該基因家族在cat里有61個基因;第三列是Family-wide P-value,用于表明該基因家族是否是顯著性的擴張或是收縮,這里是0.124,說明變化不明顯。在第三列的p值小于0.01時,第四列表明哪個分支的基因家族發生了變化,上圖中只有ID 13的基因家族有變化。

cafe結果可視化

在網上搜cafe可視化發現并沒有什么資料,都是說自己進行結果提取和畫圖。

這里有兩種方法,一是使用cafe自帶腳本計算出擴張和收縮數目后自行繪圖,比如ggtree或者itol手動繪制等。

方法如下:

python cafetutorial_draw_tree.py -isummary_run1_node.txt -t '(((chimp:6,human:6):81,(mouse:17,rat:17):70):6,dog:93)' -d '(((chimp<3>,human<3>)<3>,(mouse<3>,rat<3>)<3>)<3>,dog<3>)' -o summary_run1_tree_rapid.png

其中cafetutorial_report_analysis.py生成結果文件中summary_run1_node.txt中包含每個節點擴張和收縮的數目。cafetutorial_draw_tree.py簡單的對結果進行繪圖,以上參數在resultfile.cafe中找。默認繪制擴張基因數目,可以添加-y Contractions來繪制收縮基因數目,然后根據這些使用其他工具繪制更美觀的圖片。

第二種方法是唯一一個工具直接對cafe結果進行可視化的工具,CAFE_fig(安裝的時候也碰到很多問題)。

安裝時其主頁現實安裝ete3 3.0.0b35版本,不用管它,安裝最新版本。他提示安裝低版本是英文有部分人會因為其ete3無法使用PyQt5的內容所以必須要降級。但是如果選擇使用3.0.0b35版本代表必須將PyQt5降級到PyQt4,也比較麻煩。而且我自己測試時全部使用最新版并沒有出現問題,所以安裝時不需要降級。

?

但是運行的時候又報錯了:

ERROR:qt.qpa.screen: QXcbConnection: Could not connect to display :0.0解決辦法:

echo "exportQT_QPA_PLATFORM='offscreen'" >>~/.bashrc

source ~/.bashrc

python CAFE_fig.py example_result.cafe -pb 0.05 -pf 0.05 --dump test/ -g pdf --count_all_expansions? //CAFE_fig自帶的例子

注意:CAFE_fig.py中對pixels_per_mya進行修正。源碼中是1.0,如果想讓長度變成5倍則更正為5.0即可。

其中一個家族的結果:

?

跑上面的例子的結果(然后由于未知原因,我畫出的圖片沒有顏色,暫時還不清楚為什么):

本文使用 文章同步助手 同步

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容