Як обчислити відстань кука в python
Відстань Кука використовується для визначення впливових спостережень у регресійній моделі.
Формула відстані Кука:
d i = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )
золото:
- r i – i- й залишок
- p – кількість коефіцієнтів у регресійній моделі
- MSE – це середня квадратична помилка
- h ii — i-те значення кредитного плеча
По суті, відстань Кука вимірює, наскільки всі підігнані значення моделі змінюються, коли i -те спостереження видаляється.
Чим більше значення відстані Кука, тим більш впливовим є дане спостереження.
Як правило, будь-яке спостереження з відстанню Кука більше 4/n (де n = загальна кількість спостережень) вважається таким, що має великий вплив.
Цей підручник надає покроковий приклад того, як обчислити відстань Кука для даної регресійної моделі в Python.
Крок 1: Введіть дані
Спочатку ми створимо невеликий набір даних для роботи в Python:
import pandas as pd #create dataset df = pd. DataFrame ({' x ': [8, 12, 12, 13, 14, 16, 17, 22, 24, 26, 29, 30], ' y ': [41, 42, 39, 37, 35, 39, 45, 46, 39, 49, 55, 57]})
Крок 2. Підберіть регресійну модель
Далі ми підберемо просту модель лінійної регресії :
import statsmodels. api as sm
#define response variable
y = df[' y ']
#define explanatory variable
x = df[' x ']
#add constant to predictor variables
x = sm. add_constant (x)
#fit linear regression model
model = sm. OLS (y,x). fit ()
Крок 3: Розрахуйте відстань Кука
Далі ми розрахуємо відстань Кука для кожного спостереження в моделі:
#suppress scientific notation
import numpy as np
n.p. set_printoptions (suppress= True )
#create instance of influence
influence = model. get_influence ()
#obtain Cook's distance for each observation
cooks = influence. cooks_distance
#display Cook's distances
print (cooks)
(array([0.368, 0.061, 0.001, 0.028, 0.105, 0.022, 0.017, 0. , 0.343,
0. , 0.15 , 0.349]),
array([0.701, 0.941, 0.999, 0.973, 0.901, 0.979, 0.983, 1. , 0.718,
1. , 0.863, 0.713]))
За замовчуванням функція cooks_distance() відображає масив значень відстані Кука для кожного спостереження, а потім масив відповідних значень p.
Наприклад:
- Відстань Кука для спостереження №1: 0,368 (p-значення: 0,701)
- Відстань Кука для спостереження №2: 0,061 (p-значення: 0,941)
- Відстань Кука для спостереження №3: 0,001 (p-значення: 0,999)
І так далі.
Крок 4: Візуалізуйте відстані кухаря
Нарешті, ми можемо створити діаграму розсіювання, щоб візуалізувати значення змінної предиктора як функцію відстані Кука для кожного спостереження:
import matplotlib. pyplot as plt
plt. scatter (df.x, cooks[0])
plt. xlabel (' x ')
plt. ylabel (' Cooks Distance ')
plt. show ()
Заключні думки
Важливо зазначити, що відстань Кука слід використовувати для визначення потенційно впливових спостережень. Те, що спостереження є впливовим, не означає, що його слід видалити з набору даних.
По-перше, вам потрібно переконатися, що спостереження не є результатом помилки введення даних або іншої дивної події. Якщо виявиться, що це законне значення, ви можете вирішити, чи доречно його видалити, залишити як є або просто замінити альтернативним значенням, наприклад медіаною.