Jak zidentyfikować wpływowe punkty danych na podstawie odległości cooka


Odległość Cooka , często oznaczana jako Di , jest używana w analizie regresji w celu zidentyfikowania wpływowych punktów danych, które mogą negatywnie wpłynąć na model regresji.

Wzór na odległość Cooka to:

re ja = (r ja 2 / p*MSE) * (h ii / (1-h ii ) 2 )

Złoto:

  • r i jest i- resztą
  • p to liczba współczynników w modelu regresji
  • MSE to błąd średniokwadratowy
  • h ii to i- wartość dźwigni

Chociaż wzór wydaje się nieco skomplikowany, dobra wiadomość jest taka, że większość programów statystycznych może z łatwością go obliczyć.

Zasadniczo odległość Cooka robi jedną rzecz: mierzy, jak bardzo zmieniają się wszystkie dopasowane wartości modelu po usunięciu i- tego punktu danych.

Punkt danych o dużej wartości odległości Cooka wskazuje, że ma ona silny wpływ na dopasowane wartości. Ogólna zasada jest taka, że każdy punkt z odległością Cooka większą niż 4/n ( gdzie n to całkowita liczba punktów danych ) jest uważany za punkt odstający.

Należy zauważyć, że odległość Cooka jest często wykorzystywana do identyfikacji wpływowych punktów danych. To, że punkt danych ma wpływ, nie musi koniecznie oznaczać, że należy go usunąć. Najpierw powinieneś sprawdzić, czy punkt danych nie został po prostu błędnie zarejestrowany lub czy jest w nim coś dziwnego, co mogłoby wskazywać na interesujące odkrycie.

Jak obliczyć odległość Cooka w R

Poniższy przykład ilustruje sposób obliczenia odległości Cooka w R.

Najpierw załadujemy dwie biblioteki, które będą nam potrzebne w tym przykładzie:

 library(ggplot2)
library(gridExtra)

Następnie zdefiniujemy dwie ramki danych: jedną z dwoma wartościami odstającymi i jedną bez wartości odstających.

 #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 ))

Następnie utworzymy wykres punktowy, aby wyświetlić dwie ramki danych obok siebie:

 #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)

Widzimy, jak wartości odstające negatywnie wpływają na dopasowanie linii regresji na drugim wykresie.

Aby zidentyfikować wpływowe punkty w drugim zbiorze danych, możemy obliczyć odległość Cooka dla każdej obserwacji w zbiorze danych, a następnie wykreślić te odległości, aby zobaczyć, które obserwacje przekraczają tradycyjny próg 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

Wyraźnie widać, że pierwsza i ostatnia obserwacja w zbiorze danych przekracza próg 4/n. Zatem zidentyfikowalibyśmy te dwie obserwacje jako wpływowe punkty danych, które negatywnie wpływają na model regresji.

Jeśli chcemy usunąć wszystkie obserwacje przekraczające próg 4/n, możemy to zrobić za pomocą następującego kodu:

 #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, ]

Następnie możemy porównać dwa wykresy rozrzutu: jeden pokazuje linię regresji z obecnymi punktami wpływu, a drugi pokazuje linię regresji z usuniętymi punktami wpływu:

 #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)

Możemy wyraźnie zobaczyć, o ile lepiej linia regresji pasuje do danych po usunięciu dwóch wpływowych punktów danych.

Uwagi techniczne

  • Większość programów statystycznych umożliwia łatwe obliczenie odległości Cooka dla każdej obserwacji w zbiorze danych.
  • Należy pamiętać, że Odległość Cooka to po prostu sposób na identyfikację punktów wpływu.
  • Istnieje wiele sposobów radzenia sobie z wpływowymi punktami, w tym: usunięcie tych punktów, zastąpienie ich wartością taką jak średnia lub mediana lub po prostu zachowanie punktów w modelu, ale zwracanie na nie szczególnej uwagi podczas raportowania regresji wyników.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *