主题
分析流程定稿 v5 · 方向性合为一步
这一页是当前唯一有效的流程定稿。 做任何靶点 MR 分析之前先读这一页。
版本 位置 状态 初版 · v2 · v3 mr/02-流水线与筛查/已弃用 v4 mr/02-流水线与筛查/已被 v5 取代 v5(本页) 本栏目 ✅ 现行 v5 相对 v4 只有一处变更:MR-Steiger 从第 1 步(工具选择)移入第 3 步(方向性), 与反向 MR 合并成「变异层 + 性状层」两个层面。 ★ 结果一个数都不变 —— 理由见 §2.2。
一、流程图
图注:第 3 步与 4X 是全流程仅有的两个否决点。第 3 步现在含两个层面: 变异层(MR-Steiger,逐个工具比对暴露与对结局的 R²)与 性状层(反向 MR,用疾病的全基因组工具去打蛋白水平)。 二者问的不是同一个问题、用的不是同一批工具,互相不能替代(§2.1)。 第 4 步的三个子项都不否决,只把每一对结果分到「通过 / 送 4X / 不可评估」。 通路富集挂在 4X 之后,因为只有过了 4X 才谈得上"验证过的蛋白集"。
二、v5 相对 v4 的唯一变更
2.1 为什么移
v4 把方向性拆在两处,读者会以为同一件事被数了两遍。 第 1 步③ 写着 "Steiger filtering",第 3 步又写着"方向性 / 反向 MR" —— 这是本课题实际发生过的误读。
两者确实都是"方向性",但层面不同,合并成一步反而讲得清:
| 变异层 MR-Steiger | 性状层 反向 MR | |
|---|---|---|
| 工具是谁的 | 蛋白的那个 cis 哨兵(与正向 MR 同一个) | 疾病自己的全基因组显著位点,不设 cis 窗 |
| 单位 | 每个变异一判 | 每个性状对一判 |
| 问题 | 这个 SNP 解释暴露多,还是解释结局多? | 疾病会不会反过来改变蛋白水平? |
| 盲区 | 看不见"蛋白是疾病下游产物"——cis 哨兵对蛋白的 R² 照样巨大 | 看不见"哨兵落在别的基因驱动的强信号里"这类局部 LD 问题 |
2.2 为什么「结果一个数都不变」
因为每个蛋白只有一个 cis 哨兵。 Steiger 剔掉那个唯一的工具 = 剔掉整个蛋白-结局对, 与"先估计、再整对剔除"结果集完全相同,差别只在被剔的那条在不在表里露过面。
⚠️ 这个等价性只在单工具时成立。多工具时 Steiger 会删掉一部分 SNP 后重新估计, 换顺序会得到不同的点估计 —— 别把本页的结论外推到多工具场景。
★ 实现位置不动:steiger_filtering() 只加注 steiger_dir 列,删是流水线做的; 它仍在谐化之后、估计之前执行。v5 改的是流程图与叙述里它算第几步,不是代码。
2.3 依据
| 主张 | 依据 | 强度 |
|---|---|---|
| 方向性两层合为一步,置于 MR 之后、复制之前 | C1R 原文 Results:"Reverse MR and MR-Steiger analyses supported the directionality of 88 of the 89 associations, leading to the exclusion of BTN3A2" —— 两者并列为一个方向性区块 | 强 · 原文 |
| 单工具下两种次序等价 | 结构事实(剔唯一工具 = 剔整对),本课题实测剔除 0 个 | 强 · 自证 |
★ 同时撤下 v4 的一条无出处依据
v4 §5 第 362 行给「Steiger 属第 1 步」打的是「多篇一致 · 强」,但一篇都没点名; 唯一点名的 GBMI 在同一页 §8 未决事项里写着「核实 GBMI 是否真的……」= 未核实。 v5 不再声称有多篇先例,改为只挂 C1R 这一条已读原文。
三、本课题在这一步的实测
两个层面都没有否决任何东西,但都不是形式检验。
逐结局的数见 → 方向性 页的图 F3 panel c 与其图注, 产物是 directionality_mr_steiger.csv(本页⛔不复制一份,避免两处数字打架)。
★ 2026-08-10 更正
本页原先这里有一张手打的余量表(T1D 1.22×、神经病变最险蛋白写作 CD69 等)。 那些数是错的:我当时用 *_all.csv 的 R2 列当分子,那是 add_f() 按 MAF 公式 算的暴露 R²,而 MR-Steiger 实际比较的是 TwoSampleMR get_r_from_bsen 算的另一个 R²。 分母不同,数就不同 —— 神经病变的最险蛋白甚至从 CD69 变成了 AGER。 现已改为一律引产物,⛔ 不再手打。
★ 两条读得出来的东西(数由 F3 图注现算):
- MR-Steiger 不是形式检验。 最险的一对(T1D × AIF1)余量只有 1.33 倍 —— 再差 33% 就会真的剔掉一个工具。 笼统说「cis 变异的暴露 R² 比结局 R² 大一两个数量级」只在中位数上成立 (2.2e-02 vs ~1e-05);过滤器看的是尾巴,尾巴上不成立。
- 六个结局里五个的最险蛋白都在 MHC 区(AGER × 4、AIF1 × 1;只有 T2D 的 TIGAR 不是)。 MHC 段疾病信号极强,把
R²结局顶了上去 —— 这正是因为本流程不排除 MHC,MR-Steiger 才有活干。 ★ 与 C1R 唯一被方向性剔掉的 BTN3A2 也是 MHC 区蛋白相互印证。
四、其余各节
§2 之外的全部内容(四步复制三分法、4X 表位调查、共定位措辞关卡、描述性注释、 措辞阶梯、开跑前自检、参考文献)与 v4 完全相同,未作改动,见 v4 页。
五、本页未决
- [x] ✅
T2D_mahajan的 Steiger 曾走错 R² 分支 —— 2026-08-10 已修。 它是唯一match_mode = position的结局,该分支手工拼 data.frame、 绕过了to_tsmr_outcome(),从不声明units.outcome = "log odds", 于是 TwoSampleMR 退回get_r_from_bsen(),把对数几率当连续量算 R² (config.yaml第 40 行早就声明必须走get_r_from_lor(),是实现没跟上声明)。 修法:read_pos_outcome()补齐units/ncase/ncontrol/prevalence四个字段。 重跑后 16 个既有产物逐字节不变,rsq.outcome中位由 1.46e-06 变为 3.58e-06, 剔除数仍是 0。图 F3 新增断言 S3 锁死「七个结局全部走get_r_from_lor」, 让这个缺陷不可能悄悄回来。 - [ ] ★
BTN3A2要单独查:C1R 因方向性把它剔了,而它在本课题的 视网膜病变与黄斑病变两个结局都显著且被保留。需给出保留理由。 - [ ] 逐字通读 Yuan 2023(PMC10518626)STAR Methods,确认其 Steiger 放在哪一步