Histograma dayalı verilerin yaklaşık dağılımını değerlendirme


111

Verilerimin histograma dayalı olarak üstel olup olmadığını görmek istediğimi varsayalım (yani sağa çarpık).

Verileri nasıl gruplandırdığım veya böldiğime bağlı olarak, çok farklı histogramlar elde edebilirim.

Histogramlardan oluşan bir set verinin üstel olduğu görülüyor. Başka bir set, verilerin üssel olmadığını gösterir. Histogramlardan iyi tanımlanmış dağılımları nasıl tanımlayabilirim?


20
Neden açıklayacağınız problemler iyi kurulmuş olduğundan ve qq çizimleri ve uygunluk testlerinin iyiliği gibi alternatif araçları göz önüne aldığınız için, histogramları neden unutmuyorsunuz?
whuber

Yanıtlar:


163

Şekil oluşturmak için histogramları kullanmada zorluk

Histogramlar genellikle kullanışlı ve bazen yararlı olsalar da yanıltıcı olabilirler. Görünümleri, depo sınırlarının konumlarındaki değişikliklerle oldukça değişebilir.

Bu sorun uzun zamandır bilinmekteydi *, olması gerektiği kadar olmasa da - ilköğretim tartışmalarında (istisnalar olmasına rağmen) nadiren görüyorsunuz.

* örneğin, Paul Rubin [1] şöyle söylemiştir: " histogramdaki uç noktaların değiştirilmesinin görünümünü önemli ölçüde değiştirebileceği iyi bilinmektedir ". .

Histogramları tanıtırken daha yaygın olarak tartışılması gereken bir konu olduğunu düşünüyorum. Bazı örnekler ve tartışma yapacağım.

Neden bir veri setinin tek bir histogramına güvenmek konusunda dikkatli olmalısınız?

Bu dört histograma bir göz atın:

Dört histogram

Bu dört farklı görünümlü histogram.

Aşağıdaki verileri yapıştırın (burada R kullanıyorum):

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)

O zaman onları kendin üretebilirsin:

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)

Şimdi bu şerit grafiğe bakın:

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 şerit tablosu

(Hala belli değil, her kümesinden Annie'nin verilerini çıkarmak ne olacağını görmek: head(matrix(x-Annie,nrow=40)))

Veriler her seferinde 0.25 oranında sola kaydırıldı.

Yine de histogramlardan aldığımız izlenimler - sağ çarpık, düzgün, sol çarpık ve iki modlu - tamamen farklıydı. İzlenimlerimiz tamamen , asgari değere göre ilk bin orijininin yerini belirledi.

Bu yüzden sadece 'üstel' vs 'gerçekten üstel değil' değil, sadece sağdan çarpma 'ya da' sol çarpma 'ya da' bimodal 'vs' üniforma 'sadece kutularınızın başladığı yere hareket ederek.


Düzenleme: Binwidth değiştirirseniz, bunun gibi şeyler alabilirsiniz:

Çan vs çarpık

Bu , her iki durumda da aynı 34 gözlemdir, sadece biri , biri de genişlik olan , farklı kesme noktaları .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)

Şık, ha?

Evet, bu veriler bunu yapmak için kasten oluşturuldu ... ama ders açık - bir histogramda gördüğünüz şey verilerin özellikle doğru izlenimi olmayabilir.

Ne yapabiliriz?

Histogramlar yaygın şekilde kullanılır, elde edilmesi sıklıkla uygundur ve bazen beklenir. Bu tür problemleri önlemek veya azaltmak için ne yapabiliriz?

As Nick Cox ilgili soruya bir yorum işaret : başparmak kuralı hep kutu genişliğine ve bin kökenli hakiki olması muhtemeldir farklılıklara sağlam detayları olmalıdır; Bunun için kırılgan ayrıntıların sahte veya önemsiz olması muhtemeldir .

En azından histogramları her zaman birkaç farklı genişlikte veya kutu kökenli veya tercihen her ikisinde de yapmalısınız.

Alternatif olarak, bir bant genişliği çok geniş olmayan bir çekirdek yoğunluğu tahmini kontrol edin.

Histogramların keyfiyetini azaltan bir diğer yaklaşım ise ortalama kaydırılmış histogramlardır ,

Ortalama kaydırılmış histogram

(bu en son veri kümesinden biri) ancak bu çabaya giderseniz, bir çekirdek yoğunluğu tahmini kullanabileceğinizi düşünüyorum.

Histogram yapıyorum (konuyu tam olarak bilmeme rağmen kullanırım), neredeyse her zaman tipik program varsayılanlarının verme eğiliminde olduğundan çok daha fazla çöp kutusu kullanmayı tercih ederim ve çok sık olarak değişen bölme genişliğine sahip birkaç histogram kullanmayı seviyorum (ve bazen de köken). İzlenimde makul bir şekilde tutarlılarsa, bu problemi yaşama olasılığınız düşüktür ve tutarlı değilse, daha dikkatli görünmeyi biliyorsunuzdur, belki bir çekirdek yoğunluğu tahmini, deneysel bir CDF, bir QQ grafiği veya başka bir şey deneyiniz. benzer.

Histogramlar bazen yanıltıcı olsa da, kutu lekeleri bu tür sorunlara daha yatkındır; Bir kutu ile "daha fazla kutu kullan" deme yeteneğin bile yok. Dört çok farklı veri setlerini görün bu yazı veri kümelerinin biri oldukça çarpık olmasına rağmen, aynı simetrik kutudiyagramlar ile tüm.

[1]: Rubin, Paul (2014) "Histogram Kötüye Kullanımı!",
Blog postası, VEYA bir OB dünyasında , 23 Ocak 2014
link ... (alternatif bağlantı)


1
Pratik olarak her ihtiyaç grafiği bu gibi verileri toplar. Kutular, sadece önemli değil (eksen boyunca bir pikselin genişliği) önemli değil mi?
AJMansfield

1
@AJMansfield Bu biraz "her dağılım ayrıktır" demeye benziyor - kelimenin tam anlamıyla doğru olsa da, konuyu gizliyor. Bindirilmiş bir tahmin edicideki tipik bir kutu sayısı, tipik bir piksel sayısından çok daha küçüktür ... ve kenar yumuşatma özelliğini kullanan grafiklerde, 'etkili' piksel sayısı daha büyüktür (ayırt etmek olasıdır) piksel arasındaki konumlar arasındaki farklar)
Glen_b

2
Temel sorun, histogramların ağır bir şekilde çöp kutusu boyutuna dayanmasıdır. Bunu önceden belirlemek zordur.

29

Bir çekirdek yoğunluğu veya logspline grafiği, histograma kıyasla daha iyi bir seçenek olabilir. Hala bu yöntemlerle ayarlanabilecek bazı seçenekler var, ancak bunlar histogramlardan daha az kararsız. Ayrıca qqpotlar var. Verilerin teorik bir dağılıma yeterince yakın olup olmadığını görmek için hoş bir araç:

 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

Bu fikrin kısa versiyonu (hala ayrıntılar için makaleyi okuyunuz), boş dağıtımdan veri üretiyor ve bunlardan birini orijinal / gerçek veri ve geri kalanını teorik dağıtımdan simüle eden birkaç grafik oluşturuyorsunuz. Ardından grafikleri, orijinal verileri görmemiş birine (muhtemelen kendinize) sunuyorsunuz ve gerçek verileri seçebileceklerini görüyorsunuz. Eğer gerçek verileri tanımlayamazlarsa, o zaman null değerine karşı kanıtınız olmaz.

vis.testR TeachingDemos paketinde fonksiyonu bu testin bir form uygulamaya yardımcı olur.

İşte hızlı bir örnek. Aşağıdaki grafiklerden biri, 10 serbestlik dereceli dağılımda üretilen 25 nokta, diğeri ise aynı ortalama ve varyansa sahip normal bir dağılımdan üretilmektedir.

görüntü tanımını buraya girin

vis.testO zaman bu arsa yarattı ve işlev farklı olduğunu düşünüyorum parsellerin, işlem 2 kez daha (3 toplam) tekrarlar seçmenize ister.


@ScottStafford, yukarıdaki arsanın bir kopyasını ekledim. Bu, qqplot kullanır ancak fonksiyon aynı zamanda histogramlar üretecektir ya da yoğunluk grafikleri programlanabilir.
Greg Snow,

28

Kümülatif dağılım grafikleri [ MATLAB , R ] - veri değerlerinin kesirini bir değer aralığına eşit veya daha küçük bir değere çizdiğiniz yer - ampirik verilerin dağılımına bakmanın en iyi yoludur. Örneğin, R'de üretilen bu verilerin ECDF'leri :

Alice, Brian, Chris ve Zoe'nin ECDF arazileri

Bu, aşağıdaki R girişiyle (yukarıdaki verilerle) oluşturulabilir:

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")

Görebildiğiniz gibi, bu dört dağıtımın sadece birbirlerinin çevirileri olduğu açıkça görülüyor. Genel olarak, ECDF'lerin verilerin deneysel dağılımını görselleştirmek için faydaları şunlardır:

  1. Verileri, birikimden başka bir dönüşüm olmadan gerçekleştiği için sunarlar; bu nedenle, verileri nasıl işlediğinizden dolayı histogramlar ve çekirdek yoğunluğu tahminlerinde olduğu gibi, yanlışlıkla kendinizi aldatma olasılığı yoktur.
  2. Her nokta, ondan önce ve sonra tüm veriler tarafından tamponlandığından, verilerin dağılımını açık bir şekilde görsel olarak algılar. Bunu, her bir yoğunluğun doğruluğunun doğal olarak tamponlanmamış olduğu ve bu nedenle bindirme (histogramlar) veya düzleştirme (KDE'ler) ile tahmin edilmesi gereken kümülatif olmayan yoğunluk görselleştirmeleri ile karşılaştırın.
  3. Verilerin iyi bir parametrik dağılım, bir miktar karışım veya dağınık olmayan bir parametrik dağılım izlemesinden bağımsız olarak eşit çalışırlar.

Tek hile, ECDF'lerin nasıl düzgün bir şekilde okunacağını öğrenmektir: sığ eğimli alanlar seyrek dağılım, dik eğimli alanlar yoğun dağılım anlamına gelir. Bununla birlikte, onları okumayı bıraktığınızda, ampirik verilerin dağılımına bakmak için harika bir araçtır.


CDF'leri okumak için herhangi bir belge var mı? mesela senin gibi benim ED dağılımı o zaman \ kikare, görünüşleri dayalı normal veya diğer dağıtım içine sezgiye dayalı tahmin sınıflandırabilirsiniz nasıl yukarıda gösterdi varsa neyi
stats101

2

Öneri: Histogramlar genellikle sadece çöp kutusunun orta noktasında meydana gelen x ekseni verilerini atar ve daha büyük doğrulukta yer alan x ekseni ölçümlerini çıkarır. Bunun fit türevleri üzerindeki etkisi oldukça büyük olabilir. Bize önemsiz bir örnek verelim. Bir Dirac deltasının klasik türevini aldığımızı, ancak değiştirdiğimizi varsayalım, ancak bazı keyfi ortanca konumdaki sonlu bir ölçekle (tam genişlik yarı-maksimum) Cauchy dağılımına başlayalım. Sonra ölçek sıfıra giderken limiti alırız. Histogramın klasik tanımını kullanırsak ve çöp kutusu boyutlarını değiştirmezsek, konumu ya da ölçeği yakalayamayız. Bununla birlikte, sabit genişlikte bile kutuların içinde medyan bir konum kullanırsak, ölçek, bin genişliğine göre küçük olduğunda ölçek olmasa da, her zaman konumu yakalayacağız.

Verilerin eğriltildiği değerlere uydurmak için, sabit kutu orta noktaların kullanılması, yukarıdaki soru ile ilgili olduğunu düşündüğüm, o bölgedeki tüm eğri parçasını kaydırır.

1. ADIM komik histoİşte neredeyse bir çözüm. Kullandığımn=8Her histogram kategorisinde, bunları sadece her bölmeden ortalama x ekseni değeri olarak gösterdim. Her histogram kutusu 8 değerine sahip olduğundan, dağıtımların tümü düzgün görünüyor ve bunları göstermek için dikey olarak dengelemek zorunda kaldım. Ekran doğru cevap değil, bilgi olmadan değil. Doğru bize gruplar arasında bir x ekseni ofseti olduğunu söyler. Ayrıca, gerçek dağılımın biraz U şeklinde göründüğünü de söyler. Neden? Ortalama değerler arasındaki mesafenin merkezlerde ayrı olduğunu ve kenarlarda daha yakın olduğunu unutmayın. Bu nedenle, bunu daha iyi bir şekilde gösterebilmek için, x eksenindeki tüm ortalama bin değerlerini eşit hale getirmek için tüm örnekleri ve her bin sınır örneğinin kesirli miktarlarını ödünç almalıyız. Bunu düzeltmek ve düzgün şekilde görüntülemek, biraz programlama gerektiriyor. Fakat, sadece histogramları oluşturmanın bir yolu olabilir, böylece temel verileri aslında mantıksal bir biçimde görüntülerler. Veri aralığını kapsayan toplam kutu sayısını değiştirirsek, şekil yine de değişecektir, ancak fikir, kazara binerek yaratılan sorunların bir kısmını keyfi olarak çözmek.

2. ADIM Yani araçları daha eşit aralıklarla yerleştirmeye çalışmak için depolar arasında borç almaya başlayalım.görüntü tanımını buraya girin

Şimdi, ortaya çıkmaya başlayan histogramların şeklini görebiliriz. Ancak araçlar arasındaki fark, sadece depolar arasında değişecek tam sayıdaki numuneye sahip olduğumuz için mükemmel değildir. Tamsayı değerlerinin y ekseni üzerindeki kısıtlamasını kaldırmak ve eşitlik x ekseninin ortalama değerlerini yapma işlemini tamamlamak için, bir numunenin kesirlerini bölmeler arasında paylaşmaya başlamalıyız.

Adım 3 Değerlerin ve değerlerin bölümlerinin paylaşımı. histo3

Görüldüğü gibi, bir değerin parçalarının bir çöp teli sınırında paylaşılması, ortalama değerler arasındaki mesafenin homojenliğini artırabilir. Bunu verilen verilerle üç ondalık basamağa yapmayı başardım. Bununla birlikte, sanırım, verilerin kaba olması izin vermeyeceğinden, ortalama değerler arasındaki uzaklığı genel olarak tam olarak eşitleyemez.

Bununla birlikte, bir kişi çekirdek yoğunluğu tahmini kullanmak gibi başka şeyler de yapabilir .

Burada Annie'nin verilerini 0,1, 0,2 ve 0,4 Gauss düzleştirmeleri kullanarak sınırlı çekirdek yoğunluğu olarak görüyoruz. Diğer konular, aynı türden değişen fonksiyonlara sahip olacak, biri benim yaptığımla aynı şeyi yapacaksa, yani her bir veri setinin alt ve üst sınırlarını kullanmalıdır. Yani, bu artık bir histogram değil, bir PDF'dir ve siğillerin bir kısmı olmadan histogramla aynı role sahiptir.

kernelsmooth

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.