Sơ đồ chẩn đoán cho hồi quy đếm


88

Những sơ đồ chẩn đoán nào (và có lẽ là các xét nghiệm chính thức) mà bạn thấy có nhiều thông tin nhất cho hồi quy trong đó kết quả là một biến đếm?

Tôi đặc biệt quan tâm đến các mô hình nhị phân Poisson và âm tính, cũng như các đối tác không bị thổi phồng và cản trở của mỗi mô hình. Hầu hết các nguồn mà tôi tìm thấy chỉ đơn giản là vẽ các phần dư so với các giá trị được trang bị mà không cần thảo luận về các lô này "nên" trông như thế nào.

Trí tuệ và tài liệu tham khảo đánh giá rất cao. Câu chuyện ngược về lý do tại sao tôi hỏi điều này, nếu nó có liên quan, là câu hỏi khác của tôi .

Thảo luận liên quan:

Câu trả lời:


101

Đây là những gì tôi thường thích làm (để minh họa, tôi sử dụng dữ liệu quine quá mức và không dễ mô hình hóa của những ngày học sinh vắng mặt ở trường MASS):

  1. Kiểm tra và vẽ biểu đồ dữ liệu đếm ban đầu bằng cách vẽ các tần số quan sát và tần số phù hợp (xem chương 2 trong phần thân thiện ) được vcdgói hỗ trợ Rtrong các phần lớn. Ví dụ: với goodfitvà a rootogram:

    library(MASS)
    library(vcd)
    data(quine) 
    fit <- goodfit(quine$Days) 
    summary(fit) 
    rootogram(fit)
    

    hoặc với các ô Ord giúp xác định mô hình dữ liệu đếm nào nằm bên dưới (ví dụ: ở đây độ dốc là dương và chặn là dương, điều này nói lên phân phối nhị thức âm):

    Ord_plot(quine$Days)

    hoặc với các âm mưu "XXXXXXness" trong đó XXXXX là phân phối của sự lựa chọn, giả sử cốt truyện Poissoness (nói chống lại Poisson, cũng thử type="nbinom"):

    distplot(quine$Days, type="poisson")
  2. Kiểm tra mức độ phù hợp thông thường (như thống kê tỷ lệ khả năng so với mô hình null hoặc tương tự):

    mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
    summary(mod1)
    anova(mod1, test="Chisq")
    
  3. Kiểm tra trên / dưới mức bằng cách xem residual deviance/dfhoặc tại một thống kê kiểm tra chính thức (ví dụ: xem câu trả lời này ). Ở đây chúng tôi có quá mức rõ ràng:

    library(AER)
    deviance(mod1)/mod1$df.residual
    dispersiontest(mod1)
    
  4. Kiểm tra ảnh hưởng và đòn bẩy điểm , ví dụ như, với sự influencePlottrong cargói. Tất nhiên ở đây nhiều điểm có ảnh hưởng lớn vì Poisson là một mô hình tồi:

    library(car)
    influencePlot(mod1)
    
  5. Kiểm tra lạm phát bằng không bằng cách khớp một mô hình dữ liệu đếm và đối tác zeroinflated / rào cản của nó và so sánh chúng (thường là với AIC). Ở đây, một mô hình được thổi phồng bằng 0 sẽ phù hợp hơn so với Poisson đơn giản (một lần nữa có lẽ là do quá mức):

    library(pscl)
    mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
    AIC(mod1, mod2)
    
  6. Vẽ các phần dư (thô, lệch hoặc chia tỷ lệ) trên trục y so với các giá trị dự đoán (log) (hoặc bộ dự báo tuyến tính) trên trục x. Ở đây, chúng ta thấy một số phần dư rất lớn và độ lệch đáng kể của phần dư sai lệch so với bình thường (nói với câu trả lời của Poisson; Chỉnh sửa: @ FlorianHartig cho thấy rằng tính bình thường của các phần dư này không được mong đợi vì vậy đây không phải là manh mối kết luận):

    res <- residuals(mod1, type="deviance")
    plot(log(predict(mod1)), res)
    abline(h=0, lty=2)
    qqnorm(res)
    qqline(res)
    
  7. Nếu quan tâm, hãy vẽ một nửa xác suất bình thường của phần dư bằng cách vẽ đồ thị số dư tuyệt đối so với giá trị bình thường dự kiến Atkinson (1981) . Một tính năng đặc biệt sẽ là mô phỏng 'dòng' tham chiếu và đường bao với các khoảng tin cậy được mô phỏng / khởi động (mặc dù không hiển thị):

    library(faraway)
    halfnorm(residuals(mod1))
    
  8. Sơ đồ chẩn đoán cho các mô hình tuyến tính nhật ký cho dữ liệu đếm (xem chương 7.2 và 7.7 trong cuốn sách của Friendly). Âm mưu dự đoán so với các giá trị quan sát có lẽ với một số ước tính khoảng (tôi đã làm chỉ cho các nhóm tuổi - ở đây chúng ta lại thấy rằng chúng ta khá xa với các ước tính của chúng tôi do sự chênh lệch quá mức, có lẽ, trong nhóm F3. dự đoán điểm một lỗi tiêu chuẩn):±

    plot(Days~Age, data=quine) 
    prs  <- predict(mod1, type="response", se.fit=TRUE)
    pris <- data.frame("pest"=prs[[1]], "lwr"=prs[[1]]-prs[[2]], "upr"=prs[[1]]+prs[[2]])
    points(pris$pest ~ quine$Age, col="red")
    points(pris$lwr  ~ quine$Age, col="pink", pch=19)
    points(pris$upr  ~ quine$Age, col="pink", pch=19)
    

