R语言meta包森林图如何同图展示两个rma模型总效应及置信区间
R meta包双rma模型总效应同森林图实现方案
meta包内置的forest()方法仅支持单rma模型的总效应绘制,没有提供双总效应的内置参数,最稳定的实现方式是先绘制基础森林图,再通过低级绘图函数叠加第二个模型的总效应菱形,全程不需要手动计算效应值坐标,不会出现参数匹配错误。
具体操作步骤
- 第一步:绘制全研究模型x1的基础森林图,提前为第二个总效应预留绘图空间
调用forest()时主动调整y轴范围,在原有图的底部多留出1-2行的空白区域,避免后续叠加的内容和原有图重叠,示例代码如下:library(meta) # 绘制x1(全样本模型)的基础森林图 forest(x1, xlim = c(-16, 6), # 根据自身效应量范围调整x轴区间,保证右侧标签完整显示 ylim = c(-2, x1$k + 2), # 底部延伸2行空间,用于放置第二个总效应 addfit = TRUE, # 正常显示x1自身的总效应菱形 mlab = "总效应(纳入全部研究)", # x1总效应的文本标签 col.diamond = "steelblue" # 可选,给x1的菱形设置区分色 ) - 第二步:叠加排除研究后模型x2的总效应菱形
用meta包自带的addpoly()函数直接读取x2模型的效应值、置信区间,把菱形绘制到预留的空白行位置,不需要手动提取参数计算坐标:# 叠加x2的总效应 addpoly(x2, row = -1, # 位置在x1总效应的下一行,x1总效应默认在y=0位置 mlab = "总效应(排除敏感研究后)", # x2总效应的文本标签 col.diamond = "grey60" # 用不同填充色和x1做视觉区分 ) - 第三步:(可选)添加视觉分隔元素
如果需要区分单个研究区块和总效应区块,可以直接加辅助线优化排版:# 在单个研究末尾、第一个总效应上方加虚线分隔 abline(h = 0.5, lty = 2, col = "grey40")
注意:如果你之前调整过森林图的行高、字体大小或者添加了额外的注释文本,只需要对应修改
addpoly()里的row参数值,保证两个总效应菱形不重叠即可;这套方法对所有rma类的随机/固定效应模型都适配,不需要依赖其他扩展包。
内容的提问来源于stack exchange,提问作者EllaM
相关产品推荐
相关产品推荐

