โดยทั่วไปฉันเห็นด้วยกับการวิเคราะห์ของเบ็น แต่ขอเพิ่มข้อสังเกตอีกสองข้อและปรีชาเล็กน้อย
ก่อนผลลัพธ์โดยรวม:
- ผลลัพธ์ 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 
โดยที่เราใช้subnumMS แทนResidualsMS ในตัวหาร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ดังนั้นถ้าเราลบsubnumSSQ ที่เกี่ยวข้องทั้งหมดกลับเข้าไป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:directionDenDF จะประนีประนอมระหว่าง 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คือนาที การวิเคราะห์ของฉันข้างต้นบ่งชี้ว่าค่าDenDFfor directionและgroup:directionไม่ควรน้อยกว่า ~ 36 และอาจใหญ่กว่านั้นเนื่องจากโดยทั่วไปแล้วเราจะมีเอฟเฟกต์หลักแบบสุ่มเท่านั้นdirectionดังนั้นหากสิ่งใดที่ฉันคิดว่านี่เป็นข้อบ่งชี้ว่าวิธี KR DenDFต่ำเกินไป ในกรณีนี้. แต่โปรดจำไว้ว่าข้อมูลไม่ได้สนับสนุน(group | direction)โครงสร้างจริงๆดังนั้นการเปรียบเทียบจึงเป็นเรื่องเล็กน้อย - มันน่าสนใจกว่าถ้าแบบจำลองนั้นรองรับจริง
               
              
ezAnovaคำเตือนที่คุณไม่ควรเรียกใช้ 2x2 anova ถ้าอันที่จริงข้อมูลของคุณมาจากการออกแบบ 2x2x2