Skip to content

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-outmr_leaveoneout_plot结果是否被单个 SNP 驱动

渲染(render_report

rmarkdown::renderRmd/report_template.Rmd 生成 HTML,图 300dpi 内嵌。

一个惰性求值的坑

rmarkdown 渲染时会改工作目录,R 又是惰性求值——所以路径必须 normalizePath 成绝对路径再传进去,否则内联的相对路径在渲染时会失效。

STROBE-MR 20 条合规

报告按 STROBE-MR 清单逐条覆盖分析类条目:数据源表(item 4/10b)、三大 IV 假设显式声明+评估映射(item 5/7)、软件与包版本(item 9a,从 sessionInfoTwoSampleMR/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):反过来问"结局是否也导致暴露"。若反向也显著,则正向因果解释存疑。

做法:角色互换后复用同一套引擎——

  1. 结局当"暴露",用 genome_wide 阈值选工具(疾病 GWAS 无 cis 概念,故临时把 analysis_mode 切为 genome_wide、清掉 gene/chr/tss/tes);
  2. 暴露当"结局",build_harmonised + run_mr 跑反向估计;
  3. 输出 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 研究

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