Sınıflar iyi ayrıldığında neden lojistik regresyon kararsız hale geliyor? İyi ayrılan sınıflar ne anlama geliyor? Birisi bir örnekle açıklarsa gerçekten çok memnun olurum.
Sınıflar iyi ayrıldığında neden lojistik regresyon kararsız hale geliyor? İyi ayrılan sınıflar ne anlama geliyor? Birisi bir örnekle açıklarsa gerçekten çok memnun olurum.
Yanıtlar:
Ayrılma olduğunda lojistik regresyonun kendi içinde kararsız hale gelmesi doğru değildir . Ayırma, çok iyi yordayıcılar olan bazı değişkenler olduğu anlamına gelir, bu da iyidir veya ayırma, çok az gözlem / çok değişkenli bir eser olabilir. Bu durumda, çözüm daha fazla veri almak olabilir. Fakat ayrılık kendisi, o zaman, sadece bir semptomdur ve kendi içinde bir problem değildir.
Bu yüzden tedavi edilecek gerçekten farklı durumlar var. İlk olarak, analizin amacı nedir? Analizin nihai sonucu, bazı vakaların sınıflandırılması ise, ayırma hiç sorun değil, bu gerçekten çok iyi bir sınıflandırma veren çok iyi değişkenlerin olduğu anlamına gelir. Ancak amaç risk tahmini ise, parametre tahminlerine ihtiyacımız vardır ve ayrıştırma ile normal mle (maksimum olabilirlik) tahminleri yoktur. Belki de tahmin yöntemini değiştirmeliyiz. Literatürde birkaç öneri var, geri döneceğim.
Sonra (yukarıda belirtildiği gibi) ayrılmanın iki farklı olası nedeni vardır. Tam popülasyonda ayrılık olabilir veya az sayıda gözlemlenen vakalardan / çok fazla değişkenden ayrılmaya neden olabilir.
Ayrılıktan kopan, en yüksek olabilirlik tahmin prosedürüdür. Mle parametresi tahminleri (veya en azından bazıları) sonsuz hale gelir. Bu cevabın ilk versiyonunda, belki önyükleme işlemiyle kolayca çözülebileceğini, ancak işe yaramadığını, çünkü her önyükleme örneğinde, en azından normal durumdaki önyükleme işleminde ayrılma olacağını söyledi. Fakat lojistik regresyon hala geçerli bir model, ancak başka bir tahmin prosedürüne ihtiyacımız var. Bazı teklifler şunlardı:
Eğer R SafeBinaryRegression
kullanıyorsanız, CRAN'da, ayırma problemlerini teşhis etmede yardımcı olan, ayırma veya kısma ayrımı olup olmadığından emin olmak için matematiksel optimizasyon yöntemlerini kullanan bir paket var! Aşağıda, bu paketi ve elrm
yaklaşık koşullu lojistik regresyon için paketi kullanarak benzetilmiş bir örnek vereceğim .
İlk olarak, safeBinaryRegression
paket ile basit bir örnek . Bu paket sadece glm
fonksiyonu yeniden tanımlar, lineer programlama yöntemlerini kullanarak bir ayırma testi ile aşırı yükler. Ayrılmayı tespit ederse, mle'nin bulunmadığını bildiren bir hata koşulu ile çıkar. Aksi halde, sadece sıradan glm
işlevi çalıştırır stats
. Örnek yardım sayfalarındandır:
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)
Çalışan çıkış:
> # 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
Şimdi, lojistik bir modelle yakından yaklaşılabilecek bir modelden simüle ediyoruz, bunun dışında olay olasılığının tam olarak 1,0 olması dışında. Bir biyo-tahlil problemini düşünün, ancak sınırın üstünde zehir her zaman öldürür
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
Bu kodu çalıştırırken, ayrılma olasılığını 0,759 olarak tahmin ediyoruz. Kodu kendin yönet, hızlı!
Daha sonra farklı kodlama prosedürlerini denemek için bu kodu genişletiriz, elrm'den koşullu lojistik regresyona yaklaşır. Bu simülasyonu çalıştırmak bilgisayarımda yaklaşık 40 dakika sürer.
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]
Şimdi sonuçları çizmek istiyoruz, ancak ondan önce, TÜM koşullu tahminlerin eşit olduğunu unutmayın! Bu gerçekten garip ve bir açıklama yapmalı ... Ortak değer 0.9523975. Ancak en azından gerçek değeri içeren güven aralıklarıyla (burada gösterilmemiştir) sonlu tahminler elde ettik. Bu yüzden ayrılmayan durumlarda sadece mle tahminlerinin bir histogramını göstereceğim:
hist(cof.mle.non, prob=TRUE)
[
Kayda değer olan, tüm tahminlerin 1.5 değerinden daha düşük olmasıdır. Bu, değiştirilmiş bir modelden simüle olduğumuz gerçeğiyle ilgili olabilir, soruşturmaya ihtiyaç var.
Burada @ sean501 ve @kjetilbhalvorsen'den iyi cevaplar var. Bir örnek istediniz. Aşağıdaki şekilde düşünün. Veri üretme işleminin A panelinde gösterilen şekilde olduğu bir durumla karşılaşabilirsiniz . Öyleyse, topladığınız verilerin B panelindeki gibi görünmesi oldukça olasıdır . Şimdi, istatistiksel bir model oluşturmak için veri kullandığınızda, fikir doğru veri üretme sürecini kurtarmak veya en azından makul derecede yakın bir yaklaşım ortaya koymaktır. Bu nedenle, soru, B'deki verilere lojistik bir regresyon sığdırmak , A'daki mavi çizgiye yaklaşan bir model vermek mi? Panel C'ye bakarsanız, gri çizginin verilere gerçek işlevden daha iyi yaklaştığını görebilirsiniz; bu nedenle en uygun olanı ararken, lojistik regresyon mavi çizgiden ziyade gri çizgiyi döndürmeyi tercih eder. Ancak orada bitmiyor. D paneline bakmaksiyah çizgi verilere gri olandan daha iyi yaklaşır - aslında, oluşabilecek en uygun seçenektir. Bu yüzden lojistik regresyon modelinin takip ettiği çizgi budur. Negatif sonsuzluğun bir kesişimine ve sonsuzluk eğimine karşılık gelir. Elbette, iyileşmeyi umduğunuz gerçeğinden çok uzak. Tam ayrılma, lojistik regresyon çıktısı ile standart hale gelen değişkenleriniz için p-değerlerinin hesaplanmasında da sorunlara yol açabilir (buradaki açıklama biraz farklı ve daha karmaşıktır). Dahası, buradaki uyumu diğer girişimlerle, örneğin bir meta-analizle birleştirmeye çalışmak, diğer bulguları daha az doğru hale getirecektir.
“Ayrılık” dediğiniz şey (“ayrılma” değil) aynı soruna neden olan iki farklı durumu kapsar - ki bu sizin gibi “istikrarsızlık” olarak adlandırmayacağım.
Titanik'teki tüm birinci sınıf yolcuların enkazdan kurtulması ve ikinci sınıf yolcuların hiçbiri hayatta kalmaması durumunda durum böyle olurdu .
Bu, Rainey 2016 ve Zorn 2005'te açıklanmıştır .
Her iki durumda da, modelinizin olabilirlik işlevi maksimum bir olasılık olabilirlik tahmini bulamayacak: bu değere yalnızca asimptotik olarak yaklaşarak bir yaklaşım bulacaktır.
"Kararsızlık" olarak adlandırdığınız şey, tamamen veya yarı-tam ayrılma durumunda, lojistik modelin ulaşması için sonlu bir ihtimal olmadığı gerçeğidir. Bununla birlikte, bu terimi kullanmayacağım: olabilirlik işlevi aslında, sonsuzluğa yönelik katsayı değerleri atamasında oldukça "kararlı" (monotonik).
Not: benim örneğim kurgusal. Titanik'te hayatta kalmak sadece yolcu sınıfı üyeliğine indirgenmedi. Bkz Hall (1986) .