如果我对您的理解正确,您正在对这大约 90 项研究进行多项分析(例如,基于不同的子集),您的目标是仅在森林图中显示汇总估计(基于这些分析)。那么最简单的方法就是将各种分析的估计值和相应的方差收集在一个向量中,然后将其传递给forest()
函数。让我举一个简单的例子:
### load metafor package
library(metafor)
### load BCG vaccine dataset
data(dat.bcg)
### calculate log relative risks and corresponding sampling variances
dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg)
### fit random-effects models to some subsets
res.r <- rma(yi, vi, data=dat, subset=alloc=="random")
res.s <- rma(yi, vi, data=dat, subset=alloc=="systematic")
res.a <- rma(yi, vi, data=dat, subset=alloc=="alternate")
### collect model estimates and corresponding variances
estimates <- c(coef(res.r), coef(res.s), coef(res.a))
variances <- c(vcov(res.r), vcov(res.s), vcov(res.a))
### create vector with labels
labels <- c("Random Allocation", "Systematic Allocation", "Alternate Allocation")
### forest plot
forest(estimates, variances, slab=labels)
如果您不喜欢点大小不同(默认情况下,它们的绘制与方差成反比),您可以使用:
forest(estimates, variances, slab=labels, psize=1)
其他一些改进:
forest(estimates, variances, slab=labels, psize=1, atransf=exp, xlab="Relative Risk (log scale)", at=log(c(.2, .5, 1, 2)))
附录
如果您更喜欢多边形形状的估计,您可以执行以下操作。首先绘制如上图,但用于efac=0
隐藏 CI 上的垂直线。然后只需绘制摘要多边形addpoly()
:
forest(estimates, variances, slab=labels, psize=1, atransf=exp, xlab="Relative Risk (log scale)", at=log(c(.2, .5, 1, 2)), efac=0)
addpoly(estimates, variances, atransf=exp, rows=3:1, col="white", annotate=FALSE)
您还可以使用efac=1.5
inaddpoly()
垂直拉伸多边形。根据您的口味调整因素。