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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *