New user of both stackexchange and R here. My questions are about mainly about interpretation, and my dataset is quite large, so I have not included my dataframe. I have two queries (in bold).
Using the "metafor" package, I have a random effects model and I am trying to interpret a model with two categorical moderators (one with 2 levels, one with 5). I am not interested in interactions as there are empty cells preventing this.
I think the model should take this form: (note I have used ML so that I can use the anova function for subsequent model comparisons)
MODEL=rma(yi=Ds,sei=SE,data=VPpooled,mods=~factor(SOA2)+factor(Comparison),method="ML")
This yields the following output:
R^2 (amount of heterogeneity accounted for): 88.89%
Test of Moderators (coefficient(s) 2,3,4,5,6):
QM(df = 5) = 41.5835, p-val < .0001
Model Results:
estimate se zval pval ci.lb ci.ub
intrcpt 0.1424 0.0438 3.2517 0.0011 0.0566 0.2283 **
factor(SOA2)2 0.1049 0.0380 2.7619 0.0057 0.0305 0.1794 **
factor(Comparison)Anger -0.1413 0.0458 -3.0818 0.0021 -0.2311 -0.0514 **
factor(Comparison)Negative words -0.0307 0.0529 -0.5800 0.5619 -0.1344 0.0730
factor(Comparison)Disgust -0.1546 0.0601 -2.5715 0.0101 -0.2724 -0.0368 *
factor(Comparison)IAPS -0.1103 0.0594 -1.8584 0.0631 -0.2267 0.0060 .
My interpretation of this is that including these two moderators in the model accounts for 89% of the heterogeneity in effects. However, it is unclear to me what the QM test means here. In the context of one moderator, I understand it would indicate that there is a difference between levels of that factor, however, in the context of two moderators I don't understand what differences it is testing. First, would it be possible to provide me with an explanation of what this test means in the context of a two factor model?
Secondly, if my understanding of the output is correct, the intercept represents the first level of factor(Comparison) at the first level of factor(SOA2), which is why these parameters are not explicitly listed in the output.
Therefore, to test whether the factor(SOA) is significant (while controlling for the influence of factor(Comparison) I would need to add a btt argument to the model, where 2 indicates the second level of the SOA factor:
MODEL=rma(yi=Ds,sei=SE,data=VPpooled,mods=~factor(SOA2)+factor(Comparison),method="ML",btt=2)
Yielding:
Test of Moderators (coefficient(s) 2):
QM(df = 1) = 7.6282, p-val = 0.0057
Indicating that the SOA2 factor is nominally significant controlling for the other factor. Equivalently, adding btt=c(3,4,5,6) would provide the same test of the Comparison factor. Is this the appropriate way of conducting/ interpreting this test?
Please let me know if anything is unclear, or if I have made any factual errors. I appreciate your time.
Best Answer
Regarding the first query/test:
This is simultaneously testing the null hypothesis that coefficients 2 through 6 (i.e., all of the model terms, except the intercept) are simultaneously equal to zero. In essence, this is testing whether these two factors account for any of the heterogeneity in these data.
I recently added an example to the metafor package website regarding the interpretation and use of factors in meta-regression models (see here). It doesn't cover the situation with two factors, but it should still help you to understand better what this omnibus test (wikipedia link) is doing.
Regarding the second query/test:
This is all exactly right.
Note that the
SOA
factor only has two levels, so there is only one dummy variable needed to represent that factor in the model. So, testing that factor (as you have done) is equivalent to testing just that one dummy variable. Accordingly, the p-value forfactor(SOA2)2
(p = 0.0057) is identical to the p-value for:In fact, the square of the z-value for that dummy is identical to the value above:
The one is just a z-test, the other a chi-square test. But they are testing exactly the same thing, so the p-values are identical.
For a factor with more than two levels (like
Comparison
), you really need to test all of the corresponding dummy variables simultaneously (coefficient 3 through 6). Note that you don't need to keep refitting the model with differentbtt
values; you can just use:This will test these different (sets of) coefficients (again, the first test isn't really necessary, but if you want to report the chi-square statistics for both, then this is useful). And take a look at the example on the metafor package website, which also that covers this in some detail.