Як визначити впливові точки даних за допомогою відстані кука


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

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

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

золото:

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

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

По суті, відстань Кука робить одну річ: вона вимірює, наскільки всі підібрані значення моделі змінюються, коли i- та точка даних видаляється.

Точка даних, яка має високе значення для відстані Кука, вказує на те, що вона сильно впливає на підібрані значення. Загальне правило полягає в тому, що будь-яка точка з відстанню Кука більше 4/n ( де n — загальна кількість точок даних ) вважається викидом.

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

Як розрахувати відстань Кука в R

Наступний приклад ілюструє, як обчислити відстань Кука в R.

Спочатку ми завантажимо дві бібліотеки, які нам знадобляться для цього прикладу:

 library(ggplot2)
library(gridExtra)

Далі ми визначимо два кадри даних: один із двома викидами, а другий без викидів.

 #create data frame with no outliers
no_outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22),
                          y = c(22, 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41,
                                42, 44))

#create data frame with two outliers
outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22),
                       y = c( 190 , 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41,
                             42, 180 ))

Далі ми створимо діаграму розсіювання, щоб відобразити два кадри даних поруч:

 #create scatterplot for data frame with no outliers
no_outliers_plot <- ggplot(data = no_outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("No Outliers")

#create scatterplot for data frame with outliers
outliers_plot <- ggplot(data = outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("With Outliers")

#plot the two scatterplots side by side
gridExtra::grid.arrange(no_outliers_plot, outliers_plot, ncol=2)

Ми бачимо, як викиди негативно впливають на підгонку лінії регресії на другому графіку.

Щоб визначити впливові точки у другому наборі даних, ми можемо обчислити відстань Кука для кожного спостереження в наборі даних, а потім побудувати ці відстані, щоб побачити, які спостереження перевищують традиційний поріг 4/n:

 #fit the linear regression model to the dataset with outliers
model <- lm(y ~ x, data = outliers)

#find Cook's distance for each observation in the dataset
cooksD <- cooks.distance(model)

# Plot Cook's Distance with a horizontal line at 4/n to see which observations
#exceed this threshold
n <- nrow(outliers)
plot(cooksD, main = "Cooks Distance for Influential Obs")
abline(h = 4/n, lty = 2, col = "steelblue") # add cutoff line

Ми чітко бачимо, що перше й останнє спостереження в наборі даних перевищує поріг 4/n. Таким чином, ми б визначили ці два спостереження як впливові точки даних, які негативно впливають на регресійну модель.

Якщо ми хочемо видалити всі спостереження, які перевищують поріг 4/n, ми можемо зробити це за допомогою такого коду:

 #identify influential points
influential_obs <- as.numeric(names(cooksD)[(cooksD > (4/n))])

#define new data frame with influential points removed
outliers_removed <- outliers[-influential_obs, ]

Потім ми можемо порівняти дві діаграми розсіювання: одна показує лінію регресії з присутніми точками впливу, а інша показує лінію регресії з видаленими точками впливу:

 #create scatterplot with outliers present
outliers_present <- ggplot(data = outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("Outliers Present")

#create scatterplot with outliers removed
outliers_removed <- ggplot(data = outliers_removed, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("Outliers Removed")

#plot both scatterplots side by side
gridExtra::grid.arrange(outliers_present, outliers_removed, ncol = 2)

Ми можемо чітко побачити, наскільки краще лінія регресії відповідає даним, якщо видалити дві впливові точки даних.

Технічні примітки

  • Більшість статистичного програмного забезпечення має можливість легко обчислити відстань Кука для кожного спостереження в наборі даних.
  • Майте на увазі, що відстань Кука — це просто спосіб визначити точки впливу.
  • Існує багато способів роботи з впливовими точками, зокрема: видалення цих точок, заміна цих точок таким значенням, як середнє значення чи медіана, або просто збереження точок у моделі, але уважно враховуючи їх під час звітування про регресію результатів.

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

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