Menilai perkiraan distribusi data berdasarkan histogram


111

Misalkan saya ingin melihat apakah data saya eksponensial berdasarkan histogram (yaitu condong ke kanan).

Bergantung pada bagaimana saya mengelompokkan atau menyimpan data, saya bisa mendapatkan histogram yang sangat berbeda.

Satu set histogram akan dibuat tampak bahwa data itu eksponensial. Set lain akan membuatnya tampak bahwa data tidak eksponensial. Bagaimana cara saya menentukan distribusi dari histogram dengan baik?


20
Mengapa tidak melupakan histogram, karena masalah yang Anda gambarkan sudah mapan, dan pertimbangkan alat alternatif seperti plot qq dan tes goodness of fit?
whuber

Jawaban:


163

Kesulitan menggunakan histogram untuk menyimpulkan bentuk

Sementara histogram seringkali berguna dan terkadang berguna, mereka bisa menyesatkan. Penampilan mereka dapat berubah cukup banyak dengan perubahan lokasi batas bin.

Masalah ini telah lama diketahui *, meskipun mungkin tidak seluas yang seharusnya - Anda jarang melihatnya disebutkan dalam diskusi tingkat dasar (meskipun ada pengecualian).

* misalnya, Paul Rubin mengatakannya seperti ini: " diketahui bahwa mengubah titik akhir dalam histogram dapat secara signifikan mengubah penampilannya ". .

Saya pikir ini adalah masalah yang harus dibahas secara lebih luas ketika memperkenalkan histogram. Saya akan memberikan beberapa contoh dan diskusi.

Mengapa Anda harus waspada mengandalkan histogram tunggal dari kumpulan data

Lihatlah empat histogram ini:

Empat histogram

Itu empat histogram yang terlihat sangat berbeda.

Jika Anda menempelkan data berikut ini (Saya menggunakan R di sini):

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)

Kemudian Anda dapat menghasilkannya sendiri:

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)

Sekarang lihat diagram strip ini:

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 bagan strip

(Jika masih belum jelas, lihat apa yang terjadi ketika Anda mengurangi data Annie dari setiap set head(matrix(x-Annie,nrow=40)):)

Data hanya bergeser ke kiri setiap kali dengan 0,25.

Namun kesan yang kami dapatkan dari histogram - condong ke kanan, seragam, condong ke kiri dan bimodal - sangat berbeda. Kesan kami sepenuhnya diatur oleh lokasi tempat asal pertama relatif terhadap minimum.

Jadi bukan hanya 'eksponensial' vs 'tidak-benar-benar-eksponensial' tetapi 'condong ke kanan' vs 'condong ke kiri' atau 'bimodal' vs 'seragam' hanya dengan memindahkan tempat sampah Anda mulai.


Sunting: Jika Anda memvariasikan binwidth, Anda bisa mendapatkan hal-hal seperti ini terjadi:

Miring vs bel

Itu 34 pengamatan yang sama dalam kedua kasus, hanya breakpoints berbeda, satu dengan binwidth dan yang lainnya dengan binwidth .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)

Bagus, kan?

Ya, data itu sengaja dibuat untuk melakukan itu ... tapi pelajarannya jelas - apa yang Anda pikir Anda lihat dalam histogram mungkin bukan kesan yang akurat tentang data tersebut.

Apa yang bisa kita lakukan?

Histogram banyak digunakan, sering kali nyaman untuk didapatkan dan kadang-kadang diharapkan. Apa yang bisa kita lakukan untuk menghindari atau mengurangi masalah seperti itu?

Seperti yang ditunjukkan Nick Cox dalam komentar untuk pertanyaan terkait : Aturan praktis harus selalu detail yang kuat untuk variasi dalam lebar bin dan asal bin mungkin asli; detail yang rapuh seperti itu cenderung palsu atau sepele .

Paling tidak, Anda harus selalu melakukan histogram di beberapa binwidth atau tempat asal yang berbeda, atau lebih baik keduanya.

Atau, periksa perkiraan kepadatan kernel pada lebar pita yang tidak terlalu lebar.

Satu pendekatan lain yang mengurangi kesewenang-wenangan histogram adalah rata - rata perubahan histogram ,

Rata-rata bergeser histogram

(itu salah satu dari kumpulan data terbaru) tetapi jika Anda pergi ke upaya itu, saya pikir Anda mungkin juga menggunakan estimasi kepadatan kernel.

Jika saya melakukan histogram (saya menggunakannya meskipun sangat menyadari masalah ini), saya hampir selalu lebih suka menggunakan nampan jauh lebih banyak daripada yang biasanya diberikan oleh bawaan program dan sangat sering saya suka melakukan beberapa histogram dengan lebar bin yang bervariasi. (dan, terkadang, asal). Jika mereka konsisten dalam kesan, Anda tidak mungkin memiliki masalah ini, dan jika mereka tidak konsisten, Anda tahu untuk melihat lebih hati-hati, mungkin mencoba estimasi kepadatan kernel, CDF empiris, plot QQ atau sesuatu serupa.

