Próbuję oddzielić dwie grupy wartości od jednego zestawu danych. Mogę założyć, że jedna z populacji jest normalnie rozmieszczona i ma co najmniej połowę wielkości próbki. Wartości drugiego są zarówno niższe, jak i wyższe niż wartości pierwszego (rozkład jest nieznany). Staram się znaleźć górne i dolne granice, które obejmowałyby normalnie rozłożoną populację od drugiej.
Moje założenie zapewnia mi punkt wyjścia:
- wszystkie punkty w zakresie międzykwartylowym próbki pochodzą z populacji normalnie rozmieszczonej.
Próbuję przetestować pod kątem wartości odstających, pobierając je z reszty próbki, dopóki nie zmieszczą się w 3 st.dev normalnie rozłożonej populacji. Co nie jest idealne, ale wydaje się, że daje wystarczająco rozsądny wynik.
Czy moje założenie jest uzasadnione statystycznie? Jaki byłby lepszy sposób na to?
ps proszę naprawić tagi kogoś.
źródło
Odpowiedzi:
Jeśli dobrze rozumiem, możesz po prostu dopasować do danych mieszaninę dwóch normalnych. Dostępnych jest wiele pakietów R. W tym przykładzie użyto pakietu mixtools :
To daje:
Mieszanka dwóch normalnych http://img294.imageshack.us/img294/4213/kernal.jpg
Pakiet zawiera również bardziej wyrafinowane metody - sprawdź dokumentację.
źródło
źródło
Zakłada się, że nawet nie wiesz, czy druga dystrybucja jest normalna, czy nie; Zasadniczo radzę sobie z tą niepewnością, koncentrując się tylko na rozkładzie normalnym. To może być najlepsze podejście.
Jeśli możesz założyć, że dwie populacje są całkowicie oddzielone (tj. Wszystkie wartości z rozkładu A są mniejsze niż wszystkie wartości z rozkładu B), wówczas jednym z podejść jest użycie funkcji optimize () w R do wyszukania punktu przerwania, który daje oszacowania średniej i sd rozkładu normalnego, które sprawiają, że dane są najbardziej prawdopodobne:
Jeśli nie możesz założyć całkowitego rozdzielenia, myślę, że będziesz musiał założyć rozkład dla drugiego rozkładu, a następnie użyć modelowania mieszanki. Zauważ, że modelowanie mieszaniny nie będzie właściwie oznaczać poszczególnych punktów danych, ale da ci proporcję mieszaniny i oszacowanie parametrów każdego rozkładu (np. Średnia, sd, itp.).
źródło
optimize
jak rozumiem, wymaga dwóch dystrybucji obok siebie. W moim przypadku jedno jest w drugim, tzn. Wartości z drugiej populacji znajdują się po obu stronach limitów.Dziwię się, że nikt nie zasugerował oczywistego rozwiązania:
Teraz wyjaśnienie:
ltsReg
funkcja w pakiecierobustbase
, gdy zostanie wywołana z opcjądaje jednowymiarowe (dokładne) wagi MCD. (są to wagi n-wektor 0-1 przechowywane w
$raw.weights
obiekcie. Algorytmem do ich identyfikacji jest estymator MCD (1)).W skrócie, wagi te wynoszą 1 dla członków podzbioru najbardziej skoncentrowanych obserwacji.h = ⌈ ( n + 2 ) / 2 ⌉
W jednym wymiarze, zaczyna się przez sortowanie wszystkie obserwacje następnie oblicza miarę stycznymi podzbiorów obserwacji: oznaczający wprowadzenie wektora sortowanych obserwacji, to oblicza miarę ( np. następnie i tak dalej ... ) zachowuje ten o mniejszej miary.x ( i ) i T h ( x ( 1 ) , . . . , x ( h + 1 ) ) ( x ( 2 ) , . . . , x ( H + 2 ) )h x( i ) jat godz
(x(1),...,x(h+1)) (x(2),...,x(h+2))
Algorytm ten zakłada, że twoja grupa zainteresowań stanowi zdecydowaną większość oryginalnej próbki i że ma symetryczny rozkład (ale nie ma hipotezy o rozkładzie pozostałych obserwacji ).n−h
źródło