So identifizieren sie einflussreiche datenpunkte mithilfe der cook-distanz


Die Cook-Distanz , oft als D i bezeichnet, wird in der Regressionsanalyse verwendet, um einflussreiche Datenpunkte zu identifizieren, die sich negativ auf Ihr Regressionsmodell auswirken können.

Die Formel für die Cook-Distanz lautet:

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

Gold:

  • r i ist der i -te Rest
  • p ist die Anzahl der Koeffizienten im Regressionsmodell
  • MSE ist der mittlere quadratische Fehler
  • h ii ist der i-te Hebelwert

Auch wenn die Formel etwas kompliziert erscheint, ist die gute Nachricht, dass die meisten Statistikprogramme sie problemlos für Sie berechnen können.

Im Wesentlichen bewirkt die Cook-Distanz eines: Sie misst, wie stark sich alle angepassten Werte des Modells ändern, wenn der i- te Datenpunkt entfernt wird.

Ein Datenpunkt mit einem hohen Wert für die Cook-Distanz weist darauf hin, dass er die angepassten Werte stark beeinflusst. Als allgemeine Regel gilt, dass jeder Punkt mit einer Cook-Distanz von mehr als 4/n ( wobei n die Gesamtzahl der Datenpunkte ist ) als Ausreißer betrachtet wird.

Es ist wichtig zu beachten, dass die Cook-Distanz häufig zur Identifizierung einflussreicher Datenpunkte verwendet wird. Nur weil ein Datenpunkt einflussreich ist, heißt das nicht unbedingt, dass er entfernt werden sollte. Sie sollten zunächst prüfen, ob der Datenpunkt einfach falsch erfasst wurde oder ob an dem Datenpunkt etwas Merkwürdiges ist, das auf einen interessanten Befund hinweisen könnte.

So berechnen Sie die Cook-Distanz in R

Das folgende Beispiel veranschaulicht, wie die Cook-Distanz in R berechnet wird.

Zuerst laden wir zwei Bibliotheken, die wir für dieses Beispiel benötigen:

 library(ggplot2)
library(gridExtra)

Als Nächstes definieren wir zwei Datenrahmen: einen mit zwei Ausreißern und einen ohne Ausreißer.

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

Als Nächstes erstellen wir ein Streudiagramm, um die beiden Datenrahmen nebeneinander anzuzeigen:

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

Im zweiten Diagramm können wir sehen, wie Ausreißer die Anpassung der Regressionsgeraden negativ beeinflussen.

Um einflussreiche Punkte im zweiten Datensatz zu identifizieren, können wir die Cook-Distanz für jede Beobachtung im Datensatz berechnen und diese Distanzen dann grafisch darstellen, um zu sehen, welche Beobachtungen über dem traditionellen Schwellenwert von 4/n liegen:

 #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

Wir können deutlich erkennen, dass die erste und letzte Beobachtung im Datensatz den 4/n-Schwellenwert überschreiten. Daher würden wir diese beiden Beobachtungen als einflussreiche Datenpunkte identifizieren, die sich negativ auf das Regressionsmodell auswirken.

Wenn wir alle Beobachtungen entfernen möchten, die den 4/n-Schwellenwert überschreiten, können wir dies mit dem folgenden Code tun:

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

Dann können wir zwei Streudiagramme vergleichen: eines zeigt die Regressionslinie mit den vorhandenen Einflusspunkten und das andere zeigt die Regressionslinie mit den entfernten Einflusspunkten:

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

Wir können deutlich erkennen, wie viel besser die Regressionslinie zu den Daten passt, wenn die beiden einflussreichen Datenpunkte entfernt werden.

Technische Hinweise

  • Die meisten Statistikprogramme bieten die Möglichkeit, die Cook-Distanz für jede Beobachtung in einem Datensatz einfach zu berechnen.
  • Bedenken Sie, dass die Cook-Distanz lediglich eine Möglichkeit ist, Einflusspunkte zu identifizieren .
  • Es gibt viele Möglichkeiten, mit einflussreichen Punkten umzugehen , darunter: Entfernen dieser Punkte, Ersetzen dieser Punkte durch einen Wert wie den Mittelwert oder Median oder einfach das Beibehalten der Punkte im Modell, aber sorgfältiges Notieren bei der Meldung der Ergebnisregression.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert