🩺 新手导读:糖肾MR要先统一结局定义
不同研究对糖尿病肾病定义差异较大(eGFR、蛋白尿、临床分期),会直接影响效应大小与可比性。
背景介绍
糖肾是多因素慢病结局。MR有助于从遗传层面筛选可疑风险因子,但需要在队列定义、祖源和终点标准上保持谨慎。
备注(统一三段)
适用人群:想评估代谢风险因素对糖尿病肾病因果效应的临床/基础研究者。
常见错误:混用糖肾与泛CKD终点定义,会造成研究间结果不可比。
论文写法:建议写清终点定义、祖源信息,并在讨论中说明临床外推边界。
📊 研究设计
暴露因素
- • 血糖水平(Fasting Glucose)
- • 糖化血红蛋白(HbA1c)
- • 胰岛素抵抗(HOMA-IR)
- • 肥胖指标(BMI, WC)
结局变量
糖尿病肾病(Diabetic Nephropathy)
定义:eGFR < 60 + 蛋白尿
🔧 标准MR流程
Step 1: 数据准备
library(TwoSampleMR)
library(MRPRESSO)
# 读取暴露数据(血糖水平)
exposure <- read_exposure_data(
filename = "fasting_glucose_gwas.txt",
sep = "\t",
snp_col = "SNP",
beta_col = "Beta",
se_col = "SE",
effect_allele_col = "EA",
other_allele_col = "NEA",
pval_col = "P",
samplesize_col = "N"
)
# 筛选工具变量
exposure_clumped <- exposure %>%
filter(pval.exposure < 5e-8) %>%
clump_data(
clump_kb = 10000,
clump_r2 = 0.001
)
cat("工具变量数量:", nrow(exposure_clumped), "\n")
# 工具变量数量: 42
Step 2: 提取结局数据
# 从 GWAS catalog 提取 DN 数据
outcome <- extract_outcome_data(
snps = exposure_clumped$SNP,
outcomes = "DN_GWAS_2023",
proxies = TRUE
)
# 数据协调
harmonised <- harmonise_data(
exposure_dat = exposure_clumped,
outcome_dat = outcome
)
# 移除回文 SNP
harmonised <- harmonised %>%
filter(palindromic == FALSE)
cat("协调后 SNP 数量:", nrow(harmonised), "\n")
# 协调后 SNP 数量: 38
Step 3: MR 分析
# 执行多种 MR 方法
results <- mr(harmonised,
method_list = c(
"mr_ivw",
"mr_weighted_median",
"mr_egger_regression",
"mr_simple_mode",
"mr_weighted_mode"
))
# 计算 OR 和 CI
results %>%
mutate(
OR = exp(b),
CI_lower = exp(b - 1.96*se),
CI_upper = exp(b + 1.96*se)
) %>%
select(method, nsnp, b, se, pval, OR, CI_lower, CI_upper) %>%
knitr::kable(digits = 3)
# 输出:
# |method | nsnp| b| se| pval| OR| CI_lower| CI_upper|
# |:-----------------|----:|------:|------:|-----:|------:|--------:|--------:|
# |IVW | 38| 0.156| 0.058| 0.007| 1.17| 1.04| 1.31|
# |Weighted Median | 38| 0.148| 0.062| 0.017| 1.16| 1.03| 1.31|
# |MR-Egger | 38| 0.132| 0.089| 0.138| 1.14| 0.96| 1.36|
# |Simple Mode | 38| 0.165| 0.078| 0.035| 1.18| 1.01| 1.37|
# |Weighted Mode | 38| 0.152| 0.067| 0.024| 1.16| 1.02| 1.33|
Step 4: 敏感性分析
# 异质性检验 heterogeneity <- mr_heterogeneity(harmonised) print(heterogeneity) # method Q Q_df pval # IVW 45.2 37 0.156 # MR-Egger 44.8 36 0.148 # ✅ 无显著异质性(p > 0.05) # 多效性检验 pleiotropy <- mr_pleiotropy_test(harmonised) print(pleiotropy) # egger_intercept se pval # 0.008 0.012 0.512 # ✅ 无水平多效性(p > 0.05) # MR-PRESSO(检测离群值) presso <- mr_presso( BetaOutcome = "beta.outcome", BetaExposure = "beta.exposure", SdOutcome = "se.outcome", SdExposure = "se.exposure", OUTLIERtest = TRUE, DISTORTIONtest = TRUE, data = harmonised ) # MR-PRESSO results: # - Outlier-corrected causal estimate: 0.148 (p = 0.012) # - No significant outliers detected
Step 5: 可视化
# 散点图
p1 <- mr_scatter_plot(results, harmonised)
# 森林图
p2 <- mr_forest_plot(mr_singlesnp(harmonised))
# 漏斗图
p3 <- mr_funnel_plot(results)
# Leave-one-out 图
loo <- mr_leaveoneout(harmonised)
p4 <- mr_leaveoneout_plot(loo)
# 保存图片
ggsave("scatter_plot.pdf", p1[[1]], width = 8, height = 6)
ggsave("forest_plot.pdf", p2[[1]], width = 10, height = 8)
ggsave("funnel_plot.pdf", p3[[1]], width = 8, height = 6)
ggsave("loo_plot.pdf", p4[[1]], width = 8, height = 6)
🎯 结果解读
✅ 主要发现
空腹血糖水平与糖尿病肾病风险存在显著因果关系:
- • IVW 方法:OR = 1.17 (95% CI: 1.04-1.31), p = 0.007
- • Weighted Median:OR = 1.16 (95% CI: 1.03-1.31), p = 0.017
- • Weighted Mode:OR = 1.16 (95% CI: 1.02-1.33), p = 0.024
📊 质量控制总结
- ✅ 工具变量强度:F > 10(范围:15.2 - 89.3)
- ✅ 无显著异质性:Cochran's Q p = 0.156
- ✅ 无水平多效性:MR-Egger intercept p = 0.512
- ✅ MR-PRESSO 未检测到离群值
📖 参考文献
- • Bowden J et al. Consistent estimation in Mendelian randomization with some invalid instruments. IJE 2015.
- • Sanderson E et al. Mendelian randomization: methods for causal inference. IJE 2022.
- • Hemani G et al. The MR-Base platform supports systematic causal inference. Nat Genet 2018.