Как вычислить расстояние кука в python


Расстояние Кука используется для выявления влиятельных наблюдений в регрессионной модели.

Формула расстояния Кука:

d я = (r я 2 / p*MSE) * (час 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 () 

Расстояние Кука в Python

Последние мысли

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *