Tekrarlanan ölçüm tasarımı için bir ANOVA nasıl hesaplanır: R'de aov () vs lm ()


14

Başlık her şeyi söylüyor ve kafam karıştı. Aşağıdaki R tekrarlanan önlemler aov () çalışır ve eşdeğer bir lm () çağrısı olduğunu düşündüğüm çalışır, ancak farklı hata kalıntıları (kareler toplamları aynı olmasına rağmen) döndürür.

Açıkça aov () 'dan kalıntılar ve takılmış değerler modelde kullanılan değerlerdir, çünkü karelerin toplamları modelin her birine / özet olarak bildirilen karelerin kalan toplamlarına eklenir (my.aov). Peki tekrarlanan ölçüm tasarımına uygulanan gerçek doğrusal modeller nelerdir?

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

1
Kastettiğin bu olup olmadığından emin değilim, ama aynı zamandaparticipantanova(lm(value ~ factor1*factor2*participant, DFlong))
SSCB'de

1
Ah bu yararlı, tamam, yani lm modelinden (değer ~ faktör1 * faktör2 * katılımcı, DFlong), karelerin toplamı gerçekte nasıl hesaplanır? yani anova () ne yapıyor?
trev

Yanıtlar:


14

Düşünmek için bir yolu IVs olan denekler ANOVA arasına 3 faktörlü olarak durumu tedavi etmek için olan participant, factor1, factor2ve 1 bir hücre boyutu anova(lm(value ~ factor1*factor2*participant, DFlong)), bu 3-yollu ANOVA (3 temel etkileri, 3 tüm etkileri hesaplar ve tüm SS birinci dereceden etkileşimler, 1 ikinci dereceden etkileşim). Her hücrede yalnızca 1 kişi bulunduğundan, tam modelde hata yoktur ve yukarıdaki çağrı anova()F testlerini hesaplayamaz. Ancak SS, tasarımdaki 2 faktörlü ile aynıdır.

anova()Bir etki için SS'yi gerçekte nasıl hesaplar? Sıralı model karşılaştırmaları (tip I) ile: Söz konusu etki olmadan kısıtlı bir modele ve bu etkiyi içeren sınırsız bir modele uyar. Bu efektle ilişkili SS, her iki model arasındaki SS hatası hata değeridir.

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

Şimdi id:IV1, kısıtlanmamış modelin hata SS'sini, kısıtlı modelin hata SS'sinden çıkararak etkileşimle ilişkili SS etkisini kontrol edelim .

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

Artık tüm "ham" efekt SS'ye sahip olduğunuza göre, bir efekt SS'sini test etmek için doğru hata terimini seçerek, deneklerin içindeki testleri oluşturabilirsiniz. Örneğin, SS etkisini SS'nin factor1etkileşim etkisine karşı test edin participant:factor1.

Model karşılaştırma yaklaşımına mükemmel bir giriş için Maxwell & Delaney'i (2004) öneriyorum. Deney Tasarlama ve Verileri Analiz Etme.


Harika cevap, bu gerçekten sonunda bir ANOVA'nın ne yaptığını anlamama yardımcı oldu! Kitap referansı için de teşekkürler!
trev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.