Как рассчитать vif в python
Мультиколлинеарность в регрессионном анализе возникает, когда две или более объясняющих переменных сильно коррелируют друг с другом, так что они не предоставляют уникальную или независимую информацию в регрессионной модели.
Если степень корреляции между переменными достаточно высока, это может вызвать проблемы при подборе и интерпретации регрессионной модели.
Один из способов обнаружить мультиколлинеарность — использовать показатель, известный как коэффициент инфляции дисперсии (VIF) , который измеряет корреляцию и силу корреляции между объясняющими переменными в регрессионной модели .
В этом руководстве объясняется, как рассчитать VIF в Python.
Пример: вычислить VIF в Python
В этом примере мы будем использовать набор данных, описывающий характеристики 10 баскетболистов:
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
Предположим, мы хотим подогнать модель множественной линейной регрессии, используя оценку в качестве переменной ответа, а очки, передачи и подборы в качестве объясняющих переменных.
Чтобы рассчитать VIF для каждой объясняющей переменной в модели, мы можем использовать функцию variance_inflation_factor() из библиотеки 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
Мы можем наблюдать значения VIF для каждой из объясняющих переменных:
- баллы: 1,76
- передачи: 1,96
- подборы: 1,18
Примечание. Не обращайте внимания на VIF для «Перехвата» в шаблоне, поскольку это значение не имеет значения.
Как интерпретировать значения VIF
Значение VIF начинается с 1 и не имеет верхнего предела. Общее правило интерпретации VIF следующее:
- Значение 1 указывает на отсутствие корреляции между данной объясняющей переменной и любой другой объясняющей переменной в модели.
- Значение от 1 до 5 указывает на умеренную корреляцию между данной объясняющей переменной и другими объясняющими переменными в модели, но часто она недостаточно серьезна, чтобы требовать особого внимания.
- Значение больше 5 указывает на потенциально серьезную корреляцию между данной объясняющей переменной и другими объясняющими переменными в модели. В этом случае оценки коэффициентов и значения p в результатах регрессии, скорее всего, ненадежны.
Поскольку каждое из значений VIF объясняющих переменных в нашей регрессионной модели близко к 1, мультиколлинеарность не является проблемой в нашем примере.