Hồi quy logistic trong R dẫn đến sự phân tách hoàn hảo (hiện tượng Hauck-Donner). Giờ thì sao?


56

Tôi đang cố gắng dự đoán kết quả nhị phân bằng 50 biến giải thích liên tục (phạm vi của hầu hết các biến là to ). Tập dữ liệu của tôi có gần 24.000 hàng. Khi tôi chạy trong R, tôi nhận được:glm

Warning messages:  
1: glm.fit: algorithm did not converge  
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

Tôi đã đọc các phản hồi khác cho thấy sự phân tách hoàn hảo có thể xảy ra, nhưng tôi tin rằng đó không phải là trường hợp trong dữ liệu của tôi (mặc dù có thể tồn tại sự tách biệt hoàn toàn; tôi có thể kiểm tra xem liệu đó có phải là trường hợp không?) . Nếu tôi loại bỏ một số biến, lỗi "không hội tụ" có thể biến mất. Nhưng đó không phải là điều luôn xảy ra.

Tôi đã thử sử dụng cùng một biến trong một bayesglmhàm và nhận được cùng một lỗi.

Những bước bạn sẽ làm để tìm ra chính xác những gì đang xảy ra ở đây? Làm thế nào để bạn tìm ra các biến đang gây ra vấn đề?


5
Tại sao bạn tự tin rằng sự tách biệt không xảy ra? Trong các bayesglmgiấy , họ cho rằng tách là "một vấn đề phổ biến, ngay cả khi kích thước mẫu là lớn và số lượng dự đoán là nhỏ"
David J. Harris

2
Một suy nghĩ khác: bayesglmcố gắng tránh sự tách biệt bằng cách thêm một ưu tiên, nhưng với 24.000 hàng, ưu tiên có thể bị thay đổi bởi khả năng. Hãy thử thu nhỏ prior.scale, có thể bằng một lượng lớn. Cũng xem xét tăng mức độ tự do của các ưu tiên, điều này sẽ giúp loại bỏ các giá trị lớn liên quan đến sự tách biệt.
David J. Harris

Cảm ơn những lời đề nghị David. Tôi không nghĩ rằng sự phân tách xảy ra bởi vì khi tôi sắp xếp từng biến giải thích, biến phụ thuộc không phải luôn luôn đúng hoặc sai đối với các giá trị cao hoặc thấp của các biến giải thích. Trừ khi điều này được coi là phân tách: biến phụ thuộc là đúng với tất cả x7> 32 nhưng x7 chỉ> 32 trong 10 trường hợp. Có cách nào để xác minh sự tách biệt bên ngoài hồi quy logistic không? Hoặc xem biến nào gây ra sự phân tách? Tôi đã thử các đề xuất bayesglm của bạn (tôi đặt trước.scale thành 1 và trước.df thành Inf) và vẫn gặp lỗi Hauck Donner.
Dcook


"Làm thế nào để bạn tìm ra biến nào đang gây ra vấn đề?" Tìm kiếm nhị phân luôn luôn là một dự phòng tốt. Bạn chỉ có 50 biến, vì vậy nếu nó được phân tách hoàn hảo bởi một biến riêng lẻ, 6 lần lặp sẽ tìm ra thủ phạm. Nếu đó là hai biến, nhiều nhất là 49 + 6 = 55 lần lặp sẽ tìm thấy nó, trường hợp xấu nhất.
smci

Câu trả lời:


55

Với không gian thiết kế lớn như vậy ( !), Có thể có được sự phân tách hoàn hảo mà không cần tách riêng trong bất kỳ biến nào được thực hiện riêng lẻ. Tôi thậm chí sẽ bình luận thứ hai của David J. Harris khi nói rằng điều này có khả năng.R50

Bạn có thể dễ dàng kiểm tra xem các lớp của bạn có được tách biệt hoàn hảo trong không gian thiết kế của bạn hay không. Điều này giúp giải quyết một vấn đề lập trình tuyến tính. Việc triển khai R của 'thử nghiệm' này (không phải là thử nghiệm theo nghĩa thống kê của thuật ngữ) được triển khai trong gói safeBinaryRegression .

Nếu nó chỉ ra rằng sự phân tách thực sự là vấn đề và nếu bạn chỉ quan tâm đến việc sử dụng glm đơn giản (ví dụ: glm không được gọi bởi một hàm cấp cao hơn mà là do bạn), thì có một triển khai R của một thuật toán sửa đổi một chút cái cổ điển để làm cho nó 'mạnh mẽ' chống lại sự tách biệt. Nó được thực hiện trong gói hlr


4
Câu trả lời rất hay và hữu ích! Tôi sẽ phải xem xét các gói đó. (+1)
Peter Flom - Tái lập Monica

1
FWIW ở đây là một mô tả về một thuật toán mạnh mẽ khác: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@Alex: cảm ơn vì đường link. Nếu glm không hội tụ vì bắt đầu xấu thì tôi có thể thấy phương pháp này sẽ giúp với điều đó như thế nào. Mặt khác, nếu vấn đề được gây ra bởi sự tách biệt hoàn hảo thì tôi không rõ ý tưởng MM sẽ giải quyết vấn đề đó như thế nào. Tôi đã tự hỏi liệu bạn có thể bình luận về điều này (cuối cùng tôi có thể đăng bài này như một câu hỏi riêng biệt).
user603

Tuyệt vời (+1)! Tôi cũng sẽ phải xem xét các gói đó.
jbowman

1
Cảm ơn câu trả lời @ user603! Tôi đã sử dụng safeBinaryRegression và tách thực sự xảy ra với một số biến. Sau đó, tôi đã thử sử dụng MEL trong gói hlr để xây dựng một mô hình mạnh mẽ cho sự tách biệt này. Tuy nhiên, các hệ số là rất lớn (như sẽ xảy ra khi sự phân tách xảy ra trong glm bình thường) và đây là các số df và độ lệch: Độ tự do: 19112 Tổng (tức là Null); 19063 Độ lệch không còn lại: 24990 Độ lệch dư: 626000 AIC: 626000 Bạn có nghĩ rằng tôi đã làm gì sai không?
Dcook
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.