Skip to content

★ 列名与产物路径已于 2026-08-07 重构

本页下文引用的列名与文件路径是重构前的。内部流程编号(4a/4b/step3)已从产物中移除,判定产物已移到 results/external_replication/新旧对照表见 工程约定与事故记录 §四

★ 重构不改任何数字——已存基线并逐行 diff 验证,主链数字完全一致。

07 · 第 4b 步 · 外部复制 · 换结局队列

执行日期:2026-08-07(同日修复 p 值缺陷后重跑) 状态:✅ 完成 结果:53 对 → 复制成功 10 · 送 4X 1 对 · 方向一致未达 FDR 18 · 反向未达 FDR 5 · 不可评估 19

★ 2026-08-07 修复:p 值曾由置信区间反推,已重跑

根因:MVP 两个结局文件(GCST90475689 / GCST90475676)的 standard_error 列全是 #NA,流水线按 se_from_ci=TRUE 从 CI 反推 SE, 再由 mr_singlesnpb/se 算 p。但这些文件的 CI 只有 4 位有效数字, 反推的 SE 精度不足,算出的 p 与文件报告的 p 相差可达 174 倍

SNP文件报告 pCI 反推 p倍数
rs1498029781.28e-192.22e-17174×
rs26413484.09e-083.08e-077.5×
rs10497423.74e-052.24e-046.0×

修法:单 SNP Wald 的 z = βY/σYMR 的 p 恒等于结局侧的 p —— 结局文件报了 p 就直接用它;SE 仍由 CI 反推(Wald 比值需要),但不再拿它算 p。

影响(已逐项核过)

  • 复制成功 7 → 10:新增 AGER×Neuropathy · GALNT3×Retinopathy · HCG22×Retinopathy
  • 送 4X 的 opposite 集合完全不变(仍只有 TRIM40×Retinopathy)
  • 4X 产物逐字节相同,否决结论不变,存活集仍 52 对
  • Salem 糖肾有真实 StdErr 列,不受影响

发现经过:第 4c 步的 C1 断言(same-SNP 的对,p_4c 必须与 4b 的 p_repl 相同)。 ★ 这是为验证自己理解而写的断言,抓出了上一步的数据处理缺陷

⚠️ 本步违反了「跑前先写记录」的纪律,如实记录

纪律一要求预期必须在运行之前写完本步没有做到 —— 修完输入集后直接跑了,本页是事后补写的。

后果:本步没有跑前写死的预期数字,因此 不具备「预期 vs 实际」的自查力(第 0/1/2/3 步都有)。 唯一的事前约束是「输入集必须等于第 3 步存活集」,它写成了代码里的过滤 + 日志。

★ 记在这里而不是掩盖,是因为 4a 连续四轮失效的根因之一正是 「跑完看结果顺不顺眼再调规则」。本步虽然结果看起来干净, 但流程上少了一道保险,后续步骤不得沿用这个做法。

结局命名

本页用内部 ID,论文显示名见总览页对照表


一、这一步做什么

换结局队列:暴露侧完全不动(同一批 UKB-PPP cis 哨兵、同一个平台), 只把结局从 FinnGen R9 换成独立队列,重做 MR。

换了没换因此抓不到
4b结局 GWAS暴露工具(同一 SNP、同一平台)表位伪影——纯由结合力造成的假关联会在每个结局队列里"复制成功"

★ 所以 v4 §6 规定:4b 报警 → 查结局侧异质性,不是查表位。 这与 4a 的路由不同,别送错。

4b 不否决(v4 §2.2),只分流。「不可评估」保留,不当阴性。


二、★★ 文献状态:C1R 原文没有这一步

逐字读过 C1R 原文(Li et al. medRxiv 2026.07.14.26358022)后确认:

  • 它的验证只在暴露侧(冰岛队列 / deCODE / SomaScan)
  • 疾病 GWAS 是单一来源——Methods 第 326–328 行: "The summary-level statistics of genetic associations with these ten diseases were extracted from the largest available existing GWAS"
  • 发现与验证共用同一份结局数据,没有换过结局队列

4b 无直接文献先例,属本研究自定。写 Methods 必须声明,不许挂靠 C1R。

但我们有 C1R 没有的具体理由做它

我们的并发症结局全部来自 FinnGen 单一队列,且其对照是一般人群 (不是"有糖尿病但无并发症"),estimand 实为**「糖尿病 + 并发症」的复合效应**—— 这是本课题早就记录在案的已知问题

换一个独立结局队列,正是针对这个问题的直接检验。 C1R 用的是大型联盟 GWAS, 不面临这个问题,所以它没有这一步是合理的;我们面临,所以我们做。

判定阈值仍沿用 4a 的文献依据(C1R Results 第 113–117 行: PFDR<0.05 **and** associated in opposite direction),保持流程内部一致。


三、用什么数据

结局(FinnGen R9)复制队列来源病例/对照
RetinopathyMVP 糖网 GCST90475689Verma et al. Science 2024, PMID 3902444929,668 / 402,541
NeuropathyMVP 神经 GCST90475676同上59,205 / 375,439
NephropathySalem 2019 JDRF-DNCRI 糖肾JDRF_DNCRI_DN_min_meta_June2019见 manifest
Maculopathy
NeovascGlaucoma(本身 0 个显著蛋白)

暴露侧:不动,与第 1/2 步同一套 UKB-PPP cis 哨兵。

⚠️ 两个复制队列共享样本:MVP 糖网与 MVP 神经同出 Verma 2024, 且 T2D_mvp(敏感性分析用)也来自 MVP。 写作时必须说明这三者不是相互独立的复制。

⚠️ Salem 2019 的 sumstats 无 N 列,原文只给队列总体上限 → 该队列的 Steiger 定向过滤无法算 R²,被跳过(不影响方向与 p 判定)。 待从原文补充表取 DN-min 的确切病例/对照数后回填。


四、★ 输入集:必须是第 3 步的存活集(本步修的关键缺陷)

缺陷

17_replicate_external.R 原先直接读 results/screen_*/**_significant.csv (= 第 2 步输出),绕过了第 3 步

后果:会把第 3 步已否决的对又捡回来

修复与验证

改为读 results/reverse_mr/reverse_mr_results.csvstep3_survivor == TRUE, 与 4a 一致。R9_dm 线缺该文件直接 stop()

运行日志实证修复生效:

[R9_dm] ★ 输入集 = 第 3 步存活集(97 对)
  [Retinopathy] 第 3 步已否决 4 对,剔除(24 -> 20)
  [T1D_gcst]    第 3 步已否决 30 对,剔除(57 -> 27)
  [T2D_mahajan] 第 3 步已否决 11 对,剔除(28 -> 17)

被剔的 4 对正是 APOE / BTN3A2 / ITGB7 / TIGIT × Retinopathy。

★ 这是老毛病复发(「下游输入集漂移」此前定位过但只修了个别脚本), 详见工程约定与事故记录 §三

一处容易连坐改错的地方

35_reverse_mr.R:407 *_significant.csv, 但那是为拼「正反向并排表」取正向效应量不是输入集。两处用途不同,别一起改。


五、判定规则

对第 3 步存活的每一对(暴露工具不变):
  在复制队列里取该 SNP → 谐化 → 单 SNP Wald 比
  → FDR 按结局分组校正
  → 判定:
       FDR<0.05 且方向相反 → opposite      → 送 4X(查结局异质性)
       FDR<0.05 且方向一致 → replicated    → 复制成功
       方向一致但未达 FDR  → same_direction_not_significant(保留)
       方向相反但未达 FDR  → not_significant_opposite_sign(保留,不送 4X)
       复制队列无该结局/该 SNP → not_assessable(保留,不当阴性)

「方向相反但未达 FDR」不送 4X —— 与 4a 同一条原则: 没有分辨力的比较不该产生路由动作


六、覆盖率

结局存活对数可评估覆盖率
Retinopathy2020100%
Nephropathy99100%
Neuropathy55100%
Maculopathy1900%
合计533464%

⚠️ Maculopathy 一个都评估不了,而它占存活集的 19/53(36%)。 这与 4a 的覆盖缺口(集中在 MHC)是不同的偏倚方向,两者要分开写。


七、结果

判定对数
same_direction_not_significant21
not_assessable(全部为 Maculopathy)19
replicated(FDR<0.05 同向)7
not_significant_opposite_sign5
opposite(→ 4X)1

7.1 复制成功的 7 对(全在糖网)

蛋白发现队列 OR复制 βFDR
PAM0.888−0.14614.4e-16
NOTCH20.598−0.40883.1e-06
NUDT53.080+0.81163.7e-06
AOC10.809−0.12349.0e-04
LTB1.919+0.21762.0e-03
TNXB1.309+0.06001.4e-02
AIF10.622−0.24663.3e-02

7.2 ★ 送 4X 的 1 对

蛋白结局SNP发现队列 OR复制 βFDR
TRIM40Retinopathyrs38150790.71+0.2298.7e-04

方向翻转(发现队列保护性、MVP 糖网风险性)。 ★ 路由到 4X 后查的是结局侧异质性(FinnGen vs MVP 的表型定义、对照构成), 不是表位 —— 暴露侧工具完全没换。

⚠️ TRIM40MHC 区蛋白,其结局侧差异也可能与 MHC 长程 LD 相关,4X 时要一并看。

7.3 方向相反但未达 FDR(保留,不送 4X)

AGER/LTB/APOE × Nephropathy(FDR 0.99)、HCG22 × Neuropathy(0.16)、 SIGLEC5 × Retinopathy(0.13)。全部离阈值很远,属噪声,不构成报警。


八、★★ 4a × 4b 交叉表 —— 本步最有信息量的产出

4b 不可评估4b 复制成功4b 同向不显著4b 反向不显著4b 送 4X
4a 不可评估1021221
4a 送 4X21100
4a 稳健74830

★ 没有任何一对被 4a 和 4b 同时报警

这是 v4 §2.1「4a 与 4b 盲区互补」实证

4a4b说明
AOC1 × Retinopathy送 4X复制成功换平台方向翻、换队列却复制上 → 指向暴露侧测量问题
APOL1 × Maculopathy送 4X不可评估黄斑无外部队列,4b 帮不上忙
MICB_MICA × Maculopathy送 4X不可评估同上
MICB_MICA × Nephropathy送 4X同向不显著4b 未反驳
TRIM40 × Retinopathy不可评估送 4XdeCODE 无此蛋白,4a 帮不上忙

四个 4a 报警里有两个落在 4b 盲区(Maculopathy),唯一的 4b 报警落在 4a 盲区(deCODE 无 TRIM40)。

谁也替代不了谁。 若只做其中一个,会漏掉另一半的报警。

AOC1 这一行尤其有价值:两步给出相反的信号,而这恰恰是可解释的—— 4a 换了平台就翻方向、4b 换了队列却复制上 → 问题在暴露侧测量,不在结局定义。 这正是 4X 需要的归因线索。


九、如何解读

  1. not_assessable 不是阴性。 19 对全是 Maculopathy,因为没有外部队列—— 是我们没数据,不是它没通过
  2. same_direction_not_significant(21 对)也不是阴性。 复制队列样本量与表型定义 都与发现队列不同,方向一致已是有意义的信息。
  3. 7 对复制成功全在糖网,因为糖网的复制队列样本量最大(29,668 例)。 其他结局的"未达 FDR"很可能是功效问题,不是效应不存在。
  4. ⚠️ 三个 MVP 队列共享样本(糖网/神经/T2D 同出 Verma 2024), 不能当作三次独立复制 —— 与跨平台表的误读风险是同一类问题。

十、进正文还是补充(暂定)

内容暂定去向依据
4b 无文献先例、属自定正文 Methods★ 必须声明,不许挂靠 C1R
做 4b 的理由(FinnGen 单源 + 一般人群对照)正文 Methods它是本课题特有的动机
判定规则与 FDR 分组正文 Methods
覆盖率 64% 与 Maculopathy 全缺正文 Results + Limitations偏倚方向与 4a 不同,要分开写
复制成功的 7 对正文表
4a × 4b 交叉表★ 正文(或补充图)它是"两者互补"这一方法学主张的唯一实证
MVP 三队列共享样本Limitations不能当独立复制
全部 53 对明细补充材料

⚠️ 暂定,第 7 步统一复核。


十一、产物

results/screen_R9_dm/replication_external.csv
    97 行(含 T1D/T2D 对照臂),并发症 53 行
    新增列:fdr_repl · step4b_class · to_4X · to_4X_route
results/logs/repl_4b_20260807.log

⚠️ step4_survivor 列仍在,但在 v4 下语义作废(第 4 步不判存活)。 保留以免下游报错,判定一律用 step4b_class

⚠️ 本文件仍含中文取值(repl_dataset 列,如「MVP糖网(GCST90475689)」), 尚未按编码约定清理, 运行时已打印告警。待办。

个人科研与运维文档 · 内容持续修订