主题
05 · 敏感性分析
对应模块:R/07_sensitivity.R参考:Bowden 2015/2016;Verbanck 2018(MR-PRESSO);Hemani 2017(方向性);VanderWeele & Ding 2017(E-value)
作用
评估 MR 主结果的稳健性,重点检验排他性假设(多效性)与因果方向。这些方法需要足够工具,run_sensitivity() 在 ≥3 IV 时全套运行,否则跳过。每个检验都包在 safely() 里,单个失败不影响其余。
各检验
Cochran's Q(异质性)
mr_heterogeneity() 对 IVW 与 Egger 各算 Q 统计量。Q 显著提示 SNP 间效应异质,可能有多效性或无效工具。
MR-Egger 截距(定向多效性)
mr_pleiotropy_test() 检验 Egger 回归截距是否 ≠ 0。截距显著 → 存在定向多效性(工具经暴露以外的通路影响结局),违反排他性假设。截距 p 值写进 pair_summary 的 egger_intercept_p。
MR-PRESSO(离群检测 + 校正)
run_presso() 调 MRPRESSO::mr_presso(需 ≥4 IV 更稳):
- Global Test:整体是否存在多效性离群(
global_p); - Distortion Test:识别离群 SNP;
- 剔除离群后给校正估计。
参数 SignifThreshold = 0.05;NbDistribution 读 config.yaml 的 sensitivity$presso_nb (2026-07-27 补:此前代码注释声称可配,但 config 里根本没有 sensitivity 段 → nb 永远回退 1000,而 Global Test 的 p 下限约为 1/NbDistribution,即被钉死在 1e-3、 无法报告 p<0.001。现已在 config 补该段,默认 presso_nb: 5000)。
适用性:本课题主筛查用不上这些检验
R/07_sensitivity.R 的 Q / Egger 截距 / MR-PRESSO / LOO 都要求 ≥3 个工具变量。 而本课题主筛查(analysis/01_screen.R)走 mr_singlesnp,UKB-PPP 99.9% 的蛋白只有 1 个 cis 哨兵工具 —— 这些方法对单工具 cis-MR 在数学上不适用,不是遗漏。 文献同样记录「仅一个有效工具时无法使用校正水平多效性的方法」; Nat Commun 2025 的 MR-link-2 也指出「工具局限于单一关联区域会抬高 MR 的 Type 1 error, 而这正是分子暴露的典型情形」。
本课题的稳健性由三层承担:① HyPrColoc 共定位(PP>0.7 且蛋白在簇内)排除 LD 假象 ② 外部队列复制(MVP / Salem 2019 / IAMDGC 2.0)③ 换平台换人群复制(deCODE SomaScan)。 本页描述的多工具敏感性套件只在 run_all.R 的通用路径下才会真正触发。
Leave-one-out(LOO)与 single-SNP
mr_leaveoneout() 逐个剔除 SNP 重算,看结果是否被单个 SNP 驱动;mr_singlesnp() 给每个 SNP 单独的 Wald 估计(森林图用)。
方向性检验(Steiger directionality)
directionality_test() 在全局层面确认"暴露→结局"方向成立(补充 03 的逐 SNP Steiger 过滤)。
I²_GX(NOME 假设 / 回归稀释)
衡量 MR-Egger 的 NOME(No Measurement Error)假设违背程度。I²_GX < 0.9 提示 Egger 斜率被回归稀释,需 SIMEX 校正。代码手工实现(isq_gx):对暴露效应绝对值 y = |β_exp|、w = 1/se²,加权均值 μ,
E-value(未测混杂稳健性,STROBE-MR item 12b)
量化"要多强的未测混杂才能解释掉观察到的效应"。仅对 OR/RR 尺度有意义(evalue_or)。
必须区分罕见 / 常见结局(2026-07-27 订正)
VanderWeele & Ding 2017 的原始公式针对风险比 RR。结局不罕见时 OR 会明显高估 RR, 直接把 OR 代进公式会高估 E-value——也就是把证据说得比实际更稳健。 原文对常见结局建议用
本课题各结局的样本病例比例差异很大(实测:AMD 13,947/472,750 = 3.0%、 糖网 STRICT 6,970/95,046 = 7.3%、T2D_mahajan 55,005/455,313 = 12.1%), 因此 evalue_or(est, rare) 的 rare 必须由调用方按结局显式声明,不给默认猜测。
(OR < 1 时先取倒数。)
run_all.R 对主估计算点估计 E-value 与靠近零效应一侧 CI 界的 E-value(evalue / evalue_ci); 2026-07-27 起由结局的 ncase/(ncase+ncontrol) 自动判定 rare(阈值 10%)并写入日志, 此前调用方未传 rare、一律按罕见处理,常见结局下会高估 E-value。
输出(进 pair_summary 的字段)
| 字段 | 来源 |
|---|---|
isq_gx | I²_GX |
egger_intercept_p | Egger 截距检验 |
presso_global_p | MR-PRESSO Global Test |
evalue / evalue_ci | E-value(点估计 / CI 界) |
heterogeneity / leaveoneout / single_snp / directionality / presso 完整对象保留在敏感性结果里,供 报告出图(森林 / 漏斗 / LOO)。
下一步:用共定位独立验证 MR 信号是否来自同一因果变异,见 共定位。