Personnaliser les préférences

Nous utilisons des cookies pour vous aider à naviguer efficacement et à exécuter certaines fonctions. Vous trouverez ci-dessous des informations détaillées sur tous les cookies sous chaque catégorie de consentement.

Les cookies classés comme « Nécessaires » sont stockés sur votre navigateur car ils sont essentiels pour activer les fonctionnalités de base du site.... 

Toujours actif

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Aucun cookie à afficher.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Aucun cookie à afficher.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Aucun cookie à afficher.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Aucun cookie à afficher.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Aucun cookie à afficher.

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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *