Đâ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
):
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 vcd
gói hỗ trợ R
trong các phần lớn. Ví dụ: với goodfit
và 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")
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")
Kiểm tra trên / dưới mức bằng cách xem residual deviance/df
hoặ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)
Kiểm tra ảnh hưởng và đòn bẩy điểm , ví dụ như, với sự influencePlot
trong car
gó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)
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)
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)
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))
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).