Wdrażam różne algorytmy, aby oszacować najlepszą liczbę pojemników do użycia w histogramach. Większość z tych, które wdrażam, opisano na stronie „Histogram” w Wikipedii w sekcji „ Liczba pojemników i szerokość ” *.
Utknąłem na problem z formułą Doane'a:
1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))
gdzie n
jest rozmiar danych.
Problem polega na tym, że kurtoza jest negatywna, a n >> 1
argument argumentu log
staje się negatywny.
* (ta strona uległa zmianie od czasu opublikowania, edytowano link, aby wskazywał na stronę taką, jaka była w momencie publikowania)
Odpowiedzi:
Ta odpowiedź uległa znaczącym zmianom, gdy przeglądam stronę wikipedii. Pozostawiłem odpowiedzi w dużej mierze takie, jakie były, ale do nich dodałem, więc obecnie stanowi to postęp zrozumienia; ostatnie części są tam, gdzie są najlepsze informacje.
Krótka odpowiedź: strona wikipedia - i formuła OP, która wydaje się być taka sama - są po prostu złe, z co najmniej trzech różnych powodów. Opuszczę moją oryginalną dyskusję (która zakładała, że OP i wikipedia miały rację), ponieważ wyjaśnia niektóre problemy. Lepsza dyskusja nastąpi później. Krótka rada: po prostu zapomnij o Doane. Jeśli trzeba go użyć, należy użyć co wikipedia mówi teraz (Naprawiłem go).
Uważam, że formuła musi odnosić się do nadmiernej kurtozy; moim powodem jest to, że modyfikuje formułę danych normalnych w celu uwzględnienia danych nienormalnych, więc można oczekiwać, że odtworzy ona niezmodyfikowaną normalną. Robi to, jeśli użyjesz nadmiernej kurtozy.
Rodzi to jednak problem polegający na tym, że termin w logu może przyjmować wartość ujemną przy dużych próbkach (w rzeczy samej, możliwe jest, aby być przy dość małej ). Sugerowałbym, aby nie używać go z ujemną kurtozą (zresztą nigdy nie użyłbym go poza unimodalnością; kiedy rzeczy staną się multimodalne, chcesz zastosować ideę kurtozy nadmiarowej do każdego trybu, a nie wygładzić nad nimi!), Chociaż w łagodnych przypadkach ( nadmiar kurtozy mniejszy niż 0) i skromne rozmiary próbek nie będzie dużym problemem.≤ 0 n
Sugeruję również, że w każdym razie da to zbyt mało pojemników przy dużych próbkach, nawet jeśli działa zgodnie z przeznaczeniem.
Możesz znaleźć ten artykuł (zwykłego CVera Roba Hyndmana ):
http://www.robjhyndman.com/papers/sturges.pdf
o pewnym zainteresowaniu. Jeśli argument Sturgesa jest błędny, formuła Doane'a ma ten sam problem ... jak Rob wyraźnie zauważa w gazecie.
W tym artykule (i w tej odpowiedzi ) kiwa głową na zasadę Freedmana-Diaconisa. W artykule wskazuje również na podejście wspomniane przez Matta Wanda (odnosi się do dokumentu roboczego, który nie wydaje się być online, ale kolejny artykuł jest dostępny, jeśli masz dostęp):
http://www.jstor.org/discover/10.2307/2684697
[Edytuj: w rzeczywistości link do dokumentu roboczego znajduje się na stronie autora ]
Podejście to obejmuje przybliżone oszacowanie poszczególnych funkcjonałów w celu uzyskania w przybliżeniu optymalnych (pod względem średniego zintegrowanego błędu kwadratu, MISE) szerokości przedziałów dla oszacowania podstawowej gęstości. Chociaż działają one dobrze i dają o wiele więcej pojemników niż Sturges lub Doane w ogóle, czasami nadal wolę używać więcej pojemników, chociaż zazwyczaj jest to bardzo dobra pierwsza próba.
Szczerze mówiąc, nie wiem, dlaczego podejście Różdżki (a przynajmniej zasada Fredmana Diakonisa) wcale nie jest domyślne.
R oferuje przynajmniej obliczenia liczby pojemników Freedmana-Diaconisa:
Widzieć
?nclass.FD
Osobiście dla mnie to przynajmniej za mało pojemników przynajmniej w pierwszych dwóch przypadkach; Podwoję oba, mimo że może to być nieco głośniejsze niż optymalne. Ponieważ n staje się duże, myślę, że w większości przypadków robi to bardzo dobrze.
Edycja 2:
Postanowiłem zbadać kwestię skośności vs kurtozy, na którą @PeterFlom słusznie wyraził zdziwienie.
Właśnie rzuciłem okiem na artykuł Doane wiso powiązany z (czytałem go wcześniej .... ale to było prawie 30 lat temu) - w ogóle nie ma odniesienia do kurtozy, tylko do wypaczenia.
Doane jest rzeczywista formuła:K.mi= l osol2)( 1 +sol1σsol1)
gdzie to liczba dodanych pojemników, to pochylenie w 3. chwili. [Cóż, właściwie Doane, po dość powszechnym wykorzystaniu czasu, używa do podpisania (!) Skośności w trzeciej chwili (pochodzenie tego szczególnie mało pouczającego nadużycia notacji jest dość stare i nie zamierzam się tym zajmować to, z wyjątkiem tego, że na szczęście teraz pojawia się znacznie rzadziej).]K.mi sol1 b1--√
Teraz normalnie (choć to przybliżenie jest dość słabe, dopóki n nie przekroczy 100, Doane używa pierwszej formy)σsol1=6 ( n - 2 )( n + 1 ) ( n + 3 )--------√≈6n--√
Wydaje się jednak, że po drodze ktoś próbował dostosować go do kurtozy (w chwili, gdy piszę tę Wikipedię , na przykład pod względem kurtozy , i nie sądzę, że to wymyślił) - ale istnieje wyraźny powód wierzyć, że formuła jest po prostu niepoprawna (zwróć uwagę, że zastosowanym błędem standardowym jest ostateczne przybliżenie wartości skosu podanej powyżej). Myślę, że widziałem takie zastosowanie kurtozy w kilku miejscach innych niż wikipedia, ale poza tym, że nie ma go w gazecie Doane'a, nie ma go w gazecie Scotta, ani w gazecie Hyndmana, na którą wskazuję, ani w pracy Wand. Wydaje się jednak, że skądś pochodzi (tzn. Jestem pewien, że nie jest oryginalny w wikipedii), ponieważ Doane nie ma przybliżenia doσsol1 . Wygląda na to, że gra się nim kilka razy, zanim się tam skończył; Byłbym zainteresowany, gdyby ktoś to wyśledził.
Wydaje mi się, że argument Doane'a z radością powinien obejmować kurtozę, ale należałoby użyć poprawnego standardowego błędu .
Ponieważ jednak Doane opiera się na argumentach Sturgesa, a argumentacja Sturgesa wydaje się błędna, być może całe przedsięwzięcie jest skazane na niepowodzenie. W każdym razie edytowałem stronę dyskusji Histogram na Wikipedii, zwracając uwagę na błąd.
---
Edycja 3: Poprawiłem stronę wikipedii (ale pozwoliłem sobie wziąć absolutną wartość skośności, w przeciwnym razie oryginalna formuła Doane'a nie może być używana do dystrybucji z przekrzywionymi w lewo postaciami - wyraźnie dla liczby pojemników znak skośność jest nieistotna). Ściśle mówiąc, powinienem był przedstawić formułę w jej oryginalnej (złej) formie, a następnie wyjaśnić, dlaczego to nie ma sensu, ale myślę, że jest to problematyczne z kilku powodów - zwłaszcza, że ludzie będą mieli ochotę po prostu skopiować formułę i zignorować wyjaśnienie. Uważam, że faktycznie obejmuje to pierwotne zamiary Doane'a. W każdym razie jest to ogromna poprawa w stosunku do nonsensów, które były w oryginale. (Wszystkim, którzy mogą uzyskać dostęp do oryginalnej pracy, spójrz na nią i zobacz, jakb1--√ jest zdefiniowane i sprawdzam moje zmiany na Wikipedii, aby upewnić się, że jest to uzasadnione - były co najmniej trzy rzeczy źle - kurtoza, błąd standardowy i zła baza dzienników oraz mały błąd Doane'a.)
źródło
Miara kurtozy zdefiniowana w odniesieniu do drugiego i czwartego momentu nie jest nigdy ujemna ( patrz ), a następnie
log(1+...)>0
.Ilość ta jest realizowana w poleceniu
kurtosis()
z biblioteki Rmoments
. Ponadto za pomocą poleceniahist()
można określić liczbę przerw w następujący sposóbFormuła użyta w poleceniu
kurtosis()
jest po prostumean((data - mean(data))^4)/mean((data - mean(data))^2)^2
.Teraz, jeśli chcesz zbadać, jaka jest najlepsza formuła, potrzebujesz kryterium. Weź pod uwagę, że zostało to szeroko omówione w literaturze statystycznej.
źródło
log(n,2)
zamiastlog(n)
. ALE, wpis w Wikipedii, a także inne źródła wskazują, że tak powinno byćlog
.