คำสั่ง anova () ทำอะไรกับวัตถุโมเดล lmer


30

หวังว่านี่เป็นคำถามที่ใครบางคนที่นี่สามารถตอบสำหรับฉันเกี่ยวกับธรรมชาติของการสลายจำนวนสแควร์สจากรูปแบบเอฟเฟกต์ผสมกับlmer(จากแพ็คเกจ lme4 R)

ก่อนอื่นฉันควรจะบอกว่าฉันรู้ถึงความขัดแย้งกับการใช้วิธีการนี้และในทางปฏิบัติฉันมีแนวโน้มที่จะใช้ bootstrapped LRT เพื่อเปรียบเทียบแบบจำลอง (ตามที่ Faraway, 2006 แนะนำ) อย่างไรก็ตามฉันสับสนในวิธีการทำซ้ำผลลัพธ์และเพื่อความมีสติของตัวเองฉันคิดว่าฉันจะถามที่นี่

โดยพื้นฐานแล้วฉันจะได้สัมผัสกับการใช้แบบจำลองเอฟเฟกต์ที่เหมาะสมกับlme4แพ็คเกจ ฉันรู้ว่าคุณสามารถใช้anova()คำสั่งเพื่อให้บทสรุปของการทดสอบผลกระทบคงที่ตามลำดับในรูปแบบ เท่าที่ฉันรู้ว่าสิ่งนี้คือสิ่งที่ Faraway (2006) อ้างถึงเป็นวิธีการ 'คาดหมายถึงกำลังสอง' สิ่งที่ฉันอยากรู้คือการคำนวณจำนวนเงินสแควร์สเป็นอย่างไร?

ฉันรู้ว่าฉันสามารถนำค่าประมาณจากโมเดลเฉพาะ (โดยใช้coef()) สมมติว่าได้รับการแก้ไขแล้วทำการทดสอบโดยใช้ผลรวมของกำลังสองของเศษซากโมเดลที่มีและไม่มีปัจจัยที่น่าสนใจ นี่เป็นสิ่งที่ดีสำหรับโมเดลที่มีปัจจัยภายในเรื่องเดียว อย่างไรก็ตามเมื่อใช้การออกแบบการแยกส่วนผลบวกของค่ากำลังสองที่ฉันได้รับจะเท่ากับค่าที่ผลิตโดย R โดยใช้aov()การError()กำหนดที่เหมาะสม อย่างไรก็ตามนี่ไม่เหมือนกับผลบวกของกำลังสองที่สร้างโดยanova()คำสั่งบนวัตถุจำลองแม้ว่าข้อเท็จจริงที่ว่าอัตราส่วน F จะเหมือนกันก็ตาม

ของหลักสูตรนี้เหมาะสมอย่างสมบูรณ์เนื่องจากไม่จำเป็นต้องมีError()ชั้นในรูปแบบผสม อย่างไรก็ตามนี่ต้องหมายความว่าผลรวมของกำลังสองจะถูกลงโทษในรูปแบบผสมเพื่อให้ได้อัตราส่วน F ที่เหมาะสม สิ่งนี้สำเร็จได้อย่างไร และรูปแบบอย่างไรแก้ไขผลรวมระหว่างพล็อตของสี่เหลี่ยม แต่ไม่แก้ไขผลรวมภายในพล็อตของสแควร์ เห็นได้ชัดว่านี่เป็นสิ่งที่จำเป็นสำหรับ ANOVA แบบแยกส่วนแบบคลาสสิกที่ทำได้โดยการกำหนดค่าความผิดพลาดต่างกันสำหรับเอฟเฟกต์ต่าง ๆ ดังนั้นโมเดลผสมเอฟเฟกต์จะอนุญาตได้อย่างไร

โดยพื้นฐานแล้วฉันต้องการที่จะสามารถจำลองผลลัพธ์ที่ได้จากanova()คำสั่งที่ใช้กับวัตถุโมเดล lmer เพื่อตรวจสอบผลลัพธ์และความเข้าใจของฉันอย่างไรก็ตามในปัจจุบันฉันสามารถทำสิ่งนี้ได้สำหรับการออกแบบภายในเรื่องปกติ แต่ไม่ใช่สำหรับการแยก - พล็อตเรื่องการออกแบบและฉันไม่สามารถหาสาเหตุได้ในกรณีนี้

