主题
R9 按 v4 流程重跑 · 执行实录
这个目录是「做了什么」,不是「该怎么做」。 方法定义在 分析流程定稿 v4, 定序理由与查证过程在 流程答疑 与 答疑 · 数据版本与作图。 两者不要混:那边改了叫「改流程」,这边改了叫「改记录」。
2026-08-07 起,R9 主线(FinnGen R9 糖尿病并发症 × UKB-PPP 血浆蛋白) 在全新目录里从零重跑一遍。本目录逐步记录: 用了什么数据和版本 · 什么检验方法 · 结果是什么 · 结果文件在哪 · 怎么解读 · 进正文还是补充。
本页 2026-08-07 已从 v3 刷到 v4
重跑开跑时依据的是流程 v3,跑到第 2 步之后流程升级到 v4(改动见下)。 已完成的 A/B/0/1/2 五个检查点不受影响——v4 的两处变更都落在第 4 步及以后, 前三步的方法与数字一个没动。本页与各分页已按 v4 重述, 第 3 步起一律按 v4 执行。
目录名仍是 05-R9v3重跑实录 且不会改:它是 URL 与文件路径, 改名会断掉计划文件、记忆与已发布页面里的全部链接。 这与「结果 CSV 保留 T1D_gcst 而图上用 Type 1 diabetes」是同一条原则—— 路径层保留标识符,展示层改文案。
v3 → v4 改了什么(对本轮的影响)
| 变更 | 内容 | 对已完成步骤的影响 |
|---|---|---|
| ① 第 4 步拆成 4a / 4b / 4c | 4a 换暴露平台 · 4b 换结局队列 · 4c 两侧都换 | 无(第 4 步尚未开始) |
| ② 第 4 步不再有否决权 | 复制只分流,不判真伪;否决提出来成独立的 4X 表位 / PAV 调查 | 无 |
| ③ MHC 判定改用数据源自带标记 | 不再自己划坐标,用工具表的 MHC 列(= Sun 2023 的 25.5–34.0 Mb,27 个) | ✅ 第 1/2 步已按此执行 |
★ v4 的 ①② 两条没有直接文献先例,来自结构推理与本课题 APOL1 实例。 写 Methods 时必须声明这是本研究自定的流程,不能挂靠文献——详见 v4 定稿 §5 的证据强度表。
为什么要重跑(而不是在旧结果上打补丁)
流程变更不改 MR 估计本身:
| 变更 | 对数值的影响 |
|---|---|
| 不设 MHC 排除步骤 | 无 —— 旧代码本来就没在工具选择阶段排 MHC |
| 顺序改成 方向性 → 外部复制 → 共定位 | 无 —— 纯否决步骤的交集可交换,最终存活集不变 |
| 外部复制改三分法(「不可评估」不再当阴性) | 存活者变多,不减少 |
| v4:复制降为分流、否决移到 4X | 存活者可能再变多(复制方向相反不再直接出局,改为送查) |
所以主链数字预期基本不变。重跑的价值在另外三点:
- 血统清晰 —— 避免「上游改好了、下游还是旧产物」(2026-07-29 踩过)
- 口径统一 ——
in_MHC原先四处写法不一(两处硬编码蛋白名、两处坐标写错成 25 Mb),现统一到analysis/_mhc.R - ★ 顺带验准确性 ——
resume: false从零重算,与旧结果逐项比对, 等于给之前三个月的结果做一次完整的可复现性证明(结果见文末)
★ 结局命名对照(本目录内一律「内部 ID」,交付物一律「显示名」)
本目录是执行实录,表格与正文用内部 ID——因为它们就是文件名、代码变量名与日志里的字符串, 换成显示名就找不到东西了。但内部 ID 绝不允许出现在图上或论文表格里。
| 内部 ID(本目录用) | 论文显示名 | 数据来源(写图注/Methods,不写图上) |
|---|---|---|
Retinopathy | Diabetic retinopathy | FinnGen R9 DM_RETINOPATHY_EXMORE |
Maculopathy | Diabetic maculopathy | FinnGen R9 DM_MACULOPATHY_EXMORE |
Nephropathy | Diabetic nephropathy | FinnGen R9 DM_NEPHROPATHY_EXMORE |
Neuropathy | Diabetic neuropathy | FinnGen R9 DM_NEUROPATHY |
NeovascGlaucoma | Neovascular glaucoma | FinnGen R9 DM_NEOVASCULAR_GLAUCOMA |
T1D_gcst | Type 1 diabetes | GWAS Catalog GCST90824163 |
T2D_mahajan | Type 2 diabetes | DIAMANTE Mahajan 2018b, noUKBB |
T1D_crouch | Type 1 diabetes (Crouch) | GCST90013791(零重叠备选) |
转换由 analysis/_viz_common.R 的 pretty_outcome() 负责,strict = TRUE 时遇到未登记 ID 直接报错。
⚠️ 三个已知的泄漏口,均未修,统一留到第 7 步(详见 答疑 Q4):
- 结果 CSV 的行列名就是内部 ID —— 实测
results/下 19 个文件含T1D_gcst/T2D_mahajan。pretty_outcome()只在画图代码里被调用,管不到 CSV。 - ★
screen_R9_dm/SUMMARY_publication.csv风险最高 —— 文件名带publication、 内容正好是正文 Table 1 的原料(每结局病例/对照/工具数/最小 F/显著数), 而outcome列写着T1D_gcst。这是 19 个里唯一命名本身诱导犯错的。 - 图的副标题是自由文本,
pretty_outcome()管不到——实测 LDSC 热图副标题写着FinnGen R9_dm endpoints,既含内部 ID 又是事实错误(6 个性状里 2 个不是 FinnGen)。
修法(第 7 步统一做):写「发表版导出」函数,行列名过 pretty_outcome() 另存一份; 加断言「图内任何文本不得含 R9_dm|R13|_gcst|_mahajan|_finngen」。 不改结果文件本身——那会破坏文件名 ↔ 代码字符串的对应关系。
两条贯穿全程的纪律
纪律一:每步的记录分两半,前半必须在跑之前写完
| 跑前写 | 跑后写 |
|---|---|
| 数据源 + 版本 + 文件绝对路径 | 实际结果数字 |
| 检验方法 + 关键参数 + 文献出处 | 实际产物路径 |
| ★ 预期结果(具体数字/范围/"应与旧结果逐位相同") | 解读 |
| 预期产物路径 | 暂定正文或补充 |
★ 跑前写下的预期与实际不符,一律先按缺陷处理,不许现场解释掉。 理由:事后补填的"预期"没有约束力 —— 任何差异都能在事后编出一个合理解释, 而这正是最难自查的一类错误。
纪律二:正文/补充的归属在第 7 步之前只能是暂定
第 4 步的分流结果会变、4X 的否决会变、第 5 步的升级集会变,图表归属跟着变。 每步只记「暂定去向 + 依据」,第 7 步统一复核一次,避免前后打架。
检查点与进度
代码脚本与流程步骤不是一一对应:01_screen.R 一个脚本里同时做了 第 1 步(F/R²、Steiger filtering)和第 2 步(Wald + FDR)。 处理办法是不动代码,一次运行产出两份记录,分两次检查 —— 记录粒度可以细于运行粒度。
★ 全流程只有两个否决点:第 3 步 与 4X。 其余步骤或分流、或升级措辞、或只标注。
| # | 检查点 | 权限 | 状态 | 记录 |
|---|---|---|---|---|
| A | 备份与环境基线 | — | ✅ 完成 | 00 备份与环境基线 |
| B | 新建目录 + 改代码 + 写死断言 | — | ⚠️ 主体完成,2 处待决 | 01 新建目录与代码改造 |
| 0 | 数据验收(输入断言 + LDSC) | — | ✅ 完成 | 02 第 0 步 数据验收 |
| 1 | 工具选择 | — | ✅ 完成 | 03 第 1 步 工具选择 |
| 2 | MR + 多重检验校正 | — | ✅ 完成 | 04 第 2 步 MR 与多重检验校正 |
| 3 | 方向性 / 反向 MR | ★ 否决 | ✅ 完成 | 05 第 3 步 方向性与反向 MR |
| 4a | 外部复制 · 换暴露平台(deCODE) | 加分筛 | ✅ 完成 | 06 第 4a 步 换暴露平台 |
| 4b | 外部复制 · 换结局队列(MVP / Salem) | 分流 | ✅ 完成 | 07 第 4b 步 换结局队列 |
| 4c | 外部复制 · 两侧都换(确证,不筛查) | 分流 | ⬜ 下一步 | — |
| 4X | 表位 / PAV 调查 | ★ 否决(全流程唯一) | ⬜ | — |
| 4.5 | 通路富集(用 4X 之后的集合,按 MHC 分组) | 描述 | ⬜ | — |
| 5 | 共定位 | ★ 措辞升级关卡 | ⬜ | — |
| 6 | 描述性注释 6-1~6-4(合并为一个检查点) | 描述 | ⬜ | — |
| 7 | 定稿 + 漏斗图 + 正文/补充统一复核 + 发表版命名导出 | — | ⬜ | — |
关于第 0 步的 LDSC
v4 §3.2 规定 LDSC 非必需——它是性状层的数据体检,不是筛选链的一环, 触发条件是「换了结局数据源」或「需要估计样本重叠」,本轮两个条件都不满足。
本轮仍然跑了,原因是用户指定要跑,不是流程触发。 记录时已标注为「用户指定,非流程必需」,写 Methods 时按数据描述处理,不进筛选漏斗。
漏斗总表
这张表就是最终正文 Figure 1 的原料。每过一个检查点填一行,空着的不许预填。
| 节点 | 蛋白数 | 蛋白×结局 对数 | 其中 MHC 蛋白 | 旧值(对照) |
|---|---|---|---|---|
| 工具池(cis 记录) | 1,954 | 1,955 条 | 27 | — |
| └ 标准化后可用工具 | — | 1,875 SNP(含 1 条无 rsID 不可用) | — | — |
| MR 显著(FDR < 0.05,五并发症) | 31 | 57 | 11 | 31 蛋白 / 57 对 ✅ 一致 |
| ├ 第 3 步 通过 | — | 49 | — | — |
| ├ 第 3 步 功效不足-无法评估(保留) | — | 4 | 4 | 旧口径会否决其中 1 对 |
| └ 第 3 步 否决(★否决点) | — | 4 | 1 | 旧 FDR 口径为 8 对 |
| 第 3 步后存活 | 29 | 53 | 11 | 退出 ITGB7、TIGIT |
| ├ 4a 对工具选择稳健(加分) | — | 22 | deCODE 覆盖 20/29 蛋白 | |
| ├ 4a 不可评估(保留) | — | 27 | 缺口集中在 MHC(5/9) | |
| └ 4a 方向相反 → 送 4X | — | 4 | APOL1 · MICB_MICA×2 · AOC1 | |
| ├ 4b 复制成功(FDR<0.05 同向) | — | 7 | 全在糖网 | |
| ├ 4b 不可评估(保留) | — | 19 | 全是 Maculopathy,无外部队列 | |
| ├ 4b 方向一致未达 FDR(保留) | — | 21 | — | |
| ├ 4b 方向相反未达 FDR(保留) | — | 5 | 离阈值远,属噪声 | |
| └ 4b 方向相反 → 送 4X | — | 1 | TRIM40 × Retinopathy | |
| 4c 两侧都换(确证) | 待跑 | |||
| 4X 调查后存活(★唯一否决点) | — | |||
| 第 5 步 共定位升级 | 15 对 / 12 蛋白(旧口径) |
⚠️ 4a 三行相加 = 53 = 进入 4a 的总数,不是"淘汰"。 4a 一个也不淘汰——它是加分筛:22 对加分、4 对送 4X 调查、27 对保留待定。 真正的淘汰只发生在第 3 步与 4X 两处。
★★ 4a 与 4b 没有任何一对同时报警 —— 这是 v4「两者盲区互补」的实证: 4 个 4a 报警里 2 个落在 4b 盲区(Maculopathy 无队列),唯一的 4b 报警落在 4a 盲区 (deCODE 无 TRIM40)。交叉表见 07 页 §8。
★ 4a 的定位在执行中被订正过:原先按「分流器」实现,读 C1R 原文后改为 「稳健性加分筛」。前四版实现连续判定失效,教训见 06 页 §8.6。
★ 可复现性证明(本轮的额外收获)
resume: false 从零重算,与三个月前的旧结果比对:
| 层 | 结果 |
|---|---|
| LDSC(第 0 步) | rg / rg_long / h2 三个文件 cmp 逐字节相同;6 个 sumstats 字节大小全同 |
| 工具选择 + MR(第 1/2 步) | results/screen_R9_dm/ 下 16 个 CSV MD5 全部相同 |
| 反向 MR(第 3 步) | 104 个文件 cmp 逐字节相同(主产物 2 + _iv 7 + _prot 95) |
→ 已证明:流水线这三层确定性、环境未漂移、旧结果可信。
★ 第 3 步的做法值得复用:先用未改动的代码验可复现性,再应用新规则, 两份产物都留档(原口径存为 reverse_mr_results_ORIGGROUPING_20260807.csv)。 既不丢证明,也避免「跑完再挑口径」。
⚠️ 只能推到已跑过的层。第 4 步及以后尚未验证,不得据此声称"整条流水线可复现"。
相关
- ★ 分析流程定稿 v4 —— 方法定义,本轮唯一依据
- 分析流程定稿 v3 —— 已弃用,仅供追溯 v4 的改动
- 流程答疑 —— 每处定序的查证过程与判错记录
- 答疑 · 数据版本与作图 —— discovery vs full cohort、命名与作图时机
- ★ 跨平台 OR 表怎么读 —— 三平台不是三次独立复制,p 值恒等
- 工程约定与事故记录 —— 编码 / 部署 / 输入集漂移
- MHC 区为什么是假阳性雷区
- 计划全文:
F:\project\待办计划-R9按v4流程重跑-进度与下一步.md