Dsuite的使用

Dsuite據(jù)說是相較于其他相似軟件,占用的資源很少,這就給了我在自己服務(wù)器上操作的空間。
官網(wǎng):https://github.com/millanek/Dsuite
官網(wǎng)上的教程:https://github.com/millanek/tutorials/tree/master/analysis_of_introgression_with_snp_data

1 安裝

要進(jìn)行編譯,必須擁有相當(dāng)新的 GCC (>=4.9.0) 和 zlib 壓縮庫 (https://www.zlib.net),這也是為什么我裝了新系統(tǒng)就去整了個gcc。

git clone https://github.com/millanek/Dsuite.git #直接克隆編譯就行
cd Dsuite
make
#可選安裝
cd utils
python3 setup.py install --user --prefix= #=后面無任何符號,包括空格,用于畫圖

2 命令:

Dtrios:計算D (ABBA-BABA)和f4-ratio統(tǒng)計的所有可能的種群/物種的三元
DtriosCombine:整合Dtrios在基因組區(qū)域運行的結(jié)果(如每條染色體)
Dinvestigate:對D統(tǒng)計量顯著提高的三元進(jìn)行后續(xù)分析:計算f4統(tǒng)計信息,以及沿基因組窗口中的f_d和f_dM
Fbranch(需進(jìn)行上述可選安裝):計算與種群/物種相關(guān)的樹的分支的D和f統(tǒng)計量

a) Dsuite Dtrios [OPTIONS] INPUT_FILE.vcf SETS.txt
b) Dsuite Dquartets [OPTIONS] INPUT_FILE.vcf SETS.txt
c) Dsuite Dinvestigate [OPTIONS] INPUT_FILE.vcf.gz SETS.txt test_trios.txt
d) Dsuite Fbranch [OPTIONS] TREE_FILE.nwk FVALS_tree.txt

3 Dtrios

準(zhǔn)備文件:

vcf文件,接受bgzip和gzip壓縮文件,可以包含Indel和多等位基因,但不會被計算(本文使用beagle文件是因為其他計算f4的軟件都要求填充)
sets.txt:兩列文件,個體名稱和種群名稱
注意:必須要有一個Outgroup;對于不需要的種群,將種群名改為xxx即可屏蔽而不用提取vcf文件里的樣本。

tree文件(可選,建議加上):Newick 格式的樹。這棵樹應(yīng)該有與物種/種群名稱相對應(yīng)的標(biāo)簽,與sets.txt文件中對應(yīng);分支長度可以存在但不會被使用(建議別加長度,可能出錯)。需要注意的是,如果選擇加上樹文件,sets.txt文件里種群名必須是英文+數(shù)字的形式,可以有下劃線。關(guān)于樹文件的構(gòu)建,教程放在末尾。

命令

~/software/Dsuite/Dsuite/Build/Dsuite Dtrios test.beagle.vcf SETS.txt 
#可選命令:
 -k  #默認(rèn)=20,將數(shù)據(jù)集劃分為Jackknife塊的數(shù)量,整個數(shù)據(jù)集至少應(yīng)該是20
-j  #默認(rèn)=NA,JJackknife塊中snp的數(shù)量,如果使用了該命令,則替換-k
-r,--region=start,length #只處理VCF文件的子集,如 --region=20001,10000 將處理 20001 到 30000 的變異位點
-t,--tree= TREE_FILE #一個帶有newick格式的樹的文件,該樹指定種群/物種之間的關(guān)系。根據(jù)樹排列的三組的D和f4-ratio值將輸出在一個后綴為_tree.txt的文件中
-o,--out-prefix=OUT_FILE_PREFIX #指定輸出文件的前綴,默認(rèn)情況下,前綴取自SETS.txt文件的名稱
-n,--run-name #run-name將包含在輸出文件名的PREFIX后面
--no-f4-ratio #不計算f4-ratio
-l NUMLINES #VCF輸入的行數(shù),如果通過unix管道讀取VCF,則必須輸入
-g,--use-genotype-probabilities       # (optional) use probabilities (GP tag) or calculate them from likelihoods (GL or PL tags) using a Hardy-Weinberg prior,the probabilities are used to estimate allele frequencies in each population/species(原文貼在這,因為我看不懂)
-p, --pool-seq=MIN_DEPTHVCF #包含pool-seq數(shù)據(jù);也就是說,每個“個體”都是一個種群,然后從AD(等位基因深度)字段估計等位基因頻率,例如MIN_DEPTH=5可能是合理的;當(dāng)讀取次數(shù)較少時,等位基因頻率被設(shè)置為缺失
-c, --no-combine #不輸出"_combine.txt"和"_combine_stderr.txt"文件,這些文件只有在DtriosCombine有用
--KS-test-for-homoplasy #檢測強(qiáng)abba信息位點是否沿基因組聚集

并行程序

