Just replace the fixed y coordinate values in the text() calls with something that will change appropriately with the number of studies/effects included in the plot. For example:
text(c(-9.5,-8,-6,-4.5), res$k+2, c("TB+", "TB-", "TB+", "TB-")) text(c(-8.75,-5.25), res$k+3, c("Vaccinated", "Control")) text(-16, res$k+2, "Author(s) and Year", pos=4) text(6, res$k+2, "Relative Risk [95% CI]", pos=2) should do it. Best, Wolfgang -- Wolfgang Viechtbauer, Ph.D., Statistician Department of Psychiatry and Psychology School for Mental Health and Neuroscience Faculty of Health, Medicine, and Life Sciences Maastricht University, P.O. Box 616 (VIJV1) 6200 MD Maastricht, The Netherlands +31 (43) 388-4170 | http://www.wvbauer.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] > On Behalf Of Jokel Meyer > Sent: Tuesday, July 24, 2012 16:16 > To: r-help@r-project.org > Subject: [R] Annotate forest plot 'forest.rma()' for meta-analysis with > metafor package > > Dear R-experts, > > The forest.rma() function from the metafor package creates nice forest > plots for presenting the results of a meta-analysis. These plots can be > annotated for e.g. giving names to the columns. E.g. as in the > documentation of the package: > > 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") > > 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) > > > However the column names have to be re-positioned everytime the number of > included studies in the meta-analysis changes. > E.g.: > > dat.bcg <- dat.bcg[1:12,] > > ### 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") > > 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) > > Is there a way to define the colum names' position relatively to the plot > so they would be adequately positioned no matter what is the number of > studies included in the plot? > > > Many thanks for your help!, > Jokel ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.