Menghitung jumlah optimal tempat sampah dalam histogram

80

Saya tertarik menemukan metode seoptimal mungkin untuk menentukan berapa banyak nampan yang harus saya gunakan dalam histogram. Data saya harus berkisar antara 30 hingga 350 objek paling banyak, dan khususnya saya mencoba menerapkan ambang (seperti metode Otsu) di mana objek "baik", yang saya harus memiliki lebih sedikit dan harus lebih tersebar, dipisahkan dari " objek buruk, yang seharusnya lebih padat nilainya. Nilai konkret akan memiliki skor 1-10 untuk setiap objek. Saya memiliki 5-10 objek dengan skor 6-10, dan 20-25 objek dengan skor 1-4. Saya ingin menemukan pola binning histogram yang umumnya memungkinkan sesuatu seperti metode Otsu untuk membatasi objek dengan skor rendah. Namun, dalam implementasi Otsu yang saya lihat, ukuran bin adalah 256, dan seringkali saya memiliki lebih sedikit poin data 256, yang bagi saya menunjukkan bahwa 256 bukan nomor bin yang baik. Dengan sedikit data, pendekatan apa yang harus saya ambil untuk menghitung jumlah sampah yang akan digunakan?

Tony Stark
sumber
Saya pikir aturan Sturges dapat digunakan untuk n <200; di mana n adalah jumlah pengamatan
venkasub

Jawaban:

95

Aturan Freedman-Diaconis sangat kuat dan bekerja dengan baik dalam praktiknya. Lebar bin diatur ke . Jadi jumlah bin adalah , di mana adalah jumlah pengamatan, maks adalah nilai maksimum dan min adalah nilai minimum.h=2×IQR×n1/3(maxmin)/hn

Di basis R, Anda dapat menggunakan:

hist(x, breaks="FD")

Untuk pustaka plot lain tanpa opsi ini (mis., ggplot2), Anda dapat menghitung binwidth sebagai:

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

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)
Rob Hyndman
sumber
2
@nico. Default dalam R adalah breaks = "Sturges" yang tidak selalu memberikan hasil yang baik.
Rob Hyndman
4
Bagaimana cara menghitung IQR?
Kurt Mueller
1
@KurtMueller IQR berarti rentang interkuartil. Cari kuartil 1 dan kuartil ke-3 dan perbedaannya adalah IQR. IQR sudah dilengkapi dengan R sehingga Anda dapat menggunakannya.
xiaodai
4
Jika saya tidak salah, jawabannya harus membacanum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha
1
nclass.FDtidak ada sembilan tahun yang lalu.
Rob Hyndman
18

Jika Anda menggunakan terlalu sedikit tempat sampah, histogram tidak benar-benar menggambarkan data dengan sangat baik. Jika Anda memiliki terlalu banyak tempat sampah, Anda mendapatkan tampilan sisir yang rusak, yang juga tidak memberikan kesan distribusi.

Salah satu solusinya adalah membuat grafik yang menunjukkan setiap nilai. Entah plot titik, atau distribusi frekuensi kumulatif, yang tidak memerlukan tempat sampah.

Jika Anda ingin membuat distribusi frekuensi dengan nampan dengan spasi yang sama, Anda harus memutuskan berapa banyak nampan (atau lebar masing-masing). Keputusan jelas tergantung pada jumlah nilai. Jika Anda memiliki banyak nilai, grafik Anda akan terlihat lebih baik dan lebih informatif jika Anda memiliki banyak tempat sampah. Halaman wikipedia ini mencantumkan beberapa metode untuk menentukan lebar bin dari jumlah pengamatan. Metode paling sederhana adalah mengatur jumlah bin sama dengan akar kuadrat dari jumlah nilai yang Anda binning.

Halaman ini dari Hideaki Shimazaki menjelaskan metode alternatif. Ini sedikit lebih rumit untuk dihitung, tetapi tampaknya melakukan pekerjaan dengan baik. Bagian atas halaman adalah aplikasi Java. Gulir melewati itu untuk melihat teori dan penjelasan, lalu terus menggulir untuk menemukan tautan ke makalah yang menjelaskan metode tersebut.

Harvey Motulsky
sumber
Tautan ke halaman Hideaki rusak. Saya tidak yakin apakah ini hal yang sama: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW
9

Mungkin makalah " Variasi pada histogram " oleh Denby dan Mallows akan menarik:

Tampilan baru ini yang kami namakan "dhist" (untuk histogram yang dipotong secara diagonal) mempertahankan fitur yang diinginkan dari hist dengan lebar yang sama dan hist dengan luas yang sama. Ini akan menampilkan nampan sempit tinggi seperti ea hist ketika ada paku dalam data dan akan menunjukkan outlier terisolasi seperti histogram biasa.

Mereka juga menyebutkan bahwa kode dalam R tersedia berdasarkan permintaan.

ars
sumber
5

Saya tidak yakin ini dianggap sebagai praktik yang sangat baik, tetapi saya cenderung menghasilkan lebih dari satu histogram dengan lebar nampan yang berbeda dan memilih histogram mana histgram yang akan digunakan berdasarkan histgram mana yang cocok dengan interpretasi yang saya coba komunikasikan dengan baik. Sementara ini memperkenalkan beberapa objektivitas ke dalam pilihan histogram, saya membenarkannya karena saya memiliki lebih banyak waktu untuk memahami data daripada orang yang saya beri histogram sehingga saya perlu memberi mereka pesan yang sangat ringkas.

Saya juga penggemar berat menyajikan histogram dengan jumlah poin yang sama di setiap bin daripada lebar bin yang sama. Saya biasanya menemukan ini mewakili data yang jauh lebih baik daripada lebar bin konstan meskipun mereka sulit untuk diproduksi.

