Skip to content

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

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

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

06 · 第 4a 步 · 外部复制 · 换暴露平台(deCODE)

状态:✅ 完成 —— 六条验收断言全部 PASS;53 对 → 稳健 22 · 送 4X 4 对 · 不可评估 27(保留)

★ 本步方法在执行中被推翻重写一次(前四版作废),改为严格照搬 C1R 原文。教训见 §8.6。

本页保留了判错过程,不要只看结论

§1–§7 是跑前写的,其中 §4 的方法(IVW 合并多工具 + 自定三分法)后来被推翻。 §4 与 §6 的预期一律保持原样不回改 —— 它们记录的是「当时怎么想的」。 实际执行的方法与结果在 §8

★ 这一步是本轮唯一一次「方法在执行中被推翻」的,教训值钱,故完整保留。

结局命名

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


一、这一步做什么,以及它做什么

:在 deCODE(SomaScan 平台,35,559 名冰岛人)里从头挑 cis 工具—— 可能挑到和 Olink 完全不同的变异——然后重做 MR。

回答的问题:换一个蛋白测量平台、从头建工具,因果方向还成不成立? 顺带摆脱「哨兵是在 UKB-PPP 里选出来的」这一层赢者诅咒。

★ 不做4a 没有否决权。 按 v4 §2.2,第 4 步只分流

4a 结果处置
方向一致concordant(+ 强度:p<0.05 为 strong,否则 directional_only
方向相反报警 → 送 4X 表位/PAV 调查(★ 4X 才是全流程唯一否决点)
不可评估保留,不当阴性

⚠️ 方向相反 ≠ 我们错了。 deCODE 用 SomaScan 适配体,若哨兵附近有蛋白编码变异(PAV) 破坏了适配体表位,坏的是 SomaScan 那一侧。判谁对谁错是 4X 的事,不是 4a 的事。 本课题的 APOL1 就是这么判的(Olink 与两个 SomaScan 队列相反 + 哨兵是 PAV)。

与已做过的「同变异跨平台」不是一回事:那个是拿我们的哨兵去 deCODE 查效应; 本步是在 deCODE 里重新选工具


二、用什么数据、什么版本

暴露deCODE 血浆蛋白组 pQTL,Ferkingstad et al. Nat Genet 2021;53:1712–1721
平台 / 样本SomaScan,4,907 适配体 / 4,719 蛋白,35,559 名冰岛人
本地路径/mnt/d/mrdata/deCODEdata/(55 个 .txt.gz,各约 950 MB)
坐标系hg38,与主分析一致(deCODE readme 明示)
结局FinnGen R9 五个并发症全部(旧版只写死了黄斑+视网膜两个)
LD 面板1000G EUR,按 rsID clump
输入集第 3 步存活集:53 对 / 29 蛋白

2.1 ★ 两个质控辅助文件(本轮新接入)

deCODE 的 proteomics_readme.txt 明确要求用,旧代码一个都没用

文件大小作用旧代码
assocvariants.excluded.txt.gz52 MB列出 3,725,211 个因质量问题应当剔除的变异从未使用
assocvariants.annotated.txt.gz422 MB提供真实 effectAlleleFreq订正多等位变异的 otherAllele❌ 本脚本未用(decode_platform_check_r9dm.R 用了)

readme 原文两处关键:

"a subset of the variants in the summary statistics files should be excluded due to quality issues."

"the summary statistics files sometimes incorrectly have effectAllele=otherAllele for multiallelic variants... This has been corrected in the Extra annotation file."

⚠️ 还有一条易错点:ImpMAF 是次等位频率,不是效应等位频率 (readme:"the effectAllele is not always the minor allele")。 只能用来滤罕见变异和判回文,不能当 eaf 用


三、覆盖率 —— 4a 够不够格当分流器

分层蛋白配对
总体20 / 29 = 69%35 / 53 = 66%
MHC 蛋白6 / 11 = 55%17 / 29 = 59%
非 MHC14 / 18 = 78%18 / 24 = 75%

结论:66% 够格当分流器(远高于「大半不可评估」)。

★★ 但缺口不是随机的,它系统性集中在 MHC

缺的 9 个里 5 个是 MHCHCG22 LTB TRIM40 ATP6V1G2 BTN3A2), 非 MHC 只缺 4 个(ACRBP BCL2L15 LACTB2 TPPP3)。

