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.
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.
Jawaban:
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:
Jika Anda menggunakan R, ada paket tentang CRAN, SafeBinaryRegression
yang 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 elrm
paket untuk perkiraan regresi logistik bersyarat.
Pertama, contoh sederhana dengan safeBinaryRegression
paket. Paket ini hanya mendefinisikan ulang glm
fungsi, 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 glm
fungsi 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)
[
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.
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.
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.
Itu akan menjadi kasus jika semua penumpang kelas satu di Titanic selamat dari puing-puing, dan tidak ada penumpang kelas dua yang selamat.
, tetapi tidak semua kasus di mana , yang mencakup penumpang kelas satu dan kelas dua.
Apa yang Anda sebut "kelas yang dipisahkan dengan baik" adalah situasi di mana variabel hasil biner(mis. survival of the Titanic ) dapat sepenuhnya atau semu sepenuhnya dipetakan ke prediktor (mis. keanggotaan kelas penumpang; tidak perlu biner seperti dalam contoh saya).
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 probabilitas untuk kapan , and all probabilities to to when .
This corresponds to the aforementioned situation where only and all first-class passengers of the Titanic survive, with indicating first-class passenger membership.
This is problematic because the logistic curve lies strictly between and , 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 "infinitely" predictive of .
The same problem arises under quasi-complete separation, as the logistic curve will still need to assign only values of either or to in one of two cases, or .
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).