[R-sig-ME] Chisq = 0 and p = 1 with nested lmer models
Geoff Brookshire
broog731 at newschool.edu
Thu Sep 29 00:13:44 CEST 2011
Hi again,
After an education-filled delay, this makes perfect sense. I. White
pointed out to me that:
"it will often make sense to compare a quadratic
b0 + b1*x + b2*x^2
with b0 + b1*x, but when would it make sense to compare it with
b0 + b2*x^2 ?
It all has to do with marginality: 'interactions should not be included
without main effects, nor higher-degree polynomial terms without their
lower-degree relatives' (McCullagh and Nelder, Generalized Linear Models
2nd ed p89). See also Nelder (1977) J Roy Stat Soc A 140 48-77,
especially p49-50."
This leads to a further question -- what's the recommended way to get
at those lower-order effects? One easy way is to just use pvals.fnc
from languageR on the full model.
Alternatively, we could compare a fitted model containing on the main
effect of interest (and random effects) against a model containing
only an intercept, like so:
fm.F1.1 <- lmer(outcome ~ F1 + (1 | subject) + (1 | item),
data = samp.dat, REML = FALSE)
fm.F1.2 <- lmer(outcome ~ 1 + (1 | subject) + (1 | item),
data = samp.dat, REML = FALSE)
anova(fm.F1.1, fm.F1.2)
... or compare two models additionally containing everything of
interest that doesn't involve that main effect, like so:
fm.F1.1a <- lmer(outcome ~ F1 + F2*F3 + (1 | subject) + (1 | item),
data = samp.dat, REML = FALSE)
fm.F1.2a <- lmer(outcome ~ F2*F3 - F1:F2:F3 + (1 | subject) + (1 | item),
data = samp.dat, REML = FALSE)
anova(fm.F1.1a, fm.F1.2a)
The second of these model comparisons gives a p-value much closer to
the pMCMC output by pvals.fnc, but both are a bit more significant.
Does anyone have a recommendation about which of these is most
trustworthy / statistically valid?
Thanks,
Geoff
On Fri, Sep 16, 2011 at 6:18 PM, Ben Bolker <bbolker at gmail.com> wrote:
> Geoff Brookshire <creepingbrain at ...> writes:
>
>>
>> Dear all,
>>
>> I'm using lme4 to analyze some reaction time data I've collected, and
>> am running into an odd problem. I'm not certain if it's a bug or a
>> problem with my thinking, but hopefully (and probably) it's the latter.
>>
>> When trying to compare two models, one of which is the same as the
>> other but with one term removed, the result is that there is no
>> difference between the models: Chisq = 0, Chisq Df = 0, and p = 1.
>>
>> A little about the design:
>> This is a reaction-time experiment with a 2x2x2 design over factors
>> F1, F2, and F3. F1 is varied within-subjects and within-items, and F2
>> & F3 are varied within-subjects and between-items.
>>
>> So far, I've been testing the models like this:
>>
>> fm.1 <- lmer(outcome ~ F1*F2*F3 + (1 | subject) + (1 | item),
>> data = samp.dat, REML = FALSE)
>> fm.2 <- lmer(outcome ~ F1*F2*F3 - F1:F2:F3 + (1 | subject) + (1 | item),
>> data = samp.dat, REML = FALSE)
>> anova(fm.1, fm.2)
>>
>> This works, and gives what we expect. When I try to test the 2-term
>> interactions, though, the error comes up:
>>
>> fm.3 <- lmer(outcome ~ F1*F2*F3 - F1:F2 + (1 | subject) + (1 | item),
>> data = samp.dat, REML = FALSE)
>> anova(fm.1, fm.3)
>>
>> This gives the following output:
>>
>> fm.1: outcome ~ F1 * F2 * F3 + (1 | subject) + (1 | item)
>> fm.3: outcome ~ F1 * F2 * F3 - F1:F2 + (1 | subject) + (1 | item)
>> Df AIC BIC logLik Chisq Chi Df Pr(>Chisq)
>> fm.1 11 -677.34 -617.72 349.67
>> fm.3 11 -677.34 -617.72 349.67 0 0 1
>>
>> The same thing happens when looking at F2:F3 and F1:F3. Any ideas?
>> Just entering anova(fm.1) gives sensible results and F-values for the
>> 2-way interactions.
>
> When you subtract F1:F2 from F1*F2*F3 you are still
> going to get a fully specified model, it will just be reparameterized
> (i.e. you won't reduce the number of parameters this way). This is
> because of the way that R interprets model formulae (i.e. it's more
> basic than lme4).
>
> Here's some an experiment confirming this:
>
>> d <- expand.grid(F1=LETTERS[1:2],F2=letters[1:2],F3=factor(1:2))
>> d
> F1 F2 F3
> 1 A a 1
> 2 B a 1
> 3 A b 1
> 4 B b 1
> 5 A a 2
> 6 B a 2
> 7 A b 2
> 8 B b 2
>> model.matrix(~F1*F2*F3,d)
> (Intercept) F1B F2b F32 F1B:F2b F1B:F32 F2b:F32 F1B:F2b:F32
> 1 1 0 0 0 0 0 0 0
> 2 1 1 0 0 0 0 0 0
> 3 1 0 1 0 0 0 0 0
> 4 1 1 1 0 1 0 0 0
> 5 1 0 0 1 0 0 0 0
> 6 1 1 0 1 0 1 0 0
> 7 1 0 1 1 0 0 1 0
> 8 1 1 1 1 1 1 1 1
>
>
>> model.matrix(~F1*F2*F3-F1:F2,d)
> (Intercept) F1B F2b F32 F1B:F32 F2b:F32 F1B:F2b:F31 F1B:F2b:F32
> 1 1 0 0 0 0 0 0 0
> 2 1 1 0 0 0 0 0 0
> 3 1 0 1 0 0 0 0 0
> 4 1 1 1 0 0 0 1 0
> 5 1 0 0 1 0 0 0 0
> 6 1 1 0 1 1 0 0 0
> 7 1 0 1 1 0 1 0 0
> 8 1 1 1 1 1 1 0 1
>
> If you have really thought this through and know that you
> have a sensible hypothesis corresponding to setting parameters
> 5 through 7 of the original parameterization to zero, you can do
> it ...
>
> d <- transform(d,F3way=as.numeric((F1:F2:F3=="B:b:2")))
> model.matrix(~F1+F2+F3+F3way,data=d)
>
> A more tedious but general way to do this is to take the
> original model matrix, pull out the bits you want, rename
> them if necessary (colons in names will not play nicely
> with formulae) and use the numeric dummy variables as
> predictors in a new model.
>
> Hope that helps.
>
> Ben Bolker
>
> _______________________________________________
> R-sig-mixed-models at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>
More information about the R-sig-mixed-models
mailing list