06.PCAdapt
原理
PCAdapt 的核心思想:先用 PCA 描述整体种群结构,再找那些偏离这个整体结构的 SNP。
偏离整体 PCA 结构的 SNP → 可能受到局部选择 → 候选适应性位点
与 GEA 方法(LFMM/RDA)的区别:
- PCAdapt 完全不需要环境变量,是纯粹基于基因组数据的异常值检测
- GEA 方法检测"与特定环境相关"的位点;PCAdapt 检测"偏离整体种群结构"的位点
- 两者互补,GEA 候选位点中同时被 PCAdapt 检出的可信度更高
输入数据
只需要一个文件:个体 × SNP 基因型矩阵(0/1/2 编码)
支持格式:
.bed/.bim/.fam(PLINK 格式,最常用).vcf.pcadapt纯文本格式
⚠️ 品种级别分析的注意事项:PCAdapt 需要个体级别基因型,不能用品种等位基因频率矩阵。与 LFMM2/RDA 用品种频率不同,跑 PCAdapt 需要切换回原始个体基因型数据。
具体操作
完整 R 代码
library(pcadapt)
# 读入基因型数据(PLINK bed格式)
geno <- read.pcadapt("your_data.bed", type = "bed")
# Step 1:确定最优K值(看碎石图)
x_test <- pcadapt(geno, K = 20)
plot(x_test, option = "screeplot")
# 找拐点,比如 K = 4
# Step 2:用最优K正式运行
x <- pcadapt(geno, K = 4)
summary(x)
# Step 3:Manhattan 图(查看显著位点分布)
plot(x, option = "manhattan")
# Step 4:QQ 图(检查统计膨胀)
plot(x, option = "qqplot")
# Step 5:提取显著 SNP(q 值校正)
library(qvalue)
qval <- qvalue(x$pvalues)$qvalues
alpha <- 0.05
outliers <- which(qval < alpha)
length(outliers) # 显著 SNP 数量
K 值选择
- 看碎石图(screeplot)的拐点
- 通常与 ADMIXTURE/PCA 的最优 K 一致
- K 不是种群数量,是 PCA 保留的轴数,代表数据中主要遗传分化的维度数
与景观基因组学流程的整合
PCAdapt 作为不依赖环境变量的独立补充验证:
LFMM2 ──┐
RDA ──┼──→ 三方交叉 → 高置信度核心位点
BayPass ──┘
PCAdapt(可选补充)→ 检查:GEA 候选位点中有多少也被 PCAdapt 检出?
重叠高 → 适应性信号更强,可信度更高
实际案例(Su et al. 2026,山荆子):
- PCAdapt 鉴定出 7,628 个异常 SNP 窗口 + 746 个 SV 窗口,涉及 3,143 个候选基因
- GO 富集:外部刺激响应调控、磷脂代谢、氨基酸生物合成
- 文章将 PCAdapt 结果与 LFMM+RDA 的 GEA 结果互相印证