结构分析的基本原理为先预设群体由若干亚群(k=x)构成,通过模拟算法找出在k=x的情况下,最合理的样本分类方法。最后再根据每次模拟的最大似然值,找出最适用这群体的K值。
该方法假设在各个亚群内部个体应该符合哈代-温伯格平衡(哈温平衡的概念),那么这个亚群内的基因频率分布应该可通过哈温平衡检验。 基因型位点不能是连锁的。同一个体基因组上的不同SNP可能来源不同亚群体,这是由于杂交混血过程带来的效应。为了达到哈-温平衡,对不同的位点的分类方法是不同的, 软件是对每个位点单独进行分群的。
Structure分析,输入的数据就是样本的基因型数据一般来讲是snps,需要注意的是输入的必须是不存在连锁不平衡的独立位点。所以,使用所有的SNP是不对的。如果使用大量存在连锁不平衡的位点,就违背了这个软件最初的假设。需要根据连锁不平衡衰减分析的结果,仅从所有SNP中挑选一部分独立的位点用于structure分析。
数据准备:过滤连锁不平衡的位点后的vcf文件。
1 安装软件
wget https://dalexander.github.io/admixture/binaries/admixture_linux-1.3.0.tar.gz
mkdir admixture_linux-1.3.0
tar -zxvf admixture_linux-1.3.0.tar.gz -C admixture_linux-1.3.0
mv admixture_linux-1.3.0/dist/admixture_linux-1.3.0/* admixture_linux-1.3.0/
rm -r admixture_linux-1.3.0/dist
cd admixture_linux-1.3.0
./admixture
**** ADMIXTURE Version 1.3.0 ****
**** Copyright 2008-2015 ****2 vcf格式转bed格式
plink --vcf ../00.filter/all.LDfilter.vcf --make-bed --out all --allow-extra-chr --keep-allele-order --set-missing-var-ids @:#3 运行admixture
# 生成k=15的脚本
$ seq 1 15 | awk '{print " admixture --cv -j2 all.bed "$1" 1>admix."$1".log 2>&1"}' > admixture.sh
# 运行脚本
sh admixture.sh
# 查看CV error值(找到最小值)
[root@3eb13a5fb4e6 02structure]$grep "CV" ./*.log4 结果汇总及画图
mkdir result
cp ./*.Q result/
# 利用R脚本画图
Rscript \
../script/draw_admixture.R \
result \ #输入目录
all.fam \ # plink的fam文件,记录样品顺序
../data/sample.pop.order \ #绘图的样品顺序
structure # 输出图片前缀5 Admixture报错:Invalid chromosome code! Use integers
# 报错详细信息:
**** ADMIXTURE Version 1.3.0 ****
**** Copyright 2008-2015 ****
**** David Alexander, Suyash Shringarpure, ****
**** John Novembre, Ken Lange ****
**** ****
**** Please cite our paper! ****
**** Information at www.genetics.ucla.edu/software/admixture ****
Cross-validation will be performed. Folds=5.
Parallel execution requested. Will use 10 threads.
Random seed: 43
Point estimation method: Block relaxation algorithm
Convergence acceleration algorithm: QuasiNewton, 3 secant conditions
Point estimation will terminate when objective function delta < 0.0001
Estimation of standard errors disabled; will compute point estimates only.
Invalid chromosome code! Use integers.解决方式: Invalid chromosome code! Use integers.这里要求染色体名称必须是整数形式。 所以,将.bim文件第一列的内容改成整数。 将第一列内容统一改为1 使用vim编辑器批量替换字符串 `:%s/A/B/g:` 实际操作后,发现第二列内容的前半部分也被替换,但是不影响结果。
# 替换前
CM046388.1 CM046388.1:27594 0 27594 C T
CM046388.1 CM046388.1:28570 0 28570 G A
CM046388.1 CM046388.1:28857 0 28857 A T
# 替换后
1 1:27594 0 27594 C T
1 1:28570 0 28570 G A
1 1:28857 0 28857 A T