Bagaimana ANOVA dihitung untuk desain tindakan berulang: aov () vs lm () dalam R

13

Judulnya mengatakan itu semua, dan saya bingung. Berikut ini menjalankan langkah-langkah berulang aov () di R, dan menjalankan apa yang saya pikir adalah panggilan lm () yang setara, tetapi mereka mengembalikan sisa kesalahan yang berbeda (meskipun jumlah kuadratnya sama).

Jelas bahwa nilai residu dan pas dari aov () adalah yang digunakan dalam model, karena jumlah kuadratnya bertambah hingga masing-masing model / jumlah residu kuadrat yang dilaporkan dalam ringkasan (my.aov). Jadi apa saja model linear aktual yang diterapkan pada desain tindakan berulang?

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
sumber
1
Saya tidak yakin apakah ini yang Anda maksud, tetapi Anda akan menemukan semua SS ketika Anda juga cocok dengan interaksinya participant, seperti dalamanova(lm(value ~ factor1*factor2*participant, DFlong))
caracal
1
Ah itu membantu, ok, jadi dari model lm (nilai ~ factor1 * factor2 * peserta, DFlong), bagaimana cara menghitung jumlah kuadrat sebenarnya? yaitu apa yang dilakukan anova ()?
trev

Jawaban:

13

Salah satu cara untuk berpikir tentang hal itu adalah untuk mengobati situasi sebagai 3-faktorial antara subjek ANOVA dengan infus participant, factor1, factor2, dan ukuran sel 1. anova(lm(value ~ factor1*factor2*participant, DFlong))menghitung semua SS untuk semua efek dalam 3-way ANOVA (3 efek utama, 3 interaksi tingkat pertama, 1 interaksi tingkat kedua). Karena hanya ada 1 orang di setiap sel, model lengkap tidak memiliki kesalahan, dan panggilan di atas untuk anova()tidak dapat menghitung uji-F. Tapi SS sama dengan desain 2-faktorial.

Bagaimana cara anova()menghitung SS untuk efek? Melalui perbandingan model berurutan (tipe I): Ini cocok dengan model terbatas tanpa efek yang dipermasalahkan, dan model tidak terbatas yang mencakup efek itu. SS yang terkait dengan efek ini adalah perbedaan dalam kesalahan SS antara kedua model.

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

Sekarang mari kita periksa efek SS yang terkait dengan interaksi id:IV1dengan mengurangi SS kesalahan dari model tidak dibatasi dari SS kesalahan dari model terbatas.

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

Sekarang setelah Anda memiliki semua efek SS "mentah", Anda dapat membuat tes dalam-subyek hanya dengan memilih istilah kesalahan yang benar untuk menguji efek SS terhadap. Misalnya, uji efek SS untuk factor1melawan efek interaksi SS dari participant:factor1.

Untuk pengantar yang sangat baik untuk pendekatan perbandingan model, saya merekomendasikan Maxwell & Delaney (2004). Merancang Eksperimen dan Menganalisis Data.

caracal
sumber
Jawaban yang bagus, itu benar-benar membantu saya akhirnya memahami apa yang dilakukan ANOVA! Terima kasih juga untuk referensi buku!
trev