[R-meta] Variance Components from Multiple Imputation of Missing Moderator Variables in rma.mv

Viechtbauer, Wolfgang (SP) wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n|
Fri Mar 5 09:21:27 CET 2021

Dear Denise,

For the variance components, you could just take their average across the different model fits.

As for pooling multiple heterogeneity tests: These are chi^2 tests and I am not sure what the 'standard' procedures are for pooling such tests. A quick search turned up this article:


but what is described there isn't entirely trivial.

I also came across:


which discusses the issue in a different context, but suggests a rather simple solution, namely taking the median of the p-value from the different tests. At least in the context of this article, that seems to work well. I cannot tell you to what extent the results from that paper would apply to the present context, but taking the median of the p-values is an amazingly simple solution :)


>-----Original Message-----
>From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces using r-project.org] On
>Behalf Of brauldeq
>Sent: Wednesday, 03 March, 2021 11:28
>To: r-sig-meta-analysis using r-project.org
>Subject: [R-meta] Variance Components from Multiple Imputation of Missing
>Moderator Variables in rma.mv
>Dear fellow researchers,
>I am working on a meta-regression of the relationship between
>concientiousness and self-efficacy.  I included every reported effect
>size, with some studies contributing more than one effect size. As my
>data is structured hierarchically, I used a three-level mixed-effects
>model for analysis. The R code is as follows:
>rma.mv(y.c, v.c,  random = ~ 1 | sample_nr/effect_nr,
>                       mods = ~ year + interval.months + idv + class + se
>+ pers_rater + pers_retro,
>                       method="REML", data=con_se, digits = 3 )
>The moderators of interest are year of publication (year), interval
>between measurements (interva.months), grade level of participants
>(anything from class 1 to 13), Some of the moderators have missing
>values (interval.months and class, both of which are continuous
>variables). The effect size of interest is correlation coefficients. I
>tried to impute the missing moderator values via multiple imputation
>with the mice package.
>I basically followed the instructions on:
>I the following code to impement missing moderator values:
>withold <- function (data, expr) {
>   call <- match.call()
>   analyses <- as.list(seq_len(data$m))
>   for (i in seq_along(analyses)) {
>     data.i <- complete(data, i)
>     analyses[[i]] <- eval(expr = substitute(expr), envir = data.i,
>enclos = parent.frame())
>     if (is.expression(analyses[[i]]))
>       analyses[[i]] <- eval(expr = analyses[[i]], envir = data.i, enclos
>= parent.frame())
>   }
>   object <- list(call = call, call1 = data$call, nmis = data$nmis,
>analyses = analyses)
>   oldClass(object) <- c("mira", "matrix")
>   object
>#set up predictor matrix
>predMatrix <- make.predictorMatrix(con_se1)
>#predMatrix[,"v"] <- 0 # don't use vi for imputing
>#predMatrix["y",] <- 0 # don't impute yi (since yi has no NAs, this is
>actually irrelevant here)
>#predMatrix["v",] <- 0 # don't impute vi (since vi has no NAs, this is
>actually irrelevant here)
>predMatrix[,"effect_nr"] <- 0 # don't use effect number for imputing
>predMatrix["effect_nr",] <- 0 # don't impute effect number (since effect
>number has no NAs, this is actually irrelevant here)
># set up vector which specifies prediction method
>impMethod <- make.method(con_se1)
># impute missing values
>imp <- mice(con_se1, print=FALSE, m=20, predictorMatrix=predMatrix,
>method=impMethod, seed=1234)
># fit meta-regression with imputed values
>con_se.fit <- withold(imp, rma.mv(y.c, v.c,
>                       random = ~ 1 | sample_nr/effect_nr,
>                       mods = ~ year + interval.months + idv + class + se
>+ pers_rater + pers_retro,
>                       method="ML", data=con_se1, digits = 3
>                       ))
># pool and round results
>con_se.mod.mi <- summary(pool(con_se.fit))
>con_se.mod.mi[-1] <- round(con_se.mod.mi[-1], digits=3)
>Now beta coefficients of moderator variables (with missing values) were
>successfully pooled. However, I did not find a way to estimate
>heterogeneity statistics and variance components. Is there a way to pool
>the results from multiple variance estimations and (residual)
>heterogeneity tests as well?
>I would be extremely thankful for any thoughts and tips!
>Best regards,
>Denise Braul

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