ตัวอย่างเช่น:

library(faraway)
library(lme4)
data(irrigation)

anova(lmer(yield ~ irrigation + variety + (1|field), data = irrigation))

Analysis of Variance Table
           Df Sum Sq Mean Sq F value
irrigation  3 1.6605  0.5535  0.3882
variety     1 2.2500  2.2500  1.5782

summary(aov(yield ~ irrigation + variety + Error(field/irrigation), data = irrigation))

Error: field
           Df Sum Sq Mean Sq F value Pr(>F)
irrigation  3  40.19   13.40   0.388  0.769
Residuals   4 138.03   34.51               

Error: Within
          Df Sum Sq Mean Sq F value Pr(>F)
variety    1   2.25   2.250   1.578  0.249
Residuals  7   9.98   1.426               

ดังที่เห็นข้างต้นอัตราส่วน F ทั้งหมดเห็นด้วย ผลรวมของสี่เหลี่ยมสำหรับความหลากหลายก็เห็นด้วยเช่นกัน อย่างไรก็ตามผลรวมของช่องสี่เหลี่ยมเพื่อการชลประทานไม่เห็นด้วย ดังนั้นคำสั่ง anova () ทำอะไรได้จริง?


1
คุณอาจต้องการที่จะมีลักษณะที่ฟังก์ชั่นmixed()จากafexที่เสนอสิ่งที่คุณต้องการ (ผ่านmethod = "PB") และเมื่อคุณทำการทดสอบกับข้อมูลของเล่นอย่างชัดเจนมันจะเป็นประโยชน์อย่างแน่นอนถ้าคุณสามารถแสดงสิ่งที่เทียบเท่ากับข้อมูลและรหัส (ดังนั้นไม่มี +1)
Henrik

@ Henrik Tough ฝูงชน ... Martyn คุณช่วยอ้างอิง Faraway (2006) ได้มั้ย
Patrick Coulombe


@PatrickCoulombe Hehe คุณพูดถูก แต่บางครั้งพลังที่เป็นมิตรช่วยให้ได้คำถามที่ดีขึ้น
Henrik

1
แอรอนถูกต้องในการอ้างอิงหนังสือขอโทษที่ไม่ได้ให้มันมา!
Martyn

คำตอบ:


31

ใช้แหล่งที่มาลุค getAnywhere(anova.Mermod)เราสามารถมองภายในฟังก์ชั่นการวิเคราะห์ความแปรปรวนโดยการทำ ส่วนแรกของฟังก์ชั่นนั้นสำหรับการเปรียบเทียบสองรุ่นที่แตกต่างกัน Anova ของเอฟเฟกต์คงที่จะมาในelseบล็อกขนาดใหญ่ในช่วงครึ่งหลัง:

 dc <- getME(object, "devcomp")
        X <- getME(object, "X")
        asgn <- attr(X, "assign")
        stopifnot(length(asgn) == (p <- dc$dims[["p"]]))
            ss <- as.vector(object@pp$RX() %*% object@beta)^2
        names(ss) <- colnames(X)
        terms <- terms(object)
        nmeffects <- attr(terms, "term.labels")[unique(asgn)]
        if ("(Intercept)" %in% names(ss)) 
            nmeffects <- c("(Intercept)", nmeffects)
        ss <- unlist(lapply(split(ss, asgn), sum))
        stopifnot(length(ss) == length(nmeffects))
        df <- vapply(split(asgn, asgn), length, 1L)
        ms <- ss/df
        f <- ms/(sigma(object)^2)
        table <- data.frame(df, ss, ms, f)
        dimnames(table) <- list(nmeffects, c("Df", "Sum Sq", 
            "Mean Sq", "F value"))
        if ("(Intercept)" %in% nmeffects) 
            table <- table[-match("(Intercept)", nmeffects), 
                ]
        attr(table, "heading") <- "Analysis of Variance Table"
        class(table) <- c("anova", "data.frame")
        table

objectคือเอาต์พุต lmer เราเริ่มคำนวณผลรวมของกำลังสองในบรรทัดที่ 5: ss <- as.vector ...โค้ดคูณพารามิเตอร์คงที่ (ในbeta) โดยเมทริกซ์สามเหลี่ยมด้านบน จากนั้นยกกำลังสองแต่ละเทอม นี่คือเมทริกซ์สามเหลี่ยมด้านบนสำหรับตัวอย่างชลประทาน แต่ละแถวสอดคล้องกับหนึ่งในห้าพารามิเตอร์ผลกระทบคงที่ (สกัดกั้น, 3 องศาอิสระเพื่อการชลประทาน, 1 df สำหรับความหลากหลาย)

zapsmall(irrigation.lmer@pp$RX(), digits = 3)
      [,1]  [,2]   [,3]   [,4]  [,5]
[1,] 0.813 0.203  0.203  0.203 0.407
[2,] 0.000 0.352 -0.117 -0.117 0.000
[3,] 0.000 0.000  0.332 -0.166 0.000
[4,] 0.000 0.000  0.000  0.287 0.000
[5,] 0.000 0.000  0.000  0.000 2.000

แถวแรกให้ผลรวมของกำลังสองสำหรับการสกัดกั้นและแถวสุดท้ายให้ SS แก่คุณสำหรับเอฟเฟกต์ความหลากหลายภายในเขตข้อมูล แถว 2-4 เกี่ยวข้องกับพารามิเตอร์ 3 ตัวสำหรับระดับการชลประทานเท่านั้นดังนั้นการคูณล่วงหน้าจะให้ SS สามชิ้นสำหรับการชลประทาน

ชิ้นส่วนเหล่านี้ไม่น่าสนใจในตัวเองเนื่องจากมันมาจากค่าการรักษาเริ่มต้นใน R แต่ในบรรทัดss <- unlist(lapply(split ....Bates scoops บิตของผลรวมของสี่เหลี่ยมตามจำนวนของระดับและปัจจัยที่พวกเขาอ้างถึง มีการทำหนังสือมากมายที่นี่ เราได้รับองศาอิสระเช่นกัน (ซึ่งคือ 3 เพื่อการชลประทาน) anovaจากนั้นเขาได้รับสี่เหลี่ยมเฉลี่ยซึ่งแสดงในงานพิมพ์ของ ในที่สุดเขาก็หารค่าเฉลี่ยกำลังสองทั้งหมดโดยความแปรปรวนที่เหลือภายในกลุ่ม, sigma(object)^2.

lmeraovlmerRXR00σ2/σ2σ2

Asymptotically การประเมินผลกระทบคงที่มีการกระจาย:

β^~ยังไม่มีข้อความ(β,σ2[R00-1R00-T])

R00β^β=0σ2σ2σ2R00σ2

โปรดทราบว่าคุณจะไม่มีสถิติ F เหมือนกันหากข้อมูลไม่สมดุลกัน และคุณจะไม่ได้รับสถิติ F เดียวกันหากคุณใช้ ML แทน REML

aovσ2σ2σ2σ2

น่าสนใจ Bates และ Pinheiro แนะนำให้ใช้ ANOVA ในการติดตั้งสองรุ่นและทำการทดสอบอัตราส่วนความน่าจะเป็น หลังมีแนวโน้มที่จะต่อต้านหัวโบราณ

R00

zapsmall(fit2@pp$RX(), digits = 3)
      [,1]  [,2]   [,3]   [,4]   [,5]
[1,] 0.816 0.205  0.205  0.205  0.457
[2,] 0.000 0.354 -0.119 -0.119 -0.029
[3,] 0.000 0.000  0.334 -0.168 -0.040
[4,] 0.000 0.000  0.000  0.288 -0.071
[5,] 0.000 0.000  0.000  0.000  1.874

อย่างที่คุณเห็นจำนวนของช่องสี่เหลี่ยมสำหรับพารามิเตอร์การชลประทานในขณะนี้มีผลบางอย่างvarietyเช่นกัน


10
+6 เป็นเรื่องดีเสมอที่ได้เห็นคำถามเก่า ๆ ที่ยังไม่ได้รับคำตอบและตอบคำถามได้ดี อาจเป็นแหล่งที่มากับคุณ ...
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.