โดยทั่วไปฉันเห็นด้วยกับการวิเคราะห์ของเบ็น แต่ขอเพิ่มข้อสังเกตอีกสองข้อและปรีชาเล็กน้อย
ก่อนผลลัพธ์โดยรวม:
- ผลลัพธ์ lmerTest ที่ใช้วิธี Satterthwaite นั้นถูกต้อง
- วิธี Kenward-Roger นั้นถูกต้องและเห็นด้วยกับ Satterthwaite
เบนแนวทางการออกแบบที่subnum
ซ้อนอยู่ในgroup
ขณะที่direction
และมีการข้ามกับgroup:direction
subnum
ซึ่งหมายความว่าระยะผิดพลาดธรรมชาติ (เช่นที่เรียกว่า "การปิดล้อมข้อผิดพลาดชั้น") สำหรับgroup
เป็นsubnum
ในขณะที่ชั้นล้อมรอบข้อผิดพลาดสำหรับคำอื่น ๆ (รวมsubnum
) เป็นคลาดเคลื่อน
โครงสร้างนี้สามารถแสดงในแผนภาพปัจจัยที่เรียกว่า:
names <- c(expression("[I]"[5169]^{5191}),
expression("[subnum]"[18]^{20}), expression(grp:dir[1]^{4}),
expression(dir[1]^{2}), expression(grp[1]^{2}), expression(0[1]^{1}))
x <- c(2, 4, 4, 6, 6, 8)
y <- c(5, 7, 5, 3, 7, 5)
plot(NA, NA, xlim=c(2, 8), ylim=c(2, 8), type="n", axes=F, xlab="", ylab="")
text(x, y, names) # Add text according to ’names’ vector
# Define coordinates for start (x0, y0) and end (x1, y1) of arrows:
x0 <- c(1.8, 1.8, 4.2, 4.2, 4.2, 6, 6) + .5
y0 <- c(5, 5, 7, 5, 5, 3, 7)
x1 <- c(2.7, 2.7, 5, 5, 5, 7.2, 7.2) + .5
y1 <- c(5, 7, 7, 3, 7, 5, 5)
arrows(x0, y0, x1, y1, length=0.1)
ที่นี่คำที่สุ่มอยู่ในวงเล็บ0
แสดงถึงค่าเฉลี่ย (หรือสกัดกั้น) [I]
แสดงถึงข้อผิดพลาดหมายเลขซุปเปอร์สคริปต์คือจำนวนของระดับและหมายเลขสคริปต์ย่อยคือจำนวนองศาความเป็นอิสระที่สมมติว่ามีการออกแบบที่สมดุล แผนภาพแสดงให้เห็นว่าคำผิดพลาดตามธรรมชาติ (ล้อมรอบชั้นข้อผิดพลาด) สำหรับgroup
คือsubnum
และว่าตัวเศษ df สำหรับsubnum
ซึ่งเท่ากับตัวส่วน df สำหรับgroup
คือ 18: 20 ลบ 1 df สำหรับgroup
และ 1 df สำหรับค่าเฉลี่ยโดยรวม แนะนำที่ครอบคลุมมากขึ้นเพื่อแผนภาพโครงสร้างปัจจัยที่มีอยู่ในบทที่ 2 ที่นี่: https://02429.compute.dtu.dk/eBook
หากข้อมูลที่ถูกปรับให้สมดุลว่าเราจะสามารถที่จะสร้าง F-การทดสอบจาก SSQ anova.lm
สลายตัวให้เป็นไปตาม เนื่องจากชุดข้อมูลมีความสมดุลอย่างใกล้ชิดเราจึงสามารถรับการทดสอบ F โดยประมาณดังนี้:
ANT.2 <- subset(ANT, !error)
set.seed(101)
baseline.shift <- rnorm(length(unique(ANT.2$subnum)), 0, 50)
ANT.2$rt <- ANT.2$rt + baseline.shift[as.numeric(ANT.2$subnum)]
fm <- lm(rt ~ group * direction + subnum, data=ANT.2)
(an <- anova(fm))
Analysis of Variance Table
Response: rt
Df Sum Sq Mean Sq F value Pr(>F)
group 1 994365 994365 200.5461 <2e-16 ***
direction 1 1568 1568 0.3163 0.5739
subnum 18 7576606 420923 84.8927 <2e-16 ***
group:direction 1 11561 11561 2.3316 0.1268
Residuals 5169 25629383 4958
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
นี่คือค่าFและpทั้งหมดจะถูกคำนวณโดยสมมติว่าเงื่อนไขทั้งหมดมีส่วนที่เหลือเป็น stratum ข้อผิดพลาดที่ล้อมรอบและนั่นเป็นจริงสำหรับทุกคนยกเว้น 'กลุ่ม' 'ความสมดุลที่ถูกต้อง' F -test สำหรับกลุ่มคือแทน:
F_group <- an["group", "Mean Sq"] / an["subnum", "Mean Sq"]
c(Fvalue=F_group, pvalue=pf(F_group, 1, 18, lower.tail = FALSE))
Fvalue pvalue
2.3623466 0.1416875
โดยที่เราใช้subnum
MS แทนResiduals
MS ในตัวหารF -value
โปรดทราบว่าค่าเหล่านี้ตรงกับผลลัพธ์ Satterthwaite ค่อนข้างดี:
model <- lmer(rt ~ group * direction + (1 | subnum), data = ANT.2)
anova(model, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12065.3 12065.3 1 18 2.4334 0.1362
direction 1951.8 1951.8 1 5169 0.3936 0.5304
group:direction 11552.2 11552.2 1 5169 2.3299 0.1270
ความแตกต่างที่เหลืออยู่เกิดจากข้อมูลไม่สมดุลอย่างแน่นอน
OP เปรียบเทียบanova.lm
กับanova.lmerModLmerTest
ซึ่งก็โอเค แต่เมื่อต้องการเปรียบเทียบ like กับ like เราต้องใช้ความแตกต่างเดียวกัน ในกรณีนี้มีความแตกต่างระหว่างanova.lm
และanova.lmerModLmerTest
เนื่องจากพวกเขาสร้างการทดสอบ Type I และ III โดยค่าเริ่มต้นตามลำดับและสำหรับชุดข้อมูลนี้มีความแตกต่าง (เล็ก) ระหว่างความแตกต่าง Type I และ III:
show_tests(anova(model, type=1))$group
(Intercept) groupTreatment directionright groupTreatment:directionright
groupTreatment 0 1 0.005202759 0.5013477
show_tests(anova(model, type=3))$group # type=3 is default
(Intercept) groupTreatment directionright groupTreatment:directionright
groupTreatment 0 1 0 0.5
หากชุดข้อมูลมีความสมดุลอย่างสมบูรณ์ประเภทที่ฉันตัดกันจะเหมือนกับความแตกต่างของประเภท III (ซึ่งไม่ได้รับผลกระทบจากจำนวนตัวอย่างที่สังเกต)
ข้อสังเกตสุดท้ายอย่างหนึ่งคือ 'ความช้า' ของวิธี Kenward-Roger ไม่ได้เกิดจากการปรับแบบจำลองใหม่ แต่เนื่องจากมันเกี่ยวข้องกับการคำนวณด้วยเมทริกซ์ความแปรปรวนร่วมแปรปรวนร่วมของการสังเกต / เศษเหลือ (5191x5191 ในกรณีนี้) ซึ่งไม่ใช่ กรณีสำหรับวิธีการของ Satterthwaite
เกี่ยวกับ model2
สำหรับ model2 สถานการณ์มีความซับซ้อนมากขึ้นและฉันคิดว่ามันง่ายกว่าที่จะเริ่มการสนทนากับโมเดลอื่นที่ฉันได้รวมการโต้ตอบแบบ 'คลาสสิค' ระหว่างsubnum
และdirection
:
model3 <- lmer(rt ~ group * direction + (1 | subnum) +
(1 | subnum:direction), data = ANT.2)
VarCorr(model3)
Groups Name Std.Dev.
subnum:direction (Intercept) 1.7008e-06
subnum (Intercept) 4.0100e+01
Residual 7.0415e+01
เนื่องจากความแปรปรวนที่เกี่ยวข้องกับการทำงานร่วมกันนั้นเป็นศูนย์ (ในที่ที่มีsubnum
ผลกระทบหลักแบบสุ่ม) เทอมการโต้ตอบจึงไม่มีผลต่อการคำนวณองศาอิสระของส่วน, F-ค่าและp -values:
anova(model3, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12065.3 12065.3 1 18 2.4334 0.1362
direction 1951.8 1951.8 1 5169 0.3936 0.5304
group:direction 11552.2 11552.2 1 5169 2.3299 0.1270
อย่างไรก็ตามsubnum:direction
เป็นชั้นข้อผิดพลาดในการปิดล้อมsubnum
ดังนั้นถ้าเราลบsubnum
SSQ ที่เกี่ยวข้องทั้งหมดกลับเข้าไปsubnum:direction
model4 <- lmer(rt ~ group * direction +
(1 | subnum:direction), data = ANT.2)
ตอนนี้ระยะผิดพลาดธรรมชาติสำหรับgroup
, direction
และgroup:direction
เป็น
subnum:direction
และมีnlevels(with(ANT.2, subnum:direction))
= 40 และสี่พารามิเตอร์องศาหารของเสรีภาพสำหรับคำเหล่านั้นควรจะประมาณ 36:
anova(model4, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 24004.5 24004.5 1 35.994 4.8325 0.03444 *
direction 50.6 50.6 1 35.994 0.0102 0.92020
group:direction 273.4 273.4 1 35.994 0.0551 0.81583
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
การทดสอบFเหล่านี้สามารถประมาณด้วยการทดสอบF ที่ 'สมดุลถูกต้อง' :
an4 <- anova(lm(rt ~ group*direction + subnum:direction, data=ANT.2))
an4[1:3, "F value"] <- an4[1:3, "Mean Sq"] / an4[4, "Mean Sq"]
an4[1:3, "Pr(>F)"] <- pf(an4[1:3, "F value"], 1, 36, lower.tail = FALSE)
an4
Analysis of Variance Table
Response: rt
Df Sum Sq Mean Sq F value Pr(>F)
group 1 994365 994365 4.6976 0.0369 *
direction 1 1568 1568 0.0074 0.9319
group:direction 1 10795 10795 0.0510 0.8226
direction:subnum 36 7620271 211674 42.6137 <2e-16 ***
Residuals 5151 25586484 4967
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ตอนนี้หันไป model2:
model2 <- lmer(rt ~ group * direction + (direction | subnum), data = ANT.2)
โมเดลนี้อธิบายโครงสร้างความแปรปรวนร่วมแบบสุ่มที่ค่อนข้างซับซ้อนด้วยเมทริกซ์ความแปรปรวนร่วมแปรปรวน 2x2 การกำหนดค่าเริ่มต้นไม่ใช่เรื่องง่ายที่จะจัดการและเราดีกว่าด้วยการกำหนดพารามิเตอร์ใหม่ของโมเดล:
model2 <- lmer(rt ~ group * direction + (0 + direction | subnum), data = ANT.2)
ถ้าเราเปรียบเทียบmodel2
กับmodel4
พวกมันมีเอฟเฟกต์สุ่มจำนวนเท่า ๆ กัน; 2 สำหรับแต่ละตัวอย่างsubnum
เช่น 2 * 20 = 40 รวม ในขณะที่model4
กำหนดพารามิเตอร์ความแปรปรวนเดียวสำหรับเอฟเฟกต์สุ่มทั้ง 40 ชุดmodel2
ระบุว่าแต่ละsubnum
คู่ของเอฟเฟกต์สุ่มจะมีการแจกแจงปกติสองตัวแปรที่มีเมทริกซ์ความแปรปรวนร่วมแปรปรวน 2x2 กับพารามิเตอร์ที่ได้รับจาก
VarCorr(model2)
Groups Name Std.Dev. Corr
subnum directionleft 38.880
directionright 41.324 1.000
Residual 70.405
สิ่งนี้บ่งชี้ว่ามีความเหมาะสมมากเกินไป แต่ขอบันทึกไว้อีกวัน จุดสำคัญที่นี่คือmodel4
เป็นกรณีพิเศษของmodel2
และว่าmodel
เป็นยังmodel2
เป็นกรณีพิเศษของ คับ (และสังหรณ์ใจ) พูด(direction | subnum)
มีหรือจับรูปแบบที่เกี่ยวข้องกับผลกระทบหลักsubnum
เช่นเดียวกับdirection:subnum
การมีปฏิสัมพันธ์ ในแง่ของเอฟเฟ็กต์แบบสุ่มเราสามารถนึกถึงเอฟเฟกต์หรือโครงสร้างทั้งสองนี้เป็นการจับความแปรปรวนระหว่างแถวและแถวทีละคอลัมน์ตามลำดับ:
head(ranef(model2)$subnum)
directionleft directionright
1 -25.453576 -27.053697
2 16.446105 17.479977
3 -47.828568 -50.835277
4 -1.980433 -2.104932
5 5.647213 6.002221
6 41.493591 44.102056
ในกรณีนี้การประเมินเอฟเฟกต์แบบสุ่มเหล่านี้รวมถึงการประมาณค่าพารามิเตอร์ความแปรปรวนทั้งสองระบุว่าเรามีผลกระทบหลักแบบสุ่มของsubnum
(การเปลี่ยนแปลงระหว่างแถว) ที่นี่เท่านั้น สิ่งนี้นำไปสู่การเป็นที่องศาอิสระ Satterthwaite
anova(model2, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12059.8 12059.8 1 17.998 2.4329 0.1362
direction 1803.6 1803.6 1 125.135 0.3638 0.5475
group:direction 10616.6 10616.6 1 125.136 2.1418 0.1458
เป็นการประนีประนอมระหว่างโครงสร้างหลักที่มีผลกระทบและการโต้ตอบ: กลุ่ม DenDF ยังคงอยู่ที่ 18 (ซ้อนกันในsubnum
การออกแบบ) แต่direction
และ
group:direction
DenDF จะประนีประนอมระหว่าง 36 ( model4
) และ 5169 ( model
)
ฉันไม่คิดว่าสิ่งใดที่นี่บ่งชี้ว่าการประมาณ Satterthwaite (หรือการนำไปใช้ในlmerTest ) เป็นความผิดพลาด
ตารางเทียบเท่ากับวิธี Kenward-Roger ให้
anova(model2, type=1, ddf="Ken")
Type I Analysis of Variance Table with Kenward-Roger's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12059.8 12059.8 1 18.000 2.4329 0.1362
direction 1803.2 1803.2 1 17.987 0.3638 0.5539
group:direction 10614.7 10614.7 1 17.987 2.1414 0.1606
ไม่น่าแปลกใจที่ KR และ Satterthwaite สามารถแตกต่างกัน แต่สำหรับการปฏิบัติทั้งหมดความแตกต่างของค่าpคือนาที การวิเคราะห์ของฉันข้างต้นบ่งชี้ว่าค่าDenDF
for direction
และgroup:direction
ไม่ควรน้อยกว่า ~ 36 และอาจใหญ่กว่านั้นเนื่องจากโดยทั่วไปแล้วเราจะมีเอฟเฟกต์หลักแบบสุ่มเท่านั้นdirection
ดังนั้นหากสิ่งใดที่ฉันคิดว่านี่เป็นข้อบ่งชี้ว่าวิธี KR DenDF
ต่ำเกินไป ในกรณีนี้. แต่โปรดจำไว้ว่าข้อมูลไม่ได้สนับสนุน(group | direction)
โครงสร้างจริงๆดังนั้นการเปรียบเทียบจึงเป็นเรื่องเล็กน้อย - มันน่าสนใจกว่าถ้าแบบจำลองนั้นรองรับจริง
ezAnova
คำเตือนที่คุณไม่ควรเรียกใช้ 2x2 anova ถ้าอันที่จริงข้อมูลของคุณมาจากการออกแบบ 2x2x2