Skip to content

10 · 第 4c 步 · 外部复制 · 两侧都换

状态:✅ 完成§0–§6 写于运行之前,§7 为运行后回填权限只分流不否决。★ v4 明写:不可用 4c 的阴性否定 4a/4b 的阳性


〇、这一步做什么

暴露侧换成 deCODE(SomaScan)、结局侧换成 MVP / Salem,两侧同时脱离发现设置。

换了没换
4a暴露平台结局队列
4b结局队列暴露工具
4c两侧都换

一、★★ 先查清的一件事:4c 在我们的设置下大部分是冗余

实测:4a 的 deCODE 工具里 23/28 就是发现队列的同一个 SNP (4a 按 C1R 规则「优先用重叠哨兵」,见 06 页)。

而单工具 Wald 比值的 p 值完全由结局侧决定z = βY/σY,βX 约掉, 见跨平台表怎么读)。

于是对「同一个 SNP」的那些对:

  • 4b:b = βout(MVP) / βexp(Olink)p = p_out(MVP)
  • 4c:b = βout(MVP) / βexp(deCODE)p = p_out(MVP) —— 同一个 p

4c 对这些对不提供任何新的统计证据,只改变 ①效应量尺度 ②方向(当两平台暴露 beta 反号时)。

绝不能把 4c 的「显著」当成第三次独立验证。那是同一个检验数了两遍。

真正独立的只有换了 SNP 的对CLPSrs2766588rs2766575)、 TNXBrs9267797rs150043706)。

1.1 文献先例

Wang et al., BMC Urology 2024(PMC11662591)是找到的两侧都换的直接先例: 发现期用 FinnGen 蛋白组 + deCODE 暴露、UKB-SAIGE 结局; 复制期用 UKB-PPP 暴露、FinnGen R11 结局;3 个蛋白里只有 SLURP1 复制成功, 随后做固定效应 meta 分析合并两期(OR 1.50, 95%CI 1.30–1.74)。

这个先例的分量有限,如实说明

① 它把 FinnGen 的小样本蛋白组(Olink n=619 / SomaScan n=828)当发现集、 把 UKB-PPP(n=54,219)当复制集 —— 复制集比发现集大两个数量级, 与常规的「发现大、复制小」相反,我们的设置恰好相反(4c 功效更低)。 ② 期刊为 BMC Urology,非方法学期刊。

→ 采用它的两期设计与 meta 合并思路,但不照搬其功效预期


二、可做范围

第 3 步存活53 对
4X 否决1 对
当前存活52 对
有 deCODE cis 工具26 对
有外部结局队列且能算出估计34 对
★ 两侧都有 = 4c 可做17 对

缺口:只缺 deCODE 工具 17 对 · 只缺外部结局队列 8 对 · 两侧都缺 10 对。

MaculopathyNeovascGlaucoma 一对都进不来 —— 它们没有任何外部结局队列。 这与既有 Limitations 一致。

2.1 17 对里,真正独立的只有 4 对

对数说明
工具是同一个 SNP13p 值将与 4b 完全相同,不是独立证据
工具换了 SNP4CLPS×Reti · TNXB×Neph/Neuro/Reti —— 唯一真正独立的检验

三、方法

1. 暴露:4a 已选好的 deCODE 工具(beta_exposure_alt / se)
2. 结局:4b 已用的外部队列(MVP DR / MVP neuropathy / Salem DN)
3. Wald 比值,等位对齐到暴露效应等位
4. BH FDR,按结局分组(与第 2/3/4a/4b 一致)
5. 标注每一对是否 same_snp_as_discovery(决定它是否独立于 4b)

判定分类(无否决权):

取值含义
confirmedFDR<0.05 且方向与发现一致
direction_consistent_not_significant同向未达 FDR
oppositeFDR<0.05 且方向相反
not_assessable缺任一侧

★ 另设一列 independent_of_outcome_cohort_check:仅当 same_snp_as_discovery == FALSE 为 TRUE。 写作时只有这一列为 TRUE 的才可称「独立确证」。


四、★ 预期(写于运行之前)

4.1 机械可验的强预期

13 对 same-SNP 的 p_4c 必须与 4b 的 p_repl 数值完全相同(容差 1e-10)。

这不是猜测,是代数恒等式的推论。若不成立,说明谐化或 SNP 匹配有 bug

4.2 数量预期

预期
可评估17 对
confirmed约 5 对,且几乎全部来自 same-SNP 组(因为它们在 4b 就已显著)
独立确证(换了 SNP 且显著)预计 0–1 对TNXB/CLPS 的新工具在外部队列里未必有强信号
opposite预计 1–2 对(AGER/APOE×Neph 在 4b 已是反向未达 FDR)

★ 4b 里 replicated 的 5 对是 AIF1 AOC1 NUDT5 PAM TNXB(均 Retinopathy)。 其中 TNXB×Reti 恰好是换了 SNP 的 —— 它是本步最值得看的一对

4.3 ★★ 验收断言(抓不到即 stop()

#断言
C1same-SNP 的对,p_4c 与 4b p_repl 数值相同(容差 1e-10) —— 代数恒等式,不成立即有 bug
C2same-SNP 的对,b_4c / b_4b 必须等于 βexp(Olink) / βexp(deCODE)(容差 1e-6)—— 验证只有分母变了
C3输入集必须 ⊆ 4X 之后的存活集;被 4X 否决的 APOL1×Maculopathy 不得出现
C4任何一对都不得被 4c 否决vetoed 全 FALSE)
C5independent_of_outcome_cohort_check 为 TRUE 的恰好是换了 SNP 的那些对
C6产物取值全 ASCII、列名无内部流程编号

