如何基于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
相关产品推荐
相关产品推荐

