Medidas de colinealidad

Otro enfoque para identificar la multicolinealidad es a través del Factor de Inflación de la Varianza. El VIF indica el porcentaje de la varianza inflada para el coeficiente de cada variable. A partir de un valor de 1 (sin colinealidad), un VIF entre 1-5 indica una colinealidad moderada, mientras que los valores superiores a 5 indican una colinealidad elevada. Algunos casos en los que un VIF alto sería aceptable incluyen el uso de términos de interacción, términos polinómicos o variables ficticias (variables nominales con tres o más categorías). Las matrices de correlación permiten identificar la correlación entre pares de variables, mientras que el VIF permite la evaluación general de la multicolinealidad. A continuación se presenta la matriz de correlación de la mayoría de las variables continuas para destacar los distintos pares de variables colineales. El VIF puede calcularse utilizando el paquete statsmodels; el bloque de código siguiente presenta los valores del VIF con las variables colineales incluidas (izquierda) y eliminadas (derecha).

Matriz de correlación para las variables continuas; Coeficiente de Kendall (imagen del autor)

# Setting the predictor variables
X_o = df_wdummy]
X_r1 = df_wdummy]#
from statsmodels.stats.outliers_influence import variance_inflation_factorvif = pd.Series()], index=X_o.columns,
name='vif_full')
vif_r = pd.Series()], index=X_r1.columns,
name='vif_collinear_rvmd')
pd.concat(, axis=1)

Valores VIF para las variables predictoras (imagen del autor)

Los valores VIF se corresponden con la matriz de correlación; por ejemplo, el par de variables NOX e INDUS, el coeficiente de correlación es superior a 0.5 (0,61), y los valores VIF respectivos son superiores a 5. La eliminación de las variables colineales RAD y NOX mejoró las cifras del VIF. La eliminación de las variables colineales basándose únicamente en la cifra de VIF más alta no es una forma garantizada de construir el modelo de mejor rendimiento, como se explica en la siguiente sección.

Construimos un modelo de referencia eliminando todas las variables colineales identificadas en la matriz de correlación (mostrada anteriormente), a la espera de que TAX y RAD sean eliminadas a continuación.

# Baseline variables 
X_bl = df_wdummy]
y_bl = df_wdummy# Explore mitigating multi-collinearity
vif_bl = pd.Series()], index=X_bl.columns,
name='vif_bl')X_noTAX = X_bl.drop(,axis=1)
X_noRAD = X_bl.drop(,axis=1)
vif_noTAX = pd.Series()],
index=X_noTAX.columns, name='vif_noTAX')
vif_noRAD = pd.Series()],
index=X_noRAD.columns, name='vif_noRAD')
pd.concat(, axis=1)

Evaluación de las cifras VIF de las variables predictoras en el modelo de referencia (imagen del autor)

Aunque parece que descartar la variable TAX basándose en el VIF parece ser mejor, un enfoque prudente es comprobar a través de la métrica R-cuadrado ajustada (ajustada por el número de predictores, la métrica aumenta sólo si la siguiente variable añadida mejora el modelo más de lo que cabría esperar por azar).

# Without TAX
model = sm.OLS(y, sm.add_constant(X_noTAX)).fit()
print_model = model.summary()
print(print_model)

Resumen de las métricas del modelo (sin TAX) (imagen del autor)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

Resumen de las métricas del modelo (sin RAD) (imagen del autor)

De la cifra de R-al cuadrado, podemos deducir que el modelo funciona mejor si se elimina la variable RAD. Una vez resuelto el problema de la multicolinealidad, el siguiente paso podría ser explorar la adición de términos de interacción para aumentar potencialmente el rendimiento del modelo.

Deja un comentario