Skip to content
Prev 4039 / 5632 Next

[R-meta] Queries re: rma.mv

Hi Wolfgang,

Thank you for your detailed response. It has been very helpful. I am still pondering one thing though about the weights, if I could have your advice please:

I have re-calculated the weights as you suggested (shown in my code below) and if I run a bubble plot using regplot and use these weights as the size of the bubbles, it would appear that, indeed, the correlated data are down-weighted.

The issue is the following (note: my moderator is a measure of time): looking at the bubble plot, one can tell visually that the trend is clearly increasing over time. However, the coefficient from rma.mv and the best fit line in regplot show a decreasing trend. The only way this would occur is if the weights of the correlated data used in the model are not, in fact, down-weighted but up-weighted (the correlated data have a decreasing trend over time). In other words, it seems as if rma.mv is not using the row-sum weights but the weights that are based on the diagonal of the matrix (or some other weights..).

Relatedly, I also wonder why, if the default weights shown in the forest plot or the bubble/regplot, are not the ones used by the rma.mv model, why are they the default weights plotted? This too makes me think that these are the ones used internally in the model estimation by rma.mv

Apologies for the long e-mail. This package has been incredibly useful so far.
I?ve just hit a point where I do not fully understand how rma.mv works and how to make sense of my results.

Many thanks for your help
Adelina


My code:

Inci_trends$prs_yrs_100 = Inci_trends$prs_yrs/100
trend_dat_Inci <- escalc(measure="IRLN", xi=cases, ti=prs_yrs_100, data=Inci_trends)
summary.escalc(trend_dat_Inci)

multi_level_m_Inci <- rma.mv(yi = yi,
                            V = vi,
                            slab = author,
                            data = trend_dat_Inci,
                            random = ~ 1 |slab/ID,
                            test = "z",
                            method = "REML",
                            mods = ~ midpoint )
summary(multi_level_m_Inci)
round(exp(coef(summary(multi_level_m_Inci))[-1,c("estimate", "ci.lb", "ci.ub")]), 2)

w_reg_Inci <- weights(multi_level_m_Inci)
w_m_Inci <- weights(multi_level_m_Inci, type = "matrix")

w_m_Inci_adjw <- rowSums(w_m_Inci) / sum(w_m_Inci) * 100

regplot(multi_level_m_Inci, label = F, transf=exp,
        ylab = "Rate",
        xlab = "midpoint",
        col="grey",
        bg="red",
        labsize = 0.5,
        legend = F,
        psize=c(w_m_Inci_adjw)
)




From: Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl>
Date: Wednesday, 20 April 2022 at 19:42
To: Adelina Artenie <adelina.artenie at bristol.ac.uk>, r-sig-meta-analysis at r-project.org <r-sig-meta-analysis at r-project.org>
Subject: RE: Queries re: rma.mv
Dear Adelina,

See below for my responses.

Best,
Wolfgang
I assume you are referring to the weights shown in the forest plot. These are just based on the diagonal of the weight matrix. As you note, the weighting in such models is more complex, so looking at these weights doesn't really allow you to draw such a conclusion. In fact, generally, the effect will be as you expect, namely that correlated estimates will be downweighted. Consider the dat.konstantopoulos2011 dataset and let's make all sampling variances equal to each other to see this more clearly. Also, we will compute the row-sum weights, since these reflect more directly the weight each estimate is getting in this model.

dat <- dat.konstantopoulos2011

dat$vi <- median(dat$vi)
res <- rma.mv(yi, vi, random = ~ 1 | district/school, data=dat)
res

wi <- weights(res, type="rowsum")

data.frame(k = c(table(dat$district)),
           weight = tapply(wi, dat$district, mean))

So, as you can see, in clusters with more estimates, each individual estimate gets less weight.

Things will be more complicated when sampling variances differ and also when including moderators in the model.
Correct.