Mam kilka wielowymiarowych danych dotyczących urody w zależności od wieku. Wiek waha się od 20 do 40 w odstępach 2 (20, 22, 24 ... 40), a dla każdego rekordu danych otrzymuje się wiek i ocenę urody od 1 do 5. Kiedy robię wykresy pudełkowe tych danych (wiek na osi X, oceny urody na osi Y), poza wąsami każdego pudełka wykreślono pewne wartości odstające.
Chcę usunąć te wartości odstające z samej ramki danych, ale nie jestem pewien, jak R oblicza wartości odstające dla swoich wykresów pudełkowych. Poniżej znajduje się przykład tego, jak mogą wyglądać moje dane.
r
statistics
outliers
Dan Q
źródło
źródło
boxplot
Zwraca odstających (między innymi statystykami) niewidocznie. Spróbujfoo <- boxplot(...); foo
i przeczytaj,?boxplot
aby zrozumieć wynik.Odpowiedzi:
OK, powinieneś zastosować coś takiego do swojego zbioru danych. Nie wymieniaj i nie zapisuj, bo zniszczysz swoje dane! I przy okazji, nie powinieneś (prawie) nigdy usuwać wartości odstających ze swoich danych:
Aby zobaczyć to w akcji:
I jeszcze raz, nigdy nie powinieneś tego robić samodzielnie, wartości odstające po prostu powinny być! =)
EDYCJA: dodałem
na.rm = TRUE
jako domyślny.EDIT2: Usunięto
quantile
funkcję, dodano indeksowanie, dzięki czemu funkcja jest szybsza! =)źródło
boxplot
. To wykonalne i powinieneś wtedy zaznaczyć odpowiedź @ Prasad, ponieważ odpowiedziałeś na twoje pytanie. Jeśli chcesz wykluczyć wartości odstające za pomocą „reguły odstających”q +/- (1.5 * H)
, przeprowadź analizę, a następnie użyj tej funkcji. Swoją drogą, zrobiłem to od zera, bez Google, więc jest szansa, że wymyśliłem koło z tą moją funkcją ...Nikt nie opublikował najprostszej odpowiedzi:
Zobacz także: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/
źródło
result = x[!x %in% boxplot.stats(x)$out]
Użyj
outline = FALSE
jako opcji podczas wykonywania wykresu pudełkowego (przeczytaj pomoc!).źródło
out
igroup
na liście).Funkcja boxplot zwraca wartości użyte do wykreślenia (co jest następnie wykonywane przez bxp ():
Celowo nie odpowiedziałem na konkretne pytanie, ponieważ uważam, że usuwanie „wartości odstających” jest statystycznym błędem w sztuce. Uważam za dopuszczalną praktykę, aby nie wykreślić ich na wykresie pudełkowym, ale usunięcie ich tylko dlatego, że przekraczają pewną liczbę odchyleń standardowych lub pewną liczbę szerokości między kwartylami jest systematycznym i nienaukowym manipulowaniem zapisem obserwacyjnym.
źródło
Wyszukałem pakiety związane z usuwaniem wartości odstających i znalazłem ten pakiet (zaskakująco nazywany „wartościami odstającymi”!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf
jeśli przejrzysz go, zobacz różne sposoby usuwania wartości odstających, a wśród nich znalazłem
rm.outlier
najwygodniejszy w użyciu i jak jest napisane w linku powyżej: „Jeśli wartość odstająca zostanie wykryta i potwierdzona przez testy statystyczne, ta funkcja może ją usunąć lub zastąpić średnią lub medianą z próby” a także tutaj jest część dotycząca użytkowania z tego samego źródła:„ Użycie
Argumenty
x zbiór danych, najczęściej wektor. Jeśli argument jest ramką danych, to wartość odstająca jest usuwana z każdej kolumny przez sapply. To samo zachowanie jest stosowane przez zastosowanie, gdy podana jest macierz.
wypełnienie Jeśli ustawione na PRAWDA, zamiast wartości odstającej umieszczana jest mediana lub średnia. W przeciwnym razie wartości odstające są po prostu usuwane.
mediana Jeśli jest ustawiona na PRAWDA, w zastępowaniu wartości odstających używana jest mediana zamiast średniej. przeciwnie, jeśli ustawione na PRAWDA, daje przeciwną wartość (jeśli największa wartość ma maksymalną różnicę od średniej, daje najmniejszą i odwrotnie) "
źródło
Uważam, że jest to bardzo łatwe do usunięcia wartości odstających. W powyższym przykładzie po prostu wyodrębniam 2 percentyl do 98 percentyla wartości atrybutów.
źródło
Nie:
wykonać to zadanie dość łatwo?
źródło
Dodając do sugestii @sefarkas i używając kwantyla jako odcięcia, można zbadać następującą opcję:
Spowoduje to usunięcie punktów poza 99. kwantylem. Należy uważać, tak jak mówiła aL3Xa o utrzymywaniu wartości odstających. Należy go usunąć tylko w celu uzyskania alternatywnego, konserwatywnego spojrzenia na dane.
źródło
0.91
czy0.99
? jak wmydata$var < quantile(mydata$var, probs=c(.01, .91))[1])
ormydata$var < quantile(mydata$var, probs=c(.01, .99))[1])
Jednym ze sposobów na to jest
lub
źródło
Wartości odstające są dość podobne do pików, więc detektor pików może być przydatny do identyfikowania wartości odstających. Opisana tutaj metoda ma całkiem dobre wyniki przy użyciu wyników z-score. Animacja na dole strony ilustruje metodę sygnalizacji wartości odstających lub wartości szczytowych.
Piki nie zawsze są takie same jak wartości odstające, ale często są podobne.
Oto przykład: ten zestaw danych jest odczytywany z czujnika za pośrednictwem komunikacji szeregowej. Sporadyczne błędy komunikacji szeregowej, błąd czujnika lub oba te czynniki prowadzą do powtarzających się, wyraźnie błędnych punktów danych. W tym punkcie nie ma wartości statystycznej. Prawdopodobnie nie są to wartości odstające, są to błędy. Detektor pików z-score był w stanie zasygnalizować fałszywe punkty danych i wygenerował czysty wynikowy zestaw danych:
źródło
Spróbuj tego. Wprowadź zmienną do funkcji i zapisz o / p w zmiennej, która zawierałaby usunięte wartości odstające
źródło