跳转至

GWAS 与群体遗传学基础

1. 一句话说明

GWAS(全基因组关联研究)就是拿几十万人的基因数据和疾病/性状信息做"大海捞针",找出哪些基因变异和疾病(如2型糖尿病)有关系;群体遗传学则研究这些变异在不同人群中如何分布和演变。


2. 什么是 GWAS

白话解释

假设你想知道"为什么有些人容易得糖尿病"。你收集了 50 万人的 DNA 数据(每人检测几百万个位点),同时记录谁得了糖尿病、谁没得。然后逐个位点地比较:在这个位点上,糖尿病患者和健康人的基因型频率有没有显著差别?如果某个位点在患者中出现 A 碱基的比例明显高于健康人——它可能就和糖尿病有关联。

类比

把基因组想成一条 30 亿字的长文档,GWAS 就像用"查找"功能逐字检查:哪些字在"生病组"的文档里和"健康组"的文档里出现频率不一样。频率差异越大、统计越显著,这个字就越可能和疾病有关。

GWAS 能做什么 / 不能做什么

能做不能做
找到与疾病/性状关联的基因区域直接证明因果关系(关联 ≠ 因果)
估算遗传风险评分(PRS)找到所有致病基因(只能找到常见变异的效应)
发现新的生物学通路解释全部遗传力("missing heritability"问题)

3. 核心概念(每个都白话解释)

3.1 SNP(单核苷酸多态性)

全称:Single Nucleotide Polymorphism

白话:人和人之间 DNA 的差别,最常见的就是某一个位置的碱基不同。比如你是 A,我是 G。这种"一个字母的差异"就叫 SNP。人类基因组约有 400-500 万个 SNP,是 GWAS 检测的基本单元。

面试要点:SNP 通常指群体中频率 > 1% 的变异;频率 < 1% 的叫罕见变异(rare variant)。

3.2 MAF(最小等位基因频率)

全称:Minor Allele Frequency

白话:在一个群体中,某个 SNP 位点上"少数派"碱基出现的频率。比如某位点 90% 的人是 A、10% 是 G,那 MAF = 0.10(G 是少数派)。

GWAS 中的用途:通常过滤掉 MAF < 0.01 或 0.05 的位点——太罕见的变异样本量不够,统计功效很低。

3.3 连锁不平衡(LD)

全称:Linkage Disequilibrium

白话:两个相邻的 SNP "绑在一起遗传"的程度。如果 SNP-A 是 T 的时候,旁边的 SNP-B 几乎总是 C,它们就处于高度 LD。就像你发现某人穿红上衣时总穿白裤子——两件衣服"绑定"了。

