Wzór Doane'a na binowanie histogramów

9

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 njest rozmiar danych.

Problem polega na tym, że kurtoza jest negatywna, a n >> 1argument argumentu logstaje się negatywny.

* (ta strona uległa zmianie od czasu opublikowania, edytowano link, aby wskazywał na stronę taką, jaka była w momencie publikowania)

Ruggero Turra
źródło
1
Czy wiesz, czy ta formuła wykorzystuje kurtozę czy kurtozę nadmierną (tj. Czy Normal dist ma 4 lub 0)?
Peter Flom
@PeterFlom: w oryginalnym artykule ( amstat.tandfonline.com/doi/pdf/10.1080/00031305.1976.10479172 ) kurtoza jest zdefiniowana jako Skośność, ale nie jestem ekspertem. Oryginalny artykuł różni się również od formuły wikipedia
Ruggero Turra
1
Errr, co? Kurtoza jest zdefiniowana jako skośność? To nie ma sensu; są bardzo różne. Nie mogę uzyskać dostępu do papieru, ale wygląda na to, że coś gdzieś jest popsute.
Peter Flom
@PeterFlom Normalna dystrybucja powinna mieć kurtozę 3, a nie 4.
Glen_b -Reinstate Monica
@PeterFlom Badałem problem skośności vs kurtozy - patrz „Edytuj 2” w mojej odpowiedzi.
Glen_b

Odpowiedzi:

11

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.0n

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:

 nclass.FD(rnorm(100))
[1] 11
 nclass.FD(runif(100))
[1] 6
 nclass.FD(rt(100,1))
[1] 71

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:Ke=log2(1+g1σg1)

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).]Keg1b1

Teraz normalnie (choć to przybliżenie jest dość słabe, dopóki n nie przekroczy 100, Doane używa pierwszej formy)σg1=6(n2)(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σg1. 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.)

Glen_b - Przywróć Monikę
źródło
Dziękuję Ci bardzo. Nawiasem mówiąc, jestem zaskoczony, widząc taki błąd w „The American Statistician”. Nigdy nie widziałem notacji . b1
Ruggero Turra
Małe błędy tej skali (brak wartości bezwzględnej) nie zdarzają się rzadko w czasopismach - poza statystykami widziałem znacznie bardziej oczywiste (i bardziej rażące). Jeśli chodzi o notację, jest ona dość powszechna; EG1 , EG2 , EG3 ... mógłbym wskazać dziesiątki
Glen_b -Reinstate Monica
2

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 R moments. Ponadto za pomocą polecenia hist()można określić liczbę przerw w następujący sposób

library(moments)

n <- 250
data <- rnorm(n)

# Sturges formula log_2(n) + 1
hist(data,breaks = "Sturges")

# Doane's formula    
Doane <- 1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))
hist(data,breaks = Doane)

Formuła użyta w poleceniu kurtosis()jest po prostu mean((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.

Miles Davis
źródło
nie wiem, jaka jest definicja kurtozy we wzorze
Doane'a
Link do definicji kurtozy znajduje się we wpisie na Wikipedii. Nawiasem mówiąc, jest taki sam jak ten, który opublikowałem. Oszacowany jest jako czwarty przykładowy moment centralny podzielony przez kwadrat drugiego przykładowego momentu centralnego. Proszę zobaczyć moją edycję kodu.
Miles Davis,
1
znowu, nie wiem, czy twoja jest poprawna formuła Doane'a, jeśli spojrzysz na gazetę, na przykład używa log2 zamiast logu
Ruggero Turra
To jest „formuła Doane'a ”, którą opublikowałeś ¬¬ . W każdym razie można to w prosty sposób poprawić, używając log(n,2)zamiast log(n). ALE, wpis w Wikipedii, a także inne źródła wskazują, że tak powinno być log.
Miles Davis,