C1 与 C2 是本步的核心:它们检验的不是「结果好不好」, 而是我有没有正确理解 4c 与 4b 的数学关系。这两条若过不了, 后面所有解读都建立在错误的基础上。


五、产物(预期)

产物路径
判定表results/external_replication/replication_both_sides.csv
脚本analysis/45_replicate_both_sides.R

六、局限(先写下)

  1. 17/52 可做MaculopathyNeovascGlaucoma 全军覆没(无外部队列)
  2. ★★ 13/17 与 4b 不独立(同一 SNP → 同一 p 值),只有 4 对是真正独立的检验
  3. 功效最低:两侧都换,且我们的复制集不比发现集大(与所引先例相反)
  4. 阴性不可用于否定 4a/4b 的阳性(v4 明文)

七、运行结果

执行日期:2026-08-07 状态:✅ 完成 脚本analysis/45_replicate_both_sides.R结论零独立确证;新增 1 对送 4X(TNXB × Retinopathy);不否决任何一对

7.1 预测对账

§4.2 预测实际
可评估 17 对18 行 / 17 对MICB_MICA×Neph 有两条适配体各一行)✅ 需说明
confirmed 约 5 对5 对
独立确证 0–1 对0 对
opposite 1–2 对1 对⚠️ 数对了、对象错了

opposite 那条预测的理由是错的,如实记

我预测 opposite 会来自 AGER/APOE×Neph,理由是「它们在 4b 已是反向未达 FDR」。 这是把「方向相反」当成了「显著相反」 —— 它们的 p 在 4c 不变(same-SNP), 当然仍不显著。实际那 1 对来自完全不同的地方:独立组的 TNXB×Retinopathy。

数量碰对不代表推理对。

7.2 主结果:4c 的贡献比看上去小得多

判定与 4b 同一个检验(same-SNP)真正独立
confirmed50
同向未达 FDR62
反向未达 FDR31
opposite01

★★ 那 5 个 confirmed 不能当第三次独立验证

它们的工具与发现队列是同一个 SNPp_4c 与 4b 的 p_repl 数值完全相同 (C1 实测最大差 0)。写作时只能说效应量在 deCODE 尺度上一致不能说「在两侧都换的设置下得到独立确证」

真正独立的 4 对里,确证数 = 0。

7.3 ★ 新增的 4X 输入:TNXB × Retinopathy

发现工具rs9267797(Olink 哨兵)
deCODE 工具rs150043706(换了 SNP)
4a 估计(deCODE 暴露 × FinnGen 结局)+0.137
4c 估计(deCODE 暴露 × MVP 结局)−0.082,FDR 2.06e-04
4b 判定(Olink 工具 × MVP 结局)replicated

按 v4 §6 路由铁律(4a/4c 报警 → 查表位),已标记 epitope_investigation

但有一条压倒性的替代解释,4X 必须先排除

deCODE 这个工具是罕见变异eaf = 0.0141(MAF 1.4%),F=3145。 它与发现哨兵 rs9267797 是不同的变异, 在 MHC 区(TNXB 在 MHC)完全可能标记不同的独立信号 / 不同单倍型

→ 「同一基因的两个不同 cis 变异效应方向不同」首先是遗传结构问题,未必是表位问题。 4X 处理它时不能默认走表位,必须先看两个变异之间的 LD

7.4 跑中查出的两个缺陷

#缺陷影响抓住它的
14b 的 p 值由 CI 反推(MVP 文件 standard_error 全是 #NA,CI 只有 4 位有效数字)与文件报告的 p 差最多 174 倍3 对判定从「同向未达 FDR」误判。修后 4b 复制成功 7 → 10C1(本步的断言,抓出的是上一步的 bug)
2等位对齐用错了参照:我用 Olink 哨兵的等位去对 deCODE 工具TNXB 三对被误判 not_assessable(而该变异在三个结局文件里都有完整记录);CLPS 因两 SNP 等位碰巧相同而"没报错" —— 等于悄悄给了个可能错的答案。★ 正好打在 4c 唯一的 4 对独立检验上我核实「变异是否真的缺失」时发现

修法: 1 → 结局文件报了 p 就直接用(单 SNP Wald 的 p 恒等于结局侧 p),SE 仍由 CI 反推供 Wald 比值用 2 → 改从 4a 自己写的 deCODE cis 缓存取工具等位,新增   C7(独立检验不得因等位对齐失败而丢失)与 C8(same-SNP 的两平台等位集合须一致)

修复 1 的影响面已逐项核过

4X 产物逐字节相同、否决结论不变(仍 APOL1×Maculopathy)、存活集不变(52 对)。 改变的只有 4b 的三对:AGER×Neuro · GALNT3×Reti · HCG22×Reti 从「同向未达 FDR」→ replicated

7.5 产物

results/external_replication/replication_both_sides.csv(18 行 × 37 列)

7.6 写作口径(定死,别在正文里放大 4c)

  1. 4c 只对 17 对可做Maculopathy / NeovascGlaucoma 一对都没有
  2. 14/18 与 4b 是同一个检验,不得计为独立证据
  3. 独立确证 = 0
  4. 唯一的独立报警 TNXB×Reti 有罕见变异 + MHC 单倍型这个替代解释,待 4X 判
  5. 不得用 4c 的阴性否定 4a/4b 的阳性(v4 明文)

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