You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于metafor的leave1out结果绘制留一法分析森林图?

基于留一法分析结果绘制森林图

假设你使用的是R中meta包的leave1out()函数生成的留一法敏感性分析结果(这是meta分析场景下最常用的留一法实现),以下是两种实用的绘图方案:

方案1:直接用meta包内置函数快速绘制

meta包的forest()函数支持直接解析留一法结果对象,一键生成标准森林图:

# 假设你的留一法结果存储在 loo_res 变量中
forest(loo_res,
       main = "留一法敏感性分析森林图",
       xlab = "合并效应量(OR/RR)",  # 根据你的效应类型调整,比如MD则改为"均数差"
       col.diamond = "darkred",       # 自定义合并结果菱形的颜色
       col.study = "steelblue")       # 自定义单个研究剔除后结果的颜色

这个方法会自动展示每一项剔除单个研究后的合并效应、置信区间,同时对比原始的整体合并结果,无需手动整理数据。

方案2:手动整理数据用ggplot2定制化绘图

如果需要更灵活的样式(比如调整字体、添加注释、自定义布局),可以先把留一法结果转为数据框,再用ggplot2绘图:

步骤1:提取并整理数据

# 将留一法结果转为数据框
loo_df <- as.data.frame(loo_res)
# 保留核心字段:研究名称、效应量、置信区间上下限
loo_df <- loo_df[, c("studlab", "TE", "lower", "upper")]

# 添加原始整体合并结果作为对比行(假设原始meta分析对象为 res)
original_row <- data.frame(
  studlab = "原始合并结果",
  TE = res$TE.fixed,  # 若用随机效应则改为 res$TE.random
  lower = res$lower.fixed,
  upper = res$upper.fixed
)
loo_df <- rbind(loo_df, original_row)

步骤2:用ggplot2绘图

library(ggplot2)

ggplot(loo_df, aes(x = TE, y = reorder(studlab, TE))) +
  # 添加效应量无效线(OR/RR=1,若为MD则改为xintercept=0)
  geom_vline(xintercept = 1, linetype = "dashed", color = "gray50") +
  # 绘制效应量点
  geom_point(size = 3, color = "steelblue") +
  # 绘制置信区间
  geom_errorbarh(aes(xmin = lower, xmax = upper), height = 0.2, color = "steelblue") +
  # 设置标签和主题
  labs(title = "留一法敏感性分析森林图",
       x = "合并效应量(OR)",
       y = "研究/合并结果") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))

注意事项

  • 你已经在leave1out()中使用了transf=exp,所以提取的TE、lower、upper已经是转换后的实际效应值(如OR/RR),无需再次转换。
  • 如果你的留一法结果来自metafor包的leave1out.rma(),逻辑类似:可以直接用forest.rma()绘制,或者转为数据框后用ggplot2自定义。

内容的提问来源于stack exchange,提问作者Rcher007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:26:11