Uma outra abordagem para identificar a multicolinearidade é através do Fator de Inflação de Variância. O VIF indica a porcentagem da variância inflada para o coeficiente de cada variável. A partir de um valor de 1 (sem colinearidade), um VIF entre 1-5 indica colinearidade moderada enquanto valores acima de 5 indicam colinearidade alta. Alguns casos onde um VIF elevado seria aceitável incluem o uso de termos de interação, termos polinomiais ou variáveis dummy (variáveis nominais com três ou mais categorias). As matrizes de correlação permitem a identificação de correlação entre pares de variáveis enquanto o VIF permite a avaliação geral da multicolinearidade. A matriz de correlação para a maioria das variáveis contínuas é apresentada abaixo para destacar os vários pares de variáveis colineares. O VIF pode ser calculado usando o pacote statsmodels; o bloco de código abaixo apresenta os valores VIF com as variáveis colineares incluídas (esquerda) e removidas (direita).
# 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)
Os valores VIF correspondem à matriz de correlação; por exemplo, NOX par de variáveis e INDUS, o coeficiente de correlação está acima de 0.5 (0,61), e os respectivos valores VIF estão acima de 5. A remoção das variáveis colineares RAD e NOX melhorou os valores VIF. A remoção das variáveis colineares unicamente com base no valor VIF mais alto não é uma forma garantida de construir o modelo com o melhor desempenho, conforme elaborado na próxima seção.
Construímos um modelo de linha de base, removendo todas as variáveis colineares identificadas na matriz de correlação (mostrada acima), aguardando que TAX e RAD sejam descartados em seguida.
# 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)