Histogramda en uygun kutu sayısını hesaplama


80

Histogramda kaç tane kutu kullanmam gerektiğini belirlemek için bulabildiğim en iyi yöntemi bulmakla ilgileniyorum. Verilerim en fazla 30 ila 350 nesne arasında olmalı ve özellikle daha az yayılması gereken ve daha fazla yayılması gereken "iyi" nesnelerin ayrıldığı "eşleştirme" uygulamasına çalışıyorum Kötü "nesneler, değeri daha yoğun olmalıdır. Somut bir değer, her nesne için 1-10 arasında bir puan alır. 6-10 arası skorları olan 5-10 ve 1-4 skorları olan 20-25 nesneleri vardı. Genelde Otsu'nun metodu gibi düşük skorlu cisimlerle eşleşmesine izin veren bir histogram bindirme modeli bulmak isterdim. Ancak, gördüğüm Otsu'nun uygulamasında, çöp kutusu 256 idi ve çoğu zaman 256'dan daha az veri noktasına sahip oldum. bana göre bu 256 iyi bir çöp tenekesi numarası değil. Bu kadar az veri olduğunda, kullanılacak kutu sayısını hesaplamak için hangi yaklaşımları kullanmalıyım?


Sanırım Sturges'in kuralı n <200; n gözlem sayısıdır
venkasub

Yanıtlar:


95

Freedman-Diaconis kuralı çok sağlamdır ve pratikte iyi çalışır. Bölme genişliği olarak ayarlanmıştır . Böylece, depo sayısı ; burada , gözlem sayısıdır, max, maksimum değerdir ve min, minimum değerdir.h=2×IQR×n1/3(maxmin)/hn

R üssünde aşağıdakileri kullanabilirsiniz:

hist(x, breaks="FD")

Bu seçeneğe sahip olmayan diğer çizim kütüphaneleri için (örneğin, ggplot2), binwidth değerini şu şekilde hesaplayabilirsiniz:

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

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

2
@nico. R içindeki varsayılan, her zaman iyi sonuç vermeyen sonlar = "Sturges" şeklindedir.
Rob Hyndman

4
Bir nasıl hesaplanır IQR?
Kurt Mueller

1
@KurtMueller IQR çeyrekler arası aralık anlamına gelir. 1. çeyrek ve 3. çeyreğe bakın ve aradaki fark IQR'dir. IQR zaten R ile birlikte gelir, böylece kullanabilirsiniz.
xiaodai

4
Yanılmıyorsam, cevap okumalısınıznum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FDdokuz yıl önce yoktu.
Rob Hyndman

18

Çok az çöp kutusu kullanıyorsanız, histogram verileri gerçekten çok iyi göstermez. Çok fazla kutuya sahipseniz, dağılma hissi vermeyen kırık bir tarak görünümü elde edersiniz.

Bir çözüm, her değeri gösteren bir grafik oluşturmaktır. Herhangi bir kutu gerektirmeyen bir nokta grafiği veya bir kümülatif frekans dağılımı.

Eşit aralıklı kutulara sahip bir frekans dağılımı oluşturmak istiyorsanız, kaç kutuya (veya her birinin genişliğine) karar vermeniz gerekir. Karar açıkça değerlerin sayısına bağlıdır. Çok fazla değeriniz varsa, grafiğiniz daha iyi görünür ve çok sayıda bölmeniz varsa daha bilgilendirici olur. Bu wikipedia sayfası , gözlem sayısından kutu genişliğini belirlemek için çeşitli yöntemler listeler. En basit yöntem, bölme sayısını, bindirdiğiniz değerlerin kareköküne eşit olarak ayarlamaktır.

Hideaki Shimazaki'den bu sayfa alternatif bir yöntemi anlatıyor. Hesaplamak biraz daha zor, ama harika bir iş çıkardın. Sayfanın üst kısmı bir Java uygulamasıdır. Teoriyi ve açıklamayı görmek için ilerleyin, ardından yöntemi açıklayan makalelere bağlantılar bulmak için kaydırmaya devam edin.


Hideaki'nin sayfasına olan bağlantı koptu. Bu aynı şey olup olmadığından emin değilim: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Belki Denby ve Mallows'un " Histogramdaki Varyasyonlar " makalesi ilgi çekici olacaktır:

"Dhist" olarak adlandırdığımız bu yeni ekran (diyagonal olarak kesilmiş histogram için), hem eşit genişlikte hem de eşit alan histinin istenen özelliklerini korur. Verilerde çiviler olduğu zaman ea hist gibi uzun boylu dar çöp kutuları gösterecek ve tıpkı normal histogram gibi izole edilmiş ayraçlar gösterecektir.

Ayrıca, R'deki kodun istek üzerine sağlanabileceğini de belirtiyorlar.


5

Bunun kesinlikle iyi bir uygulama olarak sayıldığından emin değilim, ancak farklı bölme genişliklerine sahip birden fazla histogram üretme eğilimindeyim ve hangi histgramın en iyi şekilde iletişim kurmaya çalıştığım yorumuna uygun olarak kullanacağı histogramı seçiyorum. Bu, histogramın seçimine biraz objektiflik kazandırırken, bunu temel alarak haklı çıkardım; veriyi anlamak için histogramı verdiğimden daha fazla zamanım oldu, bu yüzden onlara çok özlü bir mesaj vermem gerekiyor.

Aynı zamanda, her kutuda aynı kutu genişliğinden ziyade aynı sayıda nokta içeren histogramları sunma konusunda büyük bir hayranım. Bunların genellikle, sabit bölme genişliğinden çok daha iyi verileri temsil ettiğini ve üretilmelerinin zor olduğunu belirtiyorum.


