跳到主要内容

06 群体遗传:PCA / 祖源 / LD

群体遗传分析用大量个体的基因型数据回答"这些人从哪来、彼此什么关系、哪些位点受到选择"。

常用工具

工具用途
PLINK 2数据管理、QC、PCA、关联分析
ADMIXTURE祖源成分估计(K 群体)
vcftoolsVCF 统计(Fst、pi、Tajima's D)
EIGENSOFTPCA + 群体结构

PCA 分析

# VCF -> PLINK 格式
plink2 --vcf cohort.vcf.gz --make-bed --out cohort

# LD pruning(去掉高 LD 的 SNP,避免 PCA 被局部 LD 主导)
plink2 --bfile cohort --indep-pairwise 50 5 0.2 --out pruned
plink2 --bfile cohort --extract pruned.prune.in --make-bed --out cohort_pruned

# PCA
plink2 --bfile cohort_pruned --pca 10 --out cohort_pca

输出 cohort_pca.eigenvec 就是每个样本的 PC1~PC10 坐标,用 R 画散点图。

ADMIXTURE 祖源分析

# 跑 K=2 到 K=6
for K in 2 3 4 5 6; do
admixture --cv cohort_pruned.bed $K | tee log_K${K}.out
done

# 选最优 K:看 CV error 最低的那个
grep "CV error" log_K*.out

LD 衰减

# 计算 LD(r²)随距离的衰减
plink2 --bfile cohort --ld-window-r2 0 --ld-window 1000 --ld-window-kb 500 \
--out ld_decay

LD 衰减速度反映群体的有效群体大小和重组率。

群体遗传分析的核心问题

在跑工具之前先想清楚要回答什么。这类项目大致是三类问题:

问题关键分析解读重点
这个群体有几个亚群?PCA + ADMIXTUREPC1/PC2 分布 + K 选择
我的样本祖源混杂吗?ADMIXTURE每个个体的成分比例
哪些区域受到自然选择?Fst / iHS / nSL极端值区域
群体何时分化?PSMC / SMC++时间序列推断
人口规模怎么变化?PSMC / Stairway Plot历史 Ne 曲线

新人最常见错误:跑了 PCA 看到分群就完事,没思考"为什么这样分群"。PCA 只给坐标,不给解释。

常见坑

坑 1:PCA 不做 LD pruning

不 prune 时 PCA 会被 HLA、着丝粒等高 LD 区域主导,PC1 变成 "HLA 单体型聚类" 而不是真实群体结构--indep-pairwise 50 5 0.2 是必须步骤。

坑 2:ADMIXTURE 跑一个 K 就报告

K 选择不是凭感觉。至少跑 K=2 到 K=10,看 CV error 最低的那个。CV error 平的话说明数据本身就没明显结构,硬选 K 没意义。

坑 3:用相关样本做群体遗传

第一代亲属的样本会扭曲所有群体结构估计。先用 PLINK --king-cutoff 0.0884 删掉 2 度以内亲属,再做下游分析。

坑 4:全样本一起 PCA 后才发现混杂

不同祖源的样本应该分别先做 QC,再一起跑分析。混在一起做 QC 时 MAF 阈值会被群体结构干扰。

坑 5:Fst 计算用了 SNV 全集

Fst 应该排除单态位点(MAF = 0)和高缺失率位点。vcftools --maf 0.05 --max-missing 0.95 是标准过滤。不过滤直接算 Fst 噪声很大。

下一步

接着深入

横向延伸

参考资源

AI 组学实践

让 AI 带我实战这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步带你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。