Wie wird eine ANOVA für einen Entwurf mit wiederholten Messungen berechnet: aov () vs lm () in R

13

Der Titel sagt alles, und ich bin verwirrt. Das Folgende führt ein wiederholtes aov () in R aus und führt einen, wie ich dachte, äquivalenten lm () -Aufruf aus, aber sie geben unterschiedliche Fehler-Residuen zurück (obwohl die Quadratsummen gleich sind).

Es ist klar, dass die Residuen und angepassten Werte von aov () diejenigen sind, die im Modell verwendet werden, da sich ihre Quadratsummen zu jeder der in der Zusammenfassung (my.aov) angegebenen Modell- / Residuenquadratsummen addieren. Was sind nun die tatsächlichen linearen Modelle, die auf einen Entwurf mit wiederholten Messungen angewendet werden?

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
quelle
1
Ich bin mir nicht sicher, ob das das ist, was Sie meinen, aber Sie werden die ganze SS finden, wenn Sie auch zur Interaktion passen participant, wie inanova(lm(value ~ factor1*factor2*participant, DFlong))
caracal
1
Ah, das ist hilfreich, ok. Wie werden die Quadratsummen aus dem Modell lm (Wert ~ Faktor1 * Faktor2 * Teilnehmer, DFlong) tatsächlich berechnet? dh was macht anova ()?
Trev

Antworten:

13

Eine Möglichkeit , darüber nachzudenken, die Situation als 3-faktoriellen zwischen Subjekten ANOVA mit IVs zu behandeln participant, factor1, factor2und einer Zellengröße von 1 anova(lm(value ~ factor1*factor2*participant, DFlong))berechnet all SS für alle Effekte in diesem 3-Wege - ANOVA (3 Haupteffekte, 3 Interaktionen erster Ordnung, 1 Interaktion zweiter Ordnung). Da sich in jeder Zelle nur 1 Person befindet, weist das vollständige Modell keine Fehler auf, und der obige Aufruf anova()kann keine F-Tests berechnen. Aber die SS sind die gleichen wie bei der 2-Fakultät im Design.

Wie anova()berechnet man eigentlich die SS für einen Effekt? Durch sequentielle Modellvergleiche (Typ I): Es passt zu einem eingeschränkten Modell ohne den betreffenden Effekt und zu einem uneingeschränkten Modell, das diesen Effekt enthält. Die mit diesem Effekt verbundene SS ist der Unterschied in der Fehler-SS zwischen beiden Modellen.

# 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))

Überprüfen wir nun den mit der Interaktion verbundenen Effekt SS id:IV1 indem den Fehler SS des uneingeschränkten Modells vom Fehler SS des eingeschränkten Modells subtrahieren.

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

Jetzt, da Sie alle "rohen" Effekt-SS haben, können Sie die Innersubjekt-Tests einfach erstellen, indem Sie den richtigen Fehlerausdruck auswählen, gegen den Sie einen Effekt-SS testen möchten. Testen Sie zB den Effekt SS auffactor1 gegen den Interaktionseffekt SS von participant:factor1.

Für eine hervorragende Einführung in den Modellvergleichsansatz empfehle ich Maxwell & Delaney (2004). Experimente entwerfen und Daten analysieren.

caracal
quelle
Tolle Antwort, das hat mir wirklich geholfen, endlich zu verstehen, was eine ANOVA macht! Danke auch für die Buchreferenz!
Trev