เหตุใด lme และ aov จึงให้ผลลัพธ์ที่แตกต่างกันสำหรับมาตรการ ANOVA ใน R ซ้ำ ๆ


24

ฉันกำลังพยายามเปลี่ยนจากการใช้ezแพคเกจเป็นlmeมาตรการ ANOVA ซ้ำ ๆ (เพราะฉันหวังว่าฉันจะสามารถใช้ความแตกต่างที่กำหนดเองได้ด้วยlme)

ตามคำแนะนำจากบล็อกนี้โพสต์ก็สามารถที่จะตั้งค่ารูปแบบเดียวกันโดยใช้ทั้งaov(เช่นเดียวกับezเมื่อมีการร้องขอ) lmeและ อย่างไรก็ตามในตัวอย่างที่ให้ไว้ในโพสต์ค่าFเห็นด้วยอย่างสมบูรณ์ระหว่างaovและlme(ฉันตรวจสอบและพวกเขาทำ) นี่ไม่ใช่กรณีของข้อมูลของฉัน ถึงแม้ว่าค่าFจะใกล้เคียงกัน แต่ก็ไม่เหมือนกัน

aovส่งคืนค่า f ที่ 1.3399, lmeส่งคืน 1.36264 ฉันยินดีที่จะยอมรับaovผลลัพธ์ว่า "ถูกต้อง" เนื่องจากนี่คือสิ่งที่ SPSS ส่งคืน (และนี่คือสิ่งที่นับให้กับฟิลด์ / หัวหน้างานของฉัน)

คำถาม:

  1. มันจะดีถ้ามีคนอธิบายได้ว่าทำไมความแตกต่างนี้จึงมีอยู่และฉันจะใช้lmeเพื่อให้ผลลัพธ์ที่น่าเชื่อถือ (ฉันก็ยินดีที่จะใช้lmerแทนlmeสิ่งประเภทนี้ถ้ามันให้ผลลัพธ์ "ถูกต้อง" อย่างไรก็ตามฉันยังไม่ได้ใช้จนถึงตอนนี้)

  2. หลังจากแก้ปัญหานี้แล้วฉันต้องการเรียกใช้การวิเคราะห์ความเปรียบต่าง โดยเฉพาะฉันจะสนใจความแตกต่างของการรวมสองระดับแรกของปัจจัย (เช่นc("MP", "MT")) และเปรียบเทียบสิ่งนี้กับระดับที่สามของปัจจัย (เช่น"AC") นอกจากนี้การทดสอบระดับที่สามกับระดับที่สี่ของปัจจัย (เช่น"AC"กับ"DA")

ข้อมูล:

