[R-meta] Violation in non-independece of errors (head to head studies and mutlilevel meta-analysis)?

Viechtbauer Wolfgang (SP) wolfgang.viechtbauer at maastrichtuniversity.nl
Sun Mar 25 12:16:32 CEST 2018

See comments below.


>-----Original Message-----
>From: Emily Finne [mailto:emily.finne at uni-bielefeld.de]
>Sent: Saturday, 24 March, 2018 21:41
>To: Viechtbauer Wolfgang (SP); r-sig-meta-analysis at r-project.org
>Subject: Re: [R-meta] Violation in non-independece of errors (head to
>head studies and mutlilevel meta-analysis)?
>Dear Wolfgang,
>oh yes, many people were  sick during the last weeks, here too. I hope
>you're feeling better by now.

Thanks - not 100% but good enough to catch up on work.

>Yes, that is exactly the data structure I have. I completely missed out
>to think of the problem as crossed random effects! Thank you!
>I am quite sure that I constructed the var-cov-matrix V right. I used the
>formulas by Gleser & Olkin and James Pustejovsky. I double-checked the
>resulting matrix. Additionally, I used robust estimation, since most
>correlations between outcomes were only a best guess.


>Only to make sure, that I understand correctly the point about the random
>effects: I code two different treatment groups within one study with
>different numbers starting with 1 (for example) and than use the code you
>provided for the crossed random effects. But the numbers given to
>different treatments are arbitrary and don't mean that the group with
>'treatment = 1' always got the same treatment. It is only to code that
>treatment 1 and 2 within one study are different (say medication A and B
>each compared against a placebo control), not that 1 and 2 always means
>the same thing in different studies (it could also stand for medication B
>and C vs. control in another study). Am I right?


On the other hand, if treatment 1 always stood for medication A and treatment 2 always stood for medication B (across all studies), then it would make sense to distiniguish the two and, for example, allow a different tau^2 for treatment 1 vs treatment 2. I assumed that for 'outcome', this is actually the the case (so, for example, outcome 1 always stands for measure X and outcome 2 always stands for measure Y).

One thing I forgot to mention: At the moment, the 'inner' terms in a '~ inner | outer' formula under random must be a character/factor variable. So, if 'outcome' and 'trt' are numeric, then use:

random = list(~ factor(outcome) | study, ~ factor(trt) | study), struct=c("UN","CS")

Or you could code 'outcome' and 'trt' as character variables to begin with.

>The treatments we look at in our analysis, in fact, are all different in
>some aspects although pursuing the same goal. We use characteristics of
>the treatments as moderators then and hope to explain differences in
>effect sizes.

Again, spot on. Using this example, it also illustrates why it would make sense to include a fixed effect for 'outcome' (since outcome 1 and 2 are uniquely defined), while it would not make sense to include a fixed effect for 'trt'. For the latter, as you say, we can use characteristics of the treatments as moderators.

Sorry if this is all obvious to you, but having this written down here is useful for future reference. Also, to come back to the Konstantopoulos (2011) and Berkey et al. (1998) examples, this also explains why we would use:

rma.mv(yi, vi, random = ~ factor(study) | district, struct="CS", data=dat)

in the Konstantopoulos example (https://tinyurl.com/ybpzn5ra) (so no fixed effect for 'study' and struct="CS" -- which is actually the default, but added here for clarity)


rma.mv(yi, V, mods = ~ outcome - 1, random = ~ outcome | trial, struct="UN", data=dat)

in the Berkey example (https://tinyurl.com/y9yv366v) (so with fixed effect for 'outcome' and struct="UN").

In the first case, the coding of 'study' within 'district' is arbitary. In the second case, the coding of 'outcome' within 'trial' is meaningful.

>Again, thank you so much for you detailed help.
>I will try, if the model with the crossed effects converge. Otherwise, I
>would stick to the old model (only  random = ~ outcome | study,
>struct="UN") and discuss this as a limitation.

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