Perché la regressione logistica diventa instabile quando le classi sono ben separate?


Risposte:


31

Non è corretto che la regressione logistica di per sé diventi instabile in presenza di separazione. Separazione significa che ci sono alcune variabili che sono predittori molto buoni, il che è buono, oppure la separazione può essere un artefatto di troppo poche osservazioni / troppe variabili. In tal caso, la soluzione potrebbe essere quella di ottenere più dati. Ma la separazione stessa, quindi, è solo un sintomo e non un problema in sé.

Quindi ci sono casi davvero diversi da trattare. Innanzitutto, qual è l'obiettivo dell'analisi? Se il risultato finale dell'analisi è una classificazione dei casi, la separazione non è affatto un problema, significa davvero che ci sono ottime variabili che danno un'ottima classificazione. Ma se l'obiettivo è la stima del rischio, abbiamo bisogno delle stime dei parametri e, con la separazione, non esistono le consuete stime mle (massima probabilità). Quindi dobbiamo cambiare il metodo di stima, forse. Ci sono diverse proposte in letteratura, tornerò su questo.

Quindi ci sono (come detto sopra) due diverse possibili cause di separazione. Potrebbe esserci separazione in tutta la popolazione, oppure la separazione potrebbe essere causata da pochi casi osservati / troppe variabili.

Ciò che rompe con la separazione è la procedura di stima della massima verosimiglianza. Le stime dei parametri mle (o almeno alcune di esse) diventano infinite. Nella prima versione di questa risposta ho detto che ciò può essere risolto facilmente, magari con il bootstrap, ma che non funziona, poiché ci sarà una separazione in ogni ricampionamento del bootstrap, almeno con la solita procedura di bootstrap del caso. Ma la regressione logistica è ancora un modello valido, ma abbiamo bisogno di qualche altra procedura di stima. Alcune proposte sono state:

  1. regolarizzazione, come la cresta o il lazo, forse combinata con il bootstrap.
  2. regressione logistica condizionale esatta
  3. test di permutazione, vedi https://www.ncbi.nlm.nih.gov/pubmed/15515134
  4. Prima procedura di stima ridotta in base al pregiudizio, vedere Il modello di regressione logistica non converge
  5. sicuramente altri ...

Se usi R, c'è un pacchetto su CRAN, SafeBinaryRegressionche aiuta a diagnosticare i problemi con la separazione, usando metodi di ottimizzazione matematica per verificare con certezza se c'è separazione o quasiseparation! Di seguito fornirò un esempio simulato usando questo pacchetto e il elrmpacchetto per la regressione logistica condizionale approssimativa.

Innanzitutto, un semplice esempio con il safeBinaryRegressionpacchetto. Questo pacchetto ridefinisce la glmfunzione, sovraccaricandola con un test di separazione, usando metodi di programmazione lineare. Se rileva la separazione, esce con una condizione di errore, dichiarando che il mle non esiste. Altrimenti esegue semplicemente la normale glmfunzione da stats. L'esempio è dalle sue pagine di aiuto:

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)

L'output di eseguirlo:

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

Ora simuliamo da un modello che può essere strettamente approssimato da un modello logistico, tranne che al di sopra di un certo limite la probabilità dell'evento è esattamente 1.0. Pensa a un problema di biotest, ma al di sopra del valore limite il veleno uccide sempre:

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

Quando si esegue questo codice, stimiamo la probabilità di separazione come 0,759. Esegui il codice da solo, è veloce!

Quindi estendiamo questo codice per provare diverse procedure di stima, mle e regressione logistica condizionale approssimativa da elrm. L'esecuzione di questa simulazione richiede circa 40 minuti sul mio computer.

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]

Ora vogliamo tracciare i risultati, ma prima di ciò, nota che TUTTE le stime condizionali sono uguali! È davvero strano e dovrebbe essere necessaria una spiegazione ... Il valore comune è 0.9523975. Ma almeno abbiamo ottenuto stime limitate, con intervalli di confidenza che contengono il valore reale (non mostrato qui). Quindi mostrerò solo un istogramma delle stime mle nei casi senza separazione:

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