tau.base <- structure(list(id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L), .Label = c("A18K", 
"D21C", "F25E", "G25D", "H05M", "H07A", "H08H", "H25C", "H28E", 
"H30D", "J10G", "J22J", "K20U", "M09M", "P20E", "P26G", "P28G", 
"R03C", "U21S", "W08A", "W15V", "W18R"), class = "factor"), factor = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("MP", "MT", "AC", "DA"
), class = "factor"), value = c(0.9648092876, 0.2128662077, 1, 
0.0607615485, 0.9912814024, 3.22e-08, 0.8073856412, 0.1465590332, 
0.9981672618, 1, 1, 1, 0.9794401938, 0.6102546108, 0.428651501, 
1, 0.1710644881, 1, 0.7639763913, 1, 0.5298989196, 1, 1, 0.7162733447, 
0.7871177434, 1, 1, 1, 0.8560509327, 0.3096989662, 1, 8.51e-08, 
0.3278862311, 0.0953598576, 1, 1.38e-08, 1.07e-08, 0.545290432, 
0.1305621416, 2.61e-08, 1, 0.9834051136, 0.8044114935, 0.7938839461, 
0.9910112678, 2.58e-08, 0.5762677121, 0.4750002288, 1e-08, 0.8584252623, 
1, 1, 0.6020385797, 8.51e-08, 0.7964935271, 0.2238374288, 0.263377904, 
1, 1.07e-08, 0.3160751898, 5.8e-08, 0.3460325565, 0.6842217296, 
1.01e-08, 0.9438301877, 0.5578367224, 2.18e-08, 1, 0.9161424562, 
0.2924856039, 1e-08, 0.8672987992, 0.9266688748, 0.8356425464, 
0.9988463913, 0.2960361777, 0.0285680426, 0.0969063841, 0.6947998266, 
0.0138254805, 1, 0.3494775301, 1, 2.61e-08, 1.52e-08, 0.5393467752, 
1, 0.9069223275)), .Names = c("id", "factor", "value"), class = "data.frame", row.names = c(1L, 
6L, 10L, 13L, 16L, 17L, 18L, 22L, 23L, 24L, 27L, 29L, 31L, 33L, 
42L, 43L, 44L, 45L, 54L, 56L, 58L, 61L, 64L, 69L, 73L, 76L, 79L, 
80L, 81L, 85L, 86L, 87L, 90L, 92L, 94L, 96L, 105L, 106L, 107L, 
108L, 117L, 119L, 121L, 124L, 127L, 132L, 136L, 139L, 142L, 143L, 
144L, 148L, 149L, 150L, 153L, 155L, 157L, 159L, 168L, 169L, 170L, 
171L, 180L, 182L, 184L, 187L, 190L, 195L, 199L, 202L, 205L, 206L, 
207L, 211L, 212L, 213L, 216L, 218L, 220L, 222L, 231L, 232L, 233L, 
234L, 243L, 245L, 247L, 250L))

และรหัส:

require(nlme)

summary(aov(value ~ factor+Error(id/factor), data = tau.base))

anova(lme(value ~ factor, data = tau.base, random = ~1|id))

ดูเหมือนว่าคุณเพียงแค่ตอบส่วนหนึ่งเกี่ยวกับความแตกต่างด้วยตัวคุณเองในคำตอบของคุณที่นี่ ; ถ้าไม่ใช่โปรดแก้ไขคำถามนี้เพื่อให้เราทราบว่ายังมีปัญหาอยู่บ้าง
แอรอน - คืนสถานะโมนิก้า

2
@Aaron ตราบใดที่มีความแตกต่างในlmeผลลัพธ์จาก ANOVA ตำราเรียนมาตรฐาน (กำหนดโดยaovและซึ่งเป็นสิ่งที่ฉันต้องการ) นี่ไม่ใช่ตัวเลือกสำหรับฉัน ในกระดาษของฉันฉันต้องการรายงาน ANOVA ไม่ใช่สิ่งที่เหมือนกับ ANOVA Venables & Ripley ที่น่าสนใจ (2002, p. 285) แสดงว่าทั้งสองวิธีนำไปสู่การประมาณการแบบเดียวกัน แต่ความแตกต่างของค่าFทำให้ฉันมีความรู้สึกไม่ดี นอกจากนี้Anova()(จากcar) จะส่งกลับเฉพาะค่าChi²-สำหรับlmeวัตถุ ดังนั้นสำหรับฉันคำถามแรกของฉันยังไม่ได้รับคำตอบ
Henrik

ผมเข้าใจ ( แต่ไม่ได้) ความรอบคอบของคุณlme; แต่สำหรับความคมชัดก็ใช้glhtงานได้lmพอดีเช่นกันไม่ใช่แค่lmeพอดี (นอกจากนี้lmeผลลัพธ์ยังเป็นผลลัพธ์ของตำราเรียนมาตรฐานด้วย)
Aaron - Reinstate Monica

น่าเสียดายที่คุณไม่สามารถระบุlmการวิเคราะห์การวัดซ้ำได้ เพียง แต่aovสามารถจัดการกับวัดซ้ำ แต่จะกลับวัตถุของคลาสซึ่งเป็นที่น่าเสียดายที่ไม่ได้รับการจัดการโดยaovlist glht
Henrik

3
lmใช้ข้อผิดพลาดที่เหลือเป็นคำผิดพลาดสำหรับผลกระทบทั้งหมด เมื่อมีเอฟเฟกต์ที่ควรใช้คำที่ผิดพลาดต่างกันaovเป็นสิ่งจำเป็น (หรือแทนที่จะใช้ผลลัพธ์จากlmเพื่อคำนวณ F-stats ด้วยตนเอง) ในตัวอย่างของคุณคำว่าข้อผิดพลาดสำหรับfactorคือการid:factorโต้ตอบซึ่งเป็นคำที่ผิดพลาดที่เหลืออยู่ในรูปแบบการเติม anova(lm(value~factor+id))เปรียบเทียบผลของคุณจะ
แอรอน - คืนสถานะโมนิก้า

คำตอบ:


28

มีความแตกต่างกันเนื่องจากโมเดล lme บังคับให้ส่วนประกอบความแปรปรวนidเป็นมากกว่าศูนย์ ดูที่ตาราง anova ดิบสำหรับคำศัพท์ทั้งหมดเราจะเห็นว่าข้อผิดพลาดกำลังสองเฉลี่ยสำหรับ id น้อยกว่าสำหรับส่วนที่เหลือ

> anova(lm1 <- lm(value~ factor+id, data=tau.base))

          Df  Sum Sq Mean Sq F value Pr(>F)
factor     3  0.6484 0.21614  1.3399 0.2694
id        21  3.1609 0.15052  0.9331 0.5526
Residuals 63 10.1628 0.16131   

เมื่อเราคำนวณองค์ประกอบความแปรปรวนนั่นหมายความว่าความแปรปรวนเนื่องจากรหัสจะเป็นค่าลบ ความทรงจำของฉันหมายถึงกำลังสองหน่วยความจำที่กำลังสั่นคลอน แต่การคำนวณก็เป็นเช่นนั้น

(0.15052-0.16131)/3 = -0.003597.

ฟังดูแปลก แต่สามารถเกิดขึ้นได้ หมายความว่าอะไรโดยเฉลี่ยสำหรับแต่ละ id ใกล้กันมากกว่าที่คุณคาดหวังซึ่งกันและกันเมื่อกำหนดจำนวนความแปรปรวนที่เหลือในรูปแบบ

ในทางตรงกันข้ามการใช้ lme บังคับให้ความแปรปรวนนี้มากกว่าศูนย์

> summary(lme1 <- lme(value ~ factor, data = tau.base, random = ~1|id))
...
Random effects:
 Formula: ~1 | id
        (Intercept)  Residual
StdDev: 3.09076e-05 0.3982667

สิ่งนี้จะรายงานความเบี่ยงเบนมาตรฐานกำลังสองเพื่อรับผลต่างความแปรปรวน9.553e-10สำหรับความแปรปรวน id และความแปรปรวน0.1586164ที่เหลือ

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

ในชุดข้อมูลนี้การประมาณค่าความสัมพันธ์นี้เป็นค่าลบ สิ่งนี้ช่วยอธิบายว่าข้อผิดพลาดกำลังสองเฉลี่ยสำหรับ id น้อยกว่าข้อผิดพลาดกำลังสองตกค้าง ความสัมพันธ์เชิงลบหมายความว่าหากการวัดครั้งแรกของแต่ละคนต่ำกว่าค่าเฉลี่ยโดยเฉลี่ยความที่สองของพวกเขาจะสูงกว่าค่าเฉลี่ยทำให้ค่าเฉลี่ยรวมสำหรับบุคคลนั้นแปรปรวนน้อยกว่าที่เราคาดหวังหากมีความสัมพันธ์เป็นศูนย์หรือความสัมพันธ์เชิงบวก

การใช้lmeกับเอฟเฟ็กต์แบบสุ่มนั้นเทียบเท่ากับแบบจำลองสมมาตรแบบผสมซึ่งความสัมพันธ์นั้นถูกบังคับให้ไม่เป็นลบ เราสามารถใส่แบบจำลองที่ความสัมพันธ์ได้รับอนุญาตให้ใช้ในเชิงลบgls:

> anova(gls1 <- gls(value ~ factor, correlation=corCompSymm(form=~1|id),
                    data=tau.base))
Denom. DF: 84 
            numDF   F-value p-value
(Intercept)     1 199.55223  <.0001
factor          3   1.33985   0.267

ตาราง ANOVA นี้เห็นด้วยกับตารางจากaovขนาดและจากlmขนาดที่พอดี

ตกลงอะไร ถ้าคุณเชื่อว่าความแปรปรวนจากidและความสัมพันธ์ระหว่างการสังเกตควรไม่เป็นลบความlmeพอดีนั้นเหมาะสมกว่าการใช้แบบพอดีaovหรือlmตามการประมาณความแปรปรวนส่วนที่เหลือดีกว่าเล็กน้อย แต่ถ้าคุณเชื่อว่าความสัมพันธ์ระหว่างการสังเกตอาจจะลบaovหรือlmหรือglsจะดีกว่า

คุณอาจสนใจสำรวจโครงสร้างความสัมพันธ์เพิ่มเติม หากต้องการดูโครงสร้างความสัมพันธ์ทั่วไปคุณต้องทำอะไรบางอย่าง

gls2 <- gls(value ~ factor, correlation=corSymm(form=~unclass(factor)|id),
data=tau.base)

ที่นี่ฉันจะ จำกัด ผลลัพธ์ที่โครงสร้างความสัมพันธ์เท่านั้น ค่า 1 ถึง 4 แสดงถึงสี่ระดับของfactor; เราเห็นว่าปัจจัย 1 และปัจจัย 4 มีความสัมพันธ์เชิงลบที่ค่อนข้างแข็งแกร่ง:

> summary(gls2)
...
Correlation Structure: General
 Formula: ~unclass(factor) | id 
 Parameter estimate(s):
 Correlation: 
  1      2      3     
2  0.049              
3 -0.127  0.208       
4 -0.400  0.146 -0.024

วิธีหนึ่งในการเลือกระหว่างโมเดลเหล่านี้คือการทดสอบอัตราส่วนความน่าจะเป็น นี่แสดงให้เห็นว่าแบบจำลองเอฟเฟกต์แบบสุ่มและโมเดลโครงสร้างความสัมพันธ์ทั่วไปไม่แตกต่างกัน เมื่อสิ่งนั้นเกิดขึ้นมักจะต้องการแบบจำลองที่ง่ายกว่า

> anova(lme1, gls2)
     Model df      AIC      BIC    logLik   Test  L.Ratio p-value
lme1     1  6 108.0794 122.6643 -48.03972                        
gls2     2 11 111.9787 138.7177 -44.98936 1 vs 2 6.100725  0.2965

2
มันเป็นไปได้จริงจะใช้สมมาตรสารประกอบที่มีlmeเพื่อให้ได้ผลลัพธ์เดียวกันเช่นเดียวกับaov(และจึงทำให้lmeทุก ANOVAs) คือการใช้อาร์กิวเมนต์ความสัมพันธ์ในการเรียกร้องให้lme:anova(lme(value ~ factor, data = tau.base, random = ~1|id, correlation = corCompSymm(form = ~1|id)))
เฮนริก

1
ยินดีที่ได้พบ แต่ไม่มีพารามิเตอร์พิเศษในนั้นหรือไม่ มันมีสามตัวแปรความแปรปรวน ความแปรปรวนสำหรับ id, ความแปรปรวนที่เหลือและความสัมพันธ์ในขณะที่ gls มีเพียงความแปรปรวนที่เหลือและความสัมพันธ์
แอรอน - คืนสถานะโมนิก้า

