Làm cách nào tôi có thể tính toán thống kê thử nghiệm


10

Tỷ lệ khả năng (còn gọi là độ lệch) Kiểm tra thống kê và không phù hợp (hoặc mức độ phù hợp ) của khá đơn giản để có được mô hình hồi quy logistic (phù hợp sử dụng hàm) trong R. Tuy nhiên, nó có thể dễ dàng có một số lượng tế bào cuối cùng đủ thấp để xét nghiệm không đáng tin cậy. Một cách để xác minh độ tin cậy của kiểm tra tỷ lệ khả năng thiếu phù hợp là so sánh thống kê kiểm tra và giá trị P của nó với kiểm tra mức độ phù hợp của Pearson (hoặc ).G2glm(..., family = binomial)χ2

Cả glmđối tượng và summary()phương pháp của nó đều không báo cáo thống kê kiểm tra cho bài kiểm tra chi bình phương của Pearson vì không phù hợp. Trong tìm kiếm của tôi, điều duy nhất tôi nghĩ ra là chisq.test()hàm (trong statsgói): tài liệu của nó cho biết " chisq.testthực hiện các bài kiểm tra bảng dự phòng chi bình phương và kiểm tra mức độ phù hợp". Tuy nhiên, tài liệu rất ít về cách thực hiện các thử nghiệm như vậy:

Nếu xlà một ma trận có một hàng hoặc cột hoặc nếu xlà một vectơ và ykhông được đưa ra, thì một bài kiểm tra mức độ phù hợp được thực hiện ( xđược coi là bảng dự phòng một chiều). Các mục nhập xphải là số nguyên không âm. Trong trường hợp này, giả thuyết được kiểm tra là liệu xác suất dân số có bằng với những người trong phay tất cả đều bằng nhau nếu pkhông được đưa ra.

Tôi tưởng tượng rằng bạn có thể sử dụng ythành phần của glmđối tượng cho xđối số chisq.test. Tuy nhiên, bạn không thể sử dụng fitted.valuesthành phần của glmđối tượng cho pđối số chisq.testvì bạn sẽ gặp lỗi: " probabilities must sum to 1."

Làm cách nào tôi (trong R) ít nhất có thể tính toán thống kê kiểm tra Pearson vì không phù hợp mà không phải chạy qua các bước một cách thủ công?χ2

Câu trả lời:


13

Tổng số dư Pearson bình phương chính xác bằng với thống kê kiểm tra Pearson vì không phù hợp. Vì vậy, nếu mô hình được trang bị của bạn (tức là, đối tượng) được gọi , đoạn mã sau sẽ trả về thống kê kiểm tra:χ2glmlogistic.fit

sum(residuals(logistic.fit, type = "pearson")^2)

Xem tài liệu trên residuals.glmđể biết thêm thông tin, bao gồm cả những gì còn lại có sẵn. Ví dụ: mã

sum(residuals(logistic.fit, type = "deviance")^2)

sẽ giúp bạn có được thống kê kiểm tra , giống như cung cấp.G2deviance(logistic.fit)


Tôi đồng ý với Macro. Nếu bạn muốn có câu trả lời cho nhóm, bạn nên đợi để nghe người khác nói gì trước. Bất cứ điều gì bạn có thể nhận được bây giờ là thiên vị bằng cách xem câu trả lời của bạn. Ngoài ra, nếu bạn biết câu trả lời bạn đang cố gắng chứng minh điều gì bằng cách làm điều này?
Michael R. Chernick

@Macro - Firefeather đã đăng bốn câu hỏi lên trang web này (bao gồm câu hỏi này) và trả lời ba trong số đó (bao gồm câu hỏi này) cho anh ấy / cô ấy, chấp nhận một trong những câu trả lời của anh ấy / cô ấy một lần. Một vài điều như thế này và tôi có thể bắt đầu thấy một mô hình!
jbowman

@jbowman, tôi có thể tưởng tượng việc trả lời câu hỏi của chính bạn nếu bạn tự mình tìm ra câu trả lời trước khi bất kỳ ai khác đăng câu trả lời nhưng firefeather đã đăng câu trả lời theo nghĩa đen chưa đầy 5 phút sau khi đăng câu hỏi, có vẻ như anh ấy / cô ấy không cần giúp đỡ , đó là điều khiến tôi hỏi tại sao ... Tôi không thực sự hiểu động lực ...
Macro

3
@Macro, vui lòng xem liên kết chính thức này: blog.stackoverflow.com/2011/07/ (nó được liên kết trên trang Hỏi một câu hỏi trong nhãn hộp kiểm ở phía dưới: "Trả lời câu hỏi của bạn - chia sẻ kiến ​​thức của bạn, kiểu hỏi đáp "). Tôi đã có câu hỏi này khi tôi đang làm bài tập về nhà (đã chọn sử dụng R thay vì Minitab, mặc dù Minitab đã được trình diễn trong lớp), nhưng tôi không có đủ thời gian để gõ câu hỏi và chờ phản hồi. Tôi đã tìm ra cách giải quyết này và quyết định chia sẻ nó với cộng đồng.
Cứu hỏa

