Comment réparer dans R : non défini en raison de singularités
Un message d’erreur que vous pouvez rencontrer dans R est :
Coefficients: (1 not defined because of singularities)
Ce message d’erreur se produit lorsque vous ajustez un modèle à l’aide de la fonction glm() dans R et que deux ou plusieurs de vos variables prédictives ont une relation linéaire exacte entre elles – connue sous le nom de multicolinéarité parfaite .
Pour corriger cette erreur, vous pouvez utiliser la fonction cor() pour identifier les variables de votre ensemble de données qui ont une corrélation parfaite les unes avec les autres et simplement supprimer l’une de ces variables du modèle de régression.
Ce didacticiel explique comment traiter ce message d’erreur dans la pratique.
Comment reproduire l’erreur
Supposons que nous ajustions un modèle de régression logistique au bloc de données suivant dans R :
#define data
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(6, 6, 8, 8, 6, 4, 10, 16, 18, 18, 18, 16, 18, 18, 18),
x3 = c(4, 7, 7, 3, 8, 9, 9, 8, 7, 8, 9, 4, 9, 10, 13))
#fit logistic regression model
model <- glm(y~x1+x2+x3, data=df, family=binomial)
#view model summary
summary(model)
Call:
glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05
Coefficients: (1 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x2 NA NA NA NA
x3 -2.258 20119.863 0.000 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
Notez que juste avant la sortie du coefficient, nous recevons le message :
Coefficients: (1 not defined because of singularities)
Cela indique que deux variables prédictives ou plus dans le modèle ont une relation linéaire parfaite et que tous les coefficients de régression du modèle ne peuvent donc pas être estimés.
Par exemple, notez qu’aucune estimation de coefficient ne peut être effectuée pour la variable prédictive x 2 .
Comment gérer l’erreur
Pour identifier quelles variables prédictives sont à l’origine de cette erreur, nous pouvons utiliser la fonction cor() pour produire une matrice de corrélation et examiner quelles variables ont une corrélation d’exactement 1 les unes avec les autres :
#create correlation matrix
cor(df)
y x1 x2 x3
y 1.0000000 0.9675325 0.9675325 0.3610320
x1 0.9675325 1.0000000 1.0000000 0.3872889
x2 0.9675325 1.0000000 1.0000000 0.3872889
x3 0.3610320 0.3872889 0.3872889 1.0000000
A partir de la matrice de corrélation, nous pouvons voir que les variables x 1 et x 2 sont parfaitement corrélées.
Pour résoudre cette erreur, nous pouvons simplement supprimer l’une de ces deux variables du modèle, car elles ne fournissent pas réellement d’informations uniques ou indépendantes dans le modèle de régression.
Par exemple, supposons que nous supprimons x 2 et ajustons le modèle de régression logistique suivant :
#fit logistic regression model
model <- glm(y~x1+x3, data=df, family=binomial)
#view model summary
summary(model)
Call:
glm(formula = y ~ x1 + x3, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x3 -2.258 20119.863 0.000 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
Notez que nous ne recevons pas cette fois de message d’erreur « non défini en raison de singularités ».
Remarque : peu importe que nous supprimions x 1 ou x 2 . Le modèle final contiendra la même estimation de coefficient pour la variable que vous décidez de conserver et la qualité globale de l’ajustement du modèle sera la même.
Ressources additionnelles
Les didacticiels suivants expliquent comment gérer d’autres 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