1
üzgünüm, bunu otomatik olarak yapmam gerektiğini söylemeliydim. "amacım için en uygun olanı bulana kadar defalarca yapmak" seçeneği benim için işe yaramaz. işlemsel olarak yapılmalı ...
Tony Stark

4
Kabul ediyorum - bir "en uygun" kutu genişliği olduğu fikri büyük bir basitleştirici varsayımdır.
Hadley

5

Shimazaki-Shinomoto yöntemini gördün mü ?

Hesaplamalı olarak pahalı gibi görünse de, size iyi sonuçlar verebilir. Hesaplama süresi sizin probleminiz değilse, denemeye değer. Aşağıdaki yöntemde, java, MATLAB, vb. Yöntemlerde yeterince hızlı çalışan bazı uygulamalar vardır: web-interface


3

Kutuların sayısını programlı olarak belirlemem gerekirse, genellikle gerekenden daha fazla kutu içeren bir histogramla başlarım. Histogram doldurulduktan sonra, kullandığım yöntem için her kutu için yeterli girişe sahip olana kadar depoları birleştiriyorum, örneğin normal bir dağılımdan belirsizlikleri olan bir sayma deneyindeki Poisson belirsizliklerini modellemek istersem 10 girdileri.


2

Lütfen bu cevabı Bay Rob Hyndman'ın cevabını tamamlayıcı olarak görün .

Freedman-Diaconis kuralını kullanarak ya temel R ya da paket ile aynı aralıklarla ya da 'genişliklerle' histogram çizimleri oluşturmak için, fonksiyon değerlerinden birini kullanabiliriz . Biz histogramını oluşturmak istediğinizi varsayalım gelen Freedman-Diaconis kuralı kullanarak veri. Temel R kullanıyoruzggplot2hist()breaksqsecmtcars

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

Bu arada, ggplot2pakette kullanıyoruz

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

Veya alternatif olarak

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

Hepsi, aynı aralıklarla ve amaçlanan kutu sayılarıyla histogram grafikleri oluşturur.


-5

Au g / t için 600 gözlemim var. Depo büyüklüğü 1 bana şunu veriyor:görüntü tanımını buraya girin

Otomatik seçim (kutu aralığını atlayın) şunu verir:görüntü tanımını buraya girin

Veri bütünlüğü ile ilgili bir sorun yokmuş gibi, veriler birinci ve ikinci grafiklerde O'K'a bakar. Sadece kutu büyüklüğü 0,1 (g / t) soruyu cevaplıyor: ölçümler hem yanlış hem de kesin değildigörüntü tanımını buraya girin

Kararım: 1. Doğal olgunun gerçek değerini ortaya koymak için Dünya'da hiçbir ölçüm tekniği yoktur. Tüm ölçümler yaklaşık değerlerdir, bazıları gerçek değere yakındır. Örnekleme tasarımına, kalibrasyona, insan niteliklerine vb. Bağlıdır. 2. Bu yüzden dağılım simetrik değil eğridir. 3. Yine de, dağılımın şekli en azından yaklaşık olarak "zil benzeri" bir bölüme benzemelidir. Bir seferde bir zil (birkaç jeolojik ortam olmadığı sürece). 4. Kutu ebadı manipülasyonu ile frekans dağılımı, ölçümlerin ne kadar doğru ve kesin yapıldığına dair deseni ortaya çıkarmaya yardımcı olabilir. Bunun için, taştan kesilmiş bir kural yerine, çöp tenekesi boyutunun deneysel bir şekilde toplanması gerekir.


2
Ahlaki hecelemediğiniz sürece, bu bir cevaptan çok bir yorumdur. Ahlaki şeyin bu olduğunu söyleyebilirim: Tüm kurallar kurallara aykırıdır, bazıları diğerlerinden daha istatistiksel olarak dayanır, ancak dağıtımların çok yüksek çarpıklığı veya kurtosisi varsa, çoğu kural istediğiniz şeyi yapamayabilir. Öyleyse, kararını da kullan.
Nick Cox

2
Yorum eklediniz, ancak herhangi bir konuya yeni ayrıntıların ekleneceği konusunda hiçbir fikrim yok. 1. Bana göre sorun değil, burada mesele değil. 2. bazı dağılımlar neredeyse simetrik olduğu için 1.'den başlamaz. 3. şüpheli: çanlar dışındaki şekillerin beklendiği birçok durum var. 4. Orijinal ölçümlerin kalitesi çoğu zaman herhangi bir histogramdan belirgin olmadığı, ancak genellikle dağılımın çok ince yapısına dikkat edilerek en iyi şekilde incelendiği için şüphelidir.
Nick Cox

2.Eğer simetrik değil simetrik değildir. Neredeyse hamile kalamazsınız: Hamile ya da değil.
Sergo Cusiani

2
Tabii, ancak verilerdeki kesin simetri o kadar nadirdir ki, eğer "simetrik" dersem, birisi de buna karşı çıkabilecektir. Neredeyse simetrik olmak çok kolay; işte bu yüzden ve nasıl çarpıklık ölçütümüz var.
Nick Cox

1
Kaydetti, ancak yorumunuz geneldi ve şimdi verdiğiniz bağlamdan yoksundu. Buna karşılık "şüpheli" değil "yanlış" dedim. Benim ana yorumum, cevabınızın gerçekten çöp kutusu büyüklüğünü veya eşdeğerde çöp sayısını seçmek konusunda konuya fazla bir şey katmadığı yönünde. Bunun zor olduğu başka bir örneğe sahip olmak, aslında bir cevap değil, soru üzerinde bir dönüşdür.
Nick Cox
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.