Как проверить мультиколлинеарность в python


В регрессионном анализе мультиколлинеарность возникает, когда две или более переменных-предикторов сильно коррелируют друг с другом, так что они не предоставляют уникальную или независимую информацию в модели регрессии.

Если степень корреляции между переменными-предикторами достаточно высока, это может вызвать проблемы при подборе и интерпретации модели регрессии.

Самый простой способ обнаружить мультиколлинеарность в регрессионной модели — вычислить метрику, известную как коэффициент инфляции дисперсии, часто сокращенно VIF .

VIF измеряет силу корреляции между переменными-предикторами в модели. Он принимает значение от 1 до положительной бесконечности.

Для интерпретации значений VIF мы используем следующие практические правила:

  • VIF = 1: между данной переменной-предиктором и любой другой переменной-предиктором в модели нет корреляции.
  • VIF от 1 до 5: существует умеренная корреляция между данной переменной-предиктором и другими переменными-предикторами в модели.
  • VIF > 5 : существует сильная корреляция между данной переменной-предиктором и другими переменными-предикторами в модели.

В следующем примере показано, как обнаружить мультиколлинеарность в модели регрессии на Python путем расчета значений VIF для каждой переменной-предиктора в модели.

Пример: тест мультиколлинеарности в Python

Предположим, у нас есть следующий DataFrame pandas, содержащий информацию о различных баскетболистах:

 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

Допустим, мы хотим подогнать модель множественной линейной регрессии , используя оценку в качестве переменной ответа и очки , передачи и подборы в качестве переменных-предикторов.

Чтобы вычислить VIF для каждой предикторной переменной в модели, мы можем использовать функцию variance_inflation_factor() из библиотеки 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

Мы можем увидеть значения VIF для каждой из переменных-предсказателей:

  • баллы: 1,76
  • передачи: 1,96
  • подборы: 1,18

Примечание. Не обращайте внимания на VIF для «Перехвата» в шаблоне, поскольку это значение не имеет значения.

Поскольку каждое из значений VIF переменных-предикторов в модели близко к 1, мультиколлинеарность не является проблемой в модели.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи на Python:

Как выполнить простую линейную регрессию в Python
Как выполнить множественную линейную регрессию в Python
Как создать остаточный график в Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *