Cómo calcular el factor de inflación de la varianza (VIF) en R

Puedes opinar sobre este contenido:
  • 0
  • 0
  • 0
  • 0

Actualizado el 7 de mayo de 2021, por Luis Benites.

La multicolinealidad en el análisis de regresión ocurre cuando dos o más variables predictoras están altamente correlacionadas entre sí, de modo que no brindan información única o independiente en el modelo de regresión.

Si el grado de correlación entre variables es lo suficientemente alto, puede causar problemas al ajustar e interpretar el modelo de regresión .

La forma más común de detectar la multicolinealidad es utilizando el factor de inflación de la varianza (VIF), que mide la correlación y la fuerza de la correlación entre las variables predictoras en un modelo de regresión.

El valor de VIF comienza en 1 y no tiene límite superior. Una regla general para interpretar los VIF es la siguiente:

  • Un valor de 1 indica que no hay correlación entre una variable predictora dada y cualquier otra variable predictora en el modelo.
  • Un valor entre 1 y 5 indica una correlación moderada entre una variable predictora dada y otras variables predictoras en el modelo, pero esto a menudo no es lo suficientemente grave como para requerir atención.
  • Un valor mayor que 5 indica una correlación potencialmente severa entre una variable predictora dada y otras variables predictoras en el modelo. En este caso, las estimaciones de los coeficientes y los valores p en el resultado de la regresión probablemente no sean confiables.

Tenga en cuenta que hay algunos casos en los que los valores altos de VIF se pueden ignorar de forma segura .

Cómo calcular VIF en R

Para ilustrar cómo calcular VIF para un modelo de regresión en R, usaremos el conjunto de datos integrado mtcars :

#ver las primeras seis líneas de mtcars
cabeza (mtcars)

# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21,0 6160110 3,90 2,620 16,46 0 1 4 4
# Mazda RX4 Wag 21.0 6160110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22,8 4108 93 3,85 2,320 18,61 1 1 4 1
#Hornet 4 Impulso 21,4 6 258110 3,08 3,215 19,44 1 0 3 1
#Hornet Sportabout 18,7 8360175 3,15 3,440 17,02 0 0 3 2
#Valiente 18,1 6225105 2,76 3,460 20,22 1 0 3 1

Primero, ajustaremos un modelo de regresión usando mpg como variable de respuesta y disp , hp , wt y drat como variables predictoras:

#ajustar el modelo de regresión
modelo <- lm (mpg ~ disp + hp + wt + drat, data = mtcars)

#ver el resultado del resumen del modelo de regresión
 (modelo)

#Llamada:
#lm (fórmula = mpg ~ disp + hp + wt + drat, data = mtcars)
#
#Derechos residuales de autor:
# Mín. 1T Mediana 3T Máx. 
# -3.5077 -1.9052 -0.5057 0.9821 5.6883 
#
#Coeficientes:
# Estimar Std. Valor t de error Pr (> | t |)    
# (Intercepción) 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. códigos: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0,1 pulg. 1
#
# Error estándar residual: 2.602 en 27 grados de libertad
# R-cuadrado múltiple: 0,8376, R-cuadrado ajustado: 0,8136 
# Estadístico F: 34,82 en 4 y 27 DF, valor p: 2,704e-10

Podemos ver en el resultado que el valor de R cuadrado para el modelo es 0.8376 . También podemos ver que el estadístico F general es 34.82 y el valor p correspondiente es 2.704e-10 , lo que indica que el modelo de regresión general es significativo. Además, las variables predictoras hp y wt son estadísticamente significativas al nivel de significancia de 0.05, mientras que disp y drat no lo son.

A continuación, usaremos la función vif () de la biblioteca del automóvil para calcular el VIF para cada variable de predicción en el modelo:

#cargar la biblioteca de autos
biblioteca (coche)

#calcular el VIF para cada variable de predicción en el modelo
 vif (modelo)

# disp hp wt drat 
# 8.209402 2.894373 5.096601 2.279547 

Podemos ver que el VIF tanto para disp como para wt es mayor que 5, lo que es potencialmente preocupante.

Visualización de valores VIF

Para visualizar los valores de VIF para cada variable de predicción, podemos crear un gráfico de barras horizontales simple y agregar una línea vertical en 5 para que podamos ver claramente qué valores de VIF exceden 5:

#create vector de valores VIF
vif_values ​​<- vif (modelo)

#cree un gráfico de barras horizontales para mostrar cada gráfico de barras de valor VIF
 (vif_values, main = "VIF Values", horiz = TRUE, col = "steelblue")

#add línea vertical en 5
 abline (v = 5, lwd = 3, lty = 2)

Gráfico de barras horizontales en R que muestra valores VIF

Tenga en cuenta que este tipo de gráfico sería más útil para un modelo que tiene muchas variables predictoras, por lo que podríamos visualizar fácilmente todos los valores de VIF a la vez. Sin embargo, sigue siendo un gráfico útil en este ejemplo.

Dependiendo del valor de VIF que considere demasiado alto para incluirlo en el modelo, puede optar por eliminar ciertas variables predictoras y ver si el valor de R cuadrado correspondiente o el error estándar del modelo se ven afectados.

Visualización de correlaciones entre variables predictoras

Para comprender mejor por qué una variable predictora puede tener un valor VIF alto, podemos crear una matriz de correlación para ver los coeficientes de correlación lineal entre cada par de variables:

#definir las variables que queremos incluir en la matriz de correlación
datos <- mtcars [, c ("disp", "hp", "wt", "drat")]

#crear matriz de correlación
cor (datos)

# disp hp wt drat
#disp 1.0000000 0.7909486 0.8879799 -0.7102139
#hp 0.7909486 1.0000000 0.6587479 -0.4487591
# peso 0.8879799 0.6587479 1.0000000 -0.7124406
#drat -0.7102139 -0.4487591 -0.7124406 1.0000000

Recuerde que la variable disp tenía un valor de VIF superior a 8, que era el valor de VIF más grande entre todas las variables predictoras del modelo. De la matriz de correlación podemos ver que disp está fuertemente correlacionado con las otras tres variables predictoras, lo que explica por qué tiene un valor VIF tan alto.

En este caso, es posible que desee eliminar disp del modelo porque tiene un valor de VIF alto y no era estadísticamente significativo en el nivel de significancia de 0.05.

Tenga en cuenta que una matriz de correlación y un VIF le proporcionarán información similar: ambos le indican cuándo una variable está altamente correlacionada con una o más de otras variables en un modelo de regresión.

Lecturas adicionales:
Guía de multicolinealidad y VIF en regresión
¿Qué es un buen valor R cuadrado?

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Redactor del artículo

  • Luis Benites
    Director de Statologos.com

    Tengo una Maestría en Ciencias en Estadística Aplicada y he trabajado en algoritmos de aprendizaje automático para empresas profesionales tanto en el sector de la salud como en el comercio minorista.

    Ver todas las entradas

¿Te hemos ayudado?

Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:

La ayuda no cuesta nada

Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo:

Deja un comentario

A menudo, en las estadísticas, nos interesa medir los parámetros de la población , números que describen alguna característica de…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!