dat.obrien2003 {metadat} | R Documentation |
Studies on the Relationship Between BMI and Risk of Preeclampsia
Description
Results from 13 studies on the relationship between maternal body mass index (BMI) and the risk of preeclampsia.
Usage
dat.obrien2003
Format
The data frame contains the following columns:
study | numeric | study id |
author | character | (first) author of the study |
year | numeric | publication year |
ref | numeric | reference number |
ch | character | exclusion due to chronic hypertension (yes/no) |
dm | character | exclusion due to diabetes mellitus (yes/no) |
mg | character | exclusion due to multiple gestation (yes/no) |
bmi.lb | numeric | lower bound of the BMI interval |
bmi.ub | numeric | upper bound of the BMI interval |
bmi | numeric | midpoint of the BMI interval |
cases | numeric | number of preeclampsia cases in the BMI group |
total | numeric | number of individuals in the BMI group |
Details
The dataset includes the results from 13 studies examining the relationship between maternal body mass index (BMI) and the risk of preeclampsia. For each study, results are given in terms of the number of preeclampsia cases within two or more groups defined by the lower and upper BMI bounds as shown in the dataset (NA
means that the interval is either open to the left or right). The bmi
variable is the interval midpoint as defined by O'Brien et al. (2003).
Concepts
medicine, obstetrics, risk ratios, proportions, multilevel models, dose-response models
Author(s)
Wolfgang Viechtbauer, wvb@metafor-project.org, https://www.metafor-project.org
Source
O'Brien, T. E., Ray, J. G., & Chan, W.-S. (2003). Maternal body mass index and the risk of preeclampsia: A systematic overview. Epidemiology, 14(3), 368–374. https://doi.org/10.1097/00001648-200305000-00020
Examples
### copy data into 'dat' and examine data
dat <- dat.obrien2003
dat
## Not run:
### load metafor package
library(metafor)
### restructure the data into a wide format
dat2 <- to.wide(dat, study="study", grp="grp", ref=1, grpvars=c("bmi","cases","total"),
addid=FALSE, adddesign=FALSE, postfix=c(1,2))
dat2[1:10, -c(2:3)]
### calculate log risk ratios and corresponding sampling variances
dat2 <- escalc(measure="RR", ai=cases1, n1i=total1, ci=cases2, n2i=total2, data=dat2)
dat2[1:10, -c(2:7)]
### forest plot of the risk ratios
dd <- c(0,diff(dat2$study))
dd[dd > 0] <- 1
rows <- (1:nrow(dat2)) + cumsum(dd)
rows <- 1 + max(rows) - rows
slabs <- mapply(function(x,y,z) as.expression(bquote(.(x)^.(y)~.(z))),
dat2$author, dat2$ref, dat2$year)
with(dat2, forest(yi, vi, header=TRUE, slab=slabs, xlim=c(-7,5.5), fonts="mono", cex=0.8,
psize=1, pch=19, efac=0, rows=rows, ylim=c(0,max(rows)+3), yaxs="i",
atransf=exp, at=log(c(.05,0.1,0.2,0.5,1,2,5,10,20)), ilab=comp, ilab.xpos=-4, ilab.pos=4))
text(-4.4, max(rows)+2, "Comparison", font=2, cex=0.8, pos=4)
### within-study mean center the BMI variable
dat$bmicent <- with(dat, bmi - ave(bmi, study))
### compute the proportion of preeclampsia cases and corresponding sampling variances
dat <- escalc(measure="PR", xi=cases, ni=total, data=dat)
### convert the proportions to percentages (and convert the variances accordingly)
dat$yi <- dat$yi*100
dat$vi <- dat$vi*100^2
dat[1:10, -c(2:3)]
### fit multilevel meta-regression model to examine the relationship between the
### (centered) BMI variable and the risk of preeclampsia
res <- rma.mv(yi, vi, mods = ~ bmicent, random = ~ 1 | study/grp, data=dat)
res
### draw scatterplot with regression line
res$slab <- dat$ref
regplot(res, xlab=expression("Within-Study Mean Centered BMI"~(kg/m^2)),
ylab="Preeclampsia Prevalence (%)", las=1, bty="l",
at=seq(0,18,by=2), olim=c(0,100), psize=2, bg="gray90",
label=TRUE, offset=0, labsize=0.6)
### fit model using a random slope for bmicent
res <- rma.mv(yi, vi, mods = ~ bmicent, random = ~ bmicent | study, struct="GEN", data=dat)
res
### load rms package
library(rms)
### fit restricted cubic spline model
res <- rma.mv(yi, vi, mods = ~ rcs(bmicent, 4), random = ~ 1 | study/grp, data=dat)
res
### get knot positions
knots <- attr(rcs(model.matrix(res)[,2], 4), "parms")
### computed predicted values based on the model
xs <- seq(-10, 10, length=1000)
sav <- predict(res, newmods=rcspline.eval(xs, knots, inclx=TRUE))
### draw scatterplot with regression line based on the model
tmp <- regplot(res, mod=2, pred=sav,
xvals=xs, xlab=expression("Within-Study Mean Centered BMI"~(kg/m^2)),
ylab="Preeclampsia Prevalence (%)", las=1, bty="l",
at=seq(0,18,by=2), olim=c(0,100), psize=2, bg="gray90",
label=TRUE, offset=0, labsize=0.6)
abline(v=knots, lty="dotted")
points(tmp)
## End(Not run)