返回MR专题首页

敏感性分析教程

MR-PRESSO、heterogeneity、pleiotropy、leave-one-out 一次完成

🛡️ 新手导读:敏感性分析不是可选项

主效应显著不代表结论可靠。敏感性分析用于回答“这个结论稳不稳”。

背景介绍

MR结果常受异质性、水平多效性和离群SNP影响。通过系统质控,可以显著降低过度解读风险。

备注(统一三段)

适用人群:需要评估结论稳健性、准备投稿前质控补全的研究者。
常见错误:只报告显著主结果,不报告异质性与多效性,审稿阶段常被追问。
论文写法:建议正文给结论性一句,补充材料附Q检验、Egger截距、PRESSO与LOO图。

分析目标

完整代码模板

library(data.table)
library(dplyr)
library(TwoSampleMR)
library(MRPRESSO)

# 假设 dat 是 harmonise_data() 后的数据,并且 mr_keep 已过滤
# dat <- harmonise_data(exposure_dat, outcome_dat, action = 2)
# dat <- dat %>% filter(mr_keep == TRUE)

# 1) 异质性检验(IVW + Egger)
heterogeneity_res <- mr_heterogeneity(
 dat,
 method_list = c("mr_ivw", "mr_egger_regression")
)

# 2) 水平多效性检验(Egger intercept)
pleiotropy_res <- mr_pleiotropy_test(dat)

# 3) Leave-one-out 分析(逐一剔除)
loo_res <- mr_leaveoneout(dat, method = mr_ivw)
loo_plot <- mr_leaveoneout_plot(loo_res)

pdf("./output/leave_one_out_plot.pdf", width = 8, height = 6)
print(loo_plot[[1]])
dev.off()

# 4) MR-PRESSO(识别outlier并校正)
presso_input <- dat %>%
 select(SNP, beta.exposure, beta.outcome, se.exposure, se.outcome) %>%
 na.omit()

set.seed(20260305)
presso_res <- mr_presso(
 BetaOutcome = "beta.outcome",
 BetaExposure = "beta.exposure",
 SdOutcome = "se.outcome",
 SdExposure = "se.exposure",
 OUTLIERtest = TRUE,
 DISTORTIONtest = TRUE,
 data = presso_input,
 NbDistribution = 2000,
 SignifThreshold = 0.05
)

# 5) 保存结果
fwrite(heterogeneity_res, "./output/heterogeneity_test.tsv", sep = "\t")
fwrite(pleiotropy_res, "./output/pleiotropy_test.tsv", sep = "\t")
fwrite(loo_res, "./output/leave_one_out.tsv", sep = "\t")
capture.output(presso_res, file = "./output/mr_presso_result.txt")

结果解释速查