"rma"
.## S3 method for class 'rma':
forest(x, annotate=TRUE, addfit=TRUE, addcred=FALSE, showweight=FALSE,
xlim=NULL, alim=NULL, ylim=NULL, at=NULL, steps=5,
level=x$level, digits=2, refline=0, xlab=NULL,
slab=NULL, mlab=NULL, ilab=NULL, ilab.xpos=NULL, ilab.pos=NULL,
order=NULL, transf=FALSE, atransf=FALSE, targs, rows=NULL,
efac=1, pch=15, psize=NULL, col="darkgray", border="darkgray",
cex=NULL, cex.lab=NULL, cex.axis=NULL, \dots)
"rma"
.TRUE
).FALSE
).NULL
, which means that the function tries to set the horizontal plot limits to some sensible values.NULL
, which means that the function tries to set the x axis limits to some sensible values.NULL
, which means that the function tries to set the y axis limits to some sensible values.NULL
, which means that the function tries to set the tick mark positions/labels to some sensible values.at
argument.NA
.NULL
(default), the function tries to set an appropriate axis title.NULL
, which means that the labels are either taken from the object (if study labels were specified) or simple labels are created within the function. To suppress labels, sNULL
, which means that the label is created within the function.ilab
.ilab
(2 means right, 4 mean left aligned). The default is to center the labels.transf=exp
). Defaults to FALSE
, which meantransf=exp
). Defaults to FALSE
, which means that no transformation is used.transf
or atransf
.NULL
, which means that the function sets this value automatically. Can also be a single value specifying the row (horipoints
for other options. Can also be a vector of values.NULL
, which means that the point sizes are drawn proportional to the precision of the estimates.NULL
(default), the function tries to set this to a sensible value.NULL
(default), the function tries to set this to a sensible value.NULL
(default), the function tries to set this to a sensible value."darkgray"
by default)."darkgray"
by default).addcred=TRUE
, a dashed line indicates the (approximate) bounds of the credibility interval (where 95% of the true effects are estimated 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.
With the transf
argument, the observed effect sizes, summary estimate, fitted values, and interval bounds can be transformed with an arbitrary function. For example, when analyzing 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. The examples below illustrate the use of these arguments.
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
, 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")
### several forest plots illustrating the use of various arguments
forest(res)
forest(res, order=order(dat.bcg$ablat))
forest(res, transf=exp, alim=c(0,6), steps=4, xlim=c(-8,12), refline=1)
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, slab=paste(dat.bcg$author, dat.bcg$year, sep=", "),
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)
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)
### forest plot with subgrouping of studies
res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, measure="RR",
slab=paste(author, year, sep=", "), method="REML")
forest(res, slab=paste(dat.bcg$author, dat.bcg$year, sep=", "),
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 Allcoation", "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.default 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