Як обчислити відстань кука в python


Відстань Кука використовується для визначення впливових спостережень у регресійній моделі.

Формула відстані Кука:

d i = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )

золото:

  • r i – i- й залишок
  • p – кількість коефіцієнтів у регресійній моделі
  • MSE – це середня квадратична помилка
  • h iii-те значення кредитного плеча

По суті, відстань Кука вимірює, наскільки всі підігнані значення моделі змінюються, коли 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 () 

Відстань Кука в Python

Заключні думки

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

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

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

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