Cómo calcular VIF en Python

La multicolinealidad en el análisis de regresión ocurre cuando dos o más variables explicativas están altamente correlacionadas entre sí, de manera 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.

Una forma de detectar la multicolinealidad es mediante el uso de una métrica conocida como factor de inflación de la varianza (VIF) , que mide la correlación y la fuerza de la correlación entre las variables explicativas en un modelo de regresión .

Este tutorial explica cómo calcular VIF en Python.

Ejemplo: calcular VIF en Python

Para este ejemplo usaremos un conjunto de datos que describe los atributos de 10 jugadores de baloncesto:

importar numpy como np
 importar pandas como pd

#create conjunto de datos
df = pd.DataFrame ({'calificación': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
                   'puntos': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
                   'asiste': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
                   'rebotes': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#ver conjunto de datos
 df

	puntos de calificación ayuda a rebotes
0 90 25 5 11
1 85 20 7 8
2 82 14 7 10
3 88 16 8 6
4 94 27 5 6
5 90 20 7 9
6 76 12 6 6
7 75 15 9 10
8 87 14 9 10
9 86 19 5 7

Suponga que nos gustaría ajustar un modelo de regresión lineal múltiple utilizando la calificación como variable de respuesta y los puntos, asistencias y rebotes como variables explicativas.

Para calcular el VIF para cada variable explicativa en el modelo, podemos usar la función variance_inflation_factor () de la biblioteca statsmodels:

del patsy importación dmatrices
 de statsmodels.stats.outliers_influence importación variance_inflation_factor

# encontrar la matriz de diseño para el modelo de regresión lineal usando 'calificación' como variable de respuesta 
y, X = dmatrices ('rating ~ puntos + asistencias + rebotes', data = df, return_type = 'dataframe')

#calcular VIF para cada variable explicativa
vif = pd.DataFrame ()
vif ['VIF'] = [varnce_inflation_factor (X.values, i) for i in range (X.shape [1])]
vif ['variable'] = X.columns

#ver VIF para cada variable explicativa 
vif

	       Variable VIF
0101.258171 Intercepción
1 1.763977 puntos
2 1.959104 asistencias
3 1.175030 rebotes

Podemos observar los valores de VIF para cada una de las variables explicativas:

  • puntos: 1,76
  • asistencias: 1,96
  • rebotes: 1,18

Nota: Ignore el VIF para la «Intercepción» en el modelo, ya que este valor es irrelevante.

Cómo interpretar los valores de VIF

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 explicativa dada y cualquier otra variable explicativa en el modelo.
  • Un valor entre 1 y 5 indica una correlación moderada entre una variable explicativa dada y otras variables explicativas 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 explicativa dada y otras variables explicativas 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.

Dado que cada uno de los valores de VIF para las variables explicativas en nuestro modelo de regresión está cerca de 1, la multicolinealidad no es un problema en nuestro ejemplo.

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

Deja un comentario

Un ANOVA anidado es un tipo de ANOVA ("análisis de varianza") en el que al menos un factor está anidado…
statologos comunidad-2

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

You have Successfully Subscribed!