BioF3 组学数据分析

07 GWAS 入门

导出日期:2026年6月27日

07 GWAS 入门

全基因组关联分析(GWAS)找的是"哪些基因组位点和某个表型(疾病、身高、药物响应)有统计学关联"。

基本流程

基因型数据(PLINK 格式)+ 表型文件
  → QC(MAF、HWE、缺失率、亲缘关系)
  → 关联检验(线性/逻辑回归,校正 PC)
  → Manhattan plot + QQ plot
  → 显著位点注释
# 二分类表型(case/control)
plink2 --bfile cohort \
  --pheno phenotype.txt \
  --covar covariates.txt \
  --glm \
  --out gwas_results

# 输出 gwas_results.PHENO1.glm.logistic.hybrid

Manhattan plot

library(qqman)

results <- read.table("gwas_results.PHENO1.glm.logistic.hybrid",
                      header = TRUE)
manhattan(results, chr = "CHROM", bp = "POS", p = "P", snp = "ID",
          suggestiveline = -log10(1e-5), genomewideline = -log10(5e-8))

QQ plot

QQ plot 检查 p 值的整体膨胀(genomic inflation factor λ)。λ > 1.1 说明有群体分层或其他混杂没控制好。

qq(results$P)

常见坑

补充几条常见误判:

坑:样本量不足直接跑 GWAS

GWAS 需要大样本量(至少几千,理想几万)才能稳定检测到 OR ~1.1 的弱效应。< 1000 样本跑 GWAS 几乎不可能找到 5e-8 显著位点,先评估 power 再决定要不要做。

坑:不做 HWE 过滤

显著偏离 Hardy-Weinberg 平衡的位点通常是基因型分型错误。case/control 设计中只在 control 样本里检查 HWE(case 因为关联本身可能偏离 HWE)。

坑:QQ plot 严重 inflation 直接发表

λ > 1.05 通常说明群体分层没控制好。多加几个 PC 做协变量,重新跑直到 λ 回归 1.0 附近。

坑:找到一个显著 SNP 就当成 causal variant

一个显著信号可能对应一个 LD block 里的几十个相关 SNP,**真正的 causal 变异需要 fine-mapping(FINEMAP / SUSIE)**或功能验证(eQTL、CRISPR)。

坑:忽略 imputation 质量

INFO score < 0.3 的 imputed 变异不可信。imputation 后必须 --info 0.3 过滤,不然假阳性堆积。

下一步

接着深入

横向延伸

参考资源