Mengapa regresi logistik menjadi tidak stabil ketika kelas dipisahkan dengan baik?


34

Mengapa regresi logistik menjadi tidak stabil ketika kelas dipisahkan dengan baik? Apa yang dimaksud dengan kelas yang dipisahkan dengan baik? Saya akan sangat menghargai jika seseorang dapat menjelaskan dengan sebuah contoh.


4
Saya jelaskan secara terperinci, dengan bukti, di sini: stats.stackexchange.com/questions/224863/…
Matthew Drury

2
Dan saya juga punya beberapa demo untuk menjelaskan pertanyaan: stats.stackexchange.com/questions/239928/…
Haitao Du

Jawaban:


31

Tidak benar bahwa regresi logistik itu sendiri menjadi tidak stabil ketika ada pemisahan. Pemisahan berarti bahwa ada beberapa variabel yang merupakan prediktor yang sangat baik, yang baik, atau, pemisahan mungkin merupakan artefak dari terlalu sedikit pengamatan / terlalu banyak variabel. Jika itu masalahnya, solusinya mungkin untuk mendapatkan lebih banyak data. Tetapi pemisahan itu sendiri hanyalah gejala, dan bukan masalah.

Jadi ada kasus yang sangat berbeda untuk dirawat. Pertama, apa tujuan analisis? Jika hasil akhir dari analisis adalah beberapa klasifikasi kasus, pemisahan tidak ada masalah sama sekali, itu berarti ada variabel yang sangat baik memberikan klasifikasi yang sangat baik. Tetapi jika tujuannya adalah estimasi risiko, kita memerlukan estimasi parameter, dan dengan pemisahan estimasi biasa (kemungkinan maksimum) tidak ada. Jadi kita harus mengubah metode estimasi, mungkin. Ada beberapa proposal dalam literatur, saya akan kembali ke sana.

Lalu ada (seperti yang dikatakan di atas) dua kemungkinan penyebab pemisahan. Mungkin ada pemisahan dalam populasi penuh, atau pemisahan mungkin disebabkan oleh beberapa kasus yang diamati / terlalu banyak variabel.

Apa yang rusak dengan pemisahan, adalah prosedur estimasi kemungkinan maksimum. Estimasi parameter mle (atau setidaknya beberapa di antaranya) menjadi tak terbatas. Saya mengatakan dalam versi pertama dari jawaban ini bahwa itu dapat diselesaikan dengan mudah, mungkin dengan bootstrap, tetapi itu tidak berhasil, karena akan ada pemisahan di setiap bootstrap resample, setidaknya dengan prosedur bootstrap case yang biasa. Tetapi regresi logistik masih merupakan model yang valid, tetapi kami membutuhkan beberapa prosedur estimasi lainnya. Beberapa proposal telah:

  1. regularisasi, seperti punggungan atau laso, mungkin dikombinasikan dengan bootstrap.
  2. regresi logistik bersyarat yang tepat
  3. tes permutasi, lihat https://www.ncbi.nlm.nih.gov/pubmed/15515134
  4. Pertama, prosedur estimasi pengurangan bias, lihat Model regresi logistik tidak bertemu
  5. pasti orang lain ...

Jika Anda menggunakan R, ada paket tentang CRAN, SafeBinaryRegressionyang membantu mendiagnosis masalah pemisahan, menggunakan metode pengoptimalan matematis untuk memastikan apakah ada pemisahan atau quasiseparation! Berikut ini saya akan memberikan contoh simulasi menggunakan paket ini, dan elrmpaket untuk perkiraan regresi logistik bersyarat.

Pertama, contoh sederhana dengan safeBinaryRegressionpaket. Paket ini hanya mendefinisikan ulang glmfungsi, membebani dengan uji pemisahan, menggunakan metode pemrograman linier. Jika mendeteksi pemisahan, ia keluar dengan kondisi kesalahan, menyatakan bahwa mle tidak ada. Kalau tidak, itu hanya menjalankan glmfungsi biasa stats. Contohnya adalah dari halaman bantuannya:

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)

