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.