🛡️ 新手导读:敏感性分析不是可选项
主效应显著不代表结论可靠。敏感性分析用于回答“这个结论稳不稳”。
背景介绍
MR结果常受异质性、水平多效性和离群SNP影响。通过系统质控,可以显著降低过度解读风险。
备注(统一三段)
适用人群:需要评估结论稳健性、准备投稿前质控补全的研究者。
常见错误:只报告显著主结果,不报告异质性与多效性,审稿阶段常被追问。
论文写法:建议正文给结论性一句,补充材料附Q检验、Egger截距、PRESSO与LOO图。
分析目标
- 🧪 评估是否存在显著异质性(heterogeneity)
- 🧲 检测方向性水平多效性(pleiotropy)
- 🧯 识别并校正异常 SNP(MR-PRESSO)
- 🔍 逐一剔除 SNP 查看结果稳定性(leave-one-out)
完整代码模板
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")结果解释速查
- 📌 heterogeneity Q_pval < 0.05:提示 SNP 间效应不一致,需谨慎解释。
- 📌 pleiotropy pval < 0.05:提示可能存在方向性多效性。
- 📌 MR-PRESSO 检出 outlier 时,优先报告校正后结果并做对比。
- 📌 leave-one-out 若无单个 SNP 主导整体方向,结果通常更稳健。