2
@Macro, bạn rất hoan nghênh! Tôi ước tôi có thể hỏi nhiều câu hỏi hơn khi tôi không cung cấp câu trả lời và trả lời nhiều câu hỏi hơn mà tôi không hỏi. Nhưng jbowman nói đúng về một khuôn mẫu: những đóng góp của tôi cho cộng đồng đang có xu hướng nói chuyện với chính tôi. :) (Ít nhất là tôi đang đóng góp bằng cách nào đó cho cộng đồng, phải không?)
Firefeather

10

Thống kê Pearson có phân phối suy biến vì vậy nói chung không được khuyến nghị cho mức độ phù hợp của mô hình logistic. Tôi thích các bài kiểm tra có cấu trúc (tuyến tính, nghiện). Nếu bạn muốn có một bài kiểm tra omnibus, hãy xem mức độ tự do duy nhất le Cessie - van Houwelingen - Copas - Tổng số các phép thử bình phương không cân bằng được thực hiện trong hàm rmsgói R.residuals.lrm


2
-1: Cảm ơn bạn đã hiểu biết! Tuy nhiên, điều này không trả lời câu hỏi của tôi. Bởi vì đó là bình luận / thảo luận có liên quan về một tuyên bố mà tôi đã đưa ra trong nền cho câu hỏi của tôi, câu trả lời của bạn có thể thuộc về một bình luận, thay vì trong một câu trả lời.
Firefeather 18/03 '

2
Tôi đoán rằng bốn người đã bỏ phiếu cho câu trả lời của tôi không đồng ý với bạn. Và bạn đã không đối phó với phân phối thoái hóa.
Frank Mitchell

@FrankHarrell: Liệu biện pháp GOF này có khác với thử nghiệm GOF của Hosmer-Lemeshow (HL) không? Giả sử như vậy vì cái tên và cũng đã so sánh hai: Thử nghiệm HL GOF được tìm thấy trong ResourceSelectiongói, và kết quả của nó khác với những gì tôi nhận được từ việc chạy resid(lrm_object, 'gof')sau khi phù hợp với mô hình hồi quy logistic của mình lrm_object <- lrm(...). Nếu chúng thực sự khác nhau, bạn có thể nhận xét về cách kiểm tra HL sắp xếp so với bài kiểm tra mà bạn đề cập ở đây không? Cảm ơn bạn!
Meg

1
Hai là rất khác nhau. Thống kê HL (hiện đã lỗi thời) đã cố định df và thường dựa trên các phân tách rủi ro. Các HLχ2Nχ2N

Tôi rất thích xem một mô phỏng cho thấy sự thoái hóa này.
wdkrnls

0

Cảm ơn, tôi đã không nhận ra nó đơn giản như: sum (số dư (f1, type = "pearson") ^ 2) Tuy nhiên, xin lưu ý rằng số dư còn lại thay đổi tùy thuộc vào việc nó được tính theo nhóm đồng biến hay theo từng cá nhân. Một ví dụ đơn giản:

m1 là một ma trận (cái này là đầu của một ma trận lớn hơn):

m1 [1: 4,1: 8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

Trong đó x1-3 là dự đoán, obs là không. Các quan sát trong mỗi nhóm, pi là xác suất thành viên của nhóm (dự đoán từ phương trình hồi quy), lev là đòn bẩy, đường chéo của ma trận mũ, không có dự đoán nào. (của y = 1) trong nhóm và y thực tế không có.

fun1 <- function (j) {if (m1 [j, "y"] == 0) {# y = 0 cho mẫu đồng biến này Pr1 <- sqrt (m1 [i, "pi"] / (1-m1 [ i, "pi"])) Pr2 <- -sqrt (m1 [i, "obs"]) res <- round (Pr1 * Pr2, 3) return (res)} khác {Pr1 <- m1 [j, "y "] - m1 [j," yhat "] Pr2 <- sqrt (m1 [j," yhat "] * (1- (m1 [j," pi "]))) res <- round (Pr1 / Pr2, 3 ) return (res)}}

Như vậy

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

Nếu có số lượng lớn đối tượng có mẫu đồng biến y = 0, thì số dư Pearons sẽ lớn hơn nhiều khi được tính bằng cách sử dụng 'theo nhóm' thay vì phương pháp 'theo phương thức'.

Xem ví dụ: "Hồi quy logistic ứng dụng" của Hosmer & Lemeshow, Wiley, 200.


0

Bạn cũng có thể sử dụng c_hat(mod)sẽ cho đầu ra tương tự như sum(residuals(mod, type = "pearson")^2).


1
Gói nào được c_hattìm thấy trong?
Cứu hỏa
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.