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 的假阳性。
| 校正方法 | 阈值 | 白话解释 |
|---|---|---|
| Bonferroni | p < 5×10⁻⁸ | 最严格:0.05 ÷ 100万个独立检验 ≈ 5×10⁻⁸(GWAS金标准) |
| FDR (BH) | q < 0.05 | 控制假发现率:在所有"显著"结果中,假阳性不超过5% |
| Suggestive | p < 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. 常用工具对比¶
| 工具 | 版本 | 适用场景 | 核心优势 | 引用 |
|---|---|---|---|---|
| PLINK2 | Alpha 7.0 (2025) | 通用 GWAS 质控和关联分析 | 速度极快,支持 VCF/BGEN/PGEN,GLM 回归 | Chang et al. 2015 |
| GCTA | v1.95.1 (2026) | 遗传力估计、fastGWA、COJO | 混合线性模型,SNP-based h²,大样本关联 | Yang et al. 2011 |
| REGENIE | v3.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 < 0 | PLINK / 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 GWAS | 2007 | 发现 TCF7L2、KCNJ11 等强关联位点 |
| 大规模 meta-analysis(DIAGRAM联盟) | 2012-2018 | 累计发现 ~150 个关联位点 |
| 跨族群大样本研究 | 2022(Mahajan et al., Nat Genet) | 纳入 180 万样本(含东亚人群),发现 568 个独立关联信号,涉及 243 个基因座 |
| 多族群精细定位 | 2023-2025 | 进一步缩小因果变异范围,发现更多东亚特异性位点 |
T2D GWAS 的关键发现¶
- TCF7L2(7p21.1):T2D 最强的 GWAS 信号,OR ≈ 1.4,影响胰岛 β 细胞功能
- SLC30A8(锌转运蛋白):与胰岛素分泌相关
- FTO(肥胖基因):通过 BMI 间接影响 T2D 风险
- 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.2 | PCA 和遗传力估计用 |
核心公式¶
# 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 POP | PCA 辅助 |
| 亲缘过滤 | --king-cutoff 0.0884 | --grm-cutoff 0.025 |
11. 延伸资源¶
必读论文¶
- Uffelmann et al. (2021) Genome-wide association studies. Nature Reviews Methods Primers. — GWAS 最佳综述,从入门到进阶
- Mahajan et al. (2022) Multi-ancestry genetic study of type 2 diabetes. Nat Genet. — T2D 最新最大规模 GWAS
- Mbatchou et al. (2021) Computationally efficient whole-genome regression. Nat Genet. — REGENIE 原始论文
- Yang et al. (2011) GCTA: a tool for GWAS complex trait analysis. AJHG. — GCTA 原始论文
- 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 — 遗传力和遗传相关性估计