Comment calculer le facteur d’inflation de variance (VIF) dans R
La multicolinéarité dans l’analyse de régression se produit lorsque deux ou plusieurs variables prédictives sont fortement corrélées les unes aux autres, de sorte qu’elles ne fournissent pas d’informations uniques ou indépendantes dans le modèle de régression.
Si le degré de corrélation est suffisamment élevé entre les variables, cela peut poser des problèmes lors de l’ajustement et de l’interprétation du modèle de régression .
Le moyen le plus courant de détecter la multicolinéarité consiste à utiliser le facteur d’inflation de la variance (VIF), qui mesure la corrélation et la force de la corrélation entre les variables prédictives dans un modèle de régression.
La valeur de VIF commence à 1 et n’a pas de limite supérieure. Une règle générale pour interpréter les VIF est la suivante :
- Une valeur de 1 indique qu’il n’existe aucune corrélation entre une variable prédictive donnée et toute autre variable prédictive du modèle.
- Une valeur comprise entre 1 et 5 indique une corrélation modérée entre une variable prédictive donnée et d’autres variables prédictives du modèle, mais elle n’est souvent pas suffisamment grave pour nécessiter une attention particulière.
- Une valeur supérieure à 5 indique une corrélation potentiellement grave entre une variable prédictive donnée et d’autres variables prédictives du modèle. Dans ce cas, les estimations des coefficients et les valeurs p dans les résultats de la régression ne sont probablement pas fiables.
Notez qu’il existe certains cas dans lesquels des valeurs VIF élevées peuvent être ignorées en toute sécurité .
Comment calculer VIF dans R
Pour illustrer comment calculer VIF pour un modèle de régression dans R, nous utiliserons l’ensemble de données intégré mtcars :
#view first six lines of mtcars
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Tout d’abord, nous allons ajuster un modèle de régression en utilisant mpg comme variable de réponse et disp , hp , wt et drat comme variables prédictives :
#fit the regression model model <- lm(mpg ~ disp + hp + wt + drat, data = mtcars) #view the output of the regression model summary(model) #Call: #lm(formula = mpg ~ disp + hp + wt + drat, data = mtcars) # #Residuals: # Min 1Q Median 3Q Max #-3.5077 -1.9052 -0.5057 0.9821 5.6883 # #Coefficients: # Estimate Std. Error t value Pr(>|t|) #(Intercept) 29.148738 6.293588 4.631 8.2e-05 *** #disp 0.003815 0.010805 0.353 0.72675 #hp -0.034784 0.011597 -2.999 0.00576 ** #wt -3.479668 1.078371 -3.227 0.00327 ** #drat 1.768049 1.319779 1.340 0.19153 #--- #Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 2.602 on 27 degrees of freedom #Multiple R-squared: 0.8376, Adjusted R-squared: 0.8136 #F-statistic: 34.82 on 4 and 27 DF, p-value: 2.704e-10
Nous pouvons voir à partir du résultat que la valeur R au carré du modèle est 0,8376 . Nous pouvons également voir que la statistique F globale est de 34,82 et la valeur p correspondante est de 2,704e-10 , ce qui indique que le modèle de régression global est significatif. De plus, les variables prédictives hp et wt sont statistiquement significatives au niveau de signification de 0,05, alors que disp et drat ne le sont pas.
Ensuite, nous utiliserons la fonction vif() de la bibliothèque car pour calculer le VIF pour chaque variable prédictive du modèle :
#load the car library library(car) #calculate the VIF for each predictor variable in the model vif(model) # disp hp wt drat #8.209402 2.894373 5.096601 2.279547
Nous pouvons voir que les VIF pour disp et wt sont supérieurs à 5, ce qui est potentiellement préoccupant.
Visualisation des valeurs VIF
Pour visualiser les valeurs VIF pour chaque variable prédictive, nous pouvons créer un simple graphique à barres horizontales et ajouter une ligne verticale à 5 afin que nous puissions voir clairement quelles valeurs VIF dépassent 5 :
#create vector of VIF values vif_values <- vif(model) #create horizontal bar chart to display each VIF value barplot(vif_values, main = "VIF Values", horiz = TRUE, col = "steelblue") #add vertical line at 5 abline(v = 5, lwd = 3, lty = 2)
Notez que ce type de graphique serait plus utile pour un modèle comportant de nombreuses variables prédictives, afin que nous puissions facilement visualiser toutes les valeurs VIF à la fois. Il s’agit néanmoins d’un graphique utile dans cet exemple.
En fonction de la valeur du VIF que vous jugez trop élevée pour être incluse dans le modèle, vous pouvez choisir de supprimer certaines variables prédictives et voir si la valeur R au carré correspondante ou l’erreur type du modèle est affectée.
Visualisation des corrélations entre les variables prédictives
Pour mieux comprendre pourquoi une variable prédictive peut avoir une valeur VIF élevée, nous pouvons créer une matrice de corrélation pour afficher les coefficients de corrélation linéaire entre chaque paire de variables :
#define the variables we want to include in the correlation matrix data <- mtcars[ , c("disp", "hp", "wt", "drat")] #create correlation matrix cor(data) # disp hp wt drat #disp 1.0000000 0.7909486 0.8879799 -0.7102139 #hp 0.7909486 1.0000000 0.6587479 -0.4487591 #wt 0.8879799 0.6587479 1.0000000 -0.7124406 #drat -0.7102139 -0.4487591 -0.7124406 1.0000000
Rappelons que la variable disp avait une valeur VIF supérieure à 8, ce qui était la valeur VIF la plus élevée parmi toutes les variables prédictives du modèle. À partir de la matrice de corrélation, nous pouvons voir que disp est fortement corrélé avec les trois autres variables prédictives, ce qui explique pourquoi sa valeur VIF est si élevée.
Dans ce cas, vous souhaiterez peut-être supprimer disp du modèle car sa valeur VIF est élevée et elle n’est pas statistiquement significative au niveau de signification de 0,05.
Notez qu’une matrice de corrélation et un VIF vous fourniront des informations similaires : elles vous indiquent toutes deux quand une variable est fortement corrélée avec une ou plusieurs autres variables dans un modèle de régression.
Lectures complémentaires :
Un guide sur la multicolinéarité et le VIF en régression
Qu’est-ce qu’une bonne valeur R au carré ?