Colinearidade Medidas

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).

matriz de correlação para as variáveis contínuas; coeficiente Kendall (imagem do 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)

VIF valores para as variáveis preditoras (imagem do autor)

Os valores VIF correspondem à matriz de correlação; por exemplo, NOX de 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)

Avaliando os valores VIF das variáveis preditoras no modelo base (imagem por autor)

Aparecendo que a queda da variável TAX baseada no VIF parece ser melhor, uma abordagem prudente é verificar através da métrica R-quadrada ajustada (ajustada para o número de preditores, a métrica só aumenta se a próxima variável adicionada melhorar o modelo mais do que seria de esperar por acaso).

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

Resumo da métrica do modelo (sem TAX) (imagem do autor)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

>

Sumário de métricas do modelo (sem RAD) (imagem do autor)

>

Do maior R-figura ao quadrado, podemos inferir que o modelo tem um melhor desempenho com a variável RAD descartada! Com a questão da multicolinearidade abordada, o próximo passo poderia ser explorar a adição de termos de interação para potencialmente aumentar o desempenho do modelo.

Deixe um comentário