BioF3 组学数据分析

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

导出日期:2026年6月27日

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 没意义。

坑 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 噪声很大。

下一步

接着深入

横向延伸

参考资源