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?


34

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ụ.


4
Tôi giải thích chi tiết, với một bằng chứng, tại đây: stats.stackexchange.com/questions/224863/ mẹo
Matthew Drury

2
Và tôi cũng đã có một số bản demo để giải thích câu hỏi: stats.stackexchange.com/questions/239928/ Khăn
Haitao Du

Câu trả lời:


31

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:

  1. chính quy, như sườn núi hoặc lasso, có thể kết hợp với bootstrap.
  2. hồi quy logistic có điều kiện chính xác
  3. kiểm tra hoán vị, xem https://www.ncbi.nlm.nih.gov/pubmed/15515134
  4. Thủ tục ước lượng giảm sai lệch Firths, xem mô hình hồi quy logistic không hội tụ
  5. chắc chắn những người khác ...

Nếu bạn sử dụng R, có một gói trên CRAN, SafeBinaryRegressiongiú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à elrmgó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 safeBinaryRegressiongói. Gói này chỉ định nghĩa lại glmhà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 glmchứ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)

[biểu đồ ước tính tham số mô phỏng [1]

Đ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.



1
(+1) Nhưng thật mạnh mẽ để nói rằng chúng ta cần một thủ tục ước tính khác hơn là khả năng tối đa. Tỷ lệ cược vô hạn & tỷ lệ cược có thể là ước tính điểm hợp lý; thường đủ vấn đề gây ra bởi sự phân tách chỉ là nhận được ước tính khoảng thời gian tốt.
Scortchi - Phục hồi Monica

@kjetilbhalvorsen Xin lỗi để hồi sinh một chủ đề cũ, nhưng tôi đã tự hỏi nếu bạn biết về một gói tương tự trong python?
Meep

Xin lỗi, nhưng tôi không biết về trăn. Nhưng nó có thể chạy R từ bên trong python.
kjetil b halvorsen

25

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ập mô tả hình ảnh ở đây


1
(+1) Đây là một minh họa rất hữu ích cho vấn đề.
mkt - Tái lập Monica

một khía cạnh thú vị mà sơ đồ của bạn thể hiện là bạn lý tưởng muốn mẫu đến từ "không gian x" dẫn đến xác suất 50-50 (ví dụ: các điểm trong phạm vi 12 <x <15). thực tế tôi nghĩ rằng bạn có thể muốn thu thập thêm dữ liệu từ khu vực giữa này (10 <x <17) trong một kịch bản đời thực cung cấp kết quả này.
xác suất

@probabilityislogic, đúng vậy. Hầu hết các thông tin về mối quan hệ là trong dữ liệu từ khu vực giữa.
gung - Phục hồi Monica

10

Nó có nghĩa là có một siêu phẳng sao cho một mặt có tất cả các điểm tích cực và mặt khác là tất cả các tiêu cực. Giải pháp khả năng tối đa sau đó là căn hộ 1 ở một bên và căn hộ 0 ở bên kia, là 'đạt được' với hàm logistic bằng cách có các hệ số ở vô cực.


6

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.

Một minh họa: Sống sót trên tàu Titanic

  • DV(0,1)SV

    SVDV01

  • SVDV

    Đó 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.

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0DV=1

DVSVSV

Tại sao hồi quy logistic "không ổn định" trong những trường hợp này?

Điều này được giải thích rõ trong Rainey 2016Zorn 2005 .

  • DV1SV=1DV0SV=0

    SV=1

    01SVDV

  • 01DVSV=0SV=1

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) .

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.