¿Cómo se calcula un ANOVA para un diseño de medidas repetidas: aov () vs lm () en R

13

El título lo dice todo, y estoy confundido. Lo siguiente ejecuta una medida repetida aov () en R, y ejecuta lo que pensé que era una llamada equivalente a lm (), pero devuelven diferentes residuales de error (aunque las sumas de cuadrados son las mismas).

Claramente, los valores residuales y ajustados de aov () son los que se usan en el modelo, porque sus sumas de cuadrados se suman a cada una de las sumas de cuadrados modelo / residuales reportadas en resumen (my.aov). ¿Cuáles son los modelos lineales reales que se aplican a un diseño de medidas repetidas?

set.seed(1)
# make data frame,
# 5 participants, with 2 experimental factors, each with 2 levels
# factor1 is A, B
# factor2 is 1, 2
DF <- data.frame(participant=factor(1:5), A.1=rnorm(5, 50, 20), A.2=rnorm(5, 100, 20), B.1=rnorm(5, 20, 20), B.2=rnorm(5, 50, 20))

# get our experimental conditions
conditions <- names(DF)[ names(DF) != "participant" ]

# reshape it for aov
DFlong <- reshape(DF, direction="long", varying=conditions, v.names="value", idvar="participant", times=conditions, timevar="group")

# make the conditions separate variables called factor1 and factor2
DFlong$factor1 <- factor( rep(c("A", "B"), each=10) )
DFlong$factor2 <- factor( rep(c(1, 2), each=5) )

# call aov
my.aov <- aov(value ~ factor1*factor2 + Error(participant / (factor1*factor2)), DFlong)

# similar for an lm() call
fit <- lm(value ~ factor1*factor2 + participant, DFlong)

# what's aov telling us?
summary(my.aov)

# check SS residuals
sum(residuals(fit)^2)       # == 5945.668

# check they add up to the residuals from summary(my.aov)
2406.1 + 1744.1 + 1795.46   # == 5945.66

# all good so far, but how are the residuals in the aov calculated?
my.aov$"participant:factor1"$residuals

#clearly these are the ones used in the ANOVA:
sum(my.aov$"participant:factor1"$residuals ^ 2)

# this corresponds to the factor1 residuals here:
summary(my.aov)


# but they are different to the residuals reported from lm()
residuals(fit)
my.aov$"participant"$residuals
my.aov$"participant:factor1"$residuals
my.aov$"participant:factor1:factor2"$residuals
trev
fuente
1
No estoy seguro si esto es lo que quieres decir, pero usted encontrará toda la SS cuando también encaja con la interacción participant, como enanova(lm(value ~ factor1*factor2*participant, DFlong))
caracal
1
Ah, eso es útil, ok, así que a partir del modelo lm (valor ~ factor1 * factor2 * participante, DFlong), ¿cómo se calculan realmente las sumas de cuadrados? es decir, ¿qué está haciendo anova ()?
trev

Respuestas:

13

Una forma de pensar en ello es tratar la situación como una 3-factorial entre sujetos ANOVA con vías intravenosas participant, factor1, factor2, y un tamaño de celda de 1. anova(lm(value ~ factor1*factor2*participant, DFlong))calcula toda la SS para todos los efectos en este ANOVA de 3 vías (3 Efectos principales, 3 interacciones de primer orden, 1 interacción de segundo orden). Como solo hay 1 persona en cada celda, el modelo completo no tiene errores, y la llamada anterior a anova()no puede calcular las pruebas F. Pero las SS son las mismas que en el factorial 2 dentro del diseño.

¿Cómo se anova()calcula realmente el SS para un efecto? Mediante comparaciones de modelos secuenciales (tipo I): se ajusta a un modelo restringido sin el efecto en cuestión y a un modelo sin restricciones que incluye ese efecto. El SS asociado con este efecto es la diferencia en el error SS entre ambos modelos.

# get all SS from the 3-way between subjects ANOVA
anova(lm(value ~ factor1*factor2*participant, DFlong))

dfL <- DFlong   # just a shorter name for your data frame
names(dfL) <- c("id", "group", "DV", "IV1", "IV2")   # shorter variable names

# sequential model comparisons (type I SS), restricted model is first, then unrestricted
# main effects first
anova(lm(DV ~ 1,      dfL), lm(DV ~ id,         dfL))  # SS for factor id
anova(lm(DV ~ id,     dfL), lm(DV ~ id+IV1,     dfL))  # SS for factor IV1
anova(lm(DV ~ id+IV1, dfL), lm(DV ~ id+IV1+IV2, dfL))  # SS for factor IV2

# now first order interactions
anova(lm(DV ~ id+IV1+IV2, dfL), lm(DV ~ id+IV1+IV2+id:IV1,  dfL))  # SS for id:IV1
anova(lm(DV ~ id+IV1+IV2, dfL), lm(DV ~ id+IV1+IV2+id:IV2,  dfL))  # SS for id:IV2
anova(lm(DV ~ id+IV1+IV2, dfL), lm(DV ~ id+IV1+IV2+IV1:IV2, dfL))  # SS for IV1:IV2

# finally the second-order interaction id:IV1:IV2
anova(lm(DV ~ id+IV1+IV2+id:IV1+id:IV2+IV1:IV2,            dfL),
      lm(DV ~ id+IV1+IV2+id:IV1+id:IV2+IV1:IV2+id:IV1:IV2, dfL))

Ahora verifiquemos el efecto SS asociado con la interacción id:IV1restando el error SS del modelo no restringido del error SS del modelo restringido.

sum(residuals(lm(DV ~ id+IV1+IV2,        dfL))^2) -
sum(residuals(lm(DV ~ id+IV1+IV2+id:IV1, dfL))^2)

Ahora que tiene todos los efectos "en bruto" SS, puede construir las pruebas dentro de los sujetos simplemente eligiendo el término de error correcto para probar un efecto SS. Por ejemplo, pruebe el efecto SS factor1contra el efecto de interacción SS de participant:factor1.

Para una excelente introducción al enfoque de comparación de modelos, recomiendo Maxwell y Delaney (2004). Diseño de experimentos y análisis de datos.

lince
fuente
Gran respuesta, ¡eso realmente me ayudó a entender finalmente lo que está haciendo un ANOVA! Gracias también por la referencia del libro!
trev