Skip to content
Prev 3136 / 5632 Next

[R-meta] MLMA - shared control group

Please see below.

1) If I get things right, can we copy+paste the matrix code and it
always works in similar cases?

If ALL studies are structured like what Wolfgang demonstrated based on
Gleser & Olkin's chapter, yes. But note that this formula assumes
that, for example, all studies have measured their subjects on a
single outcome. If you have some studies that in addition to having
several treatment groups have more than one outcome, or have used one
or more post-tests then, this may not be useful in those cases
(although extensions are possible for those cases).

One way to avoid all the headache is to guesstimate the correlation
among effects due to perhaps several sources of sampling dependence
using V <- clubSandwich::impute_covariance_matrix(), and then, feed it
into the rma.mv() function via its V argument.

There are plenty of examples of this if you search the archives.

2) For meta-regression, we also have to use V, not vi, correct?

In the end, you need to input either vi or V. If you use vi, then
you're ignoring sampling dependence. If you ignore such sampling
dependence, no major harm is done to your estimates of average effects
(fixed effects), but your estimate(s) of how variable your effects at
each level may be systematically biased (i.e., even if you have a very
large dataset, you may not still obtain the true value of
heterogeneity).

If you don't care about heterogeneity of effect sizes, then knowing
about "any correlation among effect sizes" is not necessary, and you
can only use vi.

But if you do care about heterogeneity of effect sizes, then you can
use metafor in conjunction with the clubSandwich package to enter a
simple
guesstimate of the correlation among effect sizes as explained above.

Because you're using a guesstimate for V, it would be a good idea to
guard against possible misspecification of your model. So, instead of
directly obtaining the results from metafor, you can use clubSandwich
package, to take that into account, perhaps using:

clubSandwich::coef_test(model, vcov = "CR2") for coefficients

clubSandwich::conf_int(model, vcov = "CR2") for CIs

clubSandwich::Wald_test(model, vcov = "CR2") for running comparisons
among your coefficients

I would also use a range of "r" in my "impute_covariance_matrix()"
call to make sure my final results are not too sensitive to my choice
of "r". For instance, you can plot your fixed and variance components
for each version of your model that has used a different "r" and see
if your results differ across them.

HTH,
Reza

On Sat, Aug 28, 2021 at 2:39 PM Jorge Teixeira
<jorgemmtteixeira at gmail.com> wrote: