ANOVA คำนวณอย่างไรสำหรับการออกแบบการวัดซ้ำ: aov () vs lm () ใน R


14

ชื่อกล่าวมันทั้งหมดและฉันสับสน ต่อไปนี้ใช้มาตรการ aov () ซ้ำในอาร์และเรียกใช้สิ่งที่ฉันคิดว่าเป็นการเรียก lm () เทียบเท่า แต่พวกเขากลับค่าความผิดพลาดที่แตกต่างกัน (แม้ว่าจำนวนสแควร์สจะเท่ากัน)

เห็นได้ชัดว่าค่าตกค้างและค่าติดตั้งจาก aov () เป็นค่าที่ใช้ในแบบจำลองเนื่องจากผลรวมของกำลังสองของพวกเขารวมกันในแต่ละรูปแบบ / ผลรวมที่เหลือของกำลังสองที่รายงานโดยสรุป (my.aov) ดังนั้นโมเดลเชิงเส้นจริงที่ใช้กับการออกแบบการวัดซ้ำคืออะไร

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
ฉันไม่แน่ใจว่านี่คือสิ่งที่คุณหมายถึง แต่คุณจะพบ SS ทั้งหมดเมื่อคุณพอดีกับการโต้ตอบparticipantเช่นเดียวกับในanova(lm(value ~ factor1*factor2*participant, DFlong))
caracal

1
อานั่นมีประโยชน์ไหมโอเคดังนั้นจากโมเดล lm (ค่า ~ factor1 * factor2 * ผู้เข้าร่วม DFlong) แล้วผลรวมของกำลังสองคำนวณอย่างไร เช่น anova () กำลังทำอะไร
trev

คำตอบ:


14

วิธีหนึ่งที่จะคิดเกี่ยวกับมันคือการรักษาสถานการณ์เป็น 3 แฟคทอเรียลระหว่างอาสาสมัคร ANOVA กับ IVs participant, factor1และfactor2, ขนาดเซลล์ 1 anova(lm(value ~ factor1*factor2*participant, DFlong))คำนวณ SS ทั้งหมดสำหรับเอฟเฟกต์ทั้งหมดใน ANOVA 3 ทางนี้ (3 เอฟเฟกต์หลัก 3 การโต้ตอบอันดับหนึ่งการโต้ตอบตามลำดับ 1 วินาที) เนื่องจากมีเพียง 1 คนในแต่ละเซลล์โมเดลเต็มจึงไม่มีข้อผิดพลาดและการเรียกข้างต้นเพื่อanova()ไม่สามารถคำนวณการทดสอบ F ได้ แต่ SS ก็เหมือนกับใน 2-factorial ภายในการออกแบบ

วิธีการที่ไม่anova()จริงคำนวณ SS สำหรับผลกระทบ? ผ่านการเปรียบเทียบแบบจำลองตามลำดับ (ประเภท I): มันเหมาะกับแบบจำลองที่ถูก จำกัด โดยไม่มีผลต่อคำถามและแบบจำลองที่ไม่ จำกัด ซึ่งรวมถึงผลกระทบนั้น SS ที่เกี่ยวข้องกับเอฟเฟกต์นี้คือข้อแตกต่างของข้อผิดพลาด SS ระหว่างทั้งสองรุ่น

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

ตอนนี้เรามาตรวจสอบเอสเอฟเอฟที่เกี่ยวข้องกับการโต้ตอบid:IV1โดยการลบข้อผิดพลาด SS ของโมเดลที่ไม่ จำกัด จากข้อผิดพลาด SS ของโมเดลที่ถูก จำกัด

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

ตอนนี้คุณมีเอสเอสเอฟเฟ็กต์ "ดิบ" ทั้งหมดแล้วคุณสามารถสร้างการทดสอบภายในเรื่องได้ง่ายๆเพียงเลือกคำศัพท์ข้อผิดพลาดที่ถูกต้องเพื่อทดสอบเอฟเอสเอฟ เช่นการทดสอบเอสเอสเอฟเฟ็คสำหรับกับเอสเอสผลปฏิสัมพันธ์ของfactor1participant:factor1

สำหรับการแนะนำวิธีการเปรียบเทียบแบบจำลองที่ยอดเยี่ยมฉันขอแนะนำ Maxwell & Delaney (2004) การออกแบบการทดลองและการวิเคราะห์ข้อมูล


คำตอบที่ดีนั่นคือสิ่งที่ช่วยให้ฉันเข้าใจในที่สุดว่า ANOVA กำลังทำอะไรอยู่! ขอบคุณสำหรับการอ้างอิงหนังสือ!
trev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.