Sınıflar iyi ayrıldığında, lojistik regresyon neden dengesiz hale geliyor?


Yanıtlar:


31

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ı:

  1. sırt veya kement gibi düzenlileştirme, belki önyükleme ile birlikte.
  2. kesin koşullu lojistik regresyon
  3. permütasyon testleri, bkz. https://www.ncbi.nlm.nih.gov/pubmed/15515134
  4. Firths önyargılı azaltma tahmini prosedürü, bakınız Lojistik regresyon modeli yakınlaşmıyor
  5. elbette diğerleri ...

Eğer R SafeBinaryRegressionkullanı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 elrmyaklaşık koşullu lojistik regresyon için paketi kullanarak benzetilmiş bir örnek vereceğim .

İlk olarak, safeBinaryRegressionpaket ile basit bir örnek . Bu paket sadece glmfonksiyonu 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 glmiş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)

[simüle edilmiş parametre tahminlerinin histogramı [1]

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.



1
(+1) Ancak , maksimum ihtimal dışında bir tahmin prosedürüne ihtiyacımız olduğunu söylemek oldukça güç . Sonsuz olasılık ve oran oranları makul nokta tahminleri olabilir; Genellikle, ayrılmanın yol açtığı problem yeterince iyi tahminler almaktır.
Scortchi - Eski Monica

@kjetilbhalvorsen Eski bir ipucuyu canlandırmak için özür dilerim, ama python'da benzer bir paket olup olmadığını merak ediyor muydum?
Meep

Üzgünüm, ama python hakkında bilgim yok. Fakat R'yi python içinden çalıştırmak mümkün olmalıdır.
kjetil b halvorsen

25

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.

görüntü tanımını buraya girin


1
(+1) Bu, sorunun çok yararlı bir örneğidir.
mkt - Reinstate Monica

Diyagramınızın gösterdiği ilginç yönlerden biri, örneğin ideal olarak 50-50 olasılıkla sonuçlanan "x uzayından" gelmesini istemenizdir (örneğin, 12 <x <15 aralığında noktalar). Aslında bu orta bölgeden (10 <x <17) bu sonucu veren gerçek bir yaşam senaryosunda daha fazla veri toplamak isteyeceğinizi düşünüyorum.
Olasılık

@probabilityislogic, bu doğru. İlişkiyle ilgili bilgilerin çoğu, orta bölgedeki verilerdedir.
gung - Reinstate Monica

10

Bu, bir tarafta bütün pozitif noktaların, diğer tarafta da negatif olan bir hiper düzlem olduğu anlamına gelir. En yüksek olabilirlik çözümü daha sonra bir tarafta düz 1 ve diğer tarafta düz 0 olur, bu da lojistik fonksiyonla sonsuzluk katsayılarına sahip olarak 'elde edilir'.


6

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

Bir resim: hayatta kalma Titanik

  • DV(0,1)SV

    SVDV01

  • SVDV

    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 .

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0DV=1

DVSVSV

Lojistik regresyon neden bu durumlarda “kararsız” dır?

Bu, Rainey 2016 ve Zorn 2005'te açıklanmıştır .

  • DV1SV=1DV0SV=0

    SV=1

    01SVDV

  • 01DVSV=0SV=1

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.