Obliczanie optymalnej liczby pojemników na histogramie


79

Interesuje mnie znalezienie możliwie optymalnej metody określania, ile pojemników powinienem użyć na histogramie. Moje dane powinny mieścić się w przedziale od 30 do 350 obiektów, a w szczególności staram się stosować próg (taki jak metoda Otsu), w którym „dobre” obiekty, których powinienem mieć mniej i które powinny być bardziej rozproszone, są oddzielone od „ złe ”obiekty, które powinny mieć większą gęstość. Konkretna wartość miałaby wynik 1-10 dla każdego obiektu. Miałem 5-10 obiektów z ocenami 6-10 i 20-25 obiektów z wynikami 1-4. Chciałbym znaleźć wzorzec grupowania histogramu, który ogólnie pozwala, by metoda taka jak Otsu przekroczyła próg słabo punktowanych obiektów. Jednak w implementacji Otsu widziałem, rozmiar pojemnika wynosił 256 i często mam dużo mniej punktów danych niż 256, co dla mnie sugeruje, że 256 nie jest dobrym numerem bin. Przy tak małej ilości danych, jakie podejścia powinienem zastosować do obliczenia liczby używanych pojemników?


Myślę, że reguła Sturgesa może być użyta dla n <200; gdzie n to liczba obserwacji
venkasub

Odpowiedzi:


94

Freedman-Diaconis zasada jest bardzo solidna i dobrze sprawdza się w praktyce. Szerokość przedziału jest ustawiona na . Tak więc liczba przedziałów wynosi , gdzie jest liczbą obserwacji, max jest wartością maksymalną, a min jest wartością minimalną.h=2×IQR×n1/3(maxmin)/hn

W bazie R możesz użyć:

hist(x, breaks="FD")

W przypadku innych bibliotek kreślących bez tej opcji (np. ggplot2) Można obliczyć przepustowość jako:

bw <- 2 * IQR(x) / length(x)^(1/3)

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)

2
@nico. Domyślną wartością w R jest breaks = „Sturges”, co nie zawsze daje dobre wyniki.
Rob Hyndman,

4
Jak się obliczyć IQR?
Kurt Mueller

1
@KurtMueller IQR oznacza zakres międzykwartylowy. Poszukaj 1 kwartylu i 3 kwartylu, a różnica to IQR. IQR jest już dostarczany z R, więc możesz go używać.
xiaodai

4
Jeśli się nie mylę, odpowiedź powinna brzmiećnum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FDnie istniało dziewięć lat temu.
Rob Hyndman,

18

Jeśli użyjesz zbyt mało pojemników, histogram nie przedstawia bardzo dobrze danych. Jeśli masz zbyt wiele pojemników, masz wygląd zepsutego grzebienia, co również nie daje poczucia rozkładu.

Jednym z rozwiązań jest stworzenie wykresu pokazującego każdą wartość. Albo wykres punktowy, albo skumulowany rozkład częstotliwości, który nie wymaga żadnych pojemników.

Jeśli chcesz utworzyć rozkład częstotliwości z równo rozmieszczonymi pojemnikami, musisz zdecydować, ile pojemników (lub ich szerokość). Decyzja wyraźnie zależy od liczby wartości. Jeśli masz dużo wartości, twój wykres będzie wyglądał lepiej i będzie bardziej pouczający, jeśli masz dużo pojemników. Na tej stronie wikipedii wymieniono kilka metod decydowania o szerokości pojemnika na podstawie liczby obserwacji. Najprostszą metodą jest ustawienie liczby pojemników równej pierwiastkowi kwadratowemu liczby wartości, które są grupowane.

Ta strona Hideaki Shimazaki wyjaśnia alternatywną metodę. Obliczenie jest nieco bardziej skomplikowane, ale wydaje się, że wykonuje świetną robotę. Górna część strony to aplikacja Java. Przewiń to, aby zobaczyć teorię i wyjaśnienia, a następnie przewijaj, aby znaleźć linki do dokumentów wyjaśniających tę metodę.


Link do strony Hideaki jest zepsuty. Nie jestem pewien, czy to jest to samo: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Może interesujący będzie tekst „ Wariacje na histogramie ” Denby'ego i Mallowsa:

Ten nowy wyświetlacz, który nazywamy „dhist” (dla histogramu wyciętego po przekątnej), zachowuje pożądane cechy zarówno hist o równej szerokości, jak i hist o równej powierzchni. Pokaże wysokie wąskie kosze, takie jak ea hist, gdy w danych występują szczyty i pokaże pojedyncze wartości odstające, tak jak zwykły histogram.

Wspominają również, że kod w R jest dostępny na żądanie.


5

Nie jestem pewien, czy jest to dobra praktyka, ale zwykle tworzę więcej niż jeden histogram o różnych szerokościach bin i wybieram histogram, którego histgram użyć, na podstawie tego, który histgram pasuje do interpretacji, którą staram się najlepiej przekazać. Chociaż wprowadza to pewną obiektywność w wyborze histogramu, uzasadniam to tym, że miałem znacznie więcej czasu na zrozumienie danych niż osoba, której podaję histogram, więc muszę przekazać im bardzo zwięzły komunikat.

Jestem także wielkim fanem prezentowania histogramów z taką samą liczbą punktów w każdym przedziale, a nie taką samą szerokością. Zazwyczaj uważam, że reprezentują one dane znacznie lepiej niż stała szerokość pojemnika, chociaż są trudne do wytworzenia.


1
przepraszam, powinienem wspomnieć, że muszę to zrobić w sposób zautomatyzowany. opcja „robienia tego wiele razy, dopóki nie znajdę tego, który najlepiej odpowiada mojemu celowi” nie działa dla mnie. należy wykonać obliczeniowo ...
Tony Stark

4
Zgadzam się - pomysł, że istnieje jedna „optymalna” szerokość pojemnika, jest ogromnym uproszczeniem.
hadley,

5

Czy widziałeś metodę Shimazaki-Shinomoto ?

Chociaż wydaje się być drogie obliczeniowo, może dać dobre wyniki. Warto spróbować, jeśli czas obliczeniowy nie jest twoim problemem. Istnieje kilka implementacji tej metody w języku Java, MATLAB itp. W następującym linku, który działa wystarczająco szybko: interfejs WWW


3

Jeśli muszę programowo określić liczbę pojemników, zwykle zaczynam od histogramu, który ma znacznie więcej pojemników niż potrzeba. Po wypełnieniu histogramu łączę pojemniki, aż będę mieć wystarczającą liczbę wpisów na pojemnik dla używanej metody, np. Jeśli chcę modelować niepewności Poissona w eksperymencie z liczeniem z niepewnościami z rozkładu normalnego, dopóki nie będę mieć więcej niż około 10 wpisy.


2

Proszę zobaczyć tę odpowiedź jako uzupełnienie odpowiedzi Roba Hyndmana .

Aby utworzyć wykresy histogramów z dokładnie tymi samymi przedziałami lub „szerokościami” przy użyciu reguły Freedman – Diaconis albo z podstawowym R lub ggplot2pakietem, możemy użyć jednej z wartości hist()funkcji mianowicie breaks. Załóżmy, że chcemy utworzyć histogram qsecz mtcarsdanych przy użyciu reguły Freedman – Diaconis. W podstawowym R używamy

x <- mtcars$qsec
hist(x, breaks = "FD")

Tymczasem w ggplot2pakiecie używamy

h <- hist(x, breaks = "FD", plot = FALSE)
qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white"))

Lub alternatywnie

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white")

Wszystkie generują wykresy histogramów z dokładnie tymi samymi przedziałami i liczbą przedziałów, jak zamierzono.


-5

Mam 600 obserwacji dla Au g / t. Rozmiar pojemnika 1 daje mi to:wprowadź opis zdjęcia tutaj

Automatyczny wybór (pomijając zakres bin) daje to:wprowadź opis zdjęcia tutaj

Dane wyglądają O'K na pierwszym i drugim wykresie, tak jakby nie było problemu z integralnością danych. Tylko rozmiar pojemnika 0,1 (g / t) odpowiada na pytanie: pomiary były zarówno niedokładne, jak i nieprecyzyjnewprowadź opis zdjęcia tutaj

Mój osąd: 1. Na Ziemi nie ma techniki pomiaru, która pokazałaby prawdziwą wartość zjawiska naturalnego. Wszystkie pomiary są przybliżone, niektóre z nich są bliskie prawdziwej wartości. Zależy to od projektu próbkowania, kalibracji, kwalifikacji człowieka itp. 2. Dlatego rozkład jest raczej wypaczony niż symetryczny. 3. Niemniej jednak kształt rozkładu powinien co najmniej w przybliżeniu przypominać „dzwonek”. Jeden dzwonek na raz (chyba że istnieje kilka środowisk geologicznych). 4. Rozkład częstotliwości z manipulacją wielkością pojemnika może pomóc w ujawnieniu wzoru tego, jak dokładne i precyzyjne były pomiary. Tak więc trzeba eksperymentalnie podnieść rozmiar pojemnika zamiast reguły wycinanej na kamieniu.


2
Jest to bardziej komentarz niż odpowiedź, chyba że określisz moralność. Powiedziałbym, że morał jest następujący: wszystkie reguły są ogólnymi zasadami, niektóre mają więcej podstaw statystycznych niż inne, ale większość reguł może nie robić tego, co chcesz, jeśli rozkłady mają bardzo wysoką skośność lub kurtozę. Więc wykorzystaj swój osąd.
Nick Cox,

2
Dodałeś komentarze, ale nie jestem pewien, czy jakikolwiek przyczynia się do nowego wątku. 1. jest dla mnie w porządku, ale nie problem tutaj. 2. nie wynika z 1., ponieważ niektóre rozkłady są prawie symetryczne. 3. jest wątpliwy: istnieje wiele sytuacji, w których oczekuje się kształtów innych niż dzwony. 4. jest również wątpliwy, ponieważ jakość oryginalnych pomiarów często nie jest widoczna na żadnym histogramie, ale często najlepiej jest badana z uwzględnieniem bardzo drobnej struktury rozkładu.
Nick Cox,

2. Prawie symetryczny nie jest symetryczny. Nie możesz być prawie w ciąży: w ciąży lub nie.
Sergo Cusiani

2
Jasne, ale dokładna symetria danych jest tak bardzo rzadka, że ​​gdybym powiedział „symetryczny”, ktoś też mógłby się temu sprzeciwić. Bardzo łatwo jest być niemal symetrycznym; dlatego i jak mamy mierniki skośności.
Nick Cox,

1
Zwrócono uwagę, ale twój komentarz był ogólny i brakowało mu kontekstu, który teraz podajesz. Z kolei powiedziałem „wątpliwe”, a nie „złe”. Mój główny komentarz pozostaje taki, że twoja odpowiedź tak naprawdę nie dodaje wiele do wątku na temat wyboru rozmiaru pojemnika lub równoważnej liczby pojemników. Posiadanie kolejnego przykładu, w którym jest to trudne, jest zakręceniem na pytanie, a nie odpowiedzią.
Nick Cox,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.