[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:
https://www.jstor.org/stable/24303994
but what is described there isn't entirely trivial.
I also came across:
https://link.springer.com/article/10.1186/s12874-017-0404-7
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 :)
Best,
Wolfgang
>-----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:
>https://www.metafor-
>project.org/doku.php/tips:multiple_imputation_with_mice_and_metafor?s[]=multiple&s
>[]=imputation
>
>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)
>predMatrix
>
># set up vector which specifies prediction method
>impMethod <- make.method(con_se1)
>#impMethod
>
># 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)
>con_se.mod.mi
>
>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