Come gestire: glm.fit: si sono verificate probabilità corrette numericamente 0 o 1


Un messaggio di avviso che potresti incontrare in R è:

 Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

Questo avviso si verifica quando si sta adattando un modello di regressione logistica e le probabilità previste di una o più osservazioni nel database non possono essere distinte da 0 o 1.

Tieni presente che questo è un messaggio di avviso e non un errore. Anche se ricevi questo errore, il tuo modello di regressione logistica sarà comunque adatto, ma potrebbe essere utile analizzare il frame di dati originale per vedere se sono presenti valori anomali che causano la visualizzazione di questo messaggio di avviso.

Questo tutorial spiega come gestire in pratica questo messaggio di avviso.

Come riprodurre l’avviso

Supponiamo di adattare un modello di regressione logistica al seguente frame di dati in R:

 #create data frame
df <- data. frame (y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
                 x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
                 x2 = c(8, 7, 7, 6, 5, 6, 5, 2, 2, 3, 4, 3, 7, 4, 4))

#fit logistic regression model
model <- glm(y ~ x1 + x2, data=df, family=binomial)

#view model summary
summary(model)

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

Call:
glm(formula = y ~ x1 + x2, family = binomial, data = df)

Deviance Residuals: 
       Min 1Q Median 3Q Max  
-1.729e-05 -2.110e-08 2.110e-08 2.110e-08 1.515e-05  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.205 307338.933 0 1
x1 13,309 28512,818 0 1
x2 -2.793 37342.280 0 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.6951e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

Il nostro modello di regressione logistica adatta correttamente i dati, ma riceviamo un messaggio di avviso che regola numericamente le probabilità su 0 o 1 .

Se utilizziamo il modello di regressione logistica adattata per fare previsioni sul valore di risposta delle osservazioni nel database originale, possiamo vedere che quasi tutte le probabilità previste sono indistinguibili da 0 e 1:

 #use fitted model to predict response values
df$y_pred = predict(model, df, type=" response ")

#view updated data frame
df

   y x1 x2 y_pred
1 0 3 8 2.220446e-16
2 0 3 7 2.220446e-16
3 0 4 7 2.220446e-16
4 0 4 6 2.220446e-16
5 0 3 5 2.220446e-16
6 0 2 6 2.220446e-16
7 0 5 5 1.494599e-10
8 1 8 2 1.000000e+00
9 1 9 2 1.000000e+00
10 1 9 3 1.000000e+00
11 1 9 4 1.000000e+00
12 1 8 3 1.000000e+00
13 1 9 7 1.000000e+00
14 1 9 4 1.000000e+00
15 1 9 4 1.000000e+00

Come gestire l’avviso

Esistono tre modi per gestire questo messaggio di avviso:

(1) Ignoralo.

In alcuni casi è possibile semplicemente ignorare questo messaggio di avviso poiché non indica necessariamente la presenza di un problema con il modello di regressione logistica. Ciò significa semplicemente che una o più osservazioni nel data frame hanno valori previsti indistinguibili da 0 o 1.

(2) Aumentare la dimensione del campione.

In altri casi, questo messaggio di avviso viene visualizzato quando si lavora con piccoli blocchi di dati per i quali semplicemente non ci sono dati sufficienti per fornire un adattamento affidabile del modello. Per correggere questo errore, aumenta semplicemente la dimensione del campione delle osservazioni che inserisci nel modello.

(3) Rimuovere i valori anomali.

In altri casi, questo errore si verifica quando sono presenti valori anomali nel database originale e solo un piccolo numero di osservazioni ha probabilità vicine a 0 o 1. Rimuovendo questi valori anomali, il messaggio di avviso spesso scompare.

Risorse addizionali

I seguenti tutorial spiegano come gestire altri avvisi ed errori in R:

Come risolvere il problema in R: formula modello non valida in ExtractVars
Come risolvere in R: l’argomento non è né numerico né logico: return na
Come risolvere: randomForest.default(m, y, …): Na/NaN/Inf nella chiamata di funzione esterna

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *