Skip to content

R9 第二、三轮核查:数字可追溯性与独立复算

承接 第一轮定向排查

  • 第二轮:把 PPT / docs 里断言的每个数字,反查到产生它的产物文件,逐条判 PASS/FAIL
  • 第三轮:脱离流水线独立复算关键结论,验证"产物本身算得对"

结果:第二轮 79 项断言零不一致;第三轮三项复算零差异。

一、第二轮:数字可追溯性

方法

不做肉眼比对——写核对脚本把断言与产物逐条比对,输出 PASS/FAIL/UNKNOWN。 查不到来源的标 UNKNOWN 而非默认通过。脚本可重复执行, 以后任何一轮重跑后再跑一遍,就能立刻知道 PPT/docs 里哪个数字过时了

覆盖范围与结果

批次PASSFAILUNKNOWN
主核对6300
补充核对151(脚本断言写错,非产物问题)0

核对内容:

  • 结局表:7 个结局的病例/对照/工具数/显著数、工具强度 minF/medianF、最小 F ≥ 40.6
  • 共定位:评估蛋白 95、判定四分布 13/14/54/14、13 个支持蛋白的簇 PP 逐个核对
  • 三法:两法 19/13/0、SuSiE 32 对 / 12 收敛 / 4 支持、合表 142 对、Undetermined 24
  • 糖尿病对照:57 条与四分类 30/11/10/6
  • 外部复制:三组的覆盖 / 同向 / 同向 p<0.05
  • LDSC:rg(T1D, T2D) = 0.087
  • 靶点分层:31 蛋白、A/B/C/D = 3/4/11/13、A 级名单
  • 脱靶负担:7 个关键蛋白的 n_traits_bonf、PheWAS 关联 15,789、覆盖 92 rsid
  • complonly:8 个支持蛋白、两版共有 6 个
  • 数据完整性_parts/*.csv = 95、.skip = 0、X 染色体蛋白 39、补下 tar 49、本地 tar 146

唯一的 FAIL 是我自己写错了断言

补充核对里断言 REPORT/table_S_* 应为 14 张,实测 13 张。 核实后确认:实际就是 13 张 CSV + 1 个 Excel,是断言把 Excel 混进了 CSV 计数。 且"14 张附表"这个说法只存在于对话叙述中,未落进 PPT / docs / 记忆任何交付物

第二轮的边界

它验证的是「PPT/docs 的数字与产物一致」,不验证产物本身算得对。 后者属于第三轮。

二、第三轮:脱离流水线独立复算

原则:不调用流水线任何函数,用独立实现从上游产物重新算,再与流水线结果比对。

A. 糖尿病对照四分类

screen_R9_dm/*_significant.csv 独立取 β/se/p,独立实现四分类判据 (糖尿病端 p≥0.05 → 并发症特异;方向相反 → 方向背离;z 检验显著且量级更大 → 并发症增强; 否则 → 糖尿病驱动)。

结果:57/57 一致,0 差异。

B. 两法 verdict

hyprcoloc_shared.csvcoloc_abf_pairs.csv 独立重建判定 (HyPrColoc:蛋白在簇内且簇 PP>0.7;coloc.abf:PP.H4≥0.8)。

结果:142/142 一致,0 差异。

C. coloc.abf 的 PP.H4(独立实现 ABF 公式)

不调用 R 的 coloc 包:自己用 tarfile 解 tar 取蛋白区域、自己 zcat 取疾病区域、 自己按等位对齐、自己实现 Giambartolomei (2014) 的近似贝叶斯因子与后验合并。

位点交集等位同向等位翻转等位不一致独立用流水线用PP.H4 差
MINDY1 × T2D16669876790166616665.55e-16
ERI1 × T2D4482241020666447644821.26e-03
KIT × T1D51195094025509451191.61e-05

MINDY1 因为零等位不一致,两者精确到机器精度相同(5.55e-16)—— 这证明独立实现与 coloc 包算法等价,从而 ERI1 / KIT 的小差确实只来自 SNP 取舍, 且数字完全对得上:4482 − 6 = 4476、5119 − 25 = 5094。

D. 等位对齐审计(顺带查出的重要一点)

脚本是否对齐等位是否正确
05_hyprcoloc.R:195-200✅ 一致保留 / 翻转变号 / 模糊丢弃正确
26_coloc_susie.R✅ 同上正确
24_coloc_abf.R:96❌ 按 chr:pos 合并,不校验等位对 coloc.abf 无偏(见下)

为什么 HyPrColoc 对齐与否是生死攸关的

实测 MINDY1 有 679 个、ERI1 有 2066 个 SNP 的等位在两个数据源间是翻转的,占比很高。 HyPrColoc 按带符号的 β 做跨性状聚类——若不对齐,聚类结果会完全错误。 所幸它对齐了。这是本轮检查中少数几处「设计本来就对」的地方。

24_coloc_abf.R 不对齐不影响 PP.H4:coloc.abf 的 ABF 只依赖 z² = (β/se)²,与 β 符号无关。 但它会把同坐标的不同变异(ERI1 6 个、KIT 25 个)一并纳入,实测影响 ≤1.3e-3,不改变任何判定。

这一项不计入缺陷计数——它没有产生错误结论,与「读错列导致假分歧」那类并列会夸大问题严重性。 建议作为代码卫生项在下次重构时处理。

三、三轮核查的总结论

轮次目的结果
第一轮拿已知缺陷模式定向排查其余脚本查出 4 个确认缺陷,均已修;其中 PheWAS 缓存问题使关联数从 10,976 增至 15,789
第二轮数字可追溯性79 项断言零不一致
第三轮独立复算三项复算零差异;算法层与 coloc 包等价

结论层面:A 级候选 ERMAP / IFNAR1 / APOL1 自始至终未变。

三轮下来最值得记的一条方法论:本轮全部缺陷无一是靠通读代码发现的—— 全部来自「换数据实跑」「结果对不上时追根因」「拿已知缺陷模式定向排查」三条路径。

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