主题
结果怎么看(逐列 · 逐图 · 逐结论)
跑完了,
results/下一堆 CSV 和图,每一列什么意思、哪些数字该看、什么时候能下结论——这一页全讲清楚。 所有例子用的都是本课题的真实结果(R9 糖网 / AGER)。方法原理见 从零读懂 MR。
一、先搞清楚:你跑的是哪条路线
产物完全不同,别找错文件:
| 你跑的 | 产物在哪 | 长什么样 |
|---|---|---|
Rscript analysis/01_screen.R R9(批量筛查,本课题主力) | results/screen_R9/ | 一堆 CSV + figures/ |
Rscript run_all.R(单条精细分析) | results/report/MR_report.html + results/pairs/ | 一份 HTML 报告 |
本页 §二~§五 讲批量筛查,§六 讲 HTML 报告。
二、批量筛查的产物地图
results/screen_R9/
├── Retinopathy_all.csv ← 糖网:全部 1587 个工具的结果(无论显著与否)
├── Retinopathy_significant.csv ← 糖网:只有 FDR<0.05 的(★最常看)
├── ...(每个结局两个文件)
├── SUMMARY_publication.csv ← ★全局体检表:每个结局一行
├── overlap_matrix.csv ← ★跨结局重叠:哪个蛋白在几个病里显著
└── figures/ ← upset / forest_shared / network(png 600dpi + 矢量 pdf)看结果的推荐顺序(从宏观到微观,别一上来就扎进单行):
SUMMARY_publication.csv—— 先体检:哪些结局有功效、工具强度够不够overlap_matrix.csv—— 再看格局:哪些蛋白横跨多个病(最有价值的靶点)<结局>_significant.csv—— 最后钻细节:具体某个蛋白的效应量、方向、可信度
三、SUMMARY_publication.csv:全局体检表
每个结局一行。这是投稿时最常被引用的表,也是你判断"这个结果值不值得看"的第一站。
| 列 | 含义 | 怎么看 |
|---|---|---|
outcome | 结局名 | 对应 outcome_manifest.csv 的 id |
group | 分组 | eye(眼)/ neuro(神经)/ renal(肾)/ systemic(全身)/ base(T1D/T2D 基础病) |
ncase / ncontrol | 病例数 / 对照数 | 决定统计功效。ncase < 1000 → 结果基本没信息量 |
n_instruments | 参与的工具数 | 匹配上、谐化成功的 SNP 数 |
minF / medianF | 最小 / 中位 F 值 | 都必须 > 10。中位数几百 = 工具很强 |
n_significant | FDR<0.05 的蛋白数 | 这个结局筛出几个信号 |
真实结果(R9,节选)
| outcome | ncase | ncontrol | n_instruments | minF | medianF | n_significant |
|---|---|---|---|---|---|---|
| Retinopathy(糖网) | 10,413 | 308,633 | 1587 | 43.8 | 792 | 24 |
| Maculopathy(黄斑病变) | 3,572 | 308,547 | 1587 | 43.8 | 792 | 19 |
| RetinaProlif(增殖性 DR) | 9,511 | 362,581 | 1587 | 43.8 | 792 | 7 |
| NeovascGlaucoma(新生血管青光眼) | 1,100 | 366,206 | 1587 | 43.8 | 792 | 0 |
| RetArtOcclMain(视网膜动脉阻塞) | 181 | 308,633 | 1587 | 43.8 | 792 | 0 |
| Nephropathy(肾病) | 4,111 | 308,539 | 1587 | 43.8 | 792 | 9 |
| Neuropathy(神经病变) | 2,843 | 271,817 | 1587 | 43.8 | 792 | 5 |
| T2D_finngen | 57,698 | 308,252 | 1587 | 43.8 | 792 | 72 |
| T2D_mahajan | 55,005 | 400,308 | 955 | 45.6 | 768.1 | 7 |
从这张表能直接读出三件事
① minF = 43.8 → 工具全部合格
最弱的工具 F 也有 43.8(阈值是 10),中位数 792。假设①(相关性)稳稳成立,论文里可以直接这么报告。
② 0 个显著 ≠ 没关系,先看 ncase
RetArtOcclMain 只有 181 个病例、NeovascGlaucoma 只有 1100 个 —— 这个量级什么都测不出来。这是功效不足(underpowered),不是"蛋白与该病无关"。写作时应表述为"本研究对该结局功效有限",不能说"未发现关联=无关联"。
③ 两个 T2D 差这么多,是定义问题不是 bug
T2D_finngen 72 个显著 vs T2D_mahajan 7 个。FinnGen 自家的 T2D 定义宽松(把大量广义病例纳入),显著数虚高;Mahajan 是严格定义的专门 meta 分析。我们故意两个都跑,就是为了暴露这种定义敏感性。结论以 Mahajan 为准,FinnGen 版本作对照。
本页数值的时效说明:上表是 R9 版的历史结果,用来讲"怎么读这张表",数值不随主结论更新。 R13 定稿版里:FinnGen 的
T1D_WIDE/T2D已退役不再进主筛(正是因为上面 ③ 这个定义膨胀问题), 基础病只保留外部 GWAS;T2D_mahajan在 R13 的显著数是 28(工具池扩大后), 外部 T1D 换源为GCST90824163后是 57。最新数值见 R13 结局清单。
四、<结局>_significant.csv:逐列详解
这是核心结果表。列很多,按用途分四组来看。
4.1 A 组:这是谁(身份)
| 列 | 含义 | AGER 例 |
|---|---|---|
SNP | 工具变量 rsID | rs204993 |
protein | 暴露蛋白名(UKB-PPP 的 Assay Target) | AGER |
gene | 该蛋白对应的 cis 基因 | AGER |
outcome | 结局 | Retinopathy |
group | 结局分组 | eye |
ncase / ncontrol | 该结局病例/对照数 | 10413 / 308633 |
bioinfo_annotated_gene | 生信注释到的基因 | AGER |
gene_consequence | 该变异的功能后果 | upstream_gene_variant |
biotype | 基因类型 | protein_coding |
gene_consequence有用:missense_variant(改氨基酸)/synonymous_variant(不改)/upstream_gene_variant(调控区)。落在编码区的变异,机制解释更容易讲。
4.2 B 组:★ 结论(你最该看的四个数)
| 列 | 含义 | 怎么看 | AGER 例 |
|---|---|---|---|
b | 因果效应 = log(OR) | 符号 = 方向 | −1.955 |
OR | 比值比 = exp(b) | >1 危险,<1 保护 | 0.142 |
OR_lci / OR_uci | 95% 置信区间 | 区间不能跨过 1 | 0.116 – 0.173 |
FDR | 多重检验校正后的 P | ★ <0.05 才算显著 | 1.4e-78 |
p | 原始 P 值 | 只是中间量,别拿它下结论 | 9.1e-82 |
se | 因果效应的标准误 | 越小越精确 | 0.102 |
看 FDR,不看 p
1587 个工具 × 23 个结局 = 三万多次检验。纯靠运气 p<0.05 就能蹦出上千个。FDR 才是显著性判据(significant.csv 里已经只留 FDR<0.05 的行,_all.csv 里则要你自己看)。
OR 的数值不能直译
OR=0.142 不代表"AGER 高一个 SD 就少 86% 的糖网"。Wald ratio 把 SNP 造成的微小差异(0.17 SD)线性外推到整整 1 个 SD,OR 会被放得很夸张。只读方向(保护)和显著性,别读绝对值。(原理见 从零读懂 MR §3.3)
4.3 C 组:工具质量(判断这行可不可信)
| 列 | 含义 | 合格线 | AGER 例 |
|---|---|---|---|
Fstat | 工具强度 | > 10 | 451.5 ✅ |
R2 | 该工具解释了暴露多少方差 | cis-pQTL 常见 0.1%–20% | 0.0083 |
samplesize | 结局样本量 | — | 319,046 |
R2小不代表工具差 —— F 值同时考虑了样本量。AGER 的 R²只有 0.8%,但因为 UKB-PPP 有 5.4 万人,F 照样 451。
4.4 D 组:两侧原始效应(用来核对方向,出问题时查这里)
| 列 | 含义 | AGER 例 |
|---|---|---|
effect_allele.exposure / other_allele.exposure | 暴露侧效应/其他等位 | G / A |
eaf.exposure | 暴露侧效应等位频率 | 0.320 |
beta.exposure / se.exposure | SNP → 蛋白的效应 | −0.17 / 0.008 |
effect_allele.outcome / other_allele.outcome | 结局侧效应/其他等位 | G / A |
eaf.outcome | 结局侧效应等位频率 | 0.181 |
beta.outcome / se.outcome | SNP → 疾病的效应 | +0.332 / 0.017 |
这组是"验算区"
- 两侧
effect_allele必须一样(都是 G)—— 这是谐化成功的标志。 b=beta.outcome÷beta.exposure= 0.332 / (−0.17) = −1.955 ✅ 你可以自己验算。- 两侧
eaf差太多要警惕(这里 0.32 vs 0.18,是英国 vs 芬兰人群的正常频率差异;但如果一边 0.2 一边 0.8,多半是等位对反了)。
4.5 把一行翻译成一句话(模板)
拿 AGER 那一行,套模板:
以 rs204993(F=452,强工具)作为 AGER 的 cis 工具变量,单 SNP Wald ratio 显示 AGER 血浆水平升高与糖尿病视网膜病变风险降低相关(OR 0.14,95%CI 0.12–0.17,FDR=1.4×10⁻⁷⁸)。方向提示 AGER 为保护性因子;因该 OR 系单工具外推,绝对数值不作解读。该 SNP 在 PheWAS 中 Bonferroni 校正后仍关联 356 种表型(位于 MHC 邻近区),多效性风险高。HyPrColoc 显示该位点的疾病信号成簇(PP=0.99)但 AGER 蛋白本身未进入任何簇 → 共定位不支持,该关联很可能源于 MHC 区的 LD 混杂,不作因果结论。
这就是能进论文的写法:方向 + 显著性 + 工具强度 + 局限性 + 共定位判决。
这个例子的结局:AGER 最终被共定位否掉了
上面第一段是只看 MR 时的写法。等共定位跑完,判决是不支持——这条最终不能作为因果发现,只能归入"MR 阳性但共定位不支持"那一类。
这正是本页反复强调"MR 显著只是入场券"的活例子:一个 P=9×10⁻⁸²、跨 15 个结局显著、看起来无懈可击的头号发现,最后倒在了共定位上。
五、overlap_matrix.csv:跨结局重叠(本课题最有价值的表)
每行一个蛋白,每列一个结局,1 = 在该结局显著,0 = 不显著,最后一列 n_outcomes = 一共在几个病里显著(已按它降序排好)。
真实结果(R9,前几行):
| protein | Retinopathy | Maculopathy | Nephropathy | Neuropathy | AMD | … | n_outcomes |
|---|---|---|---|---|---|---|---|
| AGER | 1 | 1 | 1 | 1 | 1 | … | 15 |
| HCG22 | 1 | 1 | 1 | 1 | 0 | … | 13 |
| CFB | 1 | 1 | 1 | 0 | 1 | … | 11 |
| BTN2A1 | 1 | 1 | 1 | 1 | 0 | … | 10 |
| LTB | 1 | 1 | 1 | 0 | 0 | … | 9 |
怎么读
n_outcomes大 = 泛并发症共享靶点,是本课题最想找的东西(一个靶点管多个并发症)。- 但要配合 LDSC 看:糖网↔肾病的遗传相关 rg=0.97,本来就高度共享遗传基础——所以"同时在糖网和肾病显著"部分是意料之中的,不算独立证据。真正有意思的是跨越低遗传相关的病(如同时在糖尿病并发症和 AMD 里显著,rg 只有 0.29)。
n_outcomes大也可能是多效性/LD 的信号:一个 SNP 什么病都关联,可能它本身就是多效位点,或位于 LD 极强的区域。必须交叉查 PheWAS + 共定位。
实测:这张排行榜的前五名,全军覆没
AGER(15)、HCG22(13)、CFB(11)、BTN2A1(10)、LTB(9) —— 共定位判定全部为「仅疾病成簇、蛋白未进簇」(疑 LD 巧合),而且它们全在 chr6 的 MHC 区。R9 和 R13 两个版本互相印证。
MHC 区 LD 极强,一个疾病的因果变异能把周围一大片 pQTL 都"带显著",制造出"某蛋白跨 15 种并发症"的假象。所以这张表只能用来提假设,绝不能直接当结论——靶点结论看 阶段六。
这张表就是 UpSet 图的数据源
figures/upset.* 画的就是这张矩阵。
六、图怎么看
6.1 批量筛查的三张图(analysis/02_visualize.R 出,都是 600dpi PNG + 矢量 PDF)
| 图 | 看什么 | 怎么读 |
|---|---|---|
upset.* | 蛋白在不同疾病间的重叠模式 | 上方柱=该组合共享的蛋白数;下方黑点连线=哪几个病的组合。关注跨眼/肾/神经的高柱 |
forest_shared.* | 跨 ≥3 个并发症共享蛋白的 OR + 95%CI | 每行一个"蛋白×疾病"。竖线=1(无效应),点在左=保护、在右=危险;横线(CI)碰到竖线就不显著。同一蛋白在各病里方向一致 = 稳 |
network.* | 蛋白–疾病网络(阶段三,仅 MR) | 节点=蛋白/疾病,连线=MR 显著。红=风险(OR>1),蓝=保护(OR<1)。⚠️ 未经共定位过滤,连线最多的枢纽恰恰多是 LD 假象(AGER/HCG22/CFB…)——靶点结论看 阶段六 |
为什么每张图都出 PDF
PNG(600dpi)用于预览和投稿初稿;PDF 是矢量的,能直接拖进 Adobe Illustrator 改字体/配色/排版而不糊。改图不用回去重跑 R。
6.2 精细分析报告里的四张图(run_all.R 出)
只有多工具时才有意义(单 SNP 画不出来):
| 图 | 看什么 | 健康的样子 |
|---|---|---|
| 散点图 (scatter) | 横轴 SNP→暴露效应,纵轴 SNP→结局效应,每点一个 SNP,斜率=因果效应 | 点大致排在一条过原点的直线上。各方法的拟合线(IVW/Egger/中位数)斜率接近 |
| 森林图 (forest) | 每个 SNP 各自的效应 + 合并估计 | 各 SNP 方向一致、不打架 |
| 漏斗图 (funnel) | 横轴效应量,纵轴精度 | 左右对称。歪斜 = 方向性多效性的信号 |
| 留一法 (leave-one-out) | 每次去掉一个 SNP 重算 | 去掉任何一个,结果都不翻盘。若去掉某个 SNP 就不显著了 → 结论全靠它撑着,不可信 |
七、精细分析(run_all.R)的结果文件
| 文件 | 内容 |
|---|---|
results/report/MR_report.html | ★ 先看这个:STROBE-MR 报告,方法学+主结果+全部图+共定位结论,浏览器直接打开 |
results/mr_all_pairs_primary.csv | 所有"暴露×结局"对的主结果一张表(OR/CI/P/FDR/F/evidence) |
results/pairs/<暴露>__<结局>/mr.csv | 该对的全部方法结果(IVW/Egger/中位数/众数/RAPS) |
results/pairs/<暴露>__<结局>/sensitivity.rds | Q / Egger 截距 / PRESSO / LOO / 方向性 |
results/pairs/<暴露>__<结局>/pair_summary.csv | 标准化汇总(下游分析读这个) |
这里多出来的关键列
| 列 | 含义 | 怎么看 |
|---|---|---|
egger_intercept_p | Egger 截距的 P | < 0.05 = 存在方向性多效性(警报) |
presso_global_p | MR-PRESSO 全局检验 | < 0.05 = 有离群工具,需剔除后重看 |
isq_gx | I²_GX | < 0.9 → Egger 估计不可靠(工具变量测量误差大) |
evalue | E-value | 要多强的未测混杂才能解释掉这个效应。越大越稳 |
coloc_pp_h4 | 共定位后验概率 | > 0.8 = 同一因果变异(支持) |
coloc_status | 共定位状态 | 可能是"数据不足"(区域 SNP < 50 → 跳过,不硬跑) |
rev_significant | 双向 MR 反向是否显著 | 反向也显著 = 方向存疑,可能互为因果 |
evidence | 证据整合结论 | MR 显著 + coloc 支持 = 一致;MR 显著但 coloc 不支持 = 证据不一致 |
七'、下游分析的产物(PheWAS / LDSC / HyPrColoc)
| 文件 | 来自 | 关键列 / 怎么看 |
|---|---|---|
results/phewas/phewas_summary.csv | analysis/03_phewas.R(R9+R13 合并) | 每 SNP 一行:n_traits_bonf(Bonferroni 显著的表型数)★ 判读只用这个;n_traits_raw 是粗筛值仅供参考。数字越大 = 多效性越强 = MR 结论越要打折 |
results/phewas/phewas_all.csv | 同上 | 全部跨表型关联明细(rsid/trait/beta/p/protein) |
results/ldsc/genetic_correlation_rg.csv | analysis/04_ldsc.R R9 | 疾病×疾病的 rg 矩阵(−1~1)。接近 1 = 高度共享遗传基础 |
results/ldsc_R13/genetic_correlation_rg.csv | analysis/04_ldsc.R R13 | 同上,R13 版(多了糖网严格定义 + 湿/干 AMD 亚型) |
results/ldsc*/h2_observed.csv | 同上 | 各病的观察尺度遗传度 |
results/hyprcoloc_R9/hyprcoloc_verdict.csv ★ | analysis/05_hyprcoloc.R R9 | 每蛋白一行的判决(支持 / 证据不足 / 疑LD巧合 / 无簇)——先看这个 |
results/hyprcoloc_R9/hyprcoloc_shared.csv | 同上 | 只留真正支持的簇(PP>0.7 且蛋白在簇内)。看 traits + posterior_prob + candidate_snp |
results/hyprcoloc_R13/hyprcoloc_shared.csv | analysis/05_hyprcoloc.R R13 | 同上,R13 版 |
results/hyprcoloc_*/hyprcoloc_results.csv | 同上 | 全部结果 + 判定列(pp_pass/protein_in_cluster/coloc_support) |
results/network_R13/network_edges_candidate.csv ★ | analysis/06_network.R R13 | 阶段六 A 级候选靶点(MR∩共定位∩方向∩多效四关全过)→ 阶段六 |
results/phewas/phewas_offtarget_bonferroni.csv | analysis/03_phewas.R | 每个工具 SNP 的 Bonferroni 显著脱靶表型明细 |
怎么把 HyPrColoc 结果和 MR 结果对起来
拿 overlap_matrix.csv 里 n_outcomes 大的蛋白,去 hyprcoloc_shared.csv 查同名蛋白:
- 同一簇里出现了「蛋白 + 多个疾病」 → 同一因果变异驱动多病,这是最强证据,就是本课题要找的泛并发症共享靶点。
- 簇里只有疾病、没有蛋白(如
traits = "Retinopathy, Nephropathy"而蛋白不在内)→ 这几个病共享因果变异,但蛋白不在同一个信号上 → MR 那条关联很可能是 LD 巧合,要标"证据不一致"。 traits = "None"→ 没检出任何共享簇,共定位不支持。
八、下结论前的检查清单
一条结果要写进论文,逐条打勾:
- [ ]
Fstat> 10 —— 工具够强(假设①) - [ ]
FDR< 0.05 —— 不是p - [ ]
OR_lci–OR_uci不跨 1 —— 区间没骑在无效线上 - [ ]
ncase够大(≥1000,最好 ≥3000)—— 不是功效不足下的偶然 - [ ] 两侧
effect_allele一致 —— 谐化没出错、方向没反 - [ ] PheWAS 多效性可接受 —— 不是 APOE/ABO/HLA 那种什么都关联的位点(★ 验证支柱之一)
- [ ] 共定位 PP.H4 > 0.8 —— 不是连锁巧合(★ 验证支柱之一,cis-pQTL MR 的必需项)
- [ ] (支持性)跨结局方向一致 —— 加分项,但遗传相关高的姊妹并发症里一致属预期,不作独立证据
- [ ] 多工具时:IVW / 中位数 / Egger 方向一致,Egger 截距不显著,LOO 不翻盘
单 SNP 的先天局限,要在写作里明说
本课题批量筛查大多是单工具 Wald ratio —— Q 检验、Egger 截距、留一法做不了。所以可信度靠共定位 + PheWAS 两根支柱(分别排 LD 混杂和水平多效性)。跨结局一致性只是支持性观察,不算独立验证(遗传相关高的病本就会一起显著)。论文的 Limitations 里必须写清楚。
九、结果看着不对?先查这几样
| 现象 | 多半是什么 | 去哪查 |
|---|---|---|
| 所有 SNP 都极显著(P 全是 e-300) | pval_encoding 填错了(-log10 当成原始 P) | 使用教程 §9 |
| 方向和文献反了 | 等位没对齐,或 effect_type 该填 OR 却填了 beta | 查表里两侧 effect_allele |
| OR 大得离谱(如 1e5) | beta.exposure 太接近 0 → 分母极小被放大 | 看该行 beta.exposure;F 小的话直接剔除 |
| 某结局 0 个显著 | 功效不足 | 看 SUMMARY_publication.csv 的 ncase |
| 改了参数结果没变 | 断点续跑命中了旧缓存 | Rscript analysis/01_screen.R R9 force 强制重算 |
| 显著数比预期多很多 | 结局定义太宽(如 FinnGen 自家 T2D) | 换严格定义的数据源对照 |