此外,還提供了一個DtriosParallel命令,用法類似于Dtrios。允許同時輸入多個vcf文件,該命令會調(diào)用DtriosCombine自動合并vcf文件,所有的vcf文件應(yīng)包含相同的樣本(如不同染色體的vcf文件)

./utils/DtriosParallel SETS.txt INPUT_FILE.vcf [INPUT_FILE.vcf ...]
-j,-k,-t,-n,-l,-g,-p命令同上
-c,--no-combine #不運行DtriosCombine來獲取單個綜合結(jié)果文件
--cores CORES,#(default=CPU count)  設(shè)置進(jìn)程數(shù)
--keep-intermediate #保留區(qū)域Dsuite Dtrios結(jié)果。
 --logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}, -v {DEBUG,INFO,WARNING,ERROR,CRITICAL} #最小級別的輸出日志
--dsuite-path DSUITE_PATH  #顯式地將路徑設(shè)置為Dsuite所在的目錄。默認(rèn)情況下,腳本將首先執(zhí)行檢查Dsuite是否可以從$PATH訪問。如果不是,它將嘗試在../Build/Dsuite中定位Dsuite。
--environment-setup ENVIRONMENT_SETUP, #應(yīng)該運行該命令來為Dsuite設(shè)置環(huán)境。例如,'模塊加載GCC'或'conda

相較于Dtrios最大的優(yōu)勢應(yīng)該是可以通過"--cores"設(shè)置進(jìn)程數(shù),其他大部分有用參數(shù)與上文類似。

結(jié)果文件

head species_sets_no_geneflow_BBAA.txt
P1 P2 P3 Dstatistic Z-score p-value f4-ratio BBAA ABBA BABA
S01 S02 S00 0.00645161 0.228337 0.409692 7.6296e-05 40635 936 924
S01 S00 S03 0.0299321 1.08142 0.139754 0.000543936 28841 1724.75 1624.5
S01 S00 S04 0.0072971 0.308069 0.379015 0.00013279 28889.2 1691 1666.5
S01 S00 S05 0.00312175 0.133303 0.446977 5.6877e-05 28861.2 1687 1676.5


參考圖.jpg

繪熱圖

首先準(zhǔn)備一個plot_order.txt文件,單列,包含每個種群名稱?;蛘呖梢允褂迷撁睿?/p>

cut -f 2 sets.txt | uniq | head -n 20 > plot_order.txt

其次準(zhǔn)備兩個ruby腳本文件
鏈接:https://github.com/millanek/tutorials/blob/master/analysis_of_introgression_with_snp_data/src/plot_d.rb
https://github.com/millanek/tutorials/blob/master/analysis_of_introgression_with_snp_data/src/plot_f4ratio.rb

ruby plot_d.rb SETS_BBAA.txt plot_order.txt 0.7 species_sets_no_geneflow_BBAA_D.svg
ruby plot_f4ratio.rb SETS_BBAA.txt plot_order.txt 0.2 species_sets_no_geneflow_BBAA_f4ratio.svg
結(jié)果圖.png

該圖是不考慮p1物種,列出p2和p3物種之間最大的D值和f4-radio值,
選擇的種群有無基因流對結(jié)果有很大影響

4 DtriosCombine 整合上一步運行的結(jié)果(如不同染色體的運算結(jié)果)

Dsuite DtriosCombine [OPTIONS] DminFile1 DminFile2 DminFile3 ....
-o,--out-prefix=OUT_FILE_PREFIX #指定輸出文件的前綴,默認(rèn)情況下,前綴為“out”
-t,--tree= TREE_FILE #一個帶有newick格式的樹的文件,該樹指定種群/物種之間的關(guān)系。根據(jù)樹排列的三組的D和f4-ratio值將輸出在一個后綴為_tree.txt的文件中
-s , --subset=start,length #只處理VCF文件的子集,如 --subset=20001,10000 將處理 20001 到 30000 的變異位點

5 Dinvestigate 對D統(tǒng)計量顯著升高的組進(jìn)行后續(xù)分析

準(zhǔn)備文件

vcf文件和sets.txt:同上
test_trios:列出想要研究的組,可以多行,每行三列(意味著可以直接做想要的組而不必f4)

#P1          #P2          #P3
mbuna   deep    Diplotaxodon

對于這組,描述為:研究deep和Diplotaxodon組的混合信號,并和mbuna比較

命令

Dsuite Dinvestigate -w 50,25 test.beagle.vcf SETS.txt test_trios.txt
其中50 25是窗口和步長,對于動物來說,這個值似乎有點小了,建議自己摸索合適的參數(shù)

畫圖

R腳本
plotInvestigateResults.R

# read in the results with 50 SNP windows and a step of 25 SNPs
bigStep <- read.table("mbuna_deep_Diplotaxodon_localFstats__50_25.txt",as.is=T,header=T) #修改文件名

