主题
阶段六:网络整合与靶点方向筛选
把 ①MR + ④HyPrColoc + ⑤PheWAS 三方结果合起来,筛出能作为药物靶点候选的蛋白,并给出用药方向(抑制还是增强)。 脚本:
analysis/06_network.R产物:results/network_R9/、results/network_R13/
bash
Rscript analysis/06_network.R R9 # 或 R13别把这张图和"那张网络图"搞混了
analysis/02_visualize.R 出的 network.png | 本页 analysis/06_network.R 出的 network_integrated.png | |
|---|---|---|
| 属于 | 阶段三(跨疾病重叠的可视化) | 阶段六(整合靶点网络) |
| 用了什么 | 只有 MR | MR ∩ 共定位 ∩ PheWAS |
| 能下靶点结论吗 | ❌ 不能,未经共定位过滤 | ✅ 可以 |
MR 一跑完就能出的那张网络图不是靶点网络——它最抢眼的枢纽节点(AGER、HCG22、CFB…)恰恰是共定位判定的 LD 假象。所以那张图的标题已改为 Stage 3: ... MR only,并注明"勿作靶点结论"。
一、入选规则(三关)
MR 显著边(FDR<0.05)
│
├── ① 共定位关:该「蛋白×疾病」是否被 HyPrColoc 支持?
│ (PP > 0.7 且 蛋白自己在簇里)
│ ├─ 否 ──────────────────────────► C 级:仅 MR(疑 LD 巧合)
│ └─ 是
│ │
├── ② 方向关:同一蛋白在各并发症间 OR 方向是否一致?
│ ├─ 否(有的 OR>1 有的 OR<1)────► B 级:方向矛盾
│ └─ 是
│ │
└── ③ 多效关:工具 SNP 的 Bonferroni 显著脱靶表型数 > 100?
├─ 是 ────────────────────────► B 级:高多效
└─ 否 ────────────────────────► ✅ A 级:候选靶点| 级别 | 含义 | 能不能写进结论 |
|---|---|---|
| A1:候选靶点(跨病共定位) | 三关全过,且共定位簇里含 ≥2 个疾病 | ✅ 主要发现 |
| A2:候选靶点(单病共定位) | 三关全过,但共定位簇里只有 1 个疾病 | ⚠️ 成立但弱一档,不要与 A1 并列陈述 |
| B:方向矛盾 | 同一蛋白对不同并发症一个增risk一个降risk → 给不出一致用药方向 | ⚠️ 需逐病分开讨论 |
| B:高多效 | 脱靶表型 > 100(如 APOE 685 个) | ⚠️ 提示性,不作因果证据 |
| C:仅 MR | 共定位不支持 | ❌ 很可能 LD 假象 |
用药方向:OR > 1 = 蛋白升高增加风险 → 靶点应抑制(inhibit);OR < 1 = 保护 → 应增强(activate)。
二、结果
2026-07-20 重大更新:候选门槛放宽 + 补齐数据 + A 级分层,本节数字已全部重算
三处变动叠加,本页旧版数字(R9 4 个 / R13 8 个)已作废:
- 候选门槛放宽:共定位原先只对"MR 在 ≥2 个并发症上显著"的蛋白跑,导致 疾病特异性蛋白被结构性排除(详见方法学审计)。现放宽到 ≥1。
- 补齐区域数据:从 Synapse 补下 30 个蛋白的 cis 区域 tar(本地 65 → 97 个)。 此前那 65 个正是按"跨 ≥2 病共享"挑的,光改代码不补数据,扩池等于开着门没人进得来。
- A 级分层:新增 A1/A2,把"共定位簇含几个疾病"这一证据强度差异显式标出来。
⚠️ 关键澄清:A2(单病共定位)并非扩池才出现。旧门槛卡的是「MR 显著的疾病数」, 不是「共定位簇里的疾病数」——所以旧版 8 个 A 级里,PILRA / PILRB / CASP10 本来就是 单病共定位,只是当时看不出来。分层不是扩池带来的新问题,而是把一个一直存在的问题显形了。
下表为 2026-07-22 分家之前的合并 R13 口径,已作废
分家后 R13 拆成 R13_dm(糖尿病并发症) 与 R13_amd(AMD 独立家族) 两支; 2026-07-27 修复轮又改了多效性的处理方式。最新数字见下方「分家后(2026-07-27 定稿)」。
| R9 | R13(分家前,已作废) | |
|---|---|---|
| MR 显著边(去掉 T1D/T2D 基础病) | 156 | 163 |
| 共定位支持的边 | 21 | 21 |
| A1 候选靶点(跨病共定位) | 1 个 | 5 个 |
| A2 候选靶点(单病共定位) | 12 个 | 4 个 |
| B 级(高多效) | APOE、KLK1 | APOE |
分家后(2026-07-27 定稿)
| R13_dm(糖尿病并发症) | R13_amd(AMD 家族) | |
|---|---|---|
| MR 显著边(已排除基础病/外部参照) | 29(蛋白 14 × 结局 4) | 84(蛋白 44 × 结局 3) |
| 共定位支持的蛋白–疾病对 | 1 | 19 |
| A1 候选靶点(跨病共定位) | 0 个 | 6 个(APOE、TGFB1、WARS、CSF2、TNFRSF10A、SPRY2) |
| A2 候选靶点(单病共定位) | 1 个(APOL1) | 3 个(PILRA、PILRB、CASP10) |
| A 级合计 | 1 个蛋白 / 1 条边 | 9 个蛋白 / 19 条边 |
★ 高多效不再自动降级(2026-07-27 修 H11)
本页上表原写「B 级(高多效):APOE」。该处理方式已改。
原代码把 pleiotropy_flag 放在 A1/A2 判定之前,脱靶表型数一旦 > PLEIO_MAX 就永远 到不了 A 级,且被四个下游脚本按 grepl("^A", tier) 剔除 —— 这与 06_network.R 第 27 行 自己的注释「高多效标记(不自动剔除,仅标记)」直接矛盾;而 PLEIO_MAX=100 本就是本流水线自定的经验阈值(见本页后文,非文献标准)。
文献惯例是把 PheWAS 脱靶负担当作安全性注释 / 备选适应症线索,不是自动排除门槛 (Cell Genomics 全球生物库 proteome-wide MR;Alz Res Ther 2025 中 APOE2 仍被列为高优先 治疗靶点、跨人群效应「最强且最稳定」)。
现在:tier 只由「共定位支持 → 方向一致性 → 共定位疾病数」决定;高多效改为 pleiotropy_flag + pleiotropy_note 两个独立列随表输出。于是 APOE 保持 A1, 但带上「⚠高多效: 工具 SNP 在 632 个性状上 Bonferroni 显著」的标注。
定稿 n_offtarget(2026-07-27 PheWAS 分母订正后)
| 蛋白 | n_offtarget | tier |
|---|---|---|
| APOE | 632 ⚠高多效 | A1 |
| PILRA / PILRB | 38 | A2 |
| TGFB1 | 30 | A1 |
| WARS | 24 | A1 |
| CSF2 | 14 | A1 |
| CASP10 | 14 | A2 |
| TNFRSF10A | 6 | A1 |
| SPRY2 | 0 | A1 |
| APOL1(DM 支) | 2 | A2 |
此前这一列全部是 0
06_network.R 早于 03_phewas.R 3.5 小时生成(时间戳实证:17:37 vs 21:09), 合并时 n_offtarget 全为 NA 被置 0 —— 于是「高多效」判定从未真正生效过。 该 bug(H1)已修,并加了「PheWAS 表非空但 n_offtarget 全 0」的自检告警。
一句话总览
R13 的 AMD 线依然是主战场:5 个 A1 里 TGFB1 / WARS / TNFRSF10A 都跨 3 个 AMD 亚型共定位。 R9 的糖尿病并发症线仍然单薄——13 个候选里只有 GALNT3 一个是 A1,其余 12 个都是单病共定位。 放宽门槛后 R9 数量涨了三倍,但证据强度并没有同步提升,写作时切勿据此说"R9 线其实很丰富"。
R13 · 候选靶点 ★(最重要的表)
A1 · 跨病共定位(证据更强)
| 蛋白 | 方向 | 共定位疾病数 | 结局(OR) | 脱靶表型数 | 备注 |
|---|---|---|---|---|---|
| TNFRSF10A | 增强 | 3 | AMD 0.861 · 湿性 0.842 · 干性 0.874 | 6 | ⭐ 全套证据最完整;已知 AMD GWAS 经典位点;IAMDGC 独立复制 + 共定位复制均过 |
| TGFB1 | 增强 | 3 | AMD 0.754 · 湿性 0.702 · 干性 0.788 | 27 | 三亚型一致;但现成药方向与 MR 相反 |
| WARS | 抑制 | 3 | AMD 1.349 · 干性 1.340 · 湿性 1.368 | 22 | 三亚型一致 |
| CSF2 | 抑制 | 2 | AMD 1.257 · 湿性 1.495 | 14 | ⭐ 可重定位:6 个抗 GM-CSF、Phase 3、方向一致 |
| SPRY2 | 增强 | 2 | AMD 0.530 · 湿性 0.404 | 0 | 零脱靶 + 效应量最大 |
A2 · 单病共定位(证据弱一档)
| 蛋白 | 方向 | 结局(OR) | 脱靶表型数 | 备注 |
|---|---|---|---|---|
| CASP10 | 增强 | AMD 0.726 | 13 | 凋亡通路 |
| APOL1 | 抑制 | 黄斑病变 1.452 | 2 | 🆕 补数据后新增;多效性极低 |
| PILRA | 抑制 | AMD 1.064 | 38 | 脱靶数为候选中最高 |
| PILRB | 抑制 | AMD 1.056 | 38 | 与 PILRA 同一个哨兵 SNP(rs1859788),二者高度相关;OR 已按各自真实暴露 β 订正 |
R9 · 候选靶点
A1 · 跨病共定位——只有 1 个
| 蛋白 | 方向 | 共定位疾病数 | 结局(OR) | 脱靶表型数 |
|---|---|---|---|---|
| GALNT3 | 增强 | 2 | 糖网 0.846 · 多并发症 0.873 | 2 |
A2 · 单病共定位(12 个,证据弱一档)
| 蛋白 | 方向 | 结局(OR) | 脱靶表型数 |
|---|---|---|---|
| VTCN1 | 抑制 | AMD 2.715 | 0 |
| ADGRG1 | 增强 | 低血糖 0.367 | 1 |
| CCN1 | 抑制 | 增殖性视网膜病变 1.930 | 1 |
| APOL1 | 抑制 | 黄斑病变 1.521 | 2 |
| IFNAR1 | 增强 | 黄斑病变 0.782 | 3 |
| CLPS | 抑制 | 多并发症 1.102 | 4 |
| IL10 | 抑制 | 酮症酸中毒 1.908 | 13 |
| MANSC4 | 增强 | 酮症酸中毒 0.912 | 13 |
| NUDT5 | 抑制 | 糖网 3.080 | 25 |
| TGFB1 | 增强 | AMD 0.749 | 27 |
| IL7R | 抑制 | 视网膜NOS 1.135 | 59 |
| IL6R | 增强 | 多并发症 0.947 | 71 |
R9 这批 A2 要谨慎对待
12 个里有多个的结局是酮症酸中毒、低血糖这类急性代谢事件,而非微血管并发症—— 它们与"糖尿病并发症靶点"这个命题的相关性本身就需要论证。加之全部只有单病共定位、 部分脱靶表型数很高(IL6R 71、IL7R 59),不建议作为主要发现陈述。
三、怎么读这张网络图
network_integrated.png(600dpi)+ .pdf(矢量,可 Illustrator 编辑):
| 图元 | 含义 |
|---|---|
| 圆形节点 | 蛋白(节点越大 = PheWAS 脱靶表型越多 = 越可疑) |
| 方形节点 | 疾病 |
| 红线 | Risk(OR>1)→ 靶点方向为抑制 |
| 蓝线 | Protective(OR<1)→ 靶点方向为增强 |
| 实线 | A 级候选靶点 |
| 虚线 | B 级(高多效 / 方向矛盾) |
图里只画共定位支持的边(C 级仅 MR 的边不画)——所以这张图上的每条线都已经过了共定位这一关。
四、输出文件
| 文件 | 内容 |
|---|---|
network_edges_candidate.csv | ★ A 级候选靶点的边,直接可用于写作 |
network_edges_all.csv | 全部 MR 边 + 三关判定列(coloc_support/dir_conflict_disease/pleiotropy_flag/tier) |
target_list.csv | 每个蛋白一行:方向、脱靶数、级别 |
network_integrated.png / .pdf | 整合网络图 |
五、局限与注意
写作时必须说明
- A 级 ≠ 板上钉钉。它只是"MR + 共定位 + 方向 + 多效"四道关都没被否掉,仍需功能实验验证。
- PILRA/PILRB 是同一位点的两个蛋白,别当成两个独立证据。
n_offtarget > 100这条线是本流水线定的经验阈值(不是文献标准),换课题可在analysis/06_network.R的PLEIO_MAX调。- 单工具的固有局限仍在:cis-pQTL 多为单 SNP,做不了 Egger/LOO,可信度靠共定位 + PheWAS 两根支柱支撑(跨结局一致性只是支持性观察,不作独立验证)。
- OR 数值不可直译(单工具外推,见 从零读懂 MR §3.3),只读方向与显著性。
环境坑:图的红蓝配色曾被静默丢弃
ggplot2 4.x + ggraph 2.2.2 下 scale_edge_colour_manual() 会失效——边全部渲染成灰色,且不报错。本流水线已改用 scale_edge_colour_identity()(把十六进制色直接写进数据列)绕开。
这个坑很隐蔽:装
hyprcoloc时连带把 ggplot2 升到了 4.x,导致同样的代码在升级前出的是彩色图、升级后出的是灰图。analysis/02_visualize.R和analysis/06_network.R都已修,图重新可复现。
相关:下游分析 · 结果怎么看 · 批量筛查 · 方法引擎 10-下游分析脚本