So entfernen Sie Ausreißer in R

Von Fabian
Kategorie: R
Lesezeit: 5 Minuten

Ein Ausreißer ist eine Beobachtung, die ungewöhnlich weit von anderen Werten in einem Datensatz entfernt ist. Ausreißer können problematisch sein, da sie die Ergebnisse einer Analyse beeinflussen können.

In diesem Tutorial wird erläutert, wie Sie Ausreißer in R identifizieren und entfernen.

So identifizieren Sie Ausreißer in R

Bevor Sie Ausreißer entfernen können, müssen Sie zunächst entscheiden, was Sie als Ausreißer betrachten. Es gibt zwei Möglichkeiten, dies zu tun:

1. Verwenden Sie den Interquartilsabstand.

Der Interquartilsabstand (IQR) ist die Differenz zwischen dem 75. Perzentil (Q3) und dem 25. Perzentil (Q1) in einem Datensatz. Es misst die Streuung der mittleren 50% der Werte.

Sie können eine Beobachtung als Ausreißer definieren, wenn sie das 1,5-fache des Interquartilsabstands größer als das dritte Quartil (Q3) oder das 1,5-fache des Interquartilsabstands kleiner als das erste Quartil (Q1) ist.

Ausreißer = Beobachtungen> Q3 + 1,5 * IQR oder <Q1 - 1,5 * IQR

2. Verwenden Sie Z-Scores.

Ein Z-Score gibt an, wie viele Standardabweichungen ein bestimmter Wert vom Mittelwert aufweist. Wir verwenden die folgende Formel, um einen Z-Score zu berechnen:

z = (X - μ) / σ

wo:

  • X ist ein einzelner Rohdatenwert
  • μ ist der Populationsmittelwert
  • σ ist die Populationsstandardabweichung

Sie können eine Beobachtung als Ausreißer definieren, wenn sie einen Z-Score von weniger als -3 oder mehr als 3 aufweist.

Ausreißer = Beobachtungen mit Z-Scores > 3 oder < -3

So entfernen Sie Ausreißer in R

Sobald Sie sich für einen Ausreißer entschieden haben, können Sie diese identifizieren und aus einem Datensatz entfernen. Um dies zu veranschaulichen, verwenden wir das folgende Dataframe:

#Machen Sie dieses Beispiel reproduzierbar 
set.seed(0)

#Dataframe mit drei Spalten A ',' B ',' C 'erstellen 
df <- data.frame(A=rnorm(1000, mean=10, sd=3),
                 B=rnorm(1000, mean=20, sd=3),
                 C=rnorm(1000, mean=30, sd=3))

#Die ersten sechs Zeilen des Dataframes anzeigen
head(df)
         A        B        C
1 13.78886 19.13945 31.33304
2  9.02130 25.52332 30.03579
3 13.98940 19.52971 29.97216
4 13.81729 15.83059 29.09287
5 11.24392 15.58069 31.47707
6  5.38015 19.79144 28.19184

Wir können dann Ausreißer mithilfe der Z-Score-Methode oder der Interquartilsabstandsmethode definieren und entfernen:

Z-Score-Methode:

Der folgende Code zeigt, wie der Z-Score jedes Werts in jeder Spalte im Dataframe berechnet und dann Zeilen mit mindestens einem Z-Score mit einem Absolutwert größer als 3 entfernt werden:

#Finden Sie den absoluten Wert des Z-Scores für jeden Wert in jeder Spalte
z_scores <- as.data.frame(sapply(df, function(df) (abs(df-mean(df))/sd(df))))

#Die ersten sechs Zeilen des z_scores-Dataframes anzeigen
head(z_scores)

          A          B          C
1 1.2813403 0.25350805 0.39419878
2 0.3110243 1.80496734 0.05890232
3 1.3483190 0.12766847 0.08112630
4 1.2908343 1.32044506 0.38824414
5 0.4313316 1.40102642 0.44450451
6 1.5271674 0.04327186 0.70295309

#Halten Sie nur Zeilen im Dataframe, wobei alle Z-Scores kleiner als der absolute Wert 3 sind 
no_outliers <- z_scores[!rowSums(z_scores>3), ]

#Anzahl der Zeilen und Spalten des neuen Dataframes anzeigen
dim(no_outliers)

[1] 994    3

Das ursprüngliche Dataframe hatte 1.000 Zeilen und 3 Spalten. Das neue Dataframe hat 994 Zeilen und 3 Spalten, was besagt, dass 6 Zeilen entfernt wurden, weil sie mindestens einen Z-Score mit einem Absolutwert größer als 3 in einer ihrer Spalten hatten.

Interquartilsabstandsmethode:

In einigen Fällen sind wir möglicherweise nur daran interessiert, Ausreißer in einer Spalte eines Dataframes zu identifizieren. Angenommen, wir möchten nur Zeilen entfernen, die einen Ausreißer in Spalte 'A' unseres Dataframes haben.

Der folgende Code zeigt, wie Zeilen aus dem Dataframe entfernt werden, deren Wert in Spalte 'A' das 1,5-fache des Interquartilsabstands größer als das dritte Quartil (Q3) oder das 1,5-fache des Interquartilsabstands kleiner als das erste Quartil (Q1) beträgt.

#Finden Sie Q1, Q3 und den Interquartilsabstand für Werte in Spalte A.
Q1 <- quantile(df$A, .25)
Q3 <- quantile(df$A, .75)
IQR <- IQR(df$A)

# Behalten Sie nur Zeilen im Dataframe bei, deren Werte innerhalb von 1,5 * IQR von Q1 und Q3 liegen
no_outliers <- subset(df, df$A> (Q1 - 1.5*IQR) & df$A< (Q3 + 1.5*IQR))

# Anzahl der Zeilen und Spalten des neuen Dataframes anzeigen
dim(no_outliers) 

[1] 994   3

Das ursprüngliche Dataframe hatte 1.000 Zeilen und 3 Spalten. Das neue Dataframe enthält 994 Zeilen und 3 Spalten. Dies zeigt, dass 6 Zeilen entfernt wurden, weil sie mindestens einen Ausreißer in Spalte A hatten.

Wann werden Ausreißer entfernt?

Wenn ein oder mehrere Ausreißer vorhanden sind, sollten Sie zunächst überprüfen, ob sie nicht auf einen Dateneingabefehler zurückzuführen sind. Manchmal gibt eine Person beim Aufzeichnen von Daten einfach den falschen Datenwert ein.

Wenn sich herausstellt, dass der Ausreißer auf einen Dateneingabefehler zurückzuführen ist, können Sie ihm einen neuen Wert zuweisen, z. B. den Mittelwert oder den Median des Datensatzes.

Wenn der Wert ein echter Ausreißer ist, können Sie ihn entfernen, wenn er erhebliche Auswirkungen auf Ihre Gesamtanalyse hat. Stellen Sie einfach sicher, dass Sie in Ihrem Abschlussbericht oder Ihrer Analyse erwähnen, dass Sie einen Ausreißer entfernt haben.

Zusätzliche Ressourcen

In diesem Tutorial haben wir rnorm() verwendet, um Vektoren normalverteilter Zufallsvariablen mit einer Vektorlänge n, einem Populationsmittelwert μ und einer Populationsstandardabweichung σ zu generieren. Weitere Informationen zu dieser Funktion finden Sie hier.

Wir haben auch sapply() verwendet, um eine Funktion auf jede Spalte in einem Dataframe anzuwenden, der die Z-Scores berechnet. Weitere Informationen zu dieser Funktion finden Sie hier.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: