Microbiome-GWAS关联¶
一句话概述¶
通过微生物组全基因组关联分析(mbQTL/MWAS/MiBioGen),系统性地鉴定宿主遗传变异与肠道微生物组成之间的关联,揭示基因-微生物互作的遗传基础。
核心知识点总览¶
| 知识点 | 关键内容 | 重要程度 |
|---|---|---|
| mbQTL概念 | 微生物组数量性状位点定义与设计 | ⭐⭐⭐⭐⭐ |
| 表型定义 | 微生物丰度/多样性/PCoA坐标作为表型 | ⭐⭐⭐⭐⭐ |
| 关联检验 | 线性模型/混合模型/复合检验 | ⭐⭐⭐⭐⭐ |
| MiBioGen联盟 | 大规模微生物组GWAS荟萃分析 | ⭐⭐⭐⭐ |
| 多重检验校正 | Bonferroni/FDR对多表型校正 | ⭐⭐⭐⭐ |
| 协变量处理 | 饮食/药物/BMI等环境混杂 | ⭐⭐⭐⭐ |
| 孟德尔随机化 | MR推断因果方向 | ⭐⭐⭐ |
| 功能验证 | 关联SNP的功能解释 | ⭐⭐⭐ |
各步骤详解¶
第一步:理解Microbiome-GWAS的研究设计¶
白话解释: 传统GWAS找的是"基因与疾病"的关系,Microbiome-GWAS则找"基因与微生物"的关系。核心问题是:你的基因(DNA变异)是否决定了你肠道里住着哪些细菌?比如,乳糖酶基因(LCT)的变异会影响你能否消化乳糖,进而影响肠道中乳酸菌的丰度。
技术细节: Microbiome-GWAS(也称mbQTL或MWAS)面临的特殊挑战: 1. 微生物丰度数据是组成性的(compositional),各物种比例之和为1 2. 零膨胀严重(很多物种在很多样本中不存在) 3. 效应量小(单个SNP通常只解释<1%的微生物丰度变异) 4. 环境因素(饮食、药物)的影响远大于遗传因素 5. 多重表型(数百个微生物特征)导致严重的多重检验负担
# 研究设计概览
# 样本量要求:一般需要 > 1000人(最好 > 5000)
# 数据需求:
# 1. 宿主基因组数据(GWAS芯片或WGS,imputation后)
# 2. 微生物组数据(16S rRNA或宏基因组shotgun)
# 3. 协变量信息(年龄、性别、BMI、饮食、用药等)
# 已知的强关联位点示例:
# - LCT (chr2): 影响Bifidobacterium丰度
# - FUT2 (chr19): 影响Ruminococcus等菌属
# - ABO (chr9): 影响多个菌属
# - VDR (chr12): 影响微生物多样性
第二步:微生物组表型数据准备¶
白话解释: 在做GWAS之前,需要把微生物组数据转换成适合关联分析的"表型"。这包括:单个菌的丰度、多样性指数、菌群整体结构(PCoA坐标)等。由于微生物丰度数据分布很不正常(大量零值、右偏),需要做适当的变换。
技术细节: 常用的微生物表型定义: - 单菌丰度:各分类单元(属/种/OTU)的相对丰度 - Alpha多样性:Shannon/Simpson指数 - Beta多样性坐标:PCoA前几个坐标轴 - 功能通路丰度:MetaCyc/KEGG通路的丰度 - 菌群比值:如Firmicutes/Bacteroidetes比值
# === 微生物表型准备 ===
library(phyloseq)
library(compositions)
# 读取微生物组数据
ps <- readRDS("phyloseq_object.rds")
# 1. 相对丰度(属水平)
ps_genus <- tax_glom(ps, taxrank = "Genus")
genus_ra <- transform_sample_counts(ps_genus, function(x) x/sum(x))
genus_matrix <- as.data.frame(otu_table(genus_ra))
# 2. CLR变换(处理组成性)
genus_clr <- as.data.frame(clr(t(genus_matrix) + 0.5)) # 加pseudocount避免log(0)
# 3. 过滤低流行度物种(保留在>10%样本中存在的属)
prevalence <- colMeans(genus_matrix > 0)
genus_filtered <- genus_clr[, prevalence > 0.10]
# 4. 逆正态变换(Inverse Normal Transformation)
# 将每个微生物丰度转换为正态分布
int_transform <- function(x) {
qnorm((rank(x, na.last = "keep") - 0.5) / sum(!is.na(x)))
}
genus_int <- as.data.frame(apply(genus_filtered, 2, int_transform))
# 5. Alpha多样性作为表型
alpha_div <- estimate_richness(ps, measures = c("Shannon", "Simpson", "Observed"))
alpha_int <- as.data.frame(apply(alpha_div, 2, int_transform))
# 6. Beta多样性PCoA坐标
bray_dist <- distance(ps_genus, method = "bray")
pcoa_res <- ordinate(ps_genus, method = "PCoA", distance = bray_dist)
pcoa_axes <- as.data.frame(pcoa_res$vectors[, 1:10]) # 前10个PCoA轴
# 7. 合并所有表型
phenotypes <- cbind(genus_int, alpha_int, pcoa_axes)
# 保存为PLINK格式
write.table(phenotypes, "microbiome_phenotypes.txt",
sep = "\t", quote = FALSE, row.names = TRUE)
第三步:遗传数据准备与质控¶
白话解释: GWAS需要高质量的基因分型数据。通常使用SNP芯片数据,经过严格质控(去除低质量SNP、低质量样本)后,通过imputation填补芯片未覆盖的位点,最终得到数百万SNP用于关联分析。
技术细节:
# === GWAS数据质控(PLINK2)===
# 基本QC
plink2 --bfile raw_genotypes \
--mind 0.05 \
--geno 0.02 \
--maf 0.01 \
--hwe 1e-6 \
--make-bed --out qc_step1
# 去除亲缘关系过近的个体
plink2 --bfile qc_step1 \
--king-cutoff 0.0884 \
--make-bed --out qc_step2
# PCA计算(用于人群分层校正)
plink2 --bfile qc_step2 \
--pca 20 \
--out pca_results
# Imputation前准备(phasing + imputation)
# 使用Michigan Imputation Server或TOPMed Server
# 或本地使用 SHAPEIT5 + IMPUTE5/Minimac4
# Imputation后QC
plink2 --pfile imputed_data \
--maf 0.01 \
--mac 20 \
--geno 0.05 \
--hwe 1e-6 \
--make-pgen --out imputed_qc
第四步:关联分析执行¶
白话解释: 关联分析的核心是:对每个SNP,检验它的不同基因型是否与某个微生物的丰度存在统计学上的关联。由于要检验数百万SNP × 数百个微生物的组合,需要高效的工具和严格的多重检验校正。
技术细节: 常用关联检验方法: - 线性回归:最简单,适合大样本正态表型 - 线性混合模型(LMM):校正人群分层和cryptic relatedness - 两部分模型(hurdle model):先分析是否存在(二元),再分析存在时的丰度 - MaAsLin2:微生物组专用的多变量关联模型
# === PLINK2 线性关联分析 ===
# 准备协变量文件(PCA + 环境因素)
# covar.txt: FID IID PC1 PC2 ... PC10 age sex BMI
# 对单个微生物表型运行GWAS
plink2 --pfile imputed_qc \
--pheno microbiome_phenotypes.txt \
--pheno-name Bifidobacterium \
--covar covariates.txt \
--covar-name PC1-PC10,age,sex,BMI \
--glm hide-covar \
--threads 16 \
--out gwas_Bifidobacterium
# 批量运行所有微生物表型
for PHENO in $(head -1 microbiome_phenotypes.txt | tr '\t' '\n' | tail -n+2); do
plink2 --pfile imputed_qc \
--pheno microbiome_phenotypes.txt \
--pheno-name ${PHENO} \
--covar covariates.txt \
--covar-name PC1-PC10,age,sex,BMI \
--glm hide-covar \
--threads 16 \
--out gwas_${PHENO}
done
# === 使用BOLT-LMM(混合线性模型)===
# BOLT-LMM比普通线性回归更好地控制人群分层
# 命令行
# bolt --bfile=qc_data --phenoFile=pheno.txt --phenoCol=Bifidobacterium \
# --covarFile=covar.txt --qCovarCol=PC{1:10} --qCovarCol=age --qCovarCol=BMI \
# --covarCol=sex --lmmForceNonInf --LDscoresFile=LDSCORE.1000G \
# --statsFile=bolt_results.txt --numThreads=16
# === 使用MaAsLin2/3 进行微生物组关联(非GWAS,用于验证)===
# MaAsLin3(2025年发布)相比MaAsLin2的改进:
# - 同时检测丰度(abundance)和流行度(prevalence)关联
# - 可校正组成性(compositionality)——通过定量PCR或spike-in或计算方法
# - 在IBD等数据集中,77%的关联来自流行度而非丰度
library(Maaslin2) # 或 library(MaAsLin3) 使用新版
fit_data <- Maaslin2(
input_data = genus_matrix,
input_metadata = metadata, # 包含遗传PRS或候选SNP基因型
output = "maaslin2_output",
fixed_effects = c("PRS_score", "age", "sex", "BMI"),
normalization = "CLR",
transform = "NONE",
analysis_method = "LM"
)
第五步:结果整理与多重检验校正¶
白话解释: 由于我们同时检验了数百万SNP与数百个微生物表型的组合,需要特别严格的多重检验校正。传统的全基因组显著性阈值(5×10⁻⁸)可能需要进一步除以表型数量。
技术细节:
# === 结果整理与校正 ===
# 读取所有表型的GWAS结果
library(data.table)
library(qqman)
# 全基因组显著性阈值
# 方法1: Bonferroni for multiple phenotypes
n_phenotypes <- 200 # 假设200个微生物表型
bonf_threshold <- 5e-8 / n_phenotypes # ~2.5e-10
# 方法2: 有效独立表型数(考虑表型间相关性)
# 使用eigenvalue分解估计有效检验数
pheno_cor <- cor(phenotypes, use = "pairwise.complete")
eigen_vals <- eigen(pheno_cor)$values
n_effective <- sum(eigen_vals > 1) # 或其他阈值
adjusted_threshold <- 5e-8 / n_effective
# 读取和合并结果
results_list <- list()
for (pheno in phenotype_names) {
res <- fread(paste0("gwas_", pheno, ".Bifidobacterium.glm.linear"))
res$phenotype <- pheno
results_list[[pheno]] <- res[res$P < 1e-5, ] # 只保留suggestive
}
all_results <- rbindlist(results_list)
# Manhattan plot
manhattan(all_results[all_results$phenotype == "Bifidobacterium", ],
chr = "CHROM", bp = "POS", snp = "ID", p = "P",
suggestiveline = -log10(1e-5),
genomewideline = -log10(5e-8))
# QQ plot
qq(all_results[all_results$phenotype == "Bifidobacterium", ]$P)
第六步:MiBioGen风格的荟萃分析¶
白话解释: 单个队列的样本量有限,检测力不足。MiBioGen联盟的做法是在多个队列中分别做GWAS,然后用荟萃分析(meta-analysis)合并结果,大大增加统计效力。这种方法还能评估结果的跨队列重复性。
技术细节:
# === METAL 荟萃分析 ===
# 准备METAL脚本
cat > metal_script.txt << 'EOF'
SCHEME STDERR
AVERAGEFREQ ON
MINMAXFREQ ON
# Cohort 1
MARKER ID
ALLELE A1 A2
FREQ A1_FREQ
EFFECT BETA
STDERR SE
PVALUE P
PROCESS cohort1_gwas.txt
# Cohort 2
MARKER ID
ALLELE A1 A2
FREQ A1_FREQ
EFFECT BETA
STDERR SE
PVALUE P
PROCESS cohort2_gwas.txt
# Cohort 3
PROCESS cohort3_gwas.txt
OUTFILE meta_Bifidobacterium_ .txt
ANALYZE HETEROGENEITY
QUIT
EOF
metal metal_script.txt
# === R中meta分析 ===
library(meta)
# 对显著位点做森林图
snp_data <- data.frame(
cohort = c("Dutch", "German", "UK", "Finnish"),
beta = c(0.15, 0.12, 0.18, 0.10),
se = c(0.03, 0.04, 0.03, 0.05)
)
meta_result <- metagen(TE = snp_data$beta, seTE = snp_data$se,
studlab = snp_data$cohort,
sm = "MD", random = TRUE)
forest(meta_result, main = "rs4988235 - Bifidobacterium association")
第七步:孟德尔随机化与功能解释¶
白话解释: 找到基因-微生物关联后,一个关键问题是因果方向:是基因影响微生物,还是仅仅是统计关联?孟德尔随机化(MR)可以利用遗传变异作为工具变量,推断因果方向。
技术细节:
# === 双向孟德尔随机化 ===
library(TwoSampleMR)
# 方向1:微生物→疾病
# exposure: 微生物丰度的遗传工具变量
exposure_dat <- read_exposure_data(
filename = "microbiome_gwas_instruments.txt",
sep = "\t",
snp_col = "SNP", beta_col = "BETA", se_col = "SE",
eaf_col = "EAF", effect_allele_col = "A1",
other_allele_col = "A2", pval_col = "P"
)
# outcome: 疾病GWAS结果
outcome_dat <- extract_outcome_data(
snps = exposure_dat$SNP,
outcomes = "ieu-b-2" # IBD GWAS
)
# harmonize
dat <- harmonise_data(exposure_dat, outcome_dat)
# MR分析
mr_results <- mr(dat, method_list = c("mr_ivw", "mr_egger_regression",
"mr_weighted_median"))
mr_scatter_plot(mr_results, dat)
# 方向2:疾病→微生物
# 使用疾病GWAS位点作为IV,微生物丰度GWAS作为outcome
# 比较两方向结果判断因果
实战命令速查¶
# 标准mbQTL流程
# 1. 基因分型QC + imputation
plink2 --bfile raw --mind 0.05 --geno 0.02 --maf 0.01 --hwe 1e-6 --make-bed --out qc
# 2. PCA
plink2 --bfile qc --pca 20 --out pca
# 3. 微生物表型准备(R中CLR+INT变换)
# 4. GWAS
plink2 --pfile imputed --pheno pheno.txt --covar covar.txt --glm --out results
# 5. Meta-analysis
metal metal_script.txt
面试常问点¶
Q1: 为什么微生物丰度需要CLR变换?¶
A: 微生物组数据是组成性的(compositional),各物种相对丰度之和为1,存在虚假负相关。CLR(centered log-ratio)变换将数据从单纯形空间(simplex)映射到欧式空间,消除组成性约束,使传统统计方法(如线性回归)的假设得以满足。
Q2: Microbiome-GWAS中最大的挑战是什么?¶
A: (1) 效应量极小——单个SNP通常只解释<1%的微生物丰度变异,需要极大样本量;(2) 环境混杂——饮食、药物等环境因素对微生物的影响远大于遗传,难以完全校正;(3) 多重检验负担——数百个微生物×数百万SNP;(4) 零膨胀——很多物种在多数样本中不存在,违反线性模型假设。
Q3: MiBioGen项目的主要发现有哪些?¶
A: MiBioGen (Kurilshikov et al., 2021, Nature Genetics) 是最大的微生物组GWAS荟萃分析,涵盖24个队列18,340人(主要为欧洲裔,n=13,266),分析了211个分类单元。主要发现:(1) LCT位点与Bifidobacterium强关联(P=1.28x10⁻²⁰,达到全研究显著性),且该关联具有年龄依赖性;(2) FUT2(rs601338)影响Ruminococcus torques等菌属(分泌型状态影响黏液聚糖);(3) ABO血型影响多个菌属;(4) 共鉴定31个全基因组显著位点;(5) 宿主遗传对微生物组的总贡献较小(h²_SNP通常<10%),环境因素主导。
Q4: 如何处理微生物丰度数据中的零值?¶
A: 常用策略:(1) 添加pseudocount(如0.5)后log变换——简单但有争议;(2) 使用零膨胀模型(如ZINB)分别建模存在/丰度;(3) ALDEx2的贝叶斯估计替代pseudocount;(4) 只分析流行度>10-20%的物种,避免过多零值;(5) 使用两部分模型:先logistic判断是否存在,存在的样本中再做丰度关联。
Q5: 微生物组的遗传力(heritability)如何估计?¶
A: 使用基于SNP的遗传力估计方法(如GCTA GREML或LDSC):将微生物丰度作为表型,计算所有常见SNP共同解释的表型方差比例。大多数微生物表型的h²_SNP在0.05-0.15之间,远低于传统复杂性状(如身高h²~0.5)。这暗示环境因素是微生物组变异的主要来源。
易错点¶
1. 忽略饮食和药物的混杂效应¶
饮食(如纤维摄入)和药物(如PPI、抗生素)对微生物组的影响极大。如果这些因素与遗传变异相关(如通过行为/健康状态),会产生混杂。必须作为协变量纳入模型。
2. 分类水平选择不当¶
过高的分类水平(如门)掩盖真实关联,过低的分类水平(如种/ASV)增加多重检验负担且零膨胀严重。属水平通常是较好的平衡点。
3. 多重检验校正不足¶
只校正了单个微生物表型的5×10⁻⁸阈值,忽略了同时测试数百个表型。需要额外除以有效独立表型数,或使用FDR方法跨表型校正。
4. 人群分层校正不充分¶
不同人群的微生物组组成系统性不同(如不同国家/种族)。仅用前10个PC可能不够,需检查QQ plot是否有genomic inflation。
5. 反向因果混淆¶
在观察性研究中,疾病状态可能同时影响基因表达和微生物组,产生虚假的基因-微生物关联。应使用MR或纵向研究设计来评估因果方向。
补充知识¶
已知的强mbQTL信号¶
| 基因/位点 | 关联微生物 | 机制 |
|---|---|---|
| LCT (rs4988235) | Bifidobacterium↑ | 乳糖持续性→乳糖到达结肠 |
| FUT2 (rs601338) | Ruminococcus等 | 分泌型→黏液聚糖差异 |
| ABO (rs505922) | 多属 | 血型抗原影响黏膜定植 |
| MED13L | Bacteroides | 待阐明 |
| VDR | 多样性 | 维生素D受体→免疫调节 |
相关工具与资源¶
- PLINK2:高效GWAS分析
- BOLT-LMM:混合线性模型
- SAIGE:大样本不平衡数据
- METAL/METASOFT:荟萃分析
- MaAsLin3(2025年):MaAsLin2的升级版,新增流行度检测和组成性校正
- MiBioGen数据:公开可用的汇总统计量(www.mibiogen.org)
- Open GWAS:IEU GWAS数据库,含微生物组GWAS
引用推荐¶
- MiBioGen GWAS: Kurilshikov et al., Nature Genetics, 2021(18,340人,24队列,31个显著位点)
- MiBioGen设计: Kurilshikov et al., Microbiome, 2018(联盟框架描述)
- Dutch Microbiome Project(环境因素): Gacesa et al., Nature, 2022(8,208人)
- Dutch Microbiome Project(遗传因素): Lopera-Maya et al., Nature Genetics, 2022(7,738人)
- MaAsLin2: Mallick et al., PLoS Computational Biology, 2021
- MaAsLin3: Mallick et al., 2025(新增流行度与组成性校正)