Jak rozpoznać rozkład bimodalny?

48

Rozumiem, że po wykreśleniu wartości w formie wykresu możemy zidentyfikować rozkład bimodalny, obserwując bliźniacze piki, ale jak można go znaleźć programowo? (Szukam algorytmu).

venkasub
źródło
5
Intrygujące pytanie. Nic o tym nie wiem, więc nie podejmę próby odpowiedzi, ale test bimodality + w Google daje całkiem sporo obiecujących wskazówek. google.co.uk/search?q=bimodality+test
onestop
kod programowy do testowania multimodalności jest dostępny na stronie www.estima.com i nazywa się MODES.SRC. Możesz łatwo przekonwertować go na Matlab, R lub inne oprogramowanie. Pozdrawiam, guido.
1
Nie możesz zidentyfikować liczby trybów (nie ma ograniczeń co do liczby małych wiggli, które mogłaby mieć dystrybucja), ale możesz uzyskać dolną granicę. np. patrz tutaj projecteuclid.org/euclid.aos/1176351045
Glen_b

Odpowiedzi:

27

Identyfikacja trybu ciągłej dystrybucji wymaga wygładzenia lub binowania danych.

Binning jest zazwyczaj zbyt procrustowy: wyniki często zależą od tego, gdzie umieścisz punkty odcięcia bin.

Wygładzanie jądra (szczególnie w postaci szacowania gęstości jądra ) jest dobrym wyborem. Chociaż możliwych jest wiele kształtów jądra, zazwyczaj wynik nie zależy w dużej mierze od kształtu. To zależy od przepustowości jądra. Dlatego ludzie albo używają adaptacyjnego wygładzania jądra, albo przeprowadzają sekwencję wygładzania jądra dla różnych stałych szerokości pasma, aby sprawdzić stabilność zidentyfikowanych trybów. Chociaż stosowanie adaptacyjnego lub „optymalnego” wygładzacza jest atrakcyjne, należy pamiętać, że większość (wszystkie?) Z nich ma na celu osiągnięcie równowagi między precyzją a średnią dokładnością: nie są one zaprojektowane do optymalizacji szacowania położenia modów.

Jeśli chodzi o implementację, jądro wygładza lokalnie przesunięcie i skalowanie z góry określonej funkcji w celu dopasowania danych. Pod warunkiem, że ta podstawowa funkcja jest rozróżnialna - Gaussowie są dobrym wyborem, ponieważ możesz je rozróżnić tyle razy, ile chcesz - to wszystko, co musisz zrobić, to zastąpić ją pochodną, ​​aby uzyskać pochodną gładkości. Następnie wystarczy po prostu zastosować standardową procedurę znajdowania zera w celu wykrycia i przetestowania punktów krytycznych. ( Metoda Brenta działa dobrze.) Oczywiście możesz wykonać tę samą sztuczkę z drugą pochodną, ​​aby szybko sprawdzić, czy jakikolwiek punkt krytyczny jest lokalnym maksimum - to znaczy trybem.

Whuber
źródło
2
@venkasub, możesz także spojrzeć na metodę Mullera w celu znalezienia roota. Jest prostszy niż metoda Brenta i „prawie” tak skuteczny jak metoda Newtona, ale bez konieczności poznania pochodnych funkcji celu.
kardynał
25

Istnieje dobrze znany artykuł Silvermana na ten temat. Wykorzystuje szacowanie gęstości jądra. Widzieć

BW Silverman, Wykorzystanie szacunków gęstości jądra do badania multimodalności , J. Royal Stat. Soc. B , vol. 43, nr 1, 1981, s. 97–99.

Zwróć uwagę, że w tabelach papieru są pewne błędy. To tylko punkt wyjścia, ale całkiem niezły. Zapewnia dobrze zdefiniowany algorytm do użycia w przypadku, gdy najbardziej tego szukasz. Możesz spojrzeć na Google Scholar w gazetach, które cytują go, aby uzyskać bardziej „nowoczesne” podejście.

kardynał
źródło
4
+1 Ten artykuł wykorzystuje informacje o tym, jak liczba trybów pozornych zależy od szerokości jądra (dla jąder Gaussa), aby wybrać odpowiednią szerokość, a następnie kontynuuje, jak opisano w mojej odpowiedzi.
whuber
2

Przyjechałem późno na imprezę, ale jeśli jesteś zainteresowany tym, czy jest to multimodalny, czy nie, co oznacza, że ​​nie jesteś zainteresowany liczbą trybów, powinieneś spojrzeć na diptest .

W Rpakiecie nazywa się diptest.

Kots
źródło
2
Pełna nazwa to Hartigan's Dip Test of Unimodality. Oryginalny artykuł opisuje ten opis: Test zanurzeniowy mierzy multimodalność w próbce przez maksymalną różnicę, we wszystkich punktach próbki, między empiryczną funkcją rozkładu, a funkcją rozkładu unimodalnego, która minimalizuje tę maksymalną różnicę. Algorytm nie jest trywialny, ale można łatwo znaleźć C, Python, MATLAB i współczesne tłumaczenia Fortran w oparciu o oryginalną implementację Fortran w obliczeniach statystyki DIP do testowania nieimodalności .
mortehu
0

Definicja w wiki jest dla mnie nieco myląca. Prawdopodobieństwo, że ciągły zbiór danych będzie miał tylko jeden tryb, wynosi zero. Prostym sposobem na zaprogramowanie bimodalnego dystrygitonu jest użycie dwóch oddzielnych rozkładów normalnych wyśrodkowanych inaczej. Tworzy to dwa szczyty lub tryby, które wiki nazywa. Właściwie możesz użyć prawie dowolnych dwóch rozkładów, ale jedną z trudniejszych możliwości statystycznych jest ustalenie, jak powstał zestaw danych po połączeniu dwóch losowych rozkładów danych.

Bazylia
źródło
Jak zidentyfikujesz centra dwóch normalnych rozkładów?
venkasub
@venkasub, środek rozkładu normalnego jest jego średnią. Jeśli wiesz, że bimodalność pochodzi z dwóch rozkładów normalnych, możesz dopasować model mieszanki do oszacowania średnich, które będą dwoma trybami.
mpiktas