The documentation on the lmerTest::rand() function is definitely terse.
From what I've been able to gather I think it tests the hypothesis that the random effect variation (i.e., a varying intercept (1 | Consumer) ) is significant versus the null that there is no between group-level variation, $H_0 : \sigma_{\alpha}^2 = 0$, where $\alpha_{j[i]} \sim N(\mu_\alpha, \sigma_\alpha^2)$ for $j = 1, \ldots, J$ is the group indicator. (I'm following Gelman & Hill's (2007) notation, see ch. 12).
I'm no expert so the code confused me a bit. Specifically, I'm not clear on what the elimRandEffs function does but I'd guess it's converting $\alpha_{j[i]}$ to a fixed (that is pooled) term $\alpha$ and then comparing this to the original model. Hopefully someone with greater knowledge can clarify this.
On the theoretical side, rand must be performing something like the test proposed in Lee and Braun 2012. However, unlike their extension to testing $0<r \leq q$ random effects at a time (sec 3.2), the rand output appears to test only one random effect at time. A simpler summary of the same idea is in slides 10-12 found here.
So your intuition that the "lmerTest is evaluating the random slope for 'sens2' [and] might also be the covariance between the slope and intercept" is correct in that rand tests if the random effect variances are significantly different from zero.
But it's incorrect to say that "the test for the random intercept is not included". The RE in your first specification:
(1 + sens2 | Consumer)
assumes non-zero correlation between the intercept and slope, meaning they vary together and so rand() tests that specification against a no RE model (i.e., reducing to the classical regression).
The second specification
(1 | Consumer) + (0 + sens2 | Consumer)
gives two lines of output because the random effects are additively separable. Here rand tests (in the 1st output row) a model with a pooled/fixed intercept with a random slope against your specification. In the 2nd row, the test is against a pooled sloped with a random intercept. So, like the step function, rand tests independent RE's one at a time.
I'm still puzzled by inside-R.org note that
Note
If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance
That's not in the package documentation, so I don't know where it came from nor where such a test would be found in the output.
EDIT
I think I'm wrong about the null model in a correlated slope/intercept model as in the first specification. The step documentation says:
in the random part if correlation is present between slope and
intercept, the simplified model will contain just an intercept. That is if the random part of the initial model is (1+c|f), then this model is compared to (1|f) by using LRT.
I imagine the same principle is at work for rand.
There is an extensive discussion of this topic under the heading Why doesn’t lme4
display denominator degrees of freedom/p values? What other options do I have? on the GLMM FAQ GitHub page.
Particularly, because of the crossed random grouping factors (Word
and Subject
) in your linear mixed model, the following applies:
When the data are not classical (crossed, unbalanced, R-side effects),
we might still guess that the deviances etc. are approximately
F-distributed but that we don’t know the real degrees of freedom –
this is what the Satterthwaite, Kenward-Roger, Fai-Cornelius, etc.
approximations are supposed to do.
We can use the package lmerTest
to compute the Satterthwaite and Kenward-Roger approximations for the degrees of freedom:
library("lmerTest")
model4 <- lmer(RT ~ Trial + (1 + Trial | Subject) + (1 | Word) + NativeLanguage, lexdec)
summary(model4, ddf = "Satterthwaite")
# [...]
# Fixed effects:
# Estimate Std. Error df t value Pr(>|t|)
# (Intercept) 6.3403355 0.0477400 26.0766153 132.810 < 2e-16 ***
# Trial -0.0002435 0.0001778 19.7606718 -1.369 0.18627
# NativeLanguageOther 0.1640999 0.0563369 19.0229754 2.913 0.00892 **
# [...]
summary(model4, ddf = "Kenward-Roger")
# [...]
# Fixed effects:
# Estimate Std. Error df t value Pr(>|t|)
# (Intercept) 6.3403355 0.0483794 25.7103491 131.054 <2e-16 ***
# Trial -0.0002435 0.0001778 19.8844304 -1.369 0.1862
# NativeLanguageOther 0.1640999 0.0592290 19.0094714 2.771 0.0122 *
# [...]
Best Answer
Before jumping into a (partial, non-rigorous) explanation, let me point out that all of your denominator dfs are so large that there should be no practical difference between them. For any df greater than about 50, there's little difference between the $t$ distribution and the corresponding Normal distribution, or between the $F$ distribution and the corresponding (scaled) $\chi^2$ distribution -- unless you are doing something like estimating the 99.999% confidence intervals. For example,
qnorm(0.75)
(the upper tail cutoff of a symmetric 95% interval for a standard Normal) is 1.959964, whileqt(0.975,df=1000)
is 1.962339; changing the df to 10000 will hardly affect the result. (The comparison for $F$ vs. $\chi^2$ is almost identical, but slightly more annoying to compute because of the difference in scaling.)You can play with
lme
to get the classical estimate of the degrees of freedom (be aware thatlme
's df-calculation heuristic can fail badly for random-slope models ...)The df value here is 67*3*49 ... one important thing you haven't told us is what fixed effects you are actually testing, and at what level they vary. I would guess that they don't actually vary the lowest level, so that in the classical case you would essentially be testing over a denominator based on the subject $\times$ duration SS.
I think the fact that the lowest-level variance (
cd:dur:subj
) is zero in the high-df model is actually a good clue. No variance among stimuli within duration essentially means that the responses are more less independent, so you get closer to the full possible df for the model ...It can't be a coincidence that the other df you are getting are near 67*27=1809, but I'm not sure where the 27 would come from ...
I would welcome more rigorous/better-informed answers, especially about what the df would be in the classical case ...