SomaScan 面板对 Olink 的 MHC 区靶标覆盖明显更差,而 MHC 恰恰是假阳性雷区、 最需要跨平台核验的地方——能力最弱的地方正是最需要能力的地方。

这本身是个可写进论文的观察。写作时必须说明「不可评估」的分布是偏的, 不能让读者以为是随机缺失。

⚠️ 口径来源:「deCODE 没有其余 9 个」是用户在 deCODE 下载站检索的结果, 不是我核对官方面板清单得出的。记录如实标注依据来源。


四、什么检验方法

每个蛋白 × 每个适配体:
  cis 区 = UKB-PPP 哨兵位置 ±500kb(hg38)
  → 剔除 excluded 质控名单
  → 用 annotated 补 effectAlleleFreq、订正多等位 otherAllele
  → 剔多等位(otherAllele='!')、非 rs、ImpMAF<0.01、SE<=0
  → p < 5e-6
  → plink clump (r²<0.001, 10Mb)
  → F >= 10
  → 与 FinnGen 结局谐化(等位对齐;回文且 MAF>0.42 剔除)
  → 单 SNP Wald ratio

参数与主分析同口径(config.yamlpval_cis 5e-6 / cis_window_kb 500 / clump_r2 0.001 / clump_kb 10000 / f_stat_min 10)。

4.1 ★ cis 锚点为什么用哨兵位置

本项目没有本地基因坐标注释文件config.yamlgene_annotation 有意留空)。 实测本集合内哨兵到基因的距离中位数 0、最大 4,447 bp, 相对 ±500 kb 窗口误差 <1%,故用哨兵当锚点。这一点要写进 Methods。

4.2 一个基因多个适配体:分别算,互相印证

NOTCH2APOL1MICB_MICA 各有 2 个适配体每个适配体单独算,汇总到「对」层时:任一适配体方向相反 → 该对送 4X

MICB_MICA 是 Olink 的一个复合探针测两个蛋白,deCODE 上是 MICB / MICA 两个独立文件,两个都映射过来——适配体之间不一致本身就是表位问题的信号


五、★★ 一个必须提前交代的口径变更:cis 窗口收窄

旧的 decode_new/*.cis.tsv.gz 是用比 ±500kb 更宽的窗口切的 (实测 IFNAR1 旧工具跨度 1.33 MbAPOL1 970 kb)。

本轮改用 config 的 ±500 kb,与主分析一致 → 会剔掉一部分旧工具这是有意的口径统一,不是 bug。 提前算清楚,免得跑完看到「工具变少」误判。


六、★ 预期结果(运行前写定)

6.1 结构性预期(应完全一致,差 1 即缺陷)

预期
输入:第 3 步存活53 对 / 29 蛋白
deCODE 可评估蛋白20
待处理适配体文件数23(20 个基因,其中 3 个各有 2 个适配体)
多适配体基因NOTCH2 / APOL1 / MICB_MICA
pinfo 行数断言20(不等则 stopifnot 直接挂)
判「不可评估-平台无数据」的对18

6.2 ★ 可证伪的预测:旧 3 基因在新口径下的工具去留

新代码同时改了 窗口收窄excluded 过滤,旧结果因此必然变化。 每一处变化都必须能指名道姓归因到某条规则,否则按缺陷处理。

gene旧工具距锚点 >500kb 应剔除新窗口预期保留
IFNAR18rs183019916(565kb) · rs12627454(924kb)≤ 6
APOL15rs56953345(835kb)≤ 4
ERMAP0("deCODE 上无达阈 cis 工具")仍应为 0

★ 写「≤」而不是「=」:excluded 质控名单可能再剔掉其中几个。 若实际 < 预期,我必须指出是哪个 SNP、被哪条规则剔的;指不出来就是缺陷。

6.3 质控量级预期

预期
deCODE 单文件总变异数30,856,627
excluded 名单占比3,725,211 / 30,856,627 = 12.1%
→ 每个 cis 区被剔的比例约 12%(大幅偏离需查原因)

6.4 不可预先指定的部分(这才是要测的)

  • 每个蛋白在 deCODE 里选出几个工具、是不是同一个变异
  • 方向一致 / 相反的分布
  • 有几对送 4X

⚠️ 这几项不写预期是对的——它们是本步的测量目标。 写"预期方向一致"等于预设结论。


七、预期产物

results/platform_check/
  decode_reselect_instruments.csv   重选出的工具(含 eaf 真值列)
  decode_reselect_qc.csv            ★ 质控台账:每适配体剔了多少、为什么
  decode_reselect_mr.csv            重做的 MR(5 个并发症 × 全部工具)
  decode_4a_verdict.csv             ★ 与正向并排的 4a 三分法判定
  decode_cis/<GENE>__<SeqId>.cis.tsv.gz   cis 区缓存(23 个)

预计耗时:23 个适配体文件 × 950 MB zcat + annotated 422 MB 全扫一遍, 估计 40–70 分钟


八、实际结果

执行日期:2026-08-07 状态:✅ 完成(第五版实现,前四版全部作废) 代码基线analysis/28_decode_reselect.R 第五版

★★ 本步的方法在执行过程中被推翻重写了一次,必须交代

§4 写的方法(IVW 合并多工具 + 自定三分法)是错的,已废弃。 第五版改为严格照搬 C1R 原文(Li et al. medRxiv 2026.07.14.26358022), 每条规则都能指到原文行号。§4 保留原样以记录判错过程, 实际执行以下方 §8.1 为准

8.1 最终采用的方法(C1R 原文,可指到行号)

工具选择(原文 Methods 第 365–373 行):

(1) If the IVs identified for a given protein in the Iceland cohort overlapped with those used for the same protein in the UK Biobank, the overlapping instruments were prioritized to ensure consistency with the discovery analysis; (2) If no overlapping IVs were available ... cis-pQTLs that were present in both the protein and the corresponding comorbid disease were identified; then, the cis-pQTL showing the strongest association with the protein (i.e., the smallest p-value) was selected as the instrument; (3) If none of the above criteria were met, the protein was excluded from the validation.

单工具,不做 IVW;优先用与发现队列重叠的同一个变异。

判定(原文 Results 第 113–117 行):

...displayed inconsistent effects (PFDR<0.05 and associated in opposite direction) compared with those in the discovery cohort

→ 触发报警需 FDR<0.05 且方向相反,二者缺一不可。FDR 按结局分组(与第 2/3 步一致)。

角色(原文 Results 第 119–124 行):对存活者的加分筛,不是筛查报警器。

8.2 ★ 验收断言:六条全部 PASS

跑前写死在代码里,不通过直接 stop()

#断言结果
V1阳性对照 APOL1×Maculopathy 必须判 opposite✅ PASS
V2IFNAR1 必须用回哨兵 rs914142✅ PASS
V3IFNAR1×Maculopathy 方向一致✅ PASS(robust_to_instrument_selection
V4输入 = 第 3 步存活 53 对 / 29 蛋白✅ PASS
V5每个(蛋白,结局,适配体)只有 1 个工具✅ PASS
V64a 不否决任何一对(v4 §2.2)✅ PASS

8.3 结果

53 对 → 稳健 22 · 送 4X 4 对 · 不可评估 27(全部保留)

判定(对层)对数
not_assessable27
robust_to_instrument_selection(加分)22
opposite(→ 4X)4

工具来源:28 个有效工具里 23 个是与发现队列重叠的哨兵、5 个是 deCODE 自己 p 最小的。 ★ 这正是原文规则(1)的效果——前四版让 clump 把哨兵扔掉,是判定失效的根源。

8.4 ★ 送 4X 表位调查的 4 对

蛋白结局变异工具来源b正向b_4aOR_4aFDR_4a
APOL1Maculopathyrs136168重叠哨兵+0.420−0.3530.7034.9e-05
MICB_MICAMaculopathyrs3132467重叠哨兵+0.108−0.5620.5706.3e-06
MICB_MICANephropathyrs3132467重叠哨兵+0.092−0.4750.6222.5e-05
AOC1Retinopathyrs1049742重叠哨兵−0.212+0.2861.3312.9e-04
  • APOL1 是已知的表位伪影(Olink 与两个 SomaScan 队列方向相反 + 哨兵是 PAV), 流水线独立地把它抓回来了 → 阳性对照通过
  • MICB_MICA 两个适配体互相矛盾(2 对),是最强的表位伪影信号
  • AOC1 是本轮新出现的,此前从未被标记

8.5 IFNAR1 的准确结论

用回哨兵 rs914142(deCODE 上 p=1.05e-69)后判为 robust_to_instrument_selection —— 与「三平台同向」完全一致。

★ 前四版把它误判为 opposite,根因是让 clump 把哨兵扔掉rs914142 被 47 kb 外的 rs58886971 顶掉,后者占 IVW 权重 82.5% 且对结局效应为零 (p=0.94),把合并值拖到 0.003。那是实现造成的,不是数据。

8.6 ★★ 历史教训:前四版为什么连续失效

版本问题后果
v1判定落在工具层而非适配体层26 个可评估里报 20 个"方向相反",无鉴别力
v2把**"真反转"与"估计≈0"混为一档**IFNAR1 被误判
v3加异质性闸门(Q + 权重占比)把阳性对照 APOL1 也吞了(它 Q p=0.48 工具其实一致,只因单工具权重 0.895 被拦);MHC 区 Q p 普遍 1e-20 以下 → 闸门等于自动放弃全部 MHC 蛋白
v4→v5读原文后推倒重写六条验收全过

四条根因,越往后越根本:

  1. 没读脚本自己引用的文献。 28_decode_reselect.R 第 12 行就写着「对标:Li et al. medRxiv 2026.07.14.26358022」,PDF 三个月前就在 F:\project。 项目规则「研究与重用(任何新实现前必需)」被跳过。
  2. ★ 角色搞反 —— 真正的根因。 原文用它做加分筛,我做成了报警器。 角色一反,判据就失去自然锚点:加分筛的标准是现成的(还显著且同向), 报警器的标准得自己发明 —— 所以才会三次发明、三次推翻。
  3. 让 clump 扔掉了发现队列的哨兵,与原文规则(1)相反(见 §8.5)。
  4. ★ 手里有阳性对照却没当验收标准。 APOL1 是已知表位伪影, 任何正确规则都必须抓到它。直到第三轮才顺手查。

★★ 第 3 步做对了、4a 做反了,对比很清楚:第 3 步的 FDR 口径是在看到新结果之前 定的;4a 是跑完看结果顺不顺眼再调规则。本版把六条验收写进代码断言,就是堵这个。

8.7 产物

results/platform_check/
  decode_4a_verdict.csv        55 行(蛋白 x 结局 x 适配体)
  decode_4a_pair_verdict.csv   53 行(对层)
  decode_reselect_qc.csv       质控台账(每适配体剔了多少、为什么)
  decode_cis/<GENE>__<SeqId>.cis.tsv.gz   cis 缓存 23 个
results/logs/decode_4a_v5_20260807.log

全部产物非 ASCII 字节 = 0(代码内置断言)。


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

内容暂定去向依据
4a 方法(重选工具、±500kb、质控三件套)正文 Methods尤其 excluded 名单必须写,否则无法复现
cis 锚点用哨兵位置及其误差(<4.4kb)正文 Methods自定口径,必须交代
覆盖率 66% 及其 MHC 偏倚正文 Results + Limitations★ 这是发现,不只是限制
三分法判定结果正文(漏斗一格)+ 补充表
质控台账 decode_reselect_qc.csv补充材料审稿人可据此复现
送 4X 的对正文4X 是唯一否决点,必须可追溯

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

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