Comment gérer : glm.fit : des probabilités ajustées numériquement 0 ou 1 se sont produites
Un message d’avertissement que vous pouvez rencontrer dans R est :
Warning message: glm.fit: fitted probabilities numerically 0 or 1 occurred
Cet avertissement se produit lorsque vous ajustez un modèle de régression logistique et que les probabilités prédites d’une ou plusieurs observations dans votre base de données ne peuvent pas être distinguées de 0 ou 1.
Il convient de noter qu’il s’agit d’un message d’avertissement et non d’une erreur. Même si vous recevez cette erreur, votre modèle de régression logistique sera toujours adapté, mais il peut être utile d’analyser le bloc de données d’origine pour voir s’il existe des valeurs aberrantes provoquant l’apparition de ce message d’avertissement.
Ce didacticiel explique comment traiter ce message d’avertissement dans la pratique.
Comment reproduire l’avertissement
Supposons que nous ajustions un modèle de régression logistique au bloc de données suivant dans 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
Notre modèle de régression logistique est adapté avec succès aux données, mais nous recevons un message d’avertissement qui ajuste numériquement les probabilités de 0 ou 1 .
Si nous utilisons le modèle de régression logistique ajusté pour faire des prédictions sur la valeur de réponse des observations dans la base de données d’origine, nous pouvons voir que presque toutes les probabilités prédites sont impossibles à distinguer de 0 et 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
Comment gérer l’avertissement
Il existe trois manières de traiter ce message d’avertissement :
(1) Ignorez-le.
Dans certains cas, vous pouvez simplement ignorer ce message d’avertissement, car il n’indique pas nécessairement qu’il y a un problème avec le modèle de régression logistique. Cela signifie simplement qu’une ou plusieurs observations dans la trame de données ont des valeurs prédites impossibles à distinguer de 0 ou 1.
(2) Augmenter la taille de l’échantillon.
Dans d’autres cas, ce message d’avertissement apparaît lorsque vous travaillez avec de petits blocs de données pour lesquels il n’y a tout simplement pas suffisamment de données pour fournir un ajustement de modèle fiable. Pour corriger cette erreur, augmentez simplement la taille de l’échantillon des observations que vous introduisez dans le modèle.
(3) Supprimez les valeurs aberrantes.
Dans d’autres cas, cette erreur se produit lorsqu’il y a des valeurs aberrantes dans la base de données d’origine et que seul un petit nombre d’observations ont des probabilités proches de 0 ou 1. En supprimant ces valeurs aberrantes, le message d’avertissement disparaît souvent.
Ressources additionnelles
Les didacticiels suivants expliquent comment gérer d’autres avertissements et erreurs dans R :
Comment réparer dans R : formule de modèle invalide dans ExtractVars
Comment réparer dans R : l’argument n’est ni numérique ni logique : renvoyer na
Comment réparer : randomForest.default(m, y, …) : Na/NaN/Inf dans l’appel de fonction étrangère