forestplot.bmr | R Documentation |
bmr
object
(based on the forestplot
package's plotting functions).
Generates a forest plot, showing individual estimates along with their 95 percent confidence intervals, shrinkage intervals, resulting effect estimates and prediction intervals.
## S3 method for class 'bmr'
forestplot(x, X.mean, X.prediction,
labeltext, exponentiate=FALSE,
shrinkage=TRUE, heterogeneity=TRUE,
digits=2, decplaces.X, plot=TRUE,
fn.ci_norm, fn.ci_sum, col, legend=NULL, boxsize, ...)
x |
a |
X.mean |
a regressor matrix ( |
X.prediction |
an optional regressor matrix ( |
labeltext |
an (alternative) “ |
exponentiate |
a logical flag indicating whether to exponentiate numbers (effect sizes) in table and plot. |
shrinkage |
a logical flag indicating whether to show shrinkage intervals along with the quoted estimates. |
heterogeneity |
a logical flag indicating whether to quote the heterogeneity estimate and CI (at the bottom left of the plot). |
digits |
the number of significant digits to be shown. This is interpreted relative to the standard errors of all estimates. |
decplaces.X |
The number of decimal places to be shown for the regressors. |
plot |
a logical flag indicating whether to actually generate a plot. |
fn.ci_norm, fn.ci_sum, col, legend, boxsize, ... |
other arguments passed on to the
forestplot package's |
Generates a forest plot illustrating the underlying data and
resulting estimates (effect estimates and/or prediction intervals,
as well as shrinkage estimates and intervals).
For effect estimates and prediction intervals, regressor matrices
(X
) need to be supplied via the ‘X.mean
’ or
‘X.prediction
’ arguments. Effect estimates are shown as
diamonds, predictions are shown as horizontal bars.
A list containing the following elements:
data |
a |
X.mean, X.prediction |
the ‘ |
shrinkage |
a |
labeltext |
a |
forestplot |
result of the call to the
‘ |
This function is based on the forestplot package's
“forestplot()
” function.
Christian Roever christian.roever@med.uni-goettingen.de
C. Roever, T. Friede. Using the bayesmeta R package for Bayesian random-effects meta-regression. Computer Methods and Programs in Biomedicine, 299:107303, 2023. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1016/j.cmpb.2022.107303")}.
C. Roever. Bayesian random-effects meta-analysis using the bayesmeta R package. Journal of Statistical Software, 93(6):1-51, 2020. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v093.i06")}.
C. Lewis and M. Clarke. Forest plots: trying to see the wood and the trees. BMJ, 322:1479, 2001. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1136/bmj.322.7300.1479")}.
C. Guddat, U. Grouven, R. Bender and G. Skipka. A note on the graphical presentation of prediction intervals in random-effects meta-analyses. Systematic Reviews, 1(34), 2012. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1186/2046-4053-1-34")}.
R.D. Riley, J.P. Higgins and J.J. Deeks. Interpretation of random effects meta-analyses. BMJ, 342:d549, 2011. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1136/bmj.d549")}.
bayesmeta
,
forestplot
,
forestplot.bayesmeta
,
forestplot.escalc
.
## Not run:
#################################################################
# perform a meta-analysis using binary ("indicator") covariables:
# load data:
data("CrinsEtAl2014")
# compute effect measures (log-OR):
crins.es <- escalc(measure="OR",
ai=exp.AR.events, n1i=exp.total,
ci=cont.AR.events, n2i=cont.total,
slab=publication, data=CrinsEtAl2014)
# show data:
crins.es[,c("publication", "IL2RA", "exp.AR.events", "exp.total",
"cont.AR.events", "cont.total", "yi", "vi")]
# specify regressor matrix (binary indicator variables):
X <- cbind("basiliximab"=as.numeric(crins.es$IL2RA=="basiliximab"),
"daclizumab" =as.numeric(crins.es$IL2RA=="daclizumab"))
print(X)
# perform meta-analysis:
bmr01 <- bmr(crins.es, X=X,
tau.prior=function(t){dhalfnormal(t, scale=0.5)})
# show forest plot:
forestplot(bmr01)
# show forest plot including contrast
# (difference between the two groups):
forestplot(bmr01,
X.mean=rbind("basiliximab" = c(1, 0),
"daclizumab" = c(0, 1),
"group difference" = c(-1, 1)))
##############################################
# perform the meta-analysis using a different
# ("intercept / slope") regressor setup:
X <- cbind("intercept"=1,
"offset.dac"=as.numeric(crins.es$IL2RA=="daclizumab"))
print(X)
# perform meta-analysis:
bmr02 <- bmr(crins.es, X=X,
tau.prior=function(t){dhalfnormal(t, scale=0.5)})
# show default forest plot:
forestplot(bmr02)
# show forest plot including both group means and their difference:
forestplot(bmr02,
X.mean=rbind("basiliximab" = c(1, 0),
"daclizumab" = c(1, 1),
"group difference" = c(0, 1)))
###############################################################
# a meta analysis using a continuous regressor
# and including prediction:
help("NicholasEtAl2019")
# load data:
data("NicholasEtAl2019")
# compute effect sizes (logarithic odds) from count data:
es <- escalc(measure="PLO",
xi=patients*(prog.percent/100), ni=patients,
slab=study, data=NicholasEtAl2019)
# set up regressor matrix:
X <- cbind("intercept2000" = 1, "year" = (es$year-2000))
# perform analysis:
bmr03 <- bmr(es, X=X)
# show forest plot including some mean estimates for the
# years from 1990 to 2018, and a prediction for 2019:
forestplot(bmr03,
X.mean=rbind("intercept (2000)" = c(1, 0),
"annual change" = c(0, 1),
"change per decade" = c(0, 10),
"mean 1990" = c(1, -10),
"mean 2000" = c(1, 0),
"mean 2010" = c(1, 10),
"mean 2018" = c(1, 18)),
X.predict=rbind("prediction 2019" = c(1, 19)),
xlab="log-odds",
txt_gp = fpTxtGp(ticks = gpar(cex=1), xlab = gpar(cex=1)))
# the shown summaries and predictions may also be computed "manually";
# mean effect (year 2018), posterior median and 95 percent CI:
bmr03$qpredict(p=0.5, x=c(1, 18))
bmr03$pred.interval(level=0.95, x=c(1, 18))
# prediction (year 2019), posterior median and 95 percent CI:
bmr03$qpredict(p=0.5, x=c(1, 19), mean=FALSE)
bmr03$pred.interval(level=0.95, x=c(1, 19), mean=FALSE)
# means and predictions may also be derived
# using the "summary()" function:
summary(bmr03,
X.mean=rbind("intercept (2000)" = c(1, 0),
"annual change" = c(0, 1),
"change per decade" = c(0, 10),
"mean 1990" = c(1, -10),
"mean 2000" = c(1, 0),
"mean 2010" = c(1, 10),
"mean 2018" = c(1, 18)),
X.predict=rbind("prediction 2019" = c(1, 19)))
##########################################################
# the tabular part of the forest plot may also be changed;
# draw a default plot:
forestplot(bmr03)
# don't plot, only extract the tabular bits:
fp <- forestplot(bmr03, plot=FALSE)
labtxt <- fp$labeltext
head(labtxt)
# drop two columns:
labtxt <- labtxt[,-c(2,3)]
# add two new columns:
labtxt <- cbind(labtxt[,1],
c("year", es$year, "",""),
c("events / total",
paste(round(es$patients*(es$prog.percent/100)),
"/", es$patients), "",""),
labtxt[,2:3])
head(labtxt)
# draw new forest plot:
forestplot(bmr03, labeltext=labtxt, xlab="log-odds")
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.