Como calcular o fator de inflação de variância (vif) em r
A multicolinearidade na análise de regressão ocorre quando duas ou mais variáveis preditoras são altamente correlacionadas entre si, de modo que não fornecem informações únicas ou independentes no modelo de regressão.
Se o grau de correlação entre as variáveis for alto o suficiente, isso pode causar problemas no ajuste e na interpretação do modelo de regressão .
A forma mais comum de detectar multicolinearidade é usar o fator de inflação de variância (VIF), que mede a correlação e a força da correlação entre variáveis preditoras em um modelo de regressão.
O valor VIF começa em 1 e não tem limite superior. Uma regra geral para interpretar VIFs é:
- Um valor 1 indica que não há correlação entre uma determinada variável preditora e qualquer outra variável preditora no modelo.
- Um valor entre 1 e 5 indica uma correlação moderada entre uma determinada variável preditora e outras variáveis preditoras no modelo, mas muitas vezes não é suficientemente grave para exigir atenção especial.
- Um valor superior a 5 indica uma correlação potencialmente séria entre uma determinada variável preditora e outras variáveis preditoras no modelo. Nesse caso, as estimativas dos coeficientes e os valores p nos resultados da regressão provavelmente não são confiáveis.
Observe que existem alguns casos em que valores altos de VIF podem ser ignorados com segurança .
Como calcular VIF em R
Para ilustrar como calcular o VIF para um modelo de regressão em R, usaremos o conjunto de dados integrado 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
Primeiro, ajustaremos um modelo de regressão usando mpg como variável de resposta e disp , hp , wt e drat como variáveis preditoras:
#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 *** #available 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 #--- #Significant. 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
Podemos ver pelo resultado que o valor R ao quadrado do modelo é 0,8376 . Também podemos ver que a estatística F geral é 34,82 e o valor p correspondente é 2,704e-10 , o que indica que o modelo de regressão geral é significativo. Além disso, as variáveis preditoras hp e wt são estatisticamente significativas ao nível de significância de 0,05, enquanto disp e drat não o são.
A seguir, usaremos a função vive() da biblioteca para calcular o VIF para cada variável preditora no modelo:
#load the car library library(car) #calculate the VIF for each predictor variable in the model lively(model) # disp hp wt drat #8.209402 2.894373 5.096601 2.279547
Podemos ver que os VIFs para disp e wt são maiores que 5, o que é potencialmente preocupante.
Visualizando valores VIF
Para visualizar os valores VIF para cada variável preditora, podemos criar um gráfico de barras horizontal simples e adicionar uma linha vertical em 5 para que possamos ver claramente quais valores VIF excedem 5:
#create vector of VIF values vive_values <- vive(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)
Observe que esse tipo de gráfico seria mais útil para um modelo com muitas variáveis preditoras, para que possamos visualizar facilmente todos os valores VIF de uma só vez. No entanto, é um gráfico útil neste exemplo.
Dependendo de qual valor VIF você considera muito alto para incluir no modelo, você pode optar por remover certas variáveis preditoras e ver se o valor R-quadrado correspondente ou o erro padrão do modelo são afetados.
Visualizando correlações entre variáveis preditoras
Para entender melhor por que uma variável preditora pode ter um valor VIF alto, podemos criar uma matriz de correlação para exibir os coeficientes de correlação linear entre cada par de variáveis:
#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 #available 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
Lembre-se de que a variável disp teve um valor VIF superior a 8, que foi o maior valor VIF entre todas as variáveis preditoras do modelo. A partir da matriz de correlação, podemos ver que disp está altamente correlacionado com as outras três variáveis preditoras, o que explica porque seu valor VIF é tão alto.
Nesse caso, talvez você queira remover disp do modelo porque seu valor VIF é alto e não é estatisticamente significativo no nível de significância de 0,05.
Observe que uma matriz de correlação e um VIF fornecerão informações semelhantes: ambos informam quando uma variável está altamente correlacionada com uma ou mais variáveis em um modelo de regressão.
Leitura adicional:
Um guia para multicolinearidade e VIF em regressão
O que é um bom valor de R ao quadrado?