18 votos

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

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

Está claro que los residuos y los valores ajustados de aov() son los que se utilizan en el modelo, porque sus sumas de cuadrados se suman a cada una de las sumas de cuadrados del modelo/residual informadas en summary(my.aov). Entonces, ¿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

17voto

ashwnacharya Puntos 3144

Una forma de pensar en ello es tratar la situación como un ANOVA de 3 factores entre sujetos con IVs participant , factor1 , factor2 y un tamaño de celda de 1. anova(lm(value ~ factor1*factor2*participant, DFlong)) calcula todos los 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 sólo hay una persona en cada celda, el modelo completo no tiene errores, y la llamada anterior a anova() no puede calcular las pruebas F. Pero los SS son los mismos que en el diseño intrafactorial de 2 factores.

¿Cómo es que anova() ¿Calcular realmente el SS para un efecto? Mediante comparaciones secuenciales de modelos (tipo I): Se ajusta un modelo restringido sin el efecto en cuestión, y un modelo no restringido que incluye ese efecto. El SS asociado a este efecto es la diferencia de 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 vamos a comprobar el efecto SS asociado a la interacción id:IV1 restando 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 SS del efecto "en bruto", puede construir las pruebas dentro de los sujetos simplemente eligiendo el término de error correcto para probar un SS del efecto. Por ejemplo, pruebe el efecto SS para factor1 contra el efecto de interacción SS de participant:factor1 .

Para una excelente introducción al enfoque de comparación de modelos, recomiendo Maxwell & Delaney (2004). Designing Experiments and Analyzing Data.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X