Output dari menjalankannya:

> # 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

Sekarang kita mensimulasikan dari model yang dapat didekati dengan cermat oleh model logistik, kecuali bahwa di atas cutoff tertentu probabilitas peristiwa adalah tepat 1,0. Pikirkan masalah bioassay, tapi racunnya selalu terbunuh:

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

Saat menjalankan kode ini, kami memperkirakan probabilitas pemisahan sebesar 0,759. Jalankan kodenya sendiri, cepat!

Kemudian kami memperluas kode ini untuk mencoba prosedur estimasi yang berbeda, meredam dan memperkirakan regresi logistik bersyarat dari elrm. Menjalankan simulasi ini memakan waktu sekitar 40 menit di komputer saya.

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]

Sekarang kami ingin memplot hasil, tetapi sebelum itu, perhatikan bahwa SEMUA perkiraan bersyarat sama! Itu benar-benar aneh dan perlu penjelasan ... Nilai umum adalah 0,9523975. Tapi setidaknya kami memperoleh estimasi terbatas, dengan interval kepercayaan yang berisi nilai sebenarnya (tidak ditampilkan di sini). Jadi saya hanya akan menunjukkan histogram dari estimasi saya dalam kasus-kasus tanpa pemisahan:

hist(cof.mle.non, prob=TRUE)

[histogram estimasi parameter yang disimulasikan [1]

Yang luar biasa adalah bahwa semua perkiraan lebih rendah dari nilai sebenarnya 1.5. Itu bisa ada hubungannya dengan fakta bahwa kita disimulasikan dari model yang dimodifikasi, perlu diselidiki.



1
(+1) Tapi agak kuat untuk mengatakan kita membutuhkan prosedur estimasi selain kemungkinan maksimum. Rasio odds & odds tak terbatas dapat menjadi estimasi titik yang masuk akal; cukup sering masalah yang disebabkan oleh pemisahan hanya mendapatkan perkiraan interval yang baik.
Scortchi

@kjetilbhalvorsen Permintaan maaf untuk menghidupkan kembali utas lama, tapi saya ingin tahu apakah Anda mengetahui paket serupa dengan python?
Meep

Maaf, tapi saya tidak tahu tentang python. Tetapi harus dimungkinkan untuk menjalankan R dari dalam python.
kjetil b halvorsen

25

Ada jawaban yang bagus di sini dari @ sean501 dan @kjetilbhalvorsen. Anda meminta contoh. Perhatikan gambar di bawah ini. Anda mungkin akan menemukan beberapa situasi di mana proses menghasilkan data seperti itu digambarkan dalam panel A . Jika demikian, sangat mungkin bahwa data benar-benar Anda mengumpulkan terlihat seperti di panel B . Sekarang, ketika Anda menggunakan data untuk membangun model statistik, idenya adalah untuk memulihkan proses pembuatan data yang benar atau setidaknya muncul dengan perkiraan yang cukup dekat. Dengan demikian, pertanyaannya adalah, akankah menyesuaikan regresi logistik dengan data dalam B menghasilkan model yang mendekati garis biru dalam A ? Jika Anda melihat panel C, Anda dapat melihat bahwa garis abu-abu lebih baik mendekati data daripada fungsi sebenarnya, jadi dalam mencari yang paling cocok, regresi logistik akan 'lebih suka' untuk mengembalikan garis abu-abu daripada yang biru. Namun, tidak berhenti di situ. Melihat panel D, garis hitam mendekati data yang lebih baik daripada yang abu-abu — pada kenyataannya, itu adalah yang paling cocok yang mungkin terjadi. Jadi itu adalah garis model regresi logistik mengejar. Ini sesuai dengan intersepsi infinity negatif dan kemiringan infinity. Itu, tentu saja, sangat jauh dari kebenaran yang Anda harapkan akan pulih. Pemisahan lengkap juga dapat menyebabkan masalah dengan perhitungan nilai-p untuk variabel Anda yang datang standar dengan output regresi logistik (penjelasannya ada sedikit berbeda dan lebih rumit). Selain itu, mencoba menggabungkan kecocokan di sini dengan upaya lain, misalnya dengan meta-analisis, hanya akan membuat temuan lainnya kurang akurat.

enter image description here


1
(+1) Ini adalah ilustrasi masalah yang sangat membantu.
mkt - Pasang kembali Monica

satu aspek menarik yang ditunjukkan diagram Anda adalah bahwa Anda secara ideal menginginkan sampel berasal dari "ruang x" yang mengarah ke probabilitas 50-50 (mis. poin dalam rentang 12 <x <15). sebenarnya saya pikir Anda mungkin ingin mengumpulkan lebih banyak data dari wilayah tengah ini (10 <x <17) dalam skenario kehidupan nyata yang memberikan hasil ini.
probabilityislogic

@probabilityislogic, itu benar. Sebagian besar informasi tentang hubungan ada di data dari wilayah tengah.
gung - Reinstate Monica

10

Artinya ada hyperplane sehingga di satu sisi ada semua poin positif dan di sisi lain semua negatif. Solusi kemungkinan maksimum kemudian datar 1 di satu sisi dan datar 0 di sisi lain, yang 'dicapai' dengan fungsi logistik dengan memiliki koefisien pada infinity.


6

Apa yang Anda sebut "pemisahan" (bukan 'pemisahan') mencakup dua situasi berbeda yang akhirnya menyebabkan masalah yang sama - yang saya tidak akan sebut, bagaimanapun, masalah "ketidakstabilan" seperti yang Anda lakukan.

Sebuah ilustrasi: Survival on the Titanic

  • DV(0,1)SV

    SVDV01

  • SVDV

    Itu akan menjadi kasus jika semua penumpang kelas satu di Titanic selamat dari puing-puing, dan tidak ada penumpang kelas dua yang selamat.

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0, tetapi tidak semua kasus di mana DV=1, yang mencakup penumpang kelas satu dan kelas dua.

Apa yang Anda sebut "kelas yang dipisahkan dengan baik" adalah situasi di mana variabel hasil binerDV(mis. survival of the Titanic ) dapat sepenuhnya atau semu sepenuhnya dipetakan ke prediktorSV (mis. keanggotaan kelas penumpang; SV tidak perlu biner seperti dalam contoh saya).

Mengapa regresi logistik "tidak stabil" dalam kasus ini?

Ini dijelaskan dengan baik dalam Rainey 2016 dan Zorn 2005 .

  • Di bawah pemisahan lengkap , model logistik Anda akan mencari kurva logistik yang menetapkan, misalnya, semua probabilitasDV untuk 1 kapan SV=1, and all probabilities to DV to 0 when SV=0.

    This corresponds to the aforementioned situation where only and all first-class passengers of the Titanic survive, with SV=1 indicating first-class passenger membership.

    This is problematic because the logistic curve lies strictly between 0 and 1, which means that, to model the observed data, the maximisation is going to push some of its terms towards infinity, in order, if you like, to make SV "infinitely" predictive of DV.

  • The same problem arises under quasi-complete separation, as the logistic curve will still need to assign only values of either 0 or 1 to DV in one of two cases, SV=0 or SV=1.

In both cases, the likelihood function of your model will be unable to find a maximum likelihood estimate: it will only find an approximation of that value by approaching it asymptotically.

What you are calling "instability" is the fact that, in cases of complete or quasi-complete separation, there is no finite likelihood for the logistic model to reach. I would not use that term, however: the likelihood function is, in fact, being pretty "stable" (monotonic) in its assignment of coefficient values towards infinity.


Note: my example is fictional. Survival on the Titanic did not boil down just to passenger class membership. See Hall (1986).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.