1
ข้อโต้แย้งของคุณฟังดูสมเหตุสมผล แต่ผลลัพธ์ไม่เห็นด้วย ตาราง anova ทั้งหมด ( aov, ที่lmeไม่มีสมมาตรแบบรวมและlmeสมมาตรแบบผสม) มีจำนวน dfs เท่ากันทุกประการ
Henrik

1
คุณจะต้องโน้มน้าวฉันว่าพารามิเตอร์ทั้งสามนั้นเป็นพารามิเตอร์ที่มากเกินไปของสองตัวแปรแรก คุณเคยรู้ไหมว่ามันเกี่ยวข้องกันอย่างไร?
แอรอน - คืนสถานะโมนิก้า

1
anova.lme()เลขที่ฉันกำลังไว้วางใจการส่งออกของ จากคำตอบของคุณฉันได้ว่าความสัมพันธ์ระหว่าง ANOVA และตัวแบบผสมอยู่ในโครงสร้างสหสัมพันธ์ของพวกเขา จากนั้นฉันได้อ่านว่าการวางโครงสร้างความสัมพันธ์แบบสมมาตรทำให้เกิดความเท่าเทียมกันระหว่างทั้งสองวิธี ดังนั้นฉันกำหนดมัน ฉันไม่รู้ว่าถ้านี่กินอีก df เอาท์พุท แต่ไม่เห็นด้วยกับการตีความนี้
Henrik

2

aov()เหมาะกับรุ่นผ่านการlm()ใช้กำลังสองน้อยที่สุดlmeพอดีผ่านโอกาสสูงสุด ความแตกต่างในวิธีที่พารามิเตอร์ของตัวแบบเชิงเส้นประมาณว่ามีแนวโน้มว่าบัญชีสำหรับความแตกต่าง (เล็กมาก) ในค่า f ของคุณ

ในทางปฏิบัติ (เช่นสำหรับการทดสอบสมมติฐาน) การประมาณการเหล่านี้เหมือนกันดังนั้นฉันไม่เห็นว่าคน ๆ หนึ่งน่าจะมีความน่าเชื่อถือมากกว่าคนอื่น ๆ พวกเขามาจากกระบวนทัศน์ที่เหมาะสมแบบจำลองที่แตกต่างกัน

สำหรับความแตกต่างคุณต้องตั้งค่าเมทริกซ์ความคมชัดสำหรับปัจจัยของคุณ Venebles และ Ripley แสดงวิธีการทำเช่นนี้ในหน้า 143, p.146 และ p.293-294 ของรุ่นที่ 4


อืม แต่ทำไมบางครั้งถึงมีความแตกต่างและบางครั้งผลลัพธ์ที่เท่ากัน? Furthemrore ดังนั้นจึงเป็นไปไม่ได้ที่จะใช้lmeหรือlmerคำนวณ ANOVA (พูดอย่างเคร่งครัด) เนื่องจากใช้วิธีการที่คล้ายกัน แต่ไม่เหมือนกัน ดังนั้นจึงไม่มีวิธีในการคำนวณความแตกต่างสำหรับการวัด ANOVAs ซ้ำ ๆ ใน R หรือไม่?
Henrik

หากระบบของคุณเป็นแบบจำลองเชิงเส้นแท้จริงน้อยกว่ากำลังสองน้อยที่สุดและ ML ควรให้ค่าสถิติ f เดียวกัน เฉพาะเมื่อมีโครงสร้างอื่นในข้อมูลที่ทั้งสองวิธีจะให้ผลลัพธ์ที่แตกต่างกัน Pinheiro และ Bates กล่าวถึงเรื่องนี้ในหนังสือแบบจำลองเอฟเฟกต์ผสม นอกจากนี้พวกเขายังมีแนวโน้มที่จะไม่ 'แน่นอน' เท่ากันถ้าคุณต้องไปไกลเกินพอใน sig หลักฉันแน่ใจว่าคุณจะพบความแตกต่าง แต่สำหรับการใช้งานจริงพวกมันเหมือนกัน
Chris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.