Wykrywanie wartości odstających w danych zliczania

21

Mam coś, co naiwnie uważałem za dość prosty problem, który polega na wykrywaniu wartości odstających dla wielu różnych zestawów danych zliczania. W szczególności chcę ustalić, czy jedna lub więcej wartości w serii danych zliczania jest wyższa lub niższa niż oczekiwano w stosunku do reszty zliczeń w rozkładzie.

Czynnikiem zakłócającym jest to, że muszę to zrobić dla 3500 rozkładów i prawdopodobnie niektóre z nich będą pasowały do ​​nadciśnionego rozproszenia zerowego, podczas gdy inne najlepiej pasują do dwumianu ujemnego lub ZINB, podczas gdy inne mogą być normalnie rozłożone. Z tego powodu proste wyniki Z lub wykreślanie rozkładu nie są odpowiednie dla większości zestawu danych. Oto przykład danych zliczania, dla których chcę wykryć wartości odstające.

counts1=[1 1 1 0 2 1 1 0 0 1 1 1 1 1 0 0 0 0 1 2 1 1 2 1 1 1 1 0 0 1 0 1 1 1 1 0 
         0 0 0 0 1 2 1 1 1 1 1 1 0 1 1 2 0 0 0 1 0 1 2 1 1 0 2 1 1 1 0 0 1 0 0 0 
         2 0 1 1 0 2 1 0 1 1 0 0 2 1 0 1 1 1 1 2 0 3]
counts2=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 
         1 1 0 0 0]
counts3=[14 13 14 14 14 14 13 14 14 14 14 14 15 14 14 14 14 14 14 15 14 13 14 14 
         15 12 13 17 13 14 14 14 14 15 14 14 13 14 13 14 14 14 14 13 14 14 14 15 
         15 14 14 14 14 14 15 14 1414 14 15 14 14 14 14 14 14 14 14 14 14 14 14 13 16]
counts4=[0 3 1.......]
and so on up to counts3500.

Początkowo myślałem, że będę musiał napisać pętlę w Pythonie lub R, która zastosuje zestaw modeli do każdej dystrybucji i wybierze model najlepiej dopasowany do AIC lub innego (może fitdistrplus w R?). Mógłbym wtedy zapytać, jakie były skrajności dla danego rozkładu (liczby, które wypadają w ogonach, np. Czy liczba „4” byłaby wartością odstającą w powyższym rozkładzie liczba)? Nie jestem jednak pewien, czy jest to ważna strategia i przyszło mi do głowy, że może istnieć prosta metodologia określania wartości odstających w danych liczbowych, o których nie wiedziałam. Szukałem szeroko i nie znalazłem nic, co wydaje się odpowiednie dla mojego problemu, biorąc pod uwagę liczbę dystrybucji, na które chcę spojrzeć.

Moim ostatecznym celem jest wykrycie znacznych wzrostów lub spadków zliczeń dla każdego rozkładu zliczeń, przy użyciu najbardziej odpowiedniej statystycznie metodologii.

Joe Gomphus
źródło

Odpowiedzi:

23

Nie można użyć odległości obserwacji od klasycznego dopasowania danych, aby niezawodnie wykryć wartości odstające, ponieważ zastosowana procedura dopasowania może zostać pociągnięta w kierunku wartości odstających (nazywa się to efektem maskowania). Jednym prostym sposobem na niezawodne wykrywanie wartości odstających jest użycie zaproponowanej przez ciebie ogólnej koncepcji (odległość od dopasowania), ale zastąpienie klasycznych estymatorów solidnymi, znacznie mniej podatnymi na zachwianie się przez wartości odstające. Poniżej przedstawiam ogólną ilustrację pomysłu, a następnie omawiam rozwiązanie konkretnego problemu.

Ilustracja: rozważ następujące 20 obserwacji zaczerpniętych z (w zaokrągleniu do drugiej cyfry):N(0,1)

x<-c(-2.21,-1.84,-.95,-.91,-.36,-.19,-.11,-.1,.18,
.3,.31,.43,.51,.64,.67,.72,1.22,1.35,8.1,17.6)

(ostatnie dwa naprawdę powinny być 0,81 i 1,76, ale zostały przypadkowo źle wpisane).

Korzystanie z reguły wykrywania wartości odstających opartej na porównaniu statystyki

|xiave(xi)|sd(xi)

do kwantyli rozkładu normalnego nigdy nie doprowadziłoby cię do podejrzenia, że ​​8.1 jest wartością odstającą, co doprowadziłoby cię do oszacowania „przyciętego” szeregu na 2 (dla porównania surowe, np. nieprzygotowane, oszacowanie to 4,35).sdsdsd

Czy zamiast tego użyłeś solidnej statystyki:

|ximed(xi)|mad(xi)

i porównując powstałe solidne wyniki z kwantylami normy, poprawnie oznaczyłbyś dwie ostatnie obserwacje jako wartości odstające (i poprawnie oszacowałeś przyciętej serii na 0,96).sdzsd

(w trosce o kompletność powinienem zauważyć , że niektórzy ludzie, nawet w tym wieku i dniu, wolą trzymać surowe - niepotwierdzone - oszacowanie na 4,35 zamiast korzystać z bardziej precyzyjnych oszacowań opartych na przycinaniu, ale jest to dla mnie niezrozumiałe )

W przypadku innych dystrybucji sytuacja nie różni się tak bardzo, że musisz najpierw dokonać wstępnej transformacji danych. Na przykład w twoim przypadku:

Załóżmy, że to oryginalne dane zliczania. Jedną sztuczką jest użycie transformacji:X

Y=2X

i aby wykluczyć obserwację jako wartość odstającą, jeśli (ta zasada nie jest symetryczna, a ja z jednej strony będę bardzo ostrożny, aby wykluczyć obserwacje z lewego „ogona” zmiennej zliczającej zgodnie z próg oparty na danych. Negatywne obserwacje, oczywiście, powinny być całkiem bezpieczne do usunięcia)Y>med(Y)+3)

Jest to oparte na pomyśle, że jeśli jest poissonem, to wtedyX

YN.(med(Y),1)

To przybliżenie działa dość dobrze w przypadku danych rozproszonych poissona, gdy (parametr rozkładu poissona) jest większy niż 3.λ

Gdy jest mniejsza niż 3 (lub gdy model rządzący rozkładem większości danych ma tryb bliższy 0 niż poissona , jak w np. ZVB rv), aproksymacja ma tendencję do błędu po stronie konserwatywnej (odrzucaj mniej danych jako wartości odstające).λ = 3λλ=3)

Aby zobaczyć, dlaczego uważa się to za „konserwatywne”, należy wziąć pod uwagę, że na granicy (gdy dane są dwumianowe z bardzo małym ) żadna obserwacja nigdy nie zostanie oznaczona jako odstająca od tej reguły i właśnie takiego zachowania chcemy: spowodować maskowanie, wartości odstające muszą być w stanie doprowadzić dowolne parametry szacunkowe daleko od ich prawdziwych wartości. Gdy dane są pobierane z dystrybucji z ograniczoną obsługą (taką jak dwumianowa), to po prostu nie może się zdarzyć ...p

użytkownik603
źródło