Ian Turner
sumber
1
maaf, saya seharusnya menyebutkan bahwa saya perlu melakukan ini secara otomatis. opsi "melakukannya berkali-kali sampai saya menemukan satu yang paling sesuai dengan tujuan saya" tidak akan bekerja untuk saya. harus dilakukan secara komputasi ...
Tony Stark
4
Saya setuju - gagasan bahwa ada satu "lebar" lebar bin adalah asumsi penyederhanaan besar.
Hadley
5

Apakah Anda melihat metode Shimazaki-Shinomoto ?

Meskipun nampaknya mahal secara komputasi, ini mungkin memberi Anda hasil yang baik. Layak untuk dicoba jika waktu komputasi bukan masalah Anda. Ada beberapa implementasi metode ini di java, MATLAB, dll, di tautan berikut, yang berjalan cukup cepat: antarmuka web

Girardi
sumber
3

Jika saya perlu menentukan jumlah tempat sampah secara terprogram saya biasanya memulai dengan histogram yang memiliki lebih banyak tempat sampah daripada yang dibutuhkan. Setelah histogram diisi, saya kemudian menggabungkan nampan sampai saya memiliki cukup entri per bin untuk metode yang saya gunakan, misalnya jika saya ingin memodelkan Poisson-ketidakpastian dalam percobaan penghitungan dengan ketidakpastian dari distribusi normal sampai saya memiliki lebih dari sekitar 10 entri.

Benjamin Bannier
sumber
2

Silakan lihat jawaban ini sebagai pelengkap dari jawaban Mr. Rob Hyndman .

Untuk membuat plot histogram dengan interval yang sama persis atau 'binwidth' menggunakan aturan Freedman-Diaconis baik dengan ggplot2paket R dasar atau , kita dapat menggunakan salah satu nilai hist()fungsi yaitu breaks. Misalkan kita ingin membuat histogram qsecdari mtcarsdata menggunakan aturan Freedman-Diaconis. Dalam R dasar kita gunakan

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

Sementara itu, dalam ggplot2paket kami gunakan

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

Atau, sebagai alternatif

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

Semuanya menghasilkan plot histogram dengan interval dan jumlah tempat sampah yang sama persis seperti yang dimaksudkan.

Anastasiya-Romanova 秀
sumber
-5

Saya memiliki 600 pengamatan untuk Au g / t. Ukuran bin 1 memberi saya ini:masukkan deskripsi gambar di sini

Pilihan otomatis (tanpa rentang bin) memberikan ini:masukkan deskripsi gambar di sini

Data terlihat O'K pada grafik pertama dan kedua, seolah-olah tidak ada masalah dengan integritas data. Hanya ukuran bin 0,1 (g / t) yang menjawab pertanyaan: pengukuran keduanya tidak akurat dan tidak tepatmasukkan deskripsi gambar di sini

Penilaian saya: 1. Tidak ada teknik pengukuran di Bumi untuk menunjukkan nilai sebenarnya dari fenomena alam. Semua pengukuran adalah perkiraan, beberapa mendekati nilai sebenarnya. Itu tergantung pada desain pengambilan sampel, kalibrasi, kualifikasi manusia, dll. 2. Inilah sebabnya mengapa distribusi lebih condong daripada simetris. 3. Namun demikian, bentuk distribusi harus menyerupai bagian "seperti lonceng, setidaknya sekitar. Satu bel pada satu waktu (kecuali ada beberapa lingkungan geologis). 4. Distribusi frekuensi dengan manipulasi ukuran bin dapat membantu mengungkap pola seberapa akurat dan akurat pengukuran yang telah dilakukan. Sehingga orang perlu mengambil percobaan ukuran bin daripada aturan memotong batu.

Sergo Cusiani
sumber
2
Ini lebih merupakan komentar daripada jawaban kecuali Anda mengeja moral. Menurut saya moral adalah ini: Semua aturan adalah aturan praktis, beberapa memiliki basis statistik lebih dari yang lain, tetapi sebagian besar aturan mungkin tidak melakukan apa yang Anda inginkan jika distribusi memiliki kemiringan atau kurtosis yang sangat tinggi. Jadi, gunakan penilaian Anda juga.
Nick Cox
2
Anda telah menambahkan komentar, tetapi saya tidak jelas apakah ada yang berkontribusi detail baru yang bermanfaat untuk utas. 1. baik-baik saja bagi saya tetapi tidak masalah di sini. 2. tidak mengikuti dari 1. karena beberapa distribusi hampir simetris. 3. meragukan: ada banyak situasi di mana bentuk selain lonceng diharapkan. 4. juga meragukan karena kualitas pengukuran aslinya sering tidak jelas dari histogram apa pun, tetapi sering kali lebih baik diperiksa dengan memperhatikan struktur distribusi yang sangat halus.
Nick Cox
2.Secara simetris tidak simetris. Anda tidak mungkin hampir hamil: hamil atau tidak.
Sergo Cusiani
2
Tentu, tetapi simetri yang tepat dalam data sangat langka sehingga jika saya mengatakan "simetris" seseorang mungkin juga keberatan dengan itu. Sangat mudah untuk menjadi hampir simetris; itulah sebabnya dan bagaimana kita memiliki ukuran kemiringan.
Nick Cox
1
Tercatat, tetapi komentar Anda bersifat umum dan tidak memiliki konteks yang sekarang Anda berikan. Pada gilirannya saya berkata "meragukan" bukan "salah". Komentar utama saya tetap bahwa jawaban Anda tidak benar-benar menambah banyak untaian tentang cara memilih ukuran bin atau jumlah sampah yang setara. Memiliki contoh lain di mana itu sulit adalah putaran pada pertanyaan, bukan jawaban.
Nick Cox