[R-meta] H2 in the context of rma.mv

Viechtbauer, Wolfgang (SP) wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n|
Fri Mar 18 10:58:26 CET 2022

Dear Marlene,

It's not there, but you can calculate it manually. You can find a discussion on computing I^2 for more complex models here:


Using the same principles discussed there, one can also compute H^2. And yes, your calculation below is doing just that. Using the notation in the page above, H^2 for the Konstantopoulos example would be:

W <- diag(1/res$vi)
X <- model.matrix(res)
P <- W - W %*% X %*% solve(t(X) %*% W %*% X) %*% t(X) %*% W
(sum(res$sigma2) + (res$k-res$p)/sum(diag(P))) / ((res$k-res$p)/sum(diag(P)))

Note that I put sum(res$sigma2) in the numerator instead of just res$sigma2[1]. I think for H^2, that is more sensible, since we are asking how much larger the *total variance* is compared to the amount of variance expected based on sampling variability alone. Just putting part of the variance components in the numerator leads to a rather convoluted interpretation of what the H^2 value represents.


>-----Original Message-----
>From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces using r-project.org] On
>Behalf Of Werner, M.A. (Marlene)
>Sent: Thursday, 17 March, 2022 18:49
>To: r-sig-meta-analysis using r-project.org
>Subject: [R-meta] H2 in the context of rma.mv
>Dear all,
>I have a question about retrieving or calculating the H2 statistic in the context
>of fitting a multilevel (random effects) model with rma.mv.
>Can the H2 statistic be calculated or retrieved based on rma.mv output? I cannot
>seem to find it in the rma.mv output. My apologies if I am just plainly
>overseeing it.
>Or does it actually not make sense to calculate it in the context of a multilevel
>model, considering it is not straightforward which heterogeneity variance to use?
>To provide a reproducible example:
>dat <- dat.konstantopoulos2011
>res2 <- rma.mv(yi, vi, random = ~ 1 | district/study, data=dat)
>vs <- ((res2$k-1)* sum(1/res2$vi, na.rm = TRUE))/((sum(1/res2$vi, na.rm =
>TRUE))^2-sum((1/res2$vi)^2, na.rm = TRUE))
>H2 <- (res2$sigma2[1] + vs)/vs
>Does the above make sense (I followed the equation on p. 250 of the metafor
>reference manual)? Or is the H2 easily retrievable in another way?
>Thank you and all the best,

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