Як розрахувати 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, мультиколінеарність не є проблемою в нашому прикладі.

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

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