"rma"
.## S3 method for class 'rma':
forest(x, annotate=TRUE, addfit=TRUE, addcred=FALSE, showweight=FALSE,
xlim, alim, ylim, at, steps=5,
level=x$level, digits=2, refline=0, xlab,
slab, mlab, ilab, ilab.xpos, ilab.pos,
order, transf=FALSE, atransf=FALSE, targs, rows,
efac=1, pch=15, psize, col="darkgray", border="darkgray",
cex, cex.lab, cex.axis, \dots)
"rma"
.TRUE
).FALSE
).at
argument.NA
.NA
ilab
(must be specified if ilab
is specified).ilab
(2 means right, 4 mean left aligned). If unspecified, the default is to center the labels.transf=exp
). Defaults to FALSE
, which means ttransf=exp
). Defaults to FALSE
, which means that no transformation is used.transf
or atransf
.points
for other options. Can also be a vector of values."darkgray"
by default)."darkgray"
by default).addcred=TRUE
, a dotted line indicates the (approximate) bounds of the credibility interval (the interval indicates where level
% of the true effects are expected to fall).
For models involving moderators, the fitted value for each study is added as a polygon to the plot. With the col
and border
arguments, one can change the (border) color of these polygons. These polygons are suppressed by setting addfit=FALSE
.
With the transf
argument, the observed effect sizes or outcomes, summary estimate, fitted values, and confidence/credibility interval bounds can be transformed with an arbitrary function. For example, when plotting log odds ratios, one could use transf=exp
to obtain a forest plot showing the odds ratios. Alternatively, one can use the atransf
argument to transform the x-axis labels and annotations (e.g., atransf=exp
). The examples below illustrate the use of these arguments.
By default, the studies are ordered from top to bottom (i.e., the first study in the dataset will be placed in row $k$, the second study in row $k-1$, and so on, until the last study, which is placed in the first row). The studies can be reordered with the order
argument:
order="obs"
: the studies are ordered by the observed effect sizes,order="fit"
: the studies are ordered by the fitted values,order="prec"
: the studies are ordered by their sampling variances,order="resid"
: the studies are ordered by the size of their residuals,order="rstandard"
: the studies are ordered by the size of their standardized residuals,order="abs.resid"
: the studies are ordered by the size of their absolute residuals,order="abs.rstandard"
: the studies are ordered by the size of their absolute standardized residuals.order
equal to a vector with indices specifying the desired order (see examples below).
Additional summary estimates can also be added to the plot with the addpoly
function. See the documentation for that function for examples.forest
, forest.default
, addpoly
### load BCG vaccine data
data(dat.bcg)
### meta-analysis of the log relative risks using a random-effects model
res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, measure="RR",
slab=paste(author, year, sep=", "), method="REML")
### default forest plot of the log relative risks and summary estimate
forest(res)
### summary estimate in row -1; studies in rows 13 through 1; horizontal
### lines in rows 0 and k+1; and two extra lines of space at the top
text(x=-8.2, y=-1:16, -1:16, pos=4, cex=.5)
### several forest plots illustrating the use of various arguments
forest(res, cex=.8)
forest(res, cex=.8, addcred=TRUE)
forest(res, cex=.8, alim=c(-3,3))
forest(res, cex=.8, order="prec", alim=c(-3,3))
forest(res, cex=.8, order=order(dat.bcg$ablat), addcred=TRUE)
### adjust xlim values to see how that changes the plot
forest(res)
par("usr")[1:2] ### this shows what xlim values were chosen by default
forest(res, xlim=c(-16,14))
forest(res, xlim=c(-18,10))
forest(res, xlim=c(-10,10))
### illustrate transf and atransf arguments
forest(res, transf=exp, alim=c(0,6), xlim=c(-8,12), refline=1, cex=.8)
forest(res, atransf=exp, at=log(c(.05,.25,1,4,20)), xlim=c(-8,8),
order="prec", showweight=TRUE, cex=.8)
### forest plot with extra annotations
forest(res, atransf=exp, at=log(c(.05, .25, 1, 4)), xlim=c(-16,6),
ilab=cbind(dat.bcg$tpos, dat.bcg$tneg, dat.bcg$cpos, dat.bcg$cneg),
ilab.xpos=c(-9.5,-8,-6,-4.5), cex=.75)
op <- par(cex=.75, font=2)
text(c(-9.5,-8,-6,-4.5), 15, c("TB+", "TB-", "TB+", "TB-"))
text(c(-8.75,-5.25), 16, c("Vaccinated", "Control"))
text(-16, 15, "Author(s) and Year", pos=4)
text(6, 15, "Relative Risk [95% CI]", pos=2)
par(op)
### mixed-effects model with absolute latitude in the model
res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, mods=ablat, data=dat.bcg,
measure="RR", method="REML", slab=paste(author, year, sep=", "))
### forest plot with observed and fitted values
forest(res, xlim=c(-9,5), order="fit", cex=.8, ilab=dat.bcg$ablat,
ilab.xpos=-4, atransf=exp, at=log(c(.05,.25,1,4)))
op <- par(font=2)
text(-9, 15, "Author(s) and Year", pos=4, cex=.8)
text( 5, 15, "Observed RR [95% CI]", pos=2, cex=.8)
text(-4, 15, "Latitude", cex=.8)
par(op)
### meta-analysis of the log relative risks using a random-effects model
res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, measure="RR",
slab=paste(author, year, sep=", "), method="REML")
### for more complicated plots, the ylim and rows arguments may be useful
forest(res)
forest(res, ylim=c(-1.5, 16)) ### the default
forest(res, ylim=c(-1.5, 20)) ### extra space in plot
forest(res, ylim=c(-1.5, 20), rows=c(17:15, 12:6, 3:1)) ### set positions
### forest plot with subgrouping of studies
forest(res, xlim=c(-16, 6), at=log(c(.05, .25, 1, 4)), atransf=exp,
ilab=cbind(dat.bcg$tpos, dat.bcg$tneg, dat.bcg$cpos, dat.bcg$cneg),
ilab.xpos=c(-9.5,-8,-6,-4.5), cex=.75, ylim=c(-1, 21),
order=order(dat.bcg$alloc), rows=c(1:2,5:11,14:17))
op <- par(cex=.75, font=4)
text(-16, c(18,12,3), c("Systematic Allocation", "Random Allocation",
"Alternate Allocation"), pos=4)
par(cex=.75, font=2)
text(c(-9.5,-8,-6,-4.5), 20, c("TB+", "TB-", "TB+", "TB-"))
text(c(-8.75,-5.25), 21, c("Vaccinated", "Control"))
text(-16, 20, "Author(s) and Year", pos=4)
text(6, 20, "Relative Risk [95% CI]", pos=2)
par(op)
### see also addpoly.rma function for an example where summaries
### for the three subgroups are added to such a forest plot
Run the code above in your browser using DataLab