# plot D in windows along scaffold 18:
plot(bigStep$windowStart/1000000, bigStep$D,type="l",xlab="scaffold 18 coordinate (Mb)",ylab="D (ABBA-BABA)")
# plot f_dM in windows along scaffold 18:
plot(bigStep$windowStart/1000000, bigStep$f_dM,type="l",xlab="scaffold 18 coordinate (Mb)",ylab="f_dM")
# plot f_d in windows along scaffold 18:
plot(bigStep$windowStart/1000000, bigStep$f_d,type="l",xlab="scaffold 18 coordinate (Mb)",ylab="f_d")
# use f_dM and zoom-in on the region of interest 
plot(bigStep$windowStart/1000000, bigStep$f_dM,type="l",xlim=c(4,4.5),xlab="scaffold 18 coordinate (Mb)",ylab="f_dM",ylim=c(-0.2,0.8))

# Same window: 50SNPs, and the smallest 1 SNP step
smallestStep <- read.table("mbuna_deep_Diplotaxodon_localFstats__50_1.txt",as.is=T,header=T)
# plot f_dM again:
plot(smallestStep$windowStart/1000000, smallestStep$f_dM,type="l",xlim=c(4,4.5),xlab="scaffold 18 coordinate (Mb)",ylab="f_dM",ylim=c(-0.2,0.8))

# Smaller 10SNP window, and the smallest 1 SNP step
smallerWindow <- read.table("mbuna_deep_Diplotaxodon_localFstats__10_1.txt",as.is=T,header=T)
# plot f_dM again:
plot(smallerWindow$windowStart/1000000, smallerWindow$f_dM,type="l",xlim=c(4.0,4.5),xlab="scaffold 18 coordinate (Mb)",ylab="f_dM",ylim=c(-0.2,0.9),pch=16)

# Finally, a tiny window with 2 SNPs and a step of 1 SNP
smallWindow <- read.table("mbuna_deep_Diplotaxodon_localFstats__2_1.txt",as.is=T,header=T)
plot(smallWindow$windowStart, smallWindow$f_dM,type="l",xlim=c(4000000,4500000),xlab="scaffold 18 coordinate (Mb)",ylab="f_dM",ylim=c(-0.2,0.8))
結(jié)果圖.png

6 Fbranch

命令

Dsuite Fbranch simulated_tree_with_geneflow.nwk species_sets_with_geneflow_tree.txt > species_sets_with_geneflow_Fbranch.txt #可以在這一步修改種群名為想要的
python3 /Users/milanmalinsky/Sanger_work/Dsuite/Dsuite/utils/dtools.py species_sets_with_geneflow_Fbranch.txt simulated_tree_with_geneflow.nwk
-n RUN_NAME, --run-name RUN_NAME #輸出文件名,默認(rèn)Fbranch
--outgroup OUTGROUP #newick文件里Outgroup組的名字,默認(rèn)Outgroup
--use_distances #使用newick文件的實際節(jié)點距離繪制樹。(默認(rèn)值:False)
--ladderize #在繪圖之前對輸入樹進(jìn)行階梯化。(默認(rèn)值:False)
結(jié)果圖.png

樹文件的準(zhǔn)備

有兩種方法

第一種:利用treemix

treemix -i sample.treemix.in.gz -o sample.ML.tree -root wBGU 

詳細(xì)教程見:http://m.itdecent.cn/p/f33bbd8e0996

第二種:PAUP(官網(wǎng)提供的教程中提到的)

這種方法有個問題,小數(shù)據(jù)集還好,但是大數(shù)據(jù)集會分析不出來。比如我的180個個體。而且也找不到Linux下安裝的教程。
首先下載PAUP:http://phylosolutions.com/paup-test/
convert_vcf_to_nexus.rb腳本文件:https://github.com/millanek/tutorials/blob/master/species_tree_inference_with_snp_data/src/convert_vcf_to_nexus.rb
taxpartitions.txt種群信息文件:如下,意味著1,2序列是astbur,以此類推

BEGIN SETS;
    TAXPARTITION SPECIES =
        astbur: 1-2,
        altfas: 3-4,
        telvit: 5-6,
        neobri: 7-8,
        neochi: 9-10,
  END;

然后運行,挺慢的

ruby convert_vcf_to_nexus.rb nc.test.beagle.vcf test.beagle.nex #不接受壓縮格式

完事之后檢查一下nex文件中的個體編號,不能有"-",否則會報錯(一個快速的修改方法:使用paup的編輯功能)。
然后合并種群和nex文件

  cat test.beagle.nex taxpartitions.txt > pop.test.beagle.nex

得到的文件用paup打開:File→open→pop.test.beagle.nex→Execute
指定外群:Data→Define Outgroup
分析:Analysis→“SVDQuartets...”

設(shè)定詳情.png

PAUP的SVDQuartets教程網(wǎng)址:https://github.com/millanek/tutorials/blob/master/species_tree_inference_with_snp_data/README.md

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

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

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