treemix 是利用等位基因频率来推断群体间分化和杂合(基因流动或者基因渗入)的软件。
格式转换
通常,我们的变异数据储存格式为vcf
,首先将其转换为tped
格式。1
vcftools --vcf test.vcf --plink-tped --out test
转换后的tfam
文件如下:第一列为FID
,第二列为IID
,我们需要修改第一列数据为群体信息。1
2
3
4
5wHAIPI052555-68 wHAIPI052555-68 0 0 0 -9
wHAIPI052556-77 wHAIPI052556-77 0 0 0 -9
wHAIPI052557-76 wHAIPI052557-76 0 0 0 -9
wHAIPI052558-63 wHAIPI052558-63 0 0 0 -9
wHAIPI052559-71 wHAIPI052559-71 0 0 0 -9
修改好的tfam
文件如下:XM和GD是2个群体1
2
3
4
5XM wHAIPI052555-68 0 0 0 -9
XM wHAIPI052556-77 0 0 0 -9
XM wHAIPI052557-76 0 0 0 -9
GD wHAIPI052558-63 0 0 0 -9
GD wHAIPI052559-71 0 0 0 -9
然后再编辑一个群体信息文件(pop.cov),格式如下:1
2
3
4
5XM wHAIPI052555-68 XM
XM wHAIPI052556-77 XM
XM wHAIPI052557-76 XM
GD wHAIPI052558-63 GD
GD wHAIPI052559-71 GD
编辑好之后,计算等位基因组频率:1
plink --tfile test --freq --within pop.cov
然后使用treemix
自带的脚本 plink2treemix.py
进行格式转换,转换前需要对等位基因频率文件压缩。1
python2 plink2treemix.py plink.frq.strat.gz treemix_in.gz
基因渗入分析
1 | treemix -se -bootstrap -k 1000 -m 1 -i treemix_in.gz |
或者进行多个m和重复:1
2
3
4
5
6
7
8
9
10
11
12for m in {1..5}
do
for i in {1..20}
do
treemix -se -bootstrap \
-i treemix_in.gz \
-o TreeMix.${i}.${m} \
-global \
-m ${m} \
-k 1000
done
done
其中m
参数为 the number of migration edges,中文翻译过来其实就是基因渗入方向的个数,默认为0,可以尝试1-10,并在每个m中重复10次。
最佳迁移边缘个数选择
将生成的llik、cov、modelcov 文件放置同一文件夹,使用 R 包OptM
进行分析:1
2
3library(OptM)
linear = optM("./result")
plot_optM(linear)
生成图中,当Δm值最小时的 migration edges 为最佳迁移边缘个数。
基因渗入作图
确定最佳迁移边缘个数之后,我们使用 m=最佳迁移边缘个数的结果文件作图。1
2source("plotting_funcs.R") #treemix scr文件夹中R脚本
plot_tree("TreeMix") #TreeMix为结果文件前缀
pairwise Fst
1 | library(vcfR) |