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


У регресійному аналізі мультиколінеарність виникає, коли дві або більше змінних предиктора сильно корельовані одна з одною, так що вони не надають унікальної чи незалежної інформації в моделі регресії.

Якщо ступінь кореляції досить високий між змінними предикторів, це може спричинити проблеми під час підгонки та інтерпретації регресійної моделі.

Найпростіший спосіб виявити мультиколінеарність у регресійній моделі — обчислити показник, відомий як коефіцієнт інфляції дисперсії, який часто називають абревіатурою VIF .

VIF вимірює силу кореляції між змінними предикторів у моделі. Він приймає значення від 1 до позитивної нескінченності.

Ми використовуємо такі практичні правила для інтерпретації значень VIF:

  • VIF = 1: немає кореляції між даною змінною предиктора та будь-якою іншою змінною предиктора в моделі.
  • VIF між 1 і 5: існує помірна кореляція між даною змінною предиктора та іншими змінними предиктора в моделі.
  • VIF > 5 : існує сильна кореляція між даною змінною предиктора та іншими змінними предиктора в моделі.

У наступному прикладі показано, як виявити мультиколінеарність у моделі регресії в Python шляхом обчислення значень VIF для кожної змінної предиктора в моделі.

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

Припустімо, що у нас є такий фрейм даних 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *