Jak usunąć wartości odstające w r


Wartość odstająca to obserwacja, która jest nienormalnie odległa od innych wartości w zbiorze danych. Wartości odstające mogą być problematyczne, ponieważ mogą wpływać na wyniki analizy.

W tym samouczku wyjaśniono, jak identyfikować i usuwać wartości odstające w języku R.

Jak zidentyfikować wartości odstające w R

Zanim będziesz mógł usunąć wartości odstające, musisz najpierw zdecydować, co uważasz za wartość odstającą. Można to zrobić na dwa typowe sposoby:

1. Skorzystaj z rozstępu międzykwartylowego.

Rozstęp międzykwartylowy (IQR) to różnica między 75. percentylem (Q3) a 25. percentylem (Q1) w zbiorze danych. Mierzy rozkład średnich 50% wartości.

Można zdefiniować obserwację jako wartość odstającą, jeśli jest 1,5-krotnością rozstępu międzykwartylowego powyżej trzeciego kwartyla (Q3) lub 1,5-krotności rozstępu międzykwartylowego poniżej pierwszego kwartyla (Q1).

Wartości odstające = obserwacje > Q3 + 1,5*IQR lub < Q1 – 1,5*IQR

2. Użyj wyników Z.

Wynik z informuje, o ile odchyleń standardowych dana wartość znajduje się od średniej. Do obliczenia wskaźnika Z używamy następującego wzoru:

z = (X – μ) / σ

Złoto:

  • X to pojedyncza surowa wartość danych
  • μ to średnia populacji
  • σ jest odchyleniem standardowym populacji

Można zdefiniować obserwację jako wartość odstającą, jeśli jej wynik z jest mniejszy niż -3 lub większy niż 3.

Wartości odstające = obserwacje z wynikami Z > 3 lub < -3

Jak usunąć wartości odstające w R

Kiedy już zdecydujesz, co uważasz za wartość odstającą, możesz zidentyfikować i usunąć je ze zbioru danych. Aby zilustrować, jak to zrobić, użyjemy następującej ramki danych:

 #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

Następnie możemy zdefiniować i usunąć wartości odstające, korzystając z metody z-score lub metody rozstępów międzykwartylowych:

Metoda Z-score:

Poniższy kod pokazuje, jak obliczyć wynik z każdej wartości w każdej kolumnie ramki danych, a następnie usunąć wiersze, które mają co najmniej jeden wynik z o wartości bezwzględnej większej niż 3:

 #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

Oryginalna ramka danych miała 1000 wierszy i 3 kolumny. Nowa ramka danych ma 994 wiersze i 3 kolumny, co oznacza, że usunięto 6 wierszy, ponieważ w jednej z kolumn znajdował się co najmniej jeden wynik Z o wartości bezwzględnej większej niż 3.

Metoda rozstępów międzykwartylowych:

W niektórych przypadkach możemy chcieć jedynie zidentyfikować wartości odstające w kolumnie ramki danych. Załóżmy na przykład, że chcemy usunąć tylko wiersze z wartością odstającą w kolumnie „A” naszej ramki danych.

Poniższy kod pokazuje, jak usunąć wiersze z ramki danych, których wartość w kolumnie „A” jest 1,5-krotnością rozstępu międzykwartylowego powyżej trzeciego kwartyla (Q3) lub 1,5-krotnością rozstępu międzykwartylowego poniżej pierwszego kwartyla (Q1). .

 #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

Oryginalna ramka danych miała 1000 wierszy i 3 kolumny. Nowa ramka danych ma 994 wiersze i 3 kolumny, co oznacza, że usunięto 6 wierszy, ponieważ w kolumnie A znajdowała się co najmniej jedna wartość odstająca.

Kiedy usunąć wartości odstające

Jeśli występuje co najmniej jedna wartość odstająca, należy najpierw sprawdzić, czy nie jest ona wynikiem błędu we wprowadzaniu danych. Czasami osoba po prostu wprowadza niewłaściwą wartość danych podczas zapisywania danych.

Jeśli okaże się, że wartość odstająca wynika z błędu we wprowadzaniu danych, możesz zdecydować się na przypisanie jej nowej wartości, takiej jak średnia lub mediana zbioru danych.

Jeśli wartość rzeczywiście odbiega od normy, możesz ją usunąć, jeśli będzie miała znaczący wpływ na ogólną analizę. Pamiętaj tylko, aby wspomnieć w raporcie końcowym lub analizie, że usunąłeś wartość odstającą.

Dodatkowe zasoby

W tym samouczku użyliśmy funkcji rnorm() do wygenerowania wektorów zmiennych losowych o rozkładzie normalnym, mając długość wektora n , średnią populacji μ i odchylenie standardowe populacji σ . Więcej informacji na temat tej funkcji można znaleźć tutaj .

Użyliśmy również funkcji sapply() do zastosowania funkcji do każdej kolumny w ramce danych, która obliczała współczynniki Z. Więcej informacji na temat tej funkcji można znaleźć tutaj .

Dodaj komentarz

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