Как рассчитать расстояние Кука в Python

Как рассчитать расстояние Кука в 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
np.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

Заключительные мысли

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

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.