Как рассчитать 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 dmatrices
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
vif = pd.DataFrame()
vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif['variable'] = X.columns

#view VIF for each explanatory variable 
vif

 VIF variable
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, мультиколлинеарность в нашем примере не является проблемой.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.