[R] replicating aov results with lmer
Elizabeth Purdom
epurdom at stat.berkeley.edu
Tue Feb 16 19:50:47 CET 2010
I am trying to replicate the results of an aov command with lmer, to understand the syntax, but I can't quite figure it out. I have a dataset from Montgomery p. 520 with a nested and factorial layout. There are 3 fixtures, 2 layouts (the treatments) in a factorial design, but the operators who perform the runs are nest in layouts (4 operators per layout=8 different operators). Thus, each operator tries each fixture twice, but only 1 layout. Everything is balanced so I know what the results should be. I give a dump of the data at the bottom of the email.
If I use the aov command, I get exactly what I would expect:
> ass.aov<-aov(Time~Fixture*Layout+Error(Operator/Layout),data=ass)
> summary(ass.aov)
Error: Operator
Df Sum Sq Mean Sq F value Pr(>F)
Layout 1 4.083 4.0833 0.3407 0.5807
Residuals 6 71.917 11.9861
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Fixture 2 82.792 41.396 12.2319 8.842e-05 ***
Fixture:Layout 2 19.042 9.521 2.8133 0.07325 .
Residuals 36 121.833 3.384
If I use the lmer command, the layout SS is NOT what I would expect from the aov (and my calculations). However, the estimates of variance components (not shown here) are exactly the same. Note, I have coded Operator as 1-8 (not 1-4), so if understand lmer correctly I can just add a (1|Operator) term into the model and the nesting is taken care of.
If I try to add a Operator:Fixture interaction (as done in Montgomery) I also do not get agreement with my manual calculations (which are the same as in the Montgomery book). Can I recreate the standard anova table broken into the correct strata using lmer?
Thanks,
Elizabeth
> ass.lmer2<-lmer(Time~Layout*Fixture+(1|Operator),data=ass)
> anova(ass.lmer2)
Analysis of Variance Table
Df Sum Sq Mean Sq F value
Layout 1 1.153 1.153 0.3406
Fixture 2 82.792 41.396 12.2319
Layout:Fixture 2 19.042 9.521 2.8133
> summary(ass.lmer2)
Linear mixed model fit by REML
Formula: Time ~ Layout + (1 | Operator) + Fixture + Layout:Fixture
Data: ass
AIC BIC logLik deviance REMLdev
215 230 -99.5 198.4 199
Random effects:
Groups Name Variance Std.Dev.
Operator (Intercept) 1.4336 1.1973
Residual 3.3843 1.8396
Number of obs: 48, groups: Operator, 8
Fixed effects:
Estimate Std. Error t value
(Intercept) 26.0833 0.4997 52.20
Layout1 -0.2917 0.4997 -0.58
Fixture1 -0.8333 0.3755 -2.22
Fixture2 1.8542 0.3755 4.94
Layout1:Fixture1 -0.2083 0.3755 -0.55
Layout1:Fixture2 0.8542 0.3755 2.27
Correlation of Fixed Effects:
(Intr) Layot1 Fixtr1 Fixtr2 Ly1:F1
Layout1 0.000
Fixture1 0.000 0.000
Fixture2 0.000 0.000 -0.500
Layt1:Fxtr1 0.000 0.000 0.000 0.000
Layt1:Fxtr2 0.000 0.000 0.000 0.000 -0.500
ass <-
structure(list(Time = c(22, 24, 30, 27, 25, 21, 23, 24, 29, 28,
24, 22, 28, 29, 30, 32, 27, 25, 25, 23, 27, 25, 26, 23, 26, 28,
29, 28, 27, 25, 27, 25, 30, 27, 26, 24, 28, 25, 24, 23, 24, 27,
24, 23, 28, 30, 28, 27), Operator = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L,
4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L,
7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("1",
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), Layout = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"2"), class = "factor"), Fixture = structure(c(1L, 1L, 2L, 2L,
3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L,
2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L,
1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L), .Label = c("1",
"2", "3"), class = "factor"), opF = structure(c(1L, 1L, 9L, 9L,
17L, 17L, 2L, 2L, 10L, 10L, 18L, 18L, 3L, 3L, 11L, 11L, 19L,
19L, 4L, 4L, 12L, 12L, 20L, 20L, 5L, 5L, 13L, 13L, 21L, 21L,
6L, 6L, 14L, 14L, 22L, 22L, 7L, 7L, 15L, 15L, 23L, 23L, 8L, 8L,
16L, 16L, 24L, 24L), .Label = c("1:1", "1:2", "1:3", "1:4", "1:5",
"1:6", "1:7", "1:8", "2:1", "2:2", "2:3", "2:4", "2:5", "2:6",
"2:7", "2:8", "3:1", "3:2", "3:3", "3:4", "3:5", "3:6", "3:7",
"3:8"), class = "factor"), LF = structure(c(1L, 1L, 3L, 3L, 5L,
5L, 1L, 1L, 3L, 3L, 5L, 5L, 1L, 1L, 3L, 3L, 5L, 5L, 1L, 1L, 3L,
3L, 5L, 5L, 2L, 2L, 4L, 4L, 6L, 6L, 2L, 2L, 4L, 4L, 6L, 6L, 2L,
2L, 4L, 4L, 6L, 6L, 2L, 2L, 4L, 4L, 6L, 6L), .Label = c("1:1",
"1:2", "2:1", "2:2", "3:1", "3:2"), class = "factor")), .Names = c("Time",
"Operator", "Layout", "Fixture", "opF", "LF"), row.names = c(NA,
-48L), class = "data.frame")
More information about the R-help
mailing list