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

如何基于clubSandwich校正后的估计值绘制metafor森林图?

如何将clubSandwich的CR2校正结果整合到metafor森林图中

你已经通过metafor包的rma.mv完成多层随机效应元分析,并用clubSandwich包的conf_int()得到了CR2小样本校正后的置信区间和估计值,但forest()默认使用原始模型结果,需要将校正后的数据整合到森林图中。以下是两种可行的实现方法:


方法一:直接修改模型对象属性

通过修改res对象的核心属性,让forest()自动调用校正后的数据,操作步骤如下:

  1. 提取CR2校正后的关键结果:
# 从conf_int输出中提取校正后的值
cr2_results <- robust_CIs
cr2_est <- cr2_results$Estimate
cr2_se <- cr2_results$SE
cr2_ci_lb <- cr2_results$`Lower 95% CI`
cr2_ci_ub <- cr2_results$`Upper 95% CI`
cr2_df <- cr2_results$d.f.
  1. 修改res对象的对应属性:
# 替换原始模型的估计值、标准误、置信区间和自由度
res$b <- cr2_est
res$se <- cr2_se
res$ci.lb <- cr2_ci_lb
res$ci.ub <- cr2_ci_ub
res$df.resid <- cr2_df
  1. 绘制森林图:
    此时forest()会直接使用校正后的数据生成图形,包括总体效应的置信区间和标签:
forest(res,
       slab = df$descriptor,
       addpred = TRUE)

优点:操作简单,完全复用forest()的默认格式,无需手动调整图形元素。


方法二:手动添加校正后汇总效应

如果需要同时展示原始模型和校正后的结果,或者更灵活控制图形元素,可以先绘制原始森林图,再手动叠加校正后的汇总效应:

  1. 绘制不含默认总体效应的森林图:
forest(res,
       slab = df$descriptor,
       addpred = FALSE,  # 不显示默认预测区间
       showoverall = FALSE)  # 不显示原始总体效应
  1. 手动添加校正后的汇总效应线和置信区间:
# 定义汇总效应的位置(y坐标可根据实际图的范围调整)
summary_y <- nrow(df) + 2

# 添加校正后总体效应的垂直线
abline(v = cr2_est, lwd = 2, col = "darkred")

# 添加校正后置信区间的多边形
polygon(
  x = c(cr2_ci_lb, cr2_ci_ub, cr2_ci_ub, cr2_ci_lb),
  y = c(summary_y - 0.5, summary_y - 0.5, summary_y + 0.5, summary_y + 0.5),
  col = adjustcolor("darkred", alpha.f = 0.2),
  border = "darkred"
)

# 添加校正后结果的文本标签
text(
  x = cr2_est,
  y = summary_y + 1,
  pos = 3,
  labels = paste0("CR2校正总体效应: ", round(cr2_est, 3), "\n95% CI: [", round(cr2_ci_lb, 3), ", ", round(cr2_ci_ub, 3), "]"),
  col = "darkred",
  cex = 0.9
)

优点:可以同时展示原始与校正结果,便于对比;图形元素位置、样式可自定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:21:19