Como calcular vif em python


A multicolinearidade na análise de regressão ocorre quando duas ou mais variáveis explicativas 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 entre as variáveis for alto o suficiente, isso pode causar problemas no ajuste e na interpretação do modelo de regressão.

Uma forma de detectar a multicolinearidade é usar uma métrica conhecida como fator de inflação de variância (VIF) , que mede a correlação e a força da correlação entre variáveis explicativas em um modelo de regressão .

Este tutorial explica como calcular VIF em Python.

Exemplo: Calcular VIF em Python

Para este exemplo, usaremos um conjunto de dados que descreve os atributos de 10 jogadores de basquete:

 import numpy as np
import pandas as pd

#create dataset
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 dataset
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

Suponha que queiramos 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 explicativas.

Para calcular o VIF para cada variável explicativa do 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 linear regression model using 'rating' as response variable 
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

#calculate VIF for each explanatory variable
vivid = pd.DataFrame()
vive['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vivid['variable'] = X.columns

#view VIF for each explanatory variable 
lively

	       Variable VIF
0 101.258171 Intercept
1 1.763977 points
2 1.959104 assists
3 1.175030 rebounds

Podemos observar os valores VIF para cada uma das variáveis explicativas:

  • 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 interpretar valores VIF

O valor VIF começa em 1 e não tem limite superior. Uma regra geral para interpretar VIFs é:

  • Um valor 1 indica que não há correlação entre uma determinada variável explicativa e qualquer outra variável explicativa no modelo.
  • Um valor entre 1 e 5 indica uma correlação moderada entre uma determinada variável explicativa e outras variáveis explicativas no modelo, mas muitas vezes não é suficientemente grave para exigir atenção especial.
  • Um valor superior a 5 indica uma correlação potencialmente grave entre uma determinada variável explicativa e outras variáveis explicativas do modelo. Nesse caso, as estimativas dos coeficientes e os valores p nos resultados da regressão provavelmente não são confiáveis.

Como cada um dos valores VIF das variáveis explicativas em nosso modelo de regressão é fechado em 1, a multicolinearidade não é um problema em nosso exemplo.

Add a Comment

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