Walaupun histogram terkadang menyesatkan, boxplots bahkan lebih rentan terhadap masalah seperti itu; dengan boxplot Anda bahkan tidak memiliki kemampuan untuk mengatakan "gunakan lebih banyak sampah". Lihat empat set data yang sangat berbeda dalam postingan ini , semuanya dengan plotplot simetris yang identik, meskipun salah satu set datanya cukup miring.

[1]: Rubin, Paul (2014) "Penyalahgunaan Histogram!",
Posting blog, ATAU di dunia OB , 23 Januari 2014
tautan ... (tautan alternatif)


1
Praktis setiap grafik kebutuhan nampan data seperti ini. Tempat sampah cukup kecil (lebar satu piksel di sepanjang sumbu) sehingga tidak masalah?
AJMansfield

1
@AJMansfield Ini sedikit mirip dengan mengatakan "setiap distribusi diskrit" - sementara benar, itu mengaburkan masalah yang relevan. Jumlah tipikal dari bin dalam estimator binned jauh lebih kecil dari jumlah piksel yang khas ... dan dengan grafik apa pun yang menggunakan anti-aliasing, jumlah piksel 'efektif' lebih besar (karena berpotensi untuk membedakan perbedaan posisi antara piksel)
Glen_b

2
Masalah mendasarnya adalah histogram sangat bergantung pada ukuran nampan. Sulit untuk menentukan ini apriori.

29

Densitas kernel atau plot logspline mungkin merupakan opsi yang lebih baik dibandingkan dengan histogram. Masih ada beberapa opsi yang dapat diatur dengan metode ini, tetapi mereka kurang berubah-ubah daripada histogram. Ada qqplot juga. Alat yang bagus untuk melihat apakah data cukup dekat dengan distribusi teoritis dirinci dalam:

 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

Versi singkat dari ide (masih membaca makalah untuk lebih jelasnya) adalah bahwa Anda menghasilkan data dari distribusi nol dan membuat beberapa plot salah satunya adalah data asli / nyata dan sisanya disimulasikan dari distribusi teoritis. Anda kemudian menunjukkan plot kepada seseorang (mungkin diri Anda sendiri) yang belum melihat data asli dan melihat apakah mereka dapat memilih data nyata. Jika mereka tidak dapat mengidentifikasi data nyata maka Anda tidak memiliki bukti terhadap nol.

The vis.testfungsi dalam paket TeachingDemos untuk R membantu menerapkan bentuk tes ini.

Ini adalah contoh cepat. Salah satu plot di bawah ini adalah 25 poin yang dihasilkan dari distribusi dengan 10 derajat kebebasan, 8 lainnya dihasilkan dari distribusi normal dengan mean dan varians yang sama.

masukkan deskripsi gambar di sini

The vis.testfungsi menciptakan plot ini dan kemudian meminta pengguna untuk memilih mana dari plot mereka berpikir berbeda, kemudian mengulangi proses 2 kali (3 total).


@ScottStafford, saya menambahkan salinan plot di atas. Yang ini menggunakan qqplots tetapi fungsinya juga akan menghasilkan histogram atau plot kepadatan bisa diprogram.
Greg Snow

28

Plot distribusi kumulatif [ MATLAB , R ] - tempat Anda memplot fraksi nilai data kurang dari atau sama dengan rentang nilai - sejauh ini merupakan cara terbaik untuk melihat distribusi data empiris. Di sini, misalnya, adalah ECDF dari data ini , diproduksi di R:

Alur ECDF Alice, Brian, Chris dan Zoe

Ini dapat dihasilkan dengan input R berikut (dengan data di atas):

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

Seperti yang Anda lihat, secara visual jelas bahwa keempat distribusi ini hanyalah terjemahan satu sama lain. Secara umum, manfaat ECDF untuk memvisualisasikan distribusi data empiris adalah:

  1. Mereka hanya menyajikan data sebagaimana yang sebenarnya terjadi tanpa transformasi selain akumulasi, sehingga tidak ada kemungkinan untuk menipu diri Anda sendiri, karena ada dengan histogram dan perkiraan kepadatan kernel, karena cara Anda memproses data.
  2. Mereka memberikan rasa visual yang jelas dari distribusi data karena setiap titik buffered oleh semua data sebelum dan sesudahnya. Bandingkan ini dengan visualisasi kepadatan non-kumulatif, di mana akurasi setiap kepadatan secara alami tidak terganggu, dan karenanya harus diperkirakan baik dengan binning (histogram) atau smoothing (KDE).
  3. Mereka bekerja sama baiknya terlepas dari apakah data mengikuti distribusi parametrik yang bagus, beberapa campuran, atau distribusi non-parametrik yang berantakan.

