So entfernen sie ausreißer in r
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 gängige Methoden, dies zu tun:
1. Nutzen Sie den Interquartilbereich.
Der Interquartilbereich (IQR) ist die Differenz zwischen dem 75. Perzentil (Q3) und dem 25. Perzentil (Q1) in einem Datensatz. Es misst die Verteilung der durchschnittlichen 50 % der Werte.
Sie können eine Beobachtung als Ausreißer definieren, wenn sie das 1,5-fache des Interquartilbereichs über dem dritten Quartil (Q3) oder das 1,5-fache des Interquartilbereichs unter dem ersten Quartil (Q1) beträgt.
Ausreißer = Beobachtungen > Q3 + 1,5*IQR oder < Q1 – 1,5*IQR
2. Verwenden Sie Z-Scores.
Ein Z-Score sagt Ihnen, wie viele Standardabweichungen ein bestimmter Wert vom Mittelwert hat. Wir verwenden die folgende Formel, um einen Z-Score zu berechnen:
z = (X – μ) / σ
Gold:
- X ist ein einzelner Rohdatenwert
- μ ist der Bevölkerungsmittelwert
- σ ist die Populationsstandardabweichung
Sie können eine Beobachtung als Ausreißer definieren, wenn ihr Z-Score kleiner als -3 oder größer als 3 ist.
Ausreißer = Beobachtungen mit Z-Scores > 3 oder < -3
So entfernen Sie Ausreißer in R
Sobald Sie entschieden haben, was Sie als Ausreißer betrachten, können Sie diese identifizieren und aus einem Datensatz entfernen. Um dies zu veranschaulichen, verwenden wir den folgenden Datenrahmen:
#make this example reproducible set.seed(0) #create data frame with three columns A', 'B', 'C' df <- data.frame(A=rnorm(1000, mean=10, sd=3), B=rnorm(1000, mean=20, sd=3), C=rnorm(1000, mean=30, sd=3)) #view first six rows of data frame head(df) ABC 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
Anschließend können wir Ausreißer mithilfe der Z-Score-Methode oder der Interquartilbereichsmethode definieren und entfernen:
Z-Score-Methode:
Der folgende Code zeigt, wie der Z-Score jedes Werts in jeder Spalte des Datenrahmens berechnet und dann die Zeilen entfernt werden, die mindestens einen Z-Score mit einem absoluten Wert größer als 3 haben:
#find absolute value of z-score for each value in each column z_scores <- as.data.frame (sapply(df, function(df) (abs(df-mean(df))/sd(df)))) #view first six rows of z_scores data frame head(z_scores) ABC 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 #only keep rows in dataframe with all z-scores less than absolute value of 3 no_outliers <- z_scores[!rowSums(z_scores>3), ] #view row and column count of new data frame dim(no_outliers) [1] 994 3
Der ursprüngliche Datenrahmen hatte 1000 Zeilen und 3 Spalten. Der neue Datenrahmen hat 994 Zeilen und 3 Spalten, was uns sagt, dass 6 Zeilen entfernt wurden, weil sie in einer ihrer Spalten mindestens einen Z-Score mit einem absoluten Wert größer als 3 hatten.
Interquartilbereichsmethode:
In manchen Fällen möchten wir möglicherweise nur Ausreißer in einer Spalte eines Datenrahmens identifizieren. Nehmen wir zum Beispiel an, wir möchten nur Zeilen mit einem Ausreißer in Spalte „A“ unseres Datenrahmens entfernen.
Der folgende Code zeigt, wie Zeilen aus dem Datenrahmen entfernt werden, deren Wert in Spalte „A“ das 1,5-fache des Interquartilbereichs oberhalb des dritten Quartils (Q3) oder das 1,5-fache des Interquartilbereichs unterhalb des ersten Quartils (Q1) beträgt. .
#find Q1, Q3, and interquartile range for values in column A Q1 <- quantile(df$A, .25) Q3 <- quantile(df$A, .75) IQR <- IQR(df$A) #only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3 no_outliers <- subset(df, df$A> (Q1 - 1.5*IQR) & df$A< (Q3 + 1.5*IQR)) #view row and column count of new data frame dim(no_outliers) [1] 994 3
Der ursprüngliche Datenrahmen hatte 1000 Zeilen und 3 Spalten. Der neue Datenrahmen hat 994 Zeilen und 3 Spalten, was uns sagt, dass 6 Zeilen entfernt wurden, weil sie mindestens einen Ausreißer in Spalte A enthielten.
Wann Ausreißer entfernt werden sollten
Wenn ein oder mehrere Ausreißer vorhanden sind, müssen Sie zunächst sicherstellen, dass diese nicht auf einen Dateneingabefehler zurückzuführen sind. Manchmal gibt eine Person beim Speichern der Daten einfach den falschen Datenwert ein.
Wenn sich herausstellt, dass der Ausreißer das Ergebnis eines Dateneingabefehlers ist, können Sie ihm einen neuen Wert zuweisen, beispielsweise den Mittelwert oder Median des Datensatzes.
Wenn der Wert wirklich ein Ausreißer ist, können Sie ihn entfernen, wenn er erhebliche Auswirkungen auf Ihre Gesamtanalyse hat. Erwähnen Sie in Ihrem Abschlussbericht oder Ihrer Analyse unbedingt, 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 auf jede Spalte in einem Datenrahmen eine Funktion anzuwenden, die Z-Scores berechnet. Weitere Informationen zu dieser Funktion finden Sie hier .