如何基于clubSandwich校正后的估计值绘制metafor森林图?
如何将clubSandwich的CR2校正结果整合到metafor森林图中
你已经通过metafor包的rma.mv完成多层随机效应元分析,并用clubSandwich包的conf_int()得到了CR2小样本校正后的置信区间和估计值,但forest()默认使用原始模型结果,需要将校正后的数据整合到森林图中。以下是两种可行的实现方法:
方法一:直接修改模型对象属性
通过修改res对象的核心属性,让forest()自动调用校正后的数据,操作步骤如下:
- 提取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.
- 修改
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
- 绘制森林图:
此时forest()会直接使用校正后的数据生成图形,包括总体效应的置信区间和标签:
forest(res, slab = df$descriptor, addpred = TRUE)
优点:操作简单,完全复用forest()的默认格式,无需手动调整图形元素。
方法二:手动添加校正后汇总效应
如果需要同时展示原始模型和校正后的结果,或者更灵活控制图形元素,可以先绘制原始森林图,再手动叠加校正后的汇总效应:
- 绘制不含默认总体效应的森林图:
forest(res, slab = df$descriptor, addpred = FALSE, # 不显示默认预测区间 showoverall = FALSE) # 不显示原始总体效应
- 手动添加校正后的汇总效应线和置信区间:
# 定义汇总效应的位置(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
相关产品推荐
相关产品推荐

