[R-meta] Network meta-analysis with randomized and non-randomized studies in metafor

Viechtbauer, Wolfgang (SP) wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n|
Thu Feb 14 23:32:41 CET 2019


Hi Chris,

That's not how 'newmods' works. This will work:

newvals <- c(1, 0, 0, 1)
predict(res, newmods = newvals)

newvals <- c(1, 0, 0, 1)
predict(res, newmods = newvals, tau2.levels="RS", gamma2.levels="RS")

To be more explicit:

newvals <- c("trt self_help" = 1, "trt ind_counseling" = 0, "trt grp_counseling" = 0, "typeRS" = 1)

Best,
Wolfgang

-----Original Message-----
From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces using r-project.org] On Behalf Of Chris Rose
Sent: Thursday, 14 February, 2019 20:47
To: r-sig-meta-analysis using r-project.org
Subject: Re: [R-meta] Network meta-analysis with randomized and non-randomized studies in metafor

Hi Michael, all

I think I had actually tried your suggestion of constructing a matrix but did not include it my attempt in my original email. After exhausting a few alternatives that seemed sensible based on my reading of the docs, I started to try some “random stuff" in the hope that I would learn something purely by experimentation — unfortunately not.

I’ve included below an example from the beginning, which includes what I think you mean towards the end. It’d be great if you could have a look and tell me where I’m going wrong.

Best,

— Chris

### load the library
library(metafor)

### copy data into 'dat'
dat <- dat.hasselblad1998

### calculate log odds for each study arm
dat <- escalc(measure="PLO", xi=xi, ni=ni, add=1/2, to="all", data=dat)

### convert trt variable to factor with desired ordering of levels
dat$trt <- factor(dat$trt, levels=c("no_contact", "self_help", "ind_counseling", "grp_counseling"))

### add a space before each level (this makes the output a bit more legible)
levels(dat$trt) <- paste0(" ", levels(dat$trt))

### simulate a RS/NRS moderator (type)
set.seed(1234)
dat$type <- rep(sample(c("RS", "NRS"), length(unique(dat$study)), replace=TRUE), times=tapply(dat$study, dat$study, length))

### fit a meta-regression model
res <- rma.mv(yi, vi, mods = ~ trt + type, random = list(~ type | study, ~ type | id), struct=c("DIAG","DIAG"), data=dat)

### call predict without additional arguments
predict(res) # This works!

### make a matrix of moderator values at which to predict, and try to predict
newvals <- as.matrix(c(trt = " self_help", type = "RS"))
predict(res, newmods = newvals) # fails with...
# Error in predict.rma(res, newmods = newvals) : 
#   Dimensions of 'newmods' do not match dimensions of the model.

### try to specify the tau and gamma levels
predict(res, newmods = newvals, tau2.levels = "RS", gamma2.levels = "RS") # fails with...
# Error in predict.rma(res, newmods = newvals, tau2.levels = "RS", gamma2.levels = "RS") : 
#   Dimensions of 'newmods' do not match dimensions of the model.

### is the matrix moderators incorrectly transposed?
predict(res, newmods = t(newvals), tau2.levels = "RS", gamma2.levels = "RS") # fails with...
# Error in dimnames(x) <- dn : 
#   length of 'dimnames' [2] not equal to array extent


More information about the R-sig-meta-analysis mailing list