Tại sao hồi quy logistic trở nên không ổn định khi các lớp được phân tách tốt? Các lớp tách biệt có nghĩa là gì? Tôi thực sự sẽ đánh giá cao nếu ai đó có thể giải thích với một ví dụ.
Tại sao hồi quy logistic trở nên không ổn định khi các lớp được phân tách tốt? Các lớp tách biệt có nghĩa là gì? Tôi thực sự sẽ đánh giá cao nếu ai đó có thể giải thích với một ví dụ.
Câu trả lời:
Nó không phải là sửa mà hồi quy logistic của riêng mình trở nên không ổn định khi có sự chia ly. Phân tách có nghĩa là có một số biến là các yếu tố dự đoán rất tốt, tốt, hoặc, phân tách có thể là một yếu tố của quá ít quan sát / quá nhiều biến. Nếu đó là trường hợp, giải pháp có thể là để có được nhiều dữ liệu hơn. Nhưng bản thân sự tách biệt chỉ là một triệu chứng, và bản thân nó không phải là vấn đề.
Vì vậy, có những trường hợp thực sự khác nhau để được điều trị. Đầu tiên, mục tiêu của phân tích là gì? Nếu kết quả cuối cùng của phân tích là một số phân loại các trường hợp, thì việc phân tách hoàn toàn không có vấn đề gì, điều đó thực sự có nghĩa là có các biến rất tốt cho phân loại rất tốt. Nhưng nếu mục tiêu là ước tính rủi ro, chúng ta cần ước tính tham số và với việc tách các ước tính mle (khả năng tối đa) thông thường không tồn tại. Vì vậy, chúng ta phải thay đổi phương pháp ước tính, có thể. Có một vài đề xuất trong tài liệu, tôi sẽ trở lại với điều đó.
Sau đó, có (như đã nói ở trên) hai nguyên nhân có thể khác nhau để tách. Có thể có sự tách biệt trong toàn bộ dân số hoặc sự tách biệt có thể do một vài trường hợp quan sát / quá nhiều biến số.
Những gì phá vỡ với sự phân tách, là thủ tục ước tính khả năng tối đa. Các ước tính tham số mle (hoặc ít nhất là một số trong số chúng) trở nên vô hạn. Tôi đã nói trong phiên bản đầu tiên của câu trả lời này có thể giải quyết dễ dàng, có thể bằng bootstrapping, nhưng điều đó không hiệu quả, vì sẽ có sự phân tách trong mỗi mẫu bootstrap, ít nhất là với quy trình bootstrapping thông thường. Nhưng hồi quy logistic vẫn là một mô hình hợp lệ, nhưng chúng ta cần một số thủ tục ước tính khác. Một số đề xuất đã được:
Nếu bạn sử dụng R, có một gói trên CRAN, SafeBinaryRegression
giúp chẩn đoán các vấn đề với sự phân tách, sử dụng các phương pháp tối ưu hóa toán học để kiểm tra xem có sự phân tách hoặc tách rời! Trong phần sau tôi sẽ đưa ra một ví dụ mô phỏng sử dụng gói này và elrm
gói cho hồi quy logistic có điều kiện gần đúng.
Đầu tiên, một ví dụ đơn giản với safeBinaryRegression
gói. Gói này chỉ định nghĩa lại glm
hàm, nạp chồng nó bằng phép thử phân tách, sử dụng các phương pháp lập trình tuyến tính. Nếu nó phát hiện sự phân tách, nó thoát ra với một điều kiện lỗi, tuyên bố rằng mle không tồn tại. Nếu không, nó chỉ chạy các glm
chức năng thông thường từ stats
. Ví dụ là từ các trang trợ giúp của nó:
library(safeBinaryRegression) # Some testing of that package,
# based on its examples
# complete separation:
x <- c(-2, -1, 1, 2)
y <- c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x, family=binomial, separation="test")
stats::glm(y~ x, family=binomial)
# Quasicomplete separation:
x <- c(-2, 0, 0, 2)
y <- c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x, family=binomial, separation="test")
stats::glm(y~ x, family=binomial)
Đầu ra từ việc chạy nó:
> # complete separation:
> x <- c(-2, -1, 1, 2)
> y <- c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) :
The following terms are causing separation among the sample points: (Intercept), x
> glm(y ~ x, family=binomial, separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") :
Separation exists among the sample points.
This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)
Call: stats::glm(formula = y ~ x, family = binomial)
Coefficients:
(Intercept) x
-9.031e-08 2.314e+01
Degrees of Freedom: 3 Total (i.e. Null); 2 Residual
Null Deviance: 5.545
Residual Deviance: 3.567e-10 AIC: 4
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
> # Quasicomplete separation:
> x <- c(-2, 0, 0, 2)
> y <- c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) :
The following terms are causing separation among the sample points: x
> glm(y ~ x, family=binomial, separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") :
Separation exists among the sample points.
This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)
Call: stats::glm(formula = y ~ x, family = binomial)
Coefficients:
(Intercept) x
5.009e-17 9.783e+00
Degrees of Freedom: 3 Total (i.e. Null); 2 Residual
Null Deviance: 5.545
Residual Deviance: 2.773 AIC: 6.773
Bây giờ chúng tôi mô phỏng từ một mô hình có thể được xấp xỉ gần đúng bởi một mô hình logistic, ngoại trừ trên một mức cắt nhất định, xác suất sự kiện là chính xác 1.0. Hãy suy nghĩ về một vấn đề sinh học, nhưng trên mức cắt đứt chất độc luôn giết chết:
pl <- function(a, b, x) 1/(1+exp(-a-b*x))
a <- 0
b <- 1.5
x_cutoff <- uniroot(function(x) pl(0,1.5,x)-0.98,lower=1,upper=3.5)$root
### circa 2.6
pltrue <- function(a, b, x) ifelse(x < x_cutoff, pl(a, b, x), 1.0)
x <- -3:3
### Let us simulate many times from this model, and try to estimate it
### with safeBinaryRegression::glm That way we can estimate the probability
### of separation from this model
set.seed(31415926) ### May I have a large container of coffee
replications <- 1000
p <- pltrue(a, b, x)
err <- 0
good <- 0
for (i in 1:replications) {
y <- rbinom(length(x), 1, p)
res <- try(glm(y~x, family=binomial), silent=TRUE)
if (inherits(res,"try-error")) err <- err+1 else good <- good+1
}
P_separation <- err/replications
P_separation
Khi chạy mã này, chúng tôi ước tính xác suất tách là 0,759. Tự chạy mã, thật nhanh!
Sau đó, chúng tôi mở rộng mã này để thử các thủ tục ước tính khác nhau, mle và gần đúng hồi quy logistic có điều kiện từ elrm. Chạy mô phỏng này mất khoảng 40 phút trên máy tính của tôi.
library(elrm) # from CRAN
set.seed(31415926) ### May I have a large container of coffee
replications <- 1000
GOOD <- numeric(length=replications) ### will be set to one when MLE exists!
COEFS <- matrix(as.numeric(NA), replications, 2)
COEFS.elrm <- matrix(as.numeric(NA), replications, 2) # But we'll only use second col for x
p <- pltrue(a, b, x)
err <- 0
good <- 0
for (i in 1:replications) {
y <- rbinom(length(x), 1, p)
res <- try(glm(y~x, family=binomial), silent=TRUE)
if (inherits(res,"try-error")) err <- err+1 else{ good <- good+1
GOOD[i] <- 1 }
# Using stats::glm
mod <- stats::glm(y~x, family=binomial)
COEFS[i, ] <- coef(mod)
# Using elrm:
DATASET <- data.frame(x=x, y=y, n=1)
mod.elrm <- elrm(y/n ~ x, interest= ~ x -1, r=4, iter=10000, burnIn=1000,
dataset=DATASET)
COEFS.elrm[i, 2 ] <- mod.erlm$coeffs
}
### Now we can compare coefficient estimates of x,
### when there are separation, and when not:
non <- which(GOOD==1)
cof.mle.non <- COEFS[non, 2, drop=TRUE]
cof.mle.sep <- COEFS[-non, 2, drop=TRUE]
cof.elrm.non <- COEFS.elrm[non, 2, drop=TRUE]
cof.elrm.sep <- COEFS.elrm[-non, 2, drop=TRUE]
Bây giờ chúng tôi muốn vẽ kết quả, nhưng trước đó, lưu ý rằng TẤT CẢ các ước tính có điều kiện là bằng nhau! Điều đó thực sự kỳ lạ và cần một lời giải thích ... Giá trị chung là 0,9523975. Nhưng ít nhất chúng tôi đã thu được các ước tính hữu hạn, với các khoảng tin cậy có chứa giá trị thực (không được hiển thị ở đây). Vì vậy, tôi sẽ chỉ hiển thị một biểu đồ của các ước tính mle trong các trường hợp mà không tách rời:
hist(cof.mle.non, prob=TRUE)
[
Điều đáng chú ý là tất cả các ước tính đều nhỏ hơn giá trị thực 1.5. Điều đó có thể phải làm với thực tế là chúng tôi mô phỏng từ một mô hình đã được sửa đổi, cần điều tra.
Có câu trả lời tốt ở đây từ @ sean501 và @kjetilbhalvorsen. Bạn hỏi một ví dụ. Hãy xem xét hình dưới đây. Bạn có thể gặp một số tình huống trong đó quá trình tạo dữ liệu là như thế được mô tả trong bảng A . Nếu vậy, nó là hoàn toàn có thể rằng các dữ liệu bạn thực sự tập trung nhìn giống như những người trong bảng B . Bây giờ, khi bạn sử dụng dữ liệu để xây dựng mô hình thống kê, ý tưởng là khôi phục quy trình tạo dữ liệu thực sự hoặc ít nhất là đưa ra một xấp xỉ gần đúng. Vì vậy, câu hỏi là, liệu có phù hợp với hồi quy logistic cho dữ liệu trong B mang lại một mô hình gần đúng với đường màu xanh trong A không? Nếu bạn nhìn vào bảng C, bạn có thể thấy rằng đường màu xám xấp xỉ dữ liệu tốt hơn so với hàm thực, do đó, để tìm kiếm sự phù hợp nhất, hồi quy logistic sẽ 'thích' trả về đường màu xám hơn là đường màu xanh. Nó không dừng lại ở đó, tuy nhiên. Nhìn vào bảng D, đường màu đen xấp xỉ dữ liệu tốt hơn so với đường màu xám trên thực tế, đó là đường phù hợp nhất có thể xảy ra. Vì vậy, đó là dòng mô hình hồi quy logistic đang theo đuổi. Nó tương ứng với việc đánh chặn vô cực âm và độ dốc vô cực. Tất nhiên, đó là rất xa sự thật mà bạn đang hy vọng sẽ phục hồi. Sự tách biệt hoàn toàn cũng có thể gây ra vấn đề với việc tính toán các giá trị p cho các biến của bạn đạt tiêu chuẩn với đầu ra hồi quy logistic (giải thích có một chút khác biệt và phức tạp hơn). Hơn nữa, cố gắng kết hợp sự phù hợp ở đây với các nỗ lực khác, ví dụ như với phân tích tổng hợp, sẽ chỉ làm cho các phát hiện khác kém chính xác hơn.
Những gì bạn đang gọi là "tách" (không phải "tách biệt") bao gồm hai tình huống khác nhau dẫn đến cùng một vấn đề - tuy nhiên, tôi sẽ không gọi là vấn đề "không ổn định" như bạn làm.
Đó sẽ là trường hợp nếu tất cả các hành khách hạng nhất trên tàu Titanic đều sống sót sau đống đổ nát, và không có hành khách hạng hai nào sống sót.
Điều này được giải thích rõ trong Rainey 2016 và Zorn 2005 .
Trong cả hai trường hợp, hàm khả năng của mô hình của bạn sẽ không thể tìm thấy ước tính khả năng tối đa: nó sẽ chỉ tìm thấy một giá trị gần đúng của giá trị đó bằng cách tiếp cận nó một cách không có triệu chứng.
Điều bạn đang gọi là "sự không ổn định" là thực tế là, trong trường hợp tách hoàn toàn hoặc gần như hoàn toàn, không có khả năng hữu hạn nào cho mô hình logistic đạt tới. Tuy nhiên, tôi sẽ không sử dụng thuật ngữ đó: trên thực tế, hàm khả năng là khá "ổn định" (đơn điệu) trong việc gán các giá trị hệ số theo vô cực.
Lưu ý: ví dụ của tôi là hư cấu. Sự sống còn trên tàu Titanic không sôi sục chỉ với tư cách thành viên của lớp hành khách. Xem Hội trường (1986) .