[istogramma di stime di parametri simulati [1]

Ciò che è notevole è che tutte le stime sono inferiori al valore reale 1.5. Ciò può avere a che fare con il fatto che abbiamo simulato da un modello modificato, ha bisogno di essere investigato.



1
(+1) Ma è piuttosto forte affermare che abbiamo bisogno di una procedura di stima diversa dalla massima probabilità. Le quote e i rapporti di probabilità infiniti possono essere stime di punti sensibili; abbastanza spesso il problema causato dalla separazione sta solo ottenendo buone stime degli intervalli.
Scortchi - Ripristina Monica

@kjetilbhalvorsen Ti scusi per far rivivere un vecchio thread, ma mi chiedevo se sei a conoscenza di un pacchetto simile in Python?
Meep

Scusa, ma non conosco Python. Ma dovrebbe essere possibile eseguire R da Python.
kjetil b halvorsen,

25

Ci sono buone risposte qui da @ sean501 e @kjetilbhalvorsen. Hai chiesto un esempio. Considera la figura seguente. Si potrebbe incontrare qualche situazione in cui il processo di generazione di dati è simile a quella illustrata nella pannello A . Se è così, è del tutto possibile che i dati che in realtà raccolgono aspetto come quelli del pannello B . Ora, quando si utilizzano i dati per costruire un modello statistico, l'idea è quella di ripristinare il vero processo di generazione dei dati o almeno di elaborare un'approssimazione ragionevolmente vicina. Pertanto, la domanda è: adattando una regressione logistica ai dati in B si ottiene un modello che si avvicina alla linea blu in A ? Se guardi il pannello C, puoi vedere che la linea grigia si avvicina meglio ai dati rispetto alla funzione reale, quindi nel cercare la soluzione migliore, la regressione logistica "preferirà" per restituire la linea grigia piuttosto che quella blu. Non si ferma qui, tuttavia. Guardando il pannello D, la linea nera approssima i dati meglio di quella grigia: in effetti, è la soluzione migliore che potrebbe verificarsi. Questa è la linea che il modello di regressione logistica persegue. Corrisponde a un'intercetta di infinito negativo e una pendenza di infinito. Questo è, ovviamente, molto lontano dalla verità che speri di recuperare. La separazione completa può anche causare problemi con il calcolo dei valori di p per le variabili che sono standard con l'output di regressione logistica (la spiegazione è leggermente diversa e più complicata). Inoltre, il tentativo di combinare la misura qui con altri tentativi, ad esempio con una meta-analisi, renderà gli altri risultati meno accurati.

inserisci qui la descrizione dell'immagine


1
(+1) Questa è un'illustrazione molto utile del problema.
mkt - Ripristina Monica il

un aspetto interessante che mostra il diagramma è che idealmente vuoi che il campione provenga dallo "spazio x" che porta a 50-50 probabilità (ad esempio punti nell'intervallo 12 <x <15). in effetti penso che probabilmente vorrai raccogliere più dati da questa regione centrale (10 <x <17) in uno scenario di vita reale che ha fornito questo risultato.
Probislogic

@probabilityislogic, esatto. La maggior parte delle informazioni sulla relazione si trova nei dati della regione centrale.
gung - Ripristina Monica

10

Significa che esiste un iperpiano tale che da un lato ci sono tutti i punti positivi e dall'altro tutti i negativi. La soluzione di massima verosimiglianza è quindi piatta 1 su un lato e piatta 0 sull'altro lato, che viene "raggiunta" con la funzione logistica avendo i coefficienti all'infinito.


6

Quello che tu chiami "separazione" (non "separazione") copre due diverse situazioni che finiscono per causare lo stesso problema - che non definirei, tuttavia, un problema di "instabilità" come fai tu.

Un'illustrazione: Sopravvivenza sul Titanic

  • DV(0,1)SV

    SVDV01

  • SVDV

    Sarebbe così se tutti i passeggeri di prima classe sul Titanic fossero sopravvissuti al disastro e nessuno dei passeggeri di seconda classe fosse sopravvissuto.

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0DV=1

DVSVSV

Perché la regressione logistica è "instabile" in questi casi?

Questo è ben spiegato in Rainey 2016 e Zorn 2005 .

  • DV1SV=1DV0SV=0

    SV=1

    01SVDV

  • 01DVSV=0SV=1

In entrambi i casi, la funzione di probabilità del modello non sarà in grado di trovare una stima della massima verosimiglianza: troverà solo un'approssimazione di quel valore avvicinandosi asintoticamente.

Ciò che si chiama "instabilità" è il fatto che, in caso di separazione completa o quasi completa, non esiste una probabilità finita che il modello logistico possa raggiungere. Non userei questo termine, comunque: la funzione di verosimiglianza è, infatti, essere piuttosto "stabile" (monotona) nella sua assegnazione di valori di coefficiente all'infinito.


Nota: il mio esempio è di fantasia. La sopravvivenza sul Titanic non si riduceva solo all'appartenenza alla classe passeggeri. Vedi Hall (1986) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.