plots:forest_plot_with_subgroups
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
plots:forest_plot_with_subgroups [2020/03/19 13:31] – Wolfgang Viechtbauer | plots:forest_plot_with_subgroups [2021/05/16 16:06] – Wolfgang Viechtbauer | ||
---|---|---|---|
Line 14: | Line 14: | ||
library(metafor) | library(metafor) | ||
- | ### decrease margins so the full space is used | + | ### copy BCG vaccine meta-analysis data into ' |
- | par(mar=c(4, | + | dat <- dat.bcg |
- | ### fit random-effects model (use slab argument to define | + | ### calculate log risk ratios and corresponding sampling variances |
- | res <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, measure=" | + | ### the 'slab' |
- | | + | dat <- escalc(measure=" |
+ | slab=paste(author, | ||
- | ### set up forest plot (with 2x2 table counts added; rows argument is used | + | ### fit random-effects model |
- | ### to specify | + | res <- rma(yi, vi, data=dat) |
- | forest(res, xlim=c(-16, 6), at=log(c(0.05, | + | |
- | | + | ### a little helper function to add Q-test, I^2, and tau^2 estimate info |
+ | mlabfun <- function(text, | ||
+ | | ||
+ | " (Q = ", .(formatC(res$QE, | ||
+ | ", df = ", .(res$k - res$p), | ||
+ | ", p ", .(metafor::: | ||
+ | I^2, " = ", .(formatC(res$I2, | ||
+ | tau^2, " = ", .(formatC(res$tau2, | ||
+ | |||
+ | ### set up forest plot (with 2x2 table counts added; | ||
+ | ### used to specify in which rows the outcomes will be plotted) | ||
+ | forest(res, xlim=c(-16, | ||
+ | | ||
| | ||
- | | + | |
- | xlab=" | + | mlab=mlabfun("RE Model for All Studies", |
+ | psize=1, header=" | ||
- | ### add text with Q-value, dfs, p-value, | + | ### set font expansion factor (as in forest() above) |
- | text(-16, -1, pos=4, | + | op <- par(cex=0.75, |
- | | + | |
- | ", | + | |
- | | + | |
- | ### set font expansion factor | + | ### add additional column headings to the plot |
- | ### font and save original settings in object ' | + | text(c(-9.5, |
- | op <- par(cex=0.75, | + | text(c(-8.75, |
+ | |||
+ | ### switch to bold italic | ||
+ | par(font=4) | ||
### add text for the subgroups | ### add text for the subgroups | ||
Line 43: | Line 57: | ||
" | " | ||
" | " | ||
- | |||
- | ### switch to bold font | ||
- | par(font=2) | ||
- | |||
- | ### add column headings to the plot | ||
- | text(c(-9.5, | ||
- | text(c(-8.75, | ||
### set par back to the original settings | ### set par back to the original settings | ||
Line 55: | Line 62: | ||
### fit random-effects model in the three subgroups | ### fit random-effects model in the three subgroups | ||
- | res.s <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, | + | res.s <- rma(yi, vi, subset=(alloc==" |
- | subset=(alloc==" | + | res.r <- rma(yi, vi, subset=(alloc==" |
- | res.r <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, | + | res.a <- rma(yi, vi, subset=(alloc==" |
- | subset=(alloc==" | + | |
- | res.a <- rma(ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg, | + | |
- | subset=(alloc==" | + | |
### add summary polygons for the three subgroups | ### add summary polygons for the three subgroups | ||
- | addpoly(res.s, | + | addpoly(res.s, |
- | addpoly(res.r, | + | addpoly(res.r, |
- | addpoly(res.a, | + | addpoly(res.a, |
+ | |||
+ | ### fit meta-regression model to test for subgroup differences | ||
+ | res <- rma(yi, vi, mods = ~ alloc, data=dat) | ||
- | ### add text with Q-value, dfs, p-value, and I^2 statistic | + | ### add text for the test of subgroup differences |
- | text(-16, | + | text(-16, |
- | .(formatC(res.s$QE, digits=2, format="f")), ", df = ", .(res.s$k - res.s$p), | + | Q[M], " = ", .(formatC(res$QM, digits=2, format=" |
- | ", | + | ", |
- | | + | |
- | text(-16, 7.5, pos=4, cex=0.75, bquote(paste(" | + | |
- | | + | |
- | ", | + | |
- | | + | |
- | text(-16, 1.5, pos=4, cex=0.75, bquote(paste(" | + | |
- | | + | |
- | ", | + | |
- | | + | |
</ | </ | ||
plots/forest_plot_with_subgroups.txt · Last modified: 2023/09/21 19:09 by Wolfgang Viechtbauer