06 群体遗传:PCA / 祖源 / LD
群体遗传分析用大量个体的基因型数据回答"这些人从哪来、彼此什么关系、哪些位点受到选择"。
常用工具
| 工具 | 用途 |
|---|---|
| PLINK 2 | 数据管理、QC、PCA、关联分析 |
| ADMIXTURE | 祖源成分估计(K 群体) |
| vcftools | VCF 统计(Fst、pi、Tajima's D) |
| EIGENSOFT | PCA + 群体结构 |
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 + ADMIXTURE | PC1/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 没意义。