Dsuite的使用

Dsuite据说是相较于其他相似软件,占用的资源很少,这就给了我在自己服务器上操作的空间。
官网:https://github.com/millanek/Dsuite
官网上的教程:https://github.com/millanek/tutorials/tree/master/analysis_of_introgression_with_snp_data

1 安装

要进行编译,必须拥有相当新的 GCC (>=4.9.0) 和 zlib 压缩库 (https://www.zlib.net),这也是为什么我装了新系统就去整了个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统计的所有可能的种群/物种的三元
DtriosCombine:整合Dtrios在基因组区域运行的结果(如每条染色体)
Dinvestigate:对D统计量显着提高的三元进行后续分析:计算f4统计信息,以及沿基因组窗口中的f_d和f_dM
Fbranch(需进行上述可选安装):计算与种群/物种相关的树的分支的D和f统计量

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

准备文件:

vcf文件,接受bgzip和gzip压缩文件,可以包含Indel和多等位基因,但不会被计算(本文使用beagle文件是因为其他计算f4的软件都要求填充)
sets.txt:两列文件,个体名称和种群名称
注意:必须要有一个Outgroup;对于不需要的种群,将种群名改为xxx即可屏蔽而不用提取vcf文件里的样本。

tree文件(可选,建议加上):Newick 格式的树。这棵树应该有与物种/种群名称相对应的标签,与sets.txt文件中对应;分支长度可以存在但不会被使用(建议别加长度,可能出错)。需要注意的是,如果选择加上树文件,sets.txt文件里种群名必须是英文+数字的形式,可以有下划线。关于树文件的构建,教程放在末尾。

命令

~/software/Dsuite/Dsuite/Build/Dsuite Dtrios test.beagle.vcf SETS.txt 
#可选命令:
 -k  #默认=20,将数据集划分为Jackknife块的数量,整个数据集至少应该是20
-j  #默认=NA,JJackknife块中snp的数量,如果使用了该命令,则替换-k
-r,--region=start,length #只处理VCF文件的子集,如 --region=20001,10000 将处理 20001 到 30000 的变异位点
-t,--tree= TREE_FILE #一个带有newick格式的树的文件,该树指定种群/物种之间的关系。根据树排列的三组的D和f4-ratio值将输出在一个后缀为_tree.txt的文件中
-o,--out-prefix=OUT_FILE_PREFIX #指定输出文件的前缀,默认情况下,前缀取自SETS.txt文件的名称
-n,--run-name #run-name将包含在输出文件名的PREFIX后面
--no-f4-ratio #不计算f4-ratio
-l NUMLINES #VCF输入的行数,如果通过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数据;也就是说,每个“个体”都是一个种群,然后从AD(等位基因深度)字段估计等位基因频率,例如MIN_DEPTH=5可能是合理的;当读取次数较少时,等位基因频率被设置为缺失
-c, --no-combine #不输出"_combine.txt"和"_combine_stderr.txt"文件,这些文件只有在DtriosCombine有用
--KS-test-for-homoplasy #检测强abba信息位点是否沿基因组聚集

并行程序

此外,还提供了一个DtriosParallel命令,用法类似于Dtrios。允许同时输入多个vcf文件,该命令会调用DtriosCombine自动合并vcf文件,所有的vcf文件应包含相同的样本(如不同染色体的vcf文件)

./utils/DtriosParallel SETS.txt INPUT_FILE.vcf [INPUT_FILE.vcf ...]
-j,-k,-t,-n,-l,-g,-p命令同上
-c,--no-combine #不运行DtriosCombine来获取单个综合结果文件
--cores CORES,#(default=CPU count)  设置进程数
--keep-intermediate #保留区域Dsuite Dtrios结果。
 --logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}, -v {DEBUG,INFO,WARNING,ERROR,CRITICAL} #最小级别的输出日志
--dsuite-path DSUITE_PATH  #显式地将路径设置为Dsuite所在的目录。默认情况下,脚本将首先执行检查Dsuite是否可以从$PATH访问。如果不是,它将尝试在../Build/Dsuite中定位Dsuite。
--environment-setup ENVIRONMENT_SETUP, #应该运行该命令来为Dsuite设置环境。例如,'模块加载GCC'或'conda

相较于Dtrios最大的优势应该是可以通过"--cores"设置进程数,其他大部分有用参数与上文类似。

结果文件

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

绘热图

首先准备一个plot_order.txt文件,单列,包含每个种群名称。或者可以使用该命令:

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

其次准备两个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
结果图.png

该图是不考虑p1物种,列出p2和p3物种之间最大的D值和f4-radio值,
选择的种群有无基因流对结果有很大影响

4 DtriosCombine 整合上一步运行的结果(如不同染色体的运算结果)

Dsuite DtriosCombine [OPTIONS] DminFile1 DminFile2 DminFile3 ....
-o,--out-prefix=OUT_FILE_PREFIX #指定输出文件的前缀,默认情况下,前缀为“out”
-t,--tree= TREE_FILE #一个带有newick格式的树的文件,该树指定种群/物种之间的关系。根据树排列的三组的D和f4-ratio值将输出在一个后缀为_tree.txt的文件中
-s , --subset=start,length #只处理VCF文件的子集,如 --subset=20001,10000 将处理 20001 到 30000 的变异位点

5 Dinvestigate 对D统计量显著升高的组进行后续分析

准备文件

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是窗口和步长,对于动物来说,这个值似乎有点小了,建议自己摸索合适的参数

画图

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))
结果图.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 #输出文件名,默认Fbranch
--outgroup OUTGROUP #newick文件里Outgroup组的名字,默认Outgroup
--use_distances #使用newick文件的实际节点距离绘制树。(默认值:False)
--ladderize #在绘图之前对输入树进行阶梯化。(默认值:False)
结果图.png

树文件的准备

有两种方法

第一种:利用treemix

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

详细教程见:https://www.jianshu.com/p/f33bbd8e0996

第二种:PAUP(官网提供的教程中提到的)

这种方法有个问题,小数据集还好,但是大数据集会分析不出来。比如我的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...”

设定详情.png

PAUP的SVDQuartets教程网址:https://github.com/millanek/tutorials/blob/master/species_tree_inference_with_snp_data/README.md

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容