为什么重要: - GWAS 找到的信号位点可能不是真正的因果变异,而是和因果变异处于 LD 的"tag SNP" - LD 用 r² 衡量,r² = 1 表示完全连锁,r² = 0 表示完全独立 - 质控时用 LD pruning 去掉冗余 SNP(--indep-pairwise

3.4 Hardy-Weinberg 平衡(HWE)

全称:Hardy-Weinberg Equilibrium

白话:在一个"理想世界"(随机交配、无突变、无选择、无迁移、群体无限大)中,基因型频率可以直接从等位基因频率推算。如果 A 频率 p=0.6,a 频率 q=0.4,那么 AA:Aa:aa 应该是 0.36:0.48:0.16。

GWAS 中的用途:如果某个 SNP 严重偏离 HWE(p < 1e-6),通常意味着基因分型出了问题(技术错误),而不是生物学原因,所以要过滤掉。

公式:p² + 2pq + q² = 1(p 和 q 是两个等位基因的频率)

3.5 群体分层(Population Stratification)

白话:你的研究样本里混了不同祖源的人。比如样本中欧洲裔发病率低、非洲裔发病率高,同时两群人在很多 SNP 上的频率本来就不同——这时 GWAS 会把"人群差异"误认为"疾病关联",产生大量假阳性。

解决方案: - PCA(主成分分析)提取前 10-20 个主成分作为协变量 - GRM(遗传关系矩阵)+ 混合线性模型(MLM) - 基因组膨胀因子(λ)检查:λ 应接近 1.0(< 1.05 可接受)

3.6 Manhattan 图

白话:GWAS 的"成绩单"。X 轴是染色体位置(1-22 号交替用不同颜色),Y 轴是每个 SNP 的 -log10(p-value)。p 值越小,点越高。超过全基因组显著性阈值线(p < 5×10⁻⁸,-log10 = 7.3)的"高塔"就是显著关联的信号——远看像纽约曼哈顿的天际线,因此得名。

3.7 QQ 图(Quantile-Quantile Plot)

白话:用来检查"结果是否可靠"的图。X 轴是"如果没有任何关联,p 值理论上应该长什么样",Y 轴是"实际观察到的 p 值"。如果大部分点沿对角线分布(没有整体偏离),只有尾部翘起(真信号),说明分析质量好。

关键指标: - 对角线紧贴 = 无系统膨胀,质控良好 - 整体上移 = 有群体分层或技术问题(λ > 1.05) - 尾部翘起 = 真实的关联信号


4. GWAS 完整分析流程

原始基因型数据(VCF/BED/BGEN)
  ① 样本级质控(call rate, 性别检查, 杂合度, 亲缘关系)
  ② SNP 级质控(MAF, HWE, call rate, 去重复)
  ③ 群体分层校正(PCA / GRM)
  ④ 关联分析(GLM / 混合线性模型)
  ⑤ 多重检验校正(Bonferroni / FDR / 基因组膨胀因子)
  ⑥ 结果可视化与解读(Manhattan图 / QQ图 / 区域图)

4.1 质控(QC)

# ========== 样本级质控 ==========

# 1. 计算每个样本的缺失率(--mind 0.02 表示去掉缺失率>2%的样本)
plink2 --bfile raw_data \       # 输入PLINK二进制文件(.bed/.bim/.fam)
       --mind 0.02 \            # 去掉缺失率>2%的样本
       --make-bed \             # 输出为PLINK二进制格式
       --out qc_step1           # 输出文件前缀

# 2. 性别检查(X染色体杂合度推断性别,和记录性别对比)
plink2 --bfile qc_step1 \
       --check-sex \            # 推断遗传性别
       --out sex_check          # 输出到 sex_check.sexcheck

# 3. 杂合度检查(过高=样本污染,过低=近亲交配)
plink2 --bfile qc_step1 \
       --het \                  # 计算每个样本的杂合度
       --out het_check          # 输出 het_check.het 文件
# 通常过滤掉偏离均值 ±3SD 的样本

# 4. 亲缘关系检查(去掉重复样本和一级亲属)
plink2 --bfile qc_step1 \
       --make-king-table \      # 计算 KING 亲缘系数
       --king-cutoff 0.0884 \   # 去掉亲缘系数>0.0884的样本对(二级亲属)
       --out kinship             # 输出亲缘关系表

# ========== SNP 级质控 ==========

# 5. 综合 SNP 质控
plink2 --bfile qc_step1 \
       --maf 0.01 \             # 去掉MAF<1%的SNP(太罕见,统计功效低)
       --geno 0.02 \            # 去掉缺失率>2%的SNP
       --hwe 1e-6 \             # 去掉严重偏离HWE的SNP(可能是分型错误)
       --make-bed \
       --out qc_step2

# 6. LD pruning(去掉高度连锁的冗余SNP,用于PCA等)
plink2 --bfile qc_step2 \
       --indep-pairwise 50 5 0.2 \  # 窗口50个SNP,步长5,r²阈值0.2
       --out pruned              # 输出 pruned.prune.in(保留列表)

plink2 --bfile qc_step2 \
       --extract pruned.prune.in \  # 只保留pruning后的独立SNP
       --make-bed \
       --out qc_pruned           # 用于PCA分析

4.2 群体分层校正

# PCA 分析(用pruning后的独立SNP计算主成分)
plink2 --bfile qc_pruned \
       --pca 20 \               # 提取前20个主成分
       --out pca_result          # 输出 pca_result.eigenvec 和 .eigenval

# pca_result.eigenvec 前10列主成分通常作为协变量加入关联分析
# 用R或Python画PCA散点图,检查群体结构

PCA 结果解读: - 如果样本按祖源分成明显的几个簇,说明存在群体分层 - 前 10-20 个 PC 通常能捕获主要的群体结构 - 将 PC1-PC10 作为协变量加入关联分析模型

4.3 关联分析

# ========== PLINK2 GLM(广义线性模型) ==========

# 定量性状关联分析(如BMI、血糖值)
plink2 --bfile qc_step2 \
       --pheno pheno.txt \           # 表型文件(FID IID 表型值)
       --covar pca_result.eigenvec \ # 协变量文件(PCA前10个主成分)
       --covar-col-nums 3-12 \       # 使用第3-12列(PC1-PC10)作为协变量
       --glm hide-covar \            # 线性回归,hide-covar不输出协变量结果
       --out gwas_qt                 # 输出关联结果

# 二分类性状关联分析(如病例/对照)
plink2 --bfile qc_step2 \
       --pheno pheno_cc.txt \        # 表型文件(1=对照,2=病例)
       --covar pca_result.eigenvec \
       --covar-col-nums 3-12 \
       --1 \                         # 表型编码:0=对照,1=病例
       --glm firth-fallback hide-covar \ # 逻辑回归+Firth校正(小样本更准)
       --out gwas_cc                  # 输出关联结果

# ========== REGENIE(两步法,适合大样本如UK Biobank) ==========

# Step 1:全基因组回归拟合(构建预测模型,校正群体结构)
regenie \
  --step 1 \                    # 第一步:全基因组回归
  --bed qc_step2 \              # 输入PLINK格式
  --phenoFile pheno.txt \       # 表型文件
  --covarFile covar.txt \       # 协变量文件
  --bt \                        # 二分类性状(--qt 用于定量性状)
  --bsize 1000 \                # block大小(每次处理1000个SNP)
  --lowmem \                    # 低内存模式
  --out step1_result            # 输出预测结果

# Step 2:逐个SNP关联检验
regenie \
  --step 2 \                    # 第二步:关联检验
  --bed qc_step2 \              # 输入基因型
  --phenoFile pheno.txt \
  --covarFile covar.txt \
  --bt \                        # 二分类性状
  --firth --approx \            # Firth 近似校正(推荐用于二分类)
  --pred step1_result_pred.list \ # 第一步的预测结果
  --bsize 200 \                 # 第二步的 block 大小
  --minMAC 5 \                  # 最小等位基因计数 ≥ 5
  --out step2_result            # 输出最终关联结果

# ========== GCTA fastGWA(混合线性模型,适合大样本) ==========

# 1. 构建稀疏GRM(遗传关系矩阵)
gcta64 --bfile qc_step2 \
       --make-grm --out grm_all    # 构建完整GRM

# 也可用稀疏GRM加速
gcta64 --grm grm_all \
       --make-bK-sparse 0.05 \     # 稀疏化(阈值0.05)
       --out sp_grm                # 稀疏GRM

# 2. 运行 fastGWA 关联分析
gcta64 --bfile qc_step2 \
       --grm-sparse sp_grm \       # 使用稀疏GRM
       --fastGWA-mlm \             # 混合线性模型关联分析
       --pheno pheno.txt \
       --qcovar covar_quant.txt \  # 定量协变量(如年龄、PC1-10)
       --covar covar_cat.txt \     # 分类协变量(如性别)
       --threads 10 \              # 使用10个线程
       --out fastgwa_result        # 输出结果

4.4 多重检验校正

为什么需要:检测了几百万个 SNP,即使完全随机也会有几万个 p < 0.01 的假阳性。

校正方法阈值白话解释
Bonferronip < 5×10⁻⁸最严格:0.05 ÷ 100万个独立检验 ≈ 5×10⁻⁸(GWAS金标准)
FDR (BH)q < 0.05控制假发现率:在所有"显著"结果中,假阳性不超过5%
Suggestivep < 1×10⁻⁵提示性阈值,可能有关联但需更多证据
# PLINK2 多重检验校正
plink2 --adjust-file gwas_cc.PHENO1.glm.logistic.hybrid \  # 输入关联结果
       --adjust-gc \         # 基因组控制校正(genomic control)
       --out adjusted        # 输出校正后的 p 值

4.5 结果可视化与解读

# Manhattan图和QQ图(Python + matplotlib)
import pandas as pd                    # 读取数据
import matplotlib.pyplot as plt        # 绑图
import numpy as np                     # 数学计算

# 读取 PLINK2 关联结果
df = pd.read_csv('gwas_cc.PHENO1.glm.logistic.hybrid',
                 sep='\t',              # Tab 分隔
                 usecols=['#CHROM', 'POS', 'P'])  # 只读需要的列
df.columns = ['CHR', 'POS', 'P']       # 重命名列
df = df.dropna(subset=['P'])            # 去掉缺失 p 值
df['-log10P'] = -np.log10(df['P'])      # 计算 -log10(p)

# --- Manhattan 图 ---
fig, ax = plt.subplots(figsize=(16, 6))
colors = ['#4C72B0', '#DD8452']         # 交替颜色(奇数/偶数染色体)
x_offset = 0                            # X轴累加偏移

for chrom in range(1, 23):              # 逐染色体画图
    subset = df[df['CHR'] == chrom]
    color = colors[chrom % 2]
    ax.scatter(subset['POS'] + x_offset,     # X = 位置 + 偏移
               subset['-log10P'],            # Y = -log10(p)
               c=color, s=2, alpha=0.6)
    x_offset += subset['POS'].max() if len(subset) > 0 else 0

ax.axhline(y=-np.log10(5e-8), color='red',    # 全基因组显著线
           linestyle='--', label='p=5e-8')
ax.axhline(y=-np.log10(1e-5), color='blue',   # 提示性显著线
           linestyle=':', label='p=1e-5')
ax.set_xlabel('Chromosome')
ax.set_ylabel('-log10(P)')
ax.set_title('Manhattan Plot')
ax.legend()
plt.tight_layout()
plt.savefig('manhattan.png', dpi=300)   # 保存高分辨率图片
plt.show()

# --- QQ 图 ---
observed = np.sort(df['-log10P'])[::-1]           # 实际 p 值(降序)
expected = -np.log10(np.arange(1, len(observed)+1)
                     / (len(observed)+1))         # 期望 p 值

fig, ax = plt.subplots(figsize=(6, 6))
ax.scatter(expected, observed, s=2, alpha=0.5)     # 散点图
ax.plot([0, max(expected)], [0, max(expected)],     # 对角线
        color='red', linestyle='--')
ax.set_xlabel('Expected -log10(P)')
ax.set_ylabel('Observed -log10(P)')
ax.set_title('QQ Plot')

# 计算 genomic inflation factor λ
chisq = df['P'].apply(lambda p: (-2) * np.log(p) if p > 0 else np.nan)
# 更标准的方式:用 scipy
from scipy.stats import chi2
lambda_gc = np.median(chi2.ppf(1 - df['P'].dropna(), 1)) / chi2.ppf(0.5, 1)
ax.text(0.05, 0.95, f'λ = {lambda_gc:.3f}',
        transform=ax.transAxes, fontsize=12)
plt.tight_layout()
plt.savefig('qq_plot.png', dpi=300)
plt.show()

5. 常用工具对比

工具版本适用场景核心优势引用
PLINK2Alpha 7.0 (2025)通用 GWAS 质控和关联分析速度极快,支持 VCF/BGEN/PGEN,GLM 回归Chang et al. 2015
GCTAv1.95.1 (2026)遗传力估计、fastGWA、COJO混合线性模型,SNP-based h²,大样本关联Yang et al. 2011
REGENIEv3.x大规模生物样本库(UK Biobank)两步法,内存效率极高,支持 Firth 校正Mbatchou et al. 2021

何时用哪个?

  • < 1 万样本:PLINK2 --glm 足够
  • 1-10 万样本:GCTA fastGWA 或 PLINK2
  • > 10 万样本(UK Biobank 等):REGENIE(内存友好、速度快)
  • 遗传力估计:GCTA GREML
  • 条件/联合分析:GCTA COJO(只需 summary statistics)

6. 群体遗传学基础

6.1 Fst(群体分化指数)

全称:Fixation Index

白话:衡量两个人群在基因上"有多不同"。Fst = 0 表示两群人基因完全混在一起,看不出区别;Fst = 1 表示两群人基因完全不同。

数值参考: - 同一大洲内不同族群:Fst ≈ 0.01-0.05 - 不同大洲族群间:Fst ≈ 0.05-0.15 - 人类 vs 黑猩猩:Fst ≈ 0.6-0.8

# PLINK2 计算 Fst
# --pheno 文件中群体标签作为表型
plink2 --bfile qc_step2 \
       --fst POP \             # 按 POP 列计算群体间 Fst
       --pheno pop_labels.txt \  # 群体标签文件
       --out fst_result         # 输出 Fst 结果

# GCTA 计算 Fst
gcta64 --bfile qc_step2 \
       --pca 20 \              # 先做PCA
       --out pca_fst            # PCA结果可辅助Fst计算

6.2 PCA 与群体结构

白话:PCA 是一种"降维"方法。把几百万个 SNP 的信息压缩成几个数字(主成分),还能保留最关键的差异信息。画出前两个主成分的散点图,不同祖源的人会自动聚在一起。

经典案例:Novembre et al. 2008 在 Nature 上发表的欧洲人 PCA 图——只用基因数据做 PCA,画出来的散点图和欧洲地图惊人地吻合。

# PLINK2 PCA(推荐使用 LD pruning 后的 SNP)
plink2 --bfile qc_pruned \
       --pca 20 \              # 提取前20个主成分
       --out population_pca    # 输出 .eigenvec(主成分坐标)和 .eigenval(特征值)

6.3 遗传漂变(Genetic Drift)

白话:在小群体中,基因频率会因为"随机运气"而发生变化——就像班级里只有 10 个人投票,结果可能和全校投票很不一样。群体越小,漂变越剧烈。

关键影响: - 小群体中,一些本来无关紧要的变异可能变得很常见(固定),一些本来常见的可能消失 - 遗传漂变是中性进化的核心驱动力 - 瓶颈效应(如战争、疾病导致群体骤减)会加剧漂变

6.4 选择压力(Natural Selection)

白话:如果某个基因变异让个体更容易存活或繁殖,这个变异就会在群体中越来越多(正选择);反之则越来越少(负/纯化选择)。

检测选择信号的方法

方法原理工具
iHS(integrated Haplotype Score)正选择的等位基因周围 LD 更长selscan
Tajima's D中性理论下 D ≈ 0,正选择使 D < 0PLINK / VCFtools
Fst outlier群体间 Fst 异常高的区域可能受选择BayeScan / OutFLANK
XP-EHH跨群体的单倍型纯合度检验selscan

6.5 有效群体大小(Ne)

全称:Effective Population Size

白话:一个"理想化"群体的大小,和真实群体的遗传漂变速度一样。真实群体可能有 10 万人,但因为不是随机交配(亲缘结构、性比不均等),遗传上表现得像只有 1 万人——这个 1 万就是 Ne。

为什么重要: - Ne 越小,遗传漂变越强,多样性损失越快 - 人类的 Ne 约 10,000-15,000(远小于实际人口 80 亿) - 影响 LD 的衰减速度:Ne 小 → LD 衰减慢 → GWAS 需要的标记密度低


7. 和 T2D 项目的关联

T2D GWAS 研究现状(截至 2025 年)

2型糖尿病(T2D)是 GWAS 研究最充分的复杂疾病之一:

里程碑时间发现
第一批 T2D GWAS2007发现 TCF7L2、KCNJ11 等强关联位点
大规模 meta-analysis(DIAGRAM联盟)2012-2018累计发现 ~150 个关联位点
跨族群大样本研究2022(Mahajan et al., Nat Genet)纳入 180 万样本(含东亚人群),发现 568 个独立关联信号,涉及 243 个基因座
多族群精细定位2023-2025进一步缩小因果变异范围,发现更多东亚特异性位点

T2D GWAS 的关键发现

  1. TCF7L2(7p21.1):T2D 最强的 GWAS 信号,OR ≈ 1.4,影响胰岛 β 细胞功能
  2. SLC30A8(锌转运蛋白):与胰岛素分泌相关
  3. FTO(肥胖基因):通过 BMI 间接影响 T2D 风险
  4. CDKAL1, HHEX, IGF2BP2:早期发现的关联位点,与胰岛功能有关

与研究项目的联系

该项目用肠道菌群 + 随机森林预测 T2D 风险,和 GWAS 的关系: - GWAS 从宿主基因组角度找风险因素,该项目从肠道微生物组角度找 - 两者是互补关系:GWAS 发现的基因可能通过影响肠道菌群组成间接影响 T2D - 面试时可以说:"GWAS 已发现数百个 T2D 关联位点,但这些只能解释约 20% 的遗传力。该项目从宏基因组角度切入,研究环境因素(肠道菌群)对 T2D 的贡献,与 GWAS 互补。"


8. 面试怎么答(5 道高频题)

Q1:什么是 GWAS?简述基本原理

答题模板

GWAS 是全基因组关联研究,核心思路是在大规模人群中,逐一检测几百万个 SNP 位点与目标性状(或疾病)之间的统计关联。具体来说:收集病例组和对照组的基因型数据,对每个 SNP 做统计检验(如逻辑回归),比较两组的等位基因频率差异,p 值低于全基因组显著性阈值 5×10⁻⁸ 的位点被认为显著关联。关键的质控步骤包括样本和 SNP 级过滤、群体分层校正(PCA)和多重检验校正。

Q2:GWAS 中如何处理群体分层?

答题模板

群体分层是 GWAS 假阳性的主要来源之一。处理方法有三种:(1)PCA法——用 LD pruning 后的独立 SNP 计算主成分,将前 10-20 个 PC 作为协变量纳入回归模型;(2)混合线性模型——如 GCTA fastGWA 或 REGENIE,用 GRM 直接建模个体间的遗传相关性;(3)基因组膨胀因子 λ——用于事后检查,λ 应接近 1.0。目前大型 GWAS 普遍采用 REGENIE 等混合模型方法,能同时校正群体分层和亲缘关系。

Q3:解释一下连锁不平衡(LD)及其在 GWAS 中的意义

答题模板

连锁不平衡是指两个 SNP 的等位基因倾向于"绑在一起"遗传的现象,用 r² 衡量。LD 在 GWAS 中有三个重要意义:(1)GWAS 能"以点带面"——芯片不需要检测所有变异,只需检测 tag SNP 就能代表整个区域;(2)关联信号的解读——GWAS 找到的信号位点可能不是因果变异,而是和因果变异处于高 LD 的标签;(3)质控——LD pruning 去掉冗余 SNP,让 PCA 和遗传力估计更准确。LD 的衰减速度和有效群体大小 Ne 有关:Ne 越大,LD 衰减越快。

Q4:GWAS 发现的位点如何进一步确认因果关系?

答题模板

GWAS 只能发现关联,不能直接证明因果。后续验证包括:(1)精细定位(fine-mapping)——结合 LD 结构,缩小候选因果变异范围;(2)eQTL 分析——检查 GWAS 位点是否影响附近基因的表达;(3)功能实验——CRISPR 编辑、荧光素酶报告基因验证变异的功能效应;(4)孟德尔随机化——利用遗传变异作为工具变量推断因果方向;(5)多族群复制——在不同人群中验证关联的一致性。

Q5:该 T2D 项目和 GWAS 方法有什么联系?

答题模板

GWAS 从宿主基因组角度寻找 T2D 风险因素,已发现了 500 多个关联位点,但这些只能解释约 18-20% 的遗传力。该项目从宏基因组角度切入,研究肠道菌群组成与 T2D 的关系。两者是互补的:有研究表明 GWAS 发现的部分风险基因(如 FTO、TCF7L2)可能通过影响代谢环境间接改变肠道菌群组成。我用随机森林模型识别关键菌属特征,和 GWAS 的思路相似——都是从大量特征中筛选与疾病最相关的因素,只是一个在基因组维度,一个在微生物组维度。


9. 常见报错与解决

错误信息原因解决方法
Error: No variants remaining after main filters质控太严格,所有 SNP 被过滤放宽 --maf 或 --hwe 阈值
Warning: X chromosome data present性染色体数据需特殊处理添加 --split-par 指定 PAR 区域
Phenotype data is not loaded表型文件格式错误或 ID 不匹配检查 FID/IID 是否和 .fam 一致
V is not positive definite(GCTA)样本量太小或方差组分为 0增大样本量或用 --reml-bendV
REGENIE step 2 requires predictions缺少 Step 1 的预测文件先运行 Step 1,用 --pred 指定输出
λ (genomic inflation) > 1.1群体分层未充分校正增加 PCA 主成分数或使用混合模型

10. 速查表

GWAS 关键阈值

参数推荐值说明
全基因组显著性p < 5×10⁻⁸Bonferroni 校正后的金标准
提示性显著p < 1×10⁻⁵可能有关联,需验证
MAF 过滤> 0.01 或 > 0.05去掉罕见变异
SNP call rate> 98%去掉缺失率高的 SNP
样本 call rate> 98%去掉缺失率高的样本
HWE 过滤(对照组)p > 1×10⁻⁶偏离过大通常是分型错误
KING 亲缘系数阈值< 0.0884去掉二级亲属及以上
基因组膨胀因子 λ< 1.05说明群体分层已校正
LD pruning r²< 0.2PCA 和遗传力估计用

核心公式

# Hardy-Weinberg 平衡
p² + 2pq + q² = 1          # p, q 是两个等位基因的频率

# 基因组膨胀因子
λ = median(χ²_observed) / 0.4549  # 0.4549 = χ²(df=1) 的中位数

# Fst(Weir & Cockerham 估计)
Fst = (HT - HS) / HT       # HT=总杂合度,HS=亚群平均杂合度

# 遗传力(广义)
H² = V_G / V_P              # 遗传方差 / 表型方差

# SNP遗传力
h²_SNP = V_SNP / V_P        # SNP解释的方差 / 表型方差

工具命令速查

任务PLINK2 命令GCTA 命令
质控过滤--maf 0.01 --geno 0.02 --hwe 1e-6 --mind 0.02--maf 0.01
LD pruning--indep-pairwise 50 5 0.2
PCA--pca 20--pca 20
GRM--make-king-table--make-grm
关联分析--glm hide-covar--fastGWA-mlm
Fst--fst POPPCA 辅助
亲缘过滤--king-cutoff 0.0884--grm-cutoff 0.025

11. 延伸资源

必读论文

  1. Uffelmann et al. (2021) Genome-wide association studies. Nature Reviews Methods Primers. — GWAS 最佳综述,从入门到进阶
  2. Mahajan et al. (2022) Multi-ancestry genetic study of type 2 diabetes. Nat Genet. — T2D 最新最大规模 GWAS
  3. Mbatchou et al. (2021) Computationally efficient whole-genome regression. Nat Genet. — REGENIE 原始论文
  4. Yang et al. (2011) GCTA: a tool for GWAS complex trait analysis. AJHG. — GCTA 原始论文
  5. Chang et al. (2015) Second-generation PLINK. GigaScience. — PLINK 1.9/2.0 论文

在线资源

  • PLINK2 官方文档:https://www.cog-genomics.org/plink/2.0/
  • GCTA 官方文档:https://yanglab.westlake.edu.cn/software/gcta/
  • REGENIE 官方文档:https://rgcgithub.github.io/regenie/
  • GWAS Catalog:https://www.ebi.ac.uk/gwas/ — 收录已发表的所有 GWAS 结果
  • DIAGRAM T2D 数据:http://diagram-consortium.org/ — T2D GWAS 汇总统计数据
  • LD Score Regression (LDSC):https://github.com/bulik/ldsc — 遗传力和遗传相关性估计

推荐学习路径

1. 先理解核心概念(SNP/MAF/LD/HWE/群体分层)
2. 用 PLINK2 跑一遍完整的模拟数据质控流程
3. 学会画 Manhattan 图和 QQ 图
4. 了解混合线性模型的原理(GCTA/REGENIE)
5. 阅读 T2D GWAS 的代表性论文
6. 将 GWAS 思路和该宏基因组项目做对比