Điều này sẽ cung cấp cho bạn nhiều thông tin hữu ích về phân tích của bạn và hầu hết các bước hoạt động cho tất cả các phân phối dữ liệu đếm tiêu chuẩn (ví dụ: Poisson, Binomial âm, COM Poisson, Power Laws).


6
Câu trả lời thấu đáo! Cũng rất hữu ích khi chạy qua các chẩn đoán này với dữ liệu mô phỏng Poisson để huấn luyện mắt tôi với các lô sẽ trông như thế nào.
một nửa vượt qua

Tôi có nên đưa ra lời giải thích nhiều hơn cho những gì các âm mưu làm hoặc nó đã ổn theo cách này?
Momo

2
Lưu ý bên lề thú vị: Tôi thấy rằng phân phối NB hiếm khi xuất hiện để phù hợp với dữ liệu NB mô phỏng dựa trên thử nghiệm GOF, rootogram, Ord lô và âm mưu NB-ness. Ngoại lệ dường như rất "thuần hóa" dữ liệu NB gần như đối xứng - cao mu, cao theta.
một nửa vượt qua

1
Hừm, bạn có chắc là bạn sử dụng type = "nbinomial" làm đối số không? Ví dụ: fm <- glm.nb (Ngày ~., Data = quine); hình nộm <- rnegbin (lắp (fm), theta = 4,5) hoạt động tốt.
Momo

@Momo, cảm ơn - Tôi đã làm một cái gì đó như x = rnegbin (n = 1000, mu = 10, theta = 1); phù hợp = goodfit (x, type = "nbinomial"); tóm tắt (phù hợp). Đặt theta = 4.5 sẽ cải thiện sự phù hợp, nhưng nó vẫn thường p <0,05 và hình ảnh gốc có thể trông khá tệ. Để tôi hiểu sự khác biệt giữa các mô phỏng của chúng tôi: trong bạn, mỗi giá trị của hình nộm được mô phỏng từ một tham số trung bình khác nhau (một giá trị được trang bị (fm)), phải không? Trong tôi, tất cả đều có nghĩa là 10.
một nửa vượt qua

14

Đối với cách tiếp cận sử dụng các lô chẩn đoán tiêu chuẩn nhưng muốn biết chúng nên trông như thế nào, tôi thích bài báo:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

Một trong những cách tiếp cận được đề cập là tạo ra một số bộ dữ liệu mô phỏng trong đó các giả định quan tâm là đúng và tạo ra các sơ đồ chẩn đoán cho các bộ dữ liệu mô phỏng này và cũng tạo ra sơ đồ chẩn đoán cho dữ liệu thực. đặt tất cả các ô này trên màn hình cùng một lúc (đặt ngẫu nhiên một ô dựa trên dữ liệu thực). Bây giờ bạn có một tham chiếu trực quan về các ô sẽ trông như thế nào và nếu các giả định giữ dữ liệu thực thì lô đó sẽ trông giống như các dữ liệu khác (nếu bạn không thể biết đó là dữ liệu thực, thì các giả định đang được kiểm tra có khả năng đóng đủ để đúng), nhưng nếu biểu đồ dữ liệu thực sự khác biệt rõ ràng với biểu đồ khác, thì điều đó có nghĩa là ít nhất một trong các giả định không giữ được. Các vis.testchức năng trong gói TeachingDemos cho R giúp thực hiện điều này như một thử nghiệm.


6
Một ví dụ với dữ liệu trên, cho bản ghi: mod1 <- glm (Ngày ~ Tuổi + Giới tính, dữ liệu = quine, gia đình = "poisson"); if (tương tác ()) {vis.test (dư (mod1, type = "reply"), vt.qqnorm, nrow = 5, ncol = 5, npage = 3)}
một nửa vượt qua

13

Đây là một câu hỏi cũ, nhưng tôi nghĩ sẽ hữu ích khi thêm gói DHARMa R của tôi (có sẵn từ CRAN, xem tại đây ) hiện cung cấp phần dư được chuẩn hóa cho GLM và GLMM, dựa trên cách tiếp cận mô phỏng tương tự như được đề xuất bởi @GregSnow .

Từ mô tả gói:

Gói DHARMa sử dụng cách tiếp cận dựa trên mô phỏng để tạo ra các phần dư có thể hiểu được dễ dàng từ các mô hình hỗn hợp tuyến tính tổng quát được trang bị. Hiện tại được hỗ trợ là tất cả các lớp 'merMod' từ 'lme4' ('lmerMod', 'glmerMod'), 'glm' (bao gồm 'negbin' từ 'MASS', ngoại trừ các lớp mô hình phân phối) và 'lm'. Ngoài ra, các mô phỏng được tạo ra bên ngoài, ví dụ như mô phỏng dự đoán sau từ phần mềm Bayes như 'JAGS', 'STAN' hoặc 'BUGS' cũng có thể được xử lý. Phần dư kết quả được chuẩn hóa thành các giá trị từ 0 đến 1 và có thể được hiểu theo trực giác là phần dư từ hồi quy tuyến tính. Gói này cũng cung cấp một số chức năng kiểm tra và biểu đồ cho vấn đề phân loại sai mô hình điển hình,

@Momo - bạn có thể muốn cập nhật đề xuất 6 của mình, nó gây hiểu nhầm. Thông thường của phần dư sai lệch nói chung không được mong đợi theo Poisson , như được giải thích trong họa tiết DHARMa hoặc ở đây ; và thu giữ các phần dư lệch (hoặc bất kỳ phần dư tiêu chuẩn nào khác) khác với một đường thẳng trong một biểu đồ qqnorm nói chung là không có mối quan tâm nào cả . Gói DHARMa cung cấp một biểu đồ qq đáng tin cậy để chẩn đoán các sai lệch so với Poisson hoặc các họ GLM khác. Tôi đã tạo ra một ví dụ chứng minh vấn đề với phần dư sai lệch ở đây .


4

Có một hàm được gọi glm.diag.plotstrong gói boot, để tạo các ô chẩn đoán cho GLM. Những gì nó làm:

Làm cho âm mưu của phần dư sai lệch jackknife chống lại dự đoán tuyến tính, sơ đồ điểm bình thường của phần dư sai lệch chuẩn hóa, biểu đồ thống kê Cook gần đúng dựa trên đòn bẩy / (1 đòn bẩy) và biểu đồ trường hợp thống kê Cook.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.