主题
08 · 报告与双向 MR
对应模块:R/11_report.R(报告)、R/12_bidirectional.R(反向 MR) 参考:Skrivankova 2021(STROBE-MR)
报告:出版级 STROBE-MR HTML
出图(export_figures)
每个暴露-结局对导出四类诊断图,ggsave 300dpi、白底:
| 图 | 函数 | 看什么 |
|---|---|---|
| 散点图 | mr_scatter_plot | 各方法斜率、SNP 分布 |
| 森林图 | mr_forest_plot(single-SNP) | 每个 SNP 的单独估计 |
| 漏斗图 | mr_funnel_plot(≥3 IV) | 不对称提示多效性 |
| Leave-one-out | mr_leaveoneout_plot | 结果是否被单个 SNP 驱动 |
渲染(render_report)
用 rmarkdown::render 套 Rmd/report_template.Rmd 生成 HTML,图 300dpi 内嵌。
一个惰性求值的坑
rmarkdown 渲染时会改工作目录,R 又是惰性求值——所以路径必须先 normalizePath 成绝对路径再传进去,否则内联的相对路径在渲染时会失效。
STROBE-MR 20 条合规
报告按 STROBE-MR 清单逐条覆盖分析类条目:数据源表(item 4/10b)、三大 IV 假设显式声明+评估映射(item 5/7)、软件与包版本(item 9a,从 sessionInfo 抓 TwoSampleMR/coloc/hyprcoloc/MRPRESSO 等版本)、IV 筛选流程表(item 10a,用各步 flow 计数)、样本重叠说明(item 10d-ii)、I²_GX + E-value(item 12b)、双向 MR(item 13c)、数据/代码可及性(item 19)。
双向 MR(12_bidirectional.R)
评估因果方向(item 13c):反过来问"结局是否也导致暴露"。若反向也显著,则正向因果解释存疑。
做法:角色互换后复用同一套引擎——
- 结局当"暴露",用 genome_wide 阈值选工具(疾病 GWAS 无 cis 概念,故临时把
analysis_mode切为genome_wide、清掉gene/chr/tss/tes); - 暴露当"结局",
build_harmonised+run_mr跑反向估计; - 输出
reverse_significant = (p < 0.05)。
守卫
反向需要暴露侧具备全量/区域 sumstats 才能匹配反向工具。若暴露是只有少量工具 SNP 的 instrument_table,匹配不上会返回 insufficient_data 并跳过(默认 bidirectional.enabled: false)。
对应 config 字段
yaml
bidirectional:
enabled: false
report:
title: "..."
dpi: 300
data_availability: "..." # item 19
code_availability: "..."
run:
stages: [read, iv, harmonise, mr, sensitivity, coloc, mt, report]最终产物
results/report/MR_report.html—— 出版级 STROBE-MR 报告(浏览器打开看全貌);results/mr_all_pairs_primary.csv—— 所有对主结果 + FDR + evidence;results/pairs/<暴露>__<结局>/pair_summary.csv—— 标准化逐对汇总,下游 LDSC / PheWAS / 网络分析直接读。
想看这套引擎在真实课题里怎么落地,见 案例:糖尿病并发症 cis-pQTL MR 研究。