[R] nested mixed-effect model: variance components
Christoph Buser
buser at stat.math.ethz.ch
Mon Jun 19 17:33:21 CEST 2006
Dear John
I've put your mail back to the R list since I have no
explanation for the "lmer" result. Maybe someone else has an
idea. I adapted it to show some else that I do not understand.
## Creation of the data (habitat is nested in lagoon):
set.seed(1)
dat <- data.frame(y = rnorm(100), lagoon = factor(rep(1:4,each = 25)),
habitat = factor(rep(1:20, each = 5)))
## I do not understand how the random intercepts for lagoon and
## lagoon:habitat can both be estimated. It seems a little bit
## strange to me that they are identical (0.46565).
library(lme4)
summary(reg3 <- lmer(y~habitat+(1|lagoon)+(1|lagoon:habitat), data = dat))
## Furthermore I do not understand why the standard errors for
## the fixed effect of habitat are 1.131 for some habitats
## and 1.487 for the others???
## If one removes (1|lagoon), the variance component
## (1|lagoon:habitat) does not change its value (still 0.46565)???
summary(reg3a <- lmer(y~habitat+(1|lagoon:habitat), data = dat))
## Now all standard errors for the fixed factor habitat are 1.131.
## Altogether it seems a little bit strange to me and with the
## warnings and errors of the lme and aov call, I'd be carefull
## by using the output of lmer in that case. In addition I do
## not understand the interpretation of the random effect lagoon
## in top of the nested FIXED factor habitat.
summary(aov(y~habitat + Error(lagoon/habitat), data = dat))
detach(package:Matrix)
detach(package:lme4)
library(nlme)
summary(reg2 <- lme(y~habitat, random = ~1|lagoon/habitat, data = dat))
anova(reg2)
Best regards,
Christoph Buser
--------------------------------------------------------------
Christoph Buser <buser at stat.math.ethz.ch>
Seminar fuer Statistik, LEO C13
ETH Zurich 8092 Zurich SWITZERLAND
phone: x-41-44-632-4673 fax: 632-1228
http://stat.ethz.ch/~buser/
--------------------------------------------------------------
>> Christoph,
>>
>> I am sending this off list bacause I tried 'lmer'and
>> it seems to work with your contrived data,but I don't know why.
>> Can you explain it ?
>>
>>
>> John
>>
>>
>>
>>
>> > detach(package:nlme)
>> > library(Matrix)
>>
>> summary(lmer(y~habitat+(1|lagoon)+(1|lagoon:habitat), data = dat))
>>
>> Linear mixed-effects model fit by REML
>> Formula: y ~ habitat + (1 | lagoon) + (1 | lagoon:habitat)
>> Data: dat
>> AIC BIC logLik MLdeviance REMLdeviance
>> 292.3627 349.6764 -124.1814 280.0245 248.3627
>> Random effects:
>> Groups Name Variance Std.Dev.
>> lagoon:habitat (Intercept) 0.46565 0.68239
>> lagoon (Intercept) 0.46565 0.68239
>> Residual 0.87310 0.93440
>> number of obs: 100, groups: lagoon:habitat, 20; lagoon, 4
>>
>> Fixed effects:
>> Estimate Std. Error t value
>> (Intercept) 0.1292699 1.0516317 0.12292
>> habitat2 0.0058658 1.1316138 0.00518
>> habitat3 -0.0911469 1.1316138 -0.08055
>> habitat4 0.3302971 1.1316138 0.29188
>> habitat5 -0.0480394 1.1316138 -0.04245
>> habitat6 -0.4778469 1.4872319 -0.32130
>> habitat7 -0.0867301 1.4872319 -0.05832
>> habitat8 0.0696507 1.4872319 0.04683
>> habitat9 -0.0998728 1.4872319 -0.06715
>> habitat10 0.1096064 1.4872319 0.07370
>> habitat11 -0.0430979 1.4872319 -0.02898
>> habitat12 0.0714719 1.4872319 0.04806
>> habitat13 0.3380993 1.4872319 0.22733
>> habitat14 0.3057808 1.4872319 0.20560
>> habitat15 -0.4915582 1.4872319 -0.33052
>> habitat16 -0.2624539 1.4872319 -0.17647
>> habitat17 -0.2203461 1.4872319 -0.14816
>> habitat18 0.2165269 1.4872319 0.14559
>> habitat19 0.6932896 1.4872319 0.46616
>> habitat20 -0.7271468 1.4872319 -0.48893
>> anova(summary(lmer(y~habitat+(1|lagoon)+(1|lagoon:habitat), data = dat)))
>>
>> Analysis of Variance Table
>> Df Sum Sq Mean Sq
>> habitat 19 2.65706 0.13985
>>
>> > VarCorr(summary(summary(lmer(y~habitat+(1|lagoon)+(1|lagoon:habitat), data
>> = dat)))
>> + )
>> $`lagoon:habitat`
>> 1 x 1 Matrix of class "dpoMatrix"
>> (Intercept)
>> (Intercept) 0.4656545
>>
>> $lagoon
>> 1 x 1 Matrix of class "dpoMatrix"
>> (Intercept)
>> (Intercept) 0.4656545
>>
>> attr(,"sc")
>> [1] 0.9343993
>>
>> Christoph Buser wrote ---
>>
>> Dear Eric
>>
>> Do you really have habitats nested within lagoons or are they
>> partially crossed (meaning that you have the same habitats in
>> different lagoons)?
>>
>> If you have them perfectly nested, I think that you cannot
>> calculate both a fixed effect for habitats and a random effect
>> for lagoon (see the example below, lme and aov).
>>
>> You can compare e.g. two lagoons by defining a contrast of the
>> habitats of one lagoon against the habitats of the other (if you
>> think that this is a meaningful test to interpret), but you
>> cannot estimate a random effect lagoon in presence of a nested
>> FIXED effect habitat.
>>
>> aov() will not return you the test and warn you about the
>> singular model.
>>
>> lme() will estimate a variance component for lagoon, but does
>> not provide you a test for the fixed factor.
>>
>> Regards,
>>
>> Christoph Buser
>>
>>
>>
>> set.seed(1)
>> dat <- data.frame(y = rnorm(100), lagoon = factor(rep(1:4,each = 25)),
>> habitat = factor(rep(1:20, each = 5)))
>>
>> summary(aov(y~habitat + Error(lagoon/habitat), data = dat))
>>
>> library(nlme)
>> summary(lme(y~habitat, random = ~1|lagoon/habitat, data = dat))
>>
>>
>>
More information about the R-help
mailing list