Ocena przybliżonego rozkładu danych na podstawie histogramu

111

Załóżmy, że chcę sprawdzić, czy moje dane są wykładnicze na podstawie histogramu (tzn. Są przekrzywione w prawo).

W zależności od sposobu grupowania lub binowania danych mogę uzyskać bardzo różne histogramy.

Jeden zestaw histogramów sprawi, że dane będą miały charakter wykładniczy. Kolejny zestaw sprawi, że dane nie będą wykładnicze. Jak sprawić, by określanie rozkładów z histogramów było dobrze zdefiniowane?

guestoeijreor
źródło
20
Dlaczego nie zapomnieć o histogramach, ponieważ problemy, które opisujesz, są dobrze ustalone, i rozważ alternatywne narzędzia, takie jak wykresy qq i testy poprawności dopasowania?
whuber

Odpowiedzi:

163

Trudność z użyciem histogramów do wnioskowania o kształcie

Chociaż histogramy są często przydatne, a czasem przydatne, mogą wprowadzać w błąd. Ich wygląd może się znacznie zmienić wraz ze zmianami lokalizacji granic pojemników.

Problem ten jest od dawna znany *, ale może nie tak szeroko, jak powinien być - rzadko można go wspomnieć w dyskusjach na poziomie podstawowym (choć są wyjątki).

* na przykład Paul Rubin [1] ujął to w następujący sposób: „ dobrze wiadomo, że zmiana punktów końcowych na histogramie może znacząco zmienić jego wygląd ”. .

Myślę, że jest to kwestia, którą należy szerzej omówić podczas wprowadzania histogramów. Dam kilka przykładów i dyskusji.

Dlaczego powinieneś uważać na poleganie na jednym histogramie zestawu danych

Spójrz na te cztery histogramy:

Cztery histogramy

To cztery bardzo różne histogramy.

Jeśli wkleisz następujące dane (używam tutaj R):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

Następnie możesz je wygenerować samodzielnie:

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

Teraz spójrz na ten pasek:

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 tabele pasków

(Jeśli nadal nie jest to oczywiste, zobacz, co się stanie, gdy odejmiesz dane Annie z każdego zestawu head(matrix(x-Annie,nrow=40)):)

Dane po prostu przesuwano za każdym razem o 0,25.

Jednak wrażenia, które otrzymujemy z histogramów - prawe pochylenie, jednolite, lewe pochylenie i bimodalne - były zupełnie inne. Nasze wrażenie w całości zależało od położenia pierwszego bin-origin względem minimum.

Więc nie tylko „wykładniczy” vs.


Edycja: Jeśli zmienisz przepustowość, możesz uzyskać takie rzeczy:

Pochylenie vs dzwonek

To te same 34 obserwacje w obu przypadkach, tylko różne punkty przerwania, jedno z szerokością przedziału a drugie z przedziałem szerokości .0,810.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

Zręczne, co?

Tak, te dane zostały celowo wygenerowane, aby to zrobić ... ale lekcja jest jasna - to, co myślisz, że widzisz na histogramie, może nie być szczególnie dokładnym wrażeniem danych.

Co możemy zrobić?

Histogramy są szeroko stosowane, często wygodne do uzyskania i czasami oczekiwane. Co możemy zrobić, aby uniknąć lub złagodzić takie problemy?

Jak zauważył Nick Cox w komentarzu do powiązanego pytania : ogólna zasada powinna zawsze polegać na tym, że szczegóły odporne na różnice w szerokości i pochodzeniu pojemnika mogą być prawdziwe; kruche szczegóły mogą być fałszywe lub trywialne .

Przynajmniej zawsze powinieneś robić histogramy dla kilku różnych szerokości lub początków bin, a najlepiej obu.

Ewentualnie sprawdź oszacowanie gęstości jądra przy niezbyt szerokim paśmie.

Innym podejściem, które zmniejsza arbitralność histogramów, są uśrednione przesunięte histogramy ,

Uśredniony przesunięty histogram

(to jeden z najnowszego zestawu danych), ale jeśli podejmiesz ten wysiłek, myślę, że równie dobrze możesz użyć oszacowania gęstości jądra.

Jeśli wykonuję histogram (używam ich, mimo że jestem bardzo świadomy problemu), prawie zawsze wolę używać znacznie więcej pojemników niż typowe ustawienia domyślne programu i bardzo często lubię robić kilka histogramów o różnej szerokości pojemnika (i czasami pochodzenie). Jeśli są w miarę spójne pod względem wrażeń, prawdopodobnie nie masz tego problemu, a jeśli nie są spójne, wiesz, aby przyjrzeć się dokładniej, być może spróbuj oszacować gęstość jądra, empiryczny CDF, wykres QQ lub coś takiego podobny.

Podczas gdy histogramy mogą czasem wprowadzać w błąd, wykresy pudełkowe są jeszcze bardziej podatne na takie problemy; dzięki wykresowi pudełkowemu nie możesz nawet powiedzieć „użyj więcej pojemników”. Zobacz cztery bardzo różne zestawy danych w tym poście , wszystkie z identycznymi, symetrycznymi wykresami pudełkowymi, nawet jeśli jeden z tych zestawów danych jest dość wypaczony.

[1]: Rubin, Paul (2014) „Histogram Abuse!”,
Post na blogu LUB w świecie OB , 23 stycznia 2014
link ... (alternatywny link)

Glen_b
źródło
1
Praktycznie każdy wykres konieczności zawiera takie dane. Pojemniki są na tyle małe (szerokość jednego piksela wzdłuż osi), że to nie ma znaczenia?
AJMansfield,
1
@AJMansfield To trochę jak powiedzenie „każda dystrybucja jest dyskretna” - choć dosłownie prawda, przesłania odpowiedni problem. Typowa liczba przedziałów w binowanym estymatorze jest znacznie mniejsza niż typowa liczba pikseli ... a przy każdej grafice wykorzystującej wygładzanie, „efektywna” liczba pikseli jest większa (w tym potencjalnie możliwe jest rozróżnienie różnice pozycji między pikselami)
Glen_b
2
Podstawową kwestią jest to, że histogramy w dużej mierze zależą od wielkości pojemnika. Trudno to ustalić z góry.
29

Gęstość jądra lub wykres logspline mogą być lepszą opcją niż histogram. Wciąż istnieją pewne opcje, które można ustawić za pomocą tych metod, ale są one mniej zmienne niż histogramy. Istnieją również qqplots. Ładne narzędzie do sprawdzania, czy dane są wystarczająco zbliżone do rozkładu teoretycznego, szczegółowo opisano w:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

Krótka wersja pomysłu (wciąż czytaj artykuł, aby uzyskać szczegółowe informacje) polega na tym, że generujesz dane z rozkładu zerowego i tworzysz kilka wykresów, z których jeden jest danymi oryginalnymi / rzeczywistymi, a reszta jest symulowana z rozkładu teoretycznego. Następnie przedstawisz wykresy komuś (być może samemu), który nie widział oryginalnych danych, i sprawdzisz, czy mogą wybrać prawdziwe dane. Jeśli nie mogą zidentyfikować prawdziwych danych, oznacza to, że nie masz dowodów przeciwko wartości zerowej.

vis.testFunkcji w pakiecie dla R TeachingDemos ułatwienia realizacji postać tego testu.

Oto szybki przykład. Jeden z poniższych wykresów to 25 punktów generowanych z rozkładu o 10 stopniach swobody, pozostałe 8 są generowane z rozkładu normalnego o tej samej średniej i wariancji.

wprowadź opis zdjęcia tutaj

vis.testFunkcja utworzył tę działkę, a następnie wyświetla użytkownikowi na wybór działek ich zdaniem jest inna, a następnie powtarza procesu jeszcze 2 razy (3 ogółem).

Greg Snow
źródło
@ScottStafford, dodałem kopię powyższej fabuły. Ten używa wykresów qq, ale funkcja generuje również histogramy lub można zaprogramować wykresy gęstości.
Greg Snow,
28

Wykresy skumulowanego rozkładu [ MATLAB , R ] - gdzie wykreślasz ułamek wartości danych mniejszy lub równy zakresowi wartości - są zdecydowanie najlepszym sposobem na spojrzenie na rozkłady danych empirycznych. Oto na przykład ECDF tych danych , wytworzonych w R:

Wykresy ECDF Alicji, Briana, Chrisa i Zoe

Można to wygenerować za pomocą następującego wejścia R (z powyższymi danymi):

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

Jak widać, wizualnie oczywiste jest, że te cztery dystrybucje są po prostu tłumaczeniami. Ogólnie rzecz biorąc, zalety ECDF dla wizualizacji empirycznych rozkładów danych to:

  1. Po prostu prezentują dane w sposób, w jaki faktycznie zachodzi bez transformacji innej niż akumulacja, więc nie ma możliwości przypadkowego oszukania siebie, podobnie jak w przypadku histogramów i szacunków gęstości jądra, ze względu na sposób przetwarzania danych.
  2. Dają wyraźne wizualne wyczucie rozkładu danych, ponieważ każdy punkt jest buforowany przez wszystkie dane przed nim i po nim. Porównaj to z nieskumulowanymi wizualizacjami gęstości, w których dokładność każdej gęstości jest naturalnie niebuforowana, a zatem musi być oszacowana przez binowanie (histogramy) lub wygładzanie (KDE).
  3. Działają równie dobrze niezależnie od tego, czy dane mają ładny rozkład parametryczny, pewną mieszankę, czy niechlujny rozkład nieparametryczny.

Jedyną sztuczką jest nauczenie się, jak prawidłowo odczytywać ECDF: płytkie nachylone obszary oznaczają rzadkie rozmieszczenie, strome nachylone obszary oznaczają gęstą dystrybucję. Jednak po ich przeczytaniu są one wspaniałym narzędziem do przeglądania rozkładów danych empirycznych.

Stefan Karpiński
źródło
Czy jest dostępna dokumentacja do odczytu CDF? np. co jeśli moja dystrybucja cdf, jak pokazałeś powyżej, to jak możemy sklasyfikować \ guesstimate do chisquare, normalnej lub innej dystrybucji opartej na wyglądzie
stats101 12.08.16
2

Sugestia: Histogramy zwykle przypisują tylko dane osi X, które wystąpiły w środku przedziału i pomijają pomiary położenia w osi X o większej dokładności. Wpływ ten na pochodne dopasowania może być dość duży. Weźmy trywialny przykład. Przypuśćmy, że bierzemy klasyczne wyprowadzenie delty Diraca, ale modyfikujemy ją tak, abyśmy zaczynali od rozkładu Cauchy'ego w dowolnej umiejscowieniu mediany ze skończoną skalą (połowa szerokości maksimum). Następnie bierzemy limit, gdy skala spada do zera. Jeśli użyjemy klasycznej definicji histogramu i nie zmienimy rozmiarów pojemników, nie uchwycimy ani położenia, ani skali. Jeśli jednak użyjemy środkowej lokalizacji w pojemnikach o nawet stałej szerokości, zawsze uchwycimy lokalizację, jeśli nie skalę, gdy skala jest mała w stosunku do szerokości pojemnika.

Aby dopasować wartości, w których dane są wypaczone, użycie stałych punktów środkowych bin spowoduje przesunięcie w osi X całego segmentu krzywej w tym regionie, co, jak sądzę, odnosi się do powyższego pytania.

KROK 1 śmieszne histoOto prawie rozwiązanie. Użyłemn=8w każdej kategorii histogramu i właśnie wyświetlał je jako średnią wartość osi x z każdego przedziału. Ponieważ każdy przedział histogramu ma wartość 8, wszystkie rozkłady wyglądają jednolicie i musiałem je przesunąć w pionie, aby je pokazać. Wyświetlacz nie jest poprawną odpowiedzią, ale nie jest pozbawiony informacji. Prawidłowo mówi nam, że między grupami występuje przesunięcie osi x. Mówi nam również, że rzeczywisty rozkład wydaje się mieć kształt litery U. Dlaczego? Należy zauważyć, że odległość między wartościami średnimi jest dalej od siebie w środkach i bliżej krawędzi. Aby uczynić to lepszą reprezentacją, powinniśmy pożyczyć całe próbki i ułamkowe ilości każdej próbki granicy bin, aby wszystkie średnie wartości bin na osi X były w równej odległości. Naprawienie tego i prawidłowe wyświetlanie wymagałoby trochę programowania. Ale, może to być po prostu sposób tworzenia histogramów, aby faktycznie wyświetlały dane podstawowe w jakimś logicznym formacie. Kształt nadal się zmienia, jeśli zmienimy całkowitą liczbę pojemników pokrywających zakres danych, ale chodzi o to, aby rozwiązać niektóre problemy powstałe w wyniku arbitralnego binowania.

KROK 2 Zacznijmy więc pożyczać między pojemnikami, aby spróbować wyrównać środki.wprowadź opis zdjęcia tutaj

Teraz widzimy, jak kształty histogramów zaczynają się pojawiać. Ale różnica między średnimi nie jest idealna, ponieważ mamy tylko pełną liczbę próbek do wymiany między pojemnikami. Aby usunąć ograniczenie wartości całkowitych na osi y i zakończyć proces tworzenia jednakowo odległych wartości średnich na osi x, musimy zacząć dzielić ułamki próbki między przedziały.

Krok 3 Udostępnianie wartości i części wartości. histo3

Jak widać, dzielenie części wartości na granicy bin może poprawić jednorodność odległości między wartościami średnimi. Udało mi się to zrobić z dokładnością do trzech miejsc po przecinku z podanymi danymi. Nie sądzę jednak, aby odległość między wartościami średnimi była ogólnie równa, ponieważ nie pozwala na to grubość danych.

Można jednak robić inne rzeczy, takie jak szacowanie gęstości jądra .

Tutaj widzimy dane Annie jako ograniczoną gęstość jądra z wykorzystaniem wygładzeń Gaussa wynoszących 0,1, 0,2 i 0,4. Pozostałe przedmioty będą miały przesunięte funkcje tego samego typu, pod warunkiem, że zrobi to samo co ja, a mianowicie wykorzysta dolną i górną granicę każdego zestawu danych. Tak więc nie jest to już histogram, ale plik PDF i pełni tę samą rolę co histogram bez niektórych brodawek.

kernelsmooth

Carl
źródło