Satu-satunya trik adalah mempelajari cara membaca ECDF dengan benar: daerah miring yang dangkal berarti distribusi jarang, daerah miring yang curam berarti distribusi padat. Namun, begitu Anda terbiasa membacanya, mereka adalah alat yang hebat untuk melihat distribusi data empiris.


Apakah ada dokumentasi yang tersedia untuk membaca CDF? misal bagaimana jika distribusi cdf saya seperti yang Anda tunjukkan di atas maka bagaimana kita dapat mengklasifikasikan \ taksiran ke dalam chisquare, normal atau distribusi lain berdasarkan penampilan
stats101

2

Saran: Histogram biasanya hanya menetapkan data sumbu x untuk terjadi di titik tengah nampan dan menghilangkan ukuran sumbu x lokasi yang lebih akurat. Efeknya pada derivatif of fit bisa sangat besar. Mari kita ambil contoh sepele. Misalkan kita mengambil derivasi klasik dari delta Dirac tetapi memodifikasinya sehingga kita mulai dengan distribusi Cauchy di beberapa lokasi median arbitrer dengan skala terbatas (lebar penuh setengah-maksimum). Lalu kita ambil batasnya saat skalanya menjadi nol. Jika kami menggunakan definisi klasik histogram dan tidak mengubah ukuran nampan kami tidak akan menangkap lokasi atau skala. Namun, jika kami menggunakan lokasi median di dalam nampan bahkan dengan lebar tetap, kami akan selalu menangkap lokasi, jika bukan skala saat skala relatif kecil terhadap lebar nampan.

Untuk nilai pas di mana data miring, menggunakan titik tengah bin tetap akan sumbu x menggeser seluruh segmen kurva di wilayah itu, yang saya percaya berhubungan dengan pertanyaan di atas.

LANGKAH 1 lucu histoIni hampir merupakan solusi. Saya menggunakann=8di setiap kategori histogram, dan hanya menampilkan ini sebagai nilai sumbu x rata-rata dari setiap nampan. Karena setiap nampan histogram memiliki nilai 8, distribusi semua terlihat seragam, dan saya harus mengimbanginya secara vertikal untuk menunjukkannya. Layar bukan jawaban yang benar, tetapi bukan tanpa informasi. Ini dengan benar memberi tahu kita bahwa ada offset sumbu x antar grup. Ini juga memberi tahu kita bahwa distribusi aktual tampaknya sedikit berbentuk U. Mengapa? Perhatikan bahwa jarak antara nilai rata-rata lebih jauh di tengah-tengah, dan lebih dekat di tepi. Jadi, untuk menjadikan ini representasi yang lebih baik, kita harus meminjam seluruh sampel dan jumlah fraksional dari setiap sampel batas bin untuk membuat semua nilai rata-rata bin pada sumbu x sama. Memperbaiki ini dan menampilkannya dengan benar akan membutuhkan sedikit pemrograman. Tapi, itu mungkin hanya cara untuk membuat histogram sehingga mereka benar-benar menampilkan data yang mendasarinya dalam beberapa format logis. Bentuknya masih akan berubah jika kita mengubah jumlah total sampah yang mencakup rentang data, tetapi idenya adalah untuk menyelesaikan beberapa masalah yang dibuat oleh binning secara sewenang-wenang.

LANGKAH 2 Jadi mari kita mulai meminjam di antara tempat sampah untuk mencoba membuat cara lebih merata.masukkan deskripsi gambar di sini

Sekarang, kita bisa melihat bentuk histogram mulai muncul. Tetapi perbedaan antara rata-rata tidak sempurna karena kami hanya memiliki jumlah sampel penuh untuk ditukar antar sampah. Untuk menghapus batasan nilai integer pada sumbu y dan menyelesaikan proses pembuatan nilai rata-rata sumbu x yang sama, kita harus mulai berbagi fraksi sampel di antara nampan.

Langkah 3 Berbagi nilai dan bagian dari nilai. histo3

Seperti yang dapat dilihat, pembagian bagian dari nilai pada batas bin dapat meningkatkan keseragaman jarak antara nilai rata-rata. Saya berhasil melakukan ini ke tiga tempat desimal dengan data yang diberikan. Namun, saya tidak bisa, saya tidak berpikir, membuat jarak antara nilai rata-rata persis sama secara umum, karena kekasaran data tidak akan mengizinkan itu.

Namun, seseorang dapat melakukan hal-hal lain seperti menggunakan estimasi kepadatan kernel .

Di sini kita melihat data Annie sebagai kepadatan kernel terbatas menggunakan pemulusan Gaussian 0,1, 0,2, dan 0,4. Subjek lain akan memiliki fungsi bergeser dari tipe yang sama, asalkan seseorang melakukan hal yang sama seperti yang saya lakukan, yaitu menggunakan batas bawah dan atas dari setiap kumpulan data. Jadi, ini bukan lagi histogram, melainkan PDF, dan ini melayani peran yang sama dengan histogram tanpa beberapa kutil.

kernelmooth

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.