Como testar a multicolinearidade em python
Na análise de regressão, a multicolinearidade ocorre quando duas ou mais variáveis preditoras são altamente correlacionadas entre si, de modo que não fornecem informações únicas ou independentes no modelo de regressão.
Se o grau de correlação for alto o suficiente entre as variáveis preditoras, isso poderá causar problemas no ajuste e interpretação do modelo de regressão.
A maneira mais simples de detectar multicolinearidade em um modelo de regressão é calcular uma métrica conhecida como fator de inflação de variância, geralmente abreviado como VIF .
VIF mede a força da correlação entre variáveis preditoras em um modelo. Assume um valor entre 1 e infinito positivo.
Usamos as seguintes regras básicas para interpretar os valores VIF:
- VIF = 1: Não há correlação entre uma determinada variável preditora e qualquer outra variável preditora no modelo.
- VIF entre 1 e 5: Existe uma correlação moderada entre uma determinada variável preditora e outras variáveis preditoras no modelo.
- VIF > 5 : Existe uma forte correlação entre uma determinada variável preditora e outras variáveis preditoras no modelo.
O exemplo a seguir mostra como detectar multicolinearidade em um modelo de regressão em Python calculando valores VIF para cada variável preditora no modelo.
Exemplo: teste de multicolinearidade em Python
Suponha que temos o seguinte DataFrame do pandas que contém informações sobre vários jogadores de basquete:
import pandas as pd #createDataFrame df = pd. DataFrame ({' rating ': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86], ' points ': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19], ' assists ': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5], ' rebounds ': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]}) #view DataFrame print (df) rating points assists rebounds 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
Digamos que queremos ajustar um modelo de regressão linear múltipla usando pontuação como variável de resposta e pontos , assistências e rebotes como variáveis preditoras.
Para calcular o VIF para cada variável preditora no modelo, podemos usar a função variance_inflation_factor() da biblioteca statsmodels :
from patsy import damatrices from statsmodels. stats . outliers_influence import variance_inflation_factor #find design matrix for regression model using 'rating' as response variable y , #create DataFrame to hold VIF values vive_df = pd. DataFrame () vive_df[' variable '] = X.columns #calculate VIF for each predictor variable vive_df[' VIF '] = [variance_inflation_factor(X. values , i) for i in range(X. shape [1])] #view VIF for each predictor variable print (viv_df) Variable VIF 0 101.258171 Intercept 1 1.763977 points 2 1.959104 assists 3 1.175030 rebounds
Podemos ver os valores VIF para cada uma das variáveis preditoras:
- pontos: 1,76
- assistências: 1,96
- rebotes: 1,18
Nota: Ignore o VIF para “Intercept” no modelo, pois este valor não é relevante.
Como cada um dos valores VIF das variáveis preditoras no modelo é próximo de 1, a multicolinearidade não é um problema no modelo.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em Python:
Como realizar regressão linear simples em Python
Como realizar regressão linear múltipla em Python
Como criar um gráfico residual em Python