ADMIXTURE 是常用的群體遺傳學分析工具,可以估計個體的祖先成分。與 STRUCTURE 相比,它的速度更快。
下面介紹一下它的使用。STRUCTURE 可以輸入 Plink 或者 EIGENSTRAT 格式的數據,這里以 plink 格式的文件為例。
篩選SNP
SNP 數量太多,計算會非常慢。可以使用 plink 的 --indep-pairwise 命令,通過 LD 篩選位點:
plink --bfile data --indep-pairwise 50 10 0.1
plink --bfile data --extract plink.prune.in --make-bed --out data.pruned
尋找最佳k值
如果不知道k值設多少,可以在一系列不同的k值中進行交叉驗證,選擇最佳的k。
使用 --cv=n
參數,Admixture 會把基因型划分成均等大小的 n 份做交叉驗證。不指定 n 時,默認為5。
為了加快計算的速度,還可以通過 -jn
的命令多線程計算,其中 n 為 線程數。
比如,使用默認的 5-fold cross-validation,以 40 個線程並行,從 1 至 15 中尋找最佳的k值:
for K in $(seq 1 15); do admixture --cv data.pruned.bed $K -j40 | tee log${K}.out; done
完成計算后,獲取交叉驗證的結果:
grep -h CV log*.out
最低的 CV errors(cross-validation error)對應的 k 值,是其中最理想的選擇。比如這里最低的是 K=9 時的 0.57622,因而選擇 9 作為分析的 k 值。
利用最佳k值分析
知道最佳 k 值后,就可以直接計算群體成分。以 k=9,使用 20 個線程為例:
admixture data.pruned.bed 9 -j20
計算完成后,得到的 .Q
結尾的文件便是各個個體的群體成分。
如果只是簡單看看,直接用 R 畫個 barplot 就可以:
tbl=read.table("hapmap3.3.Q")
barplot(t(as.matrix(tbl)), col=rainbow(3),xlab="Individual #", ylab="Ancestry", border=NA)
如果要畫更詳細的圖,可以用 R 包 pophelper。