Apa yang ditunjukkan histogram
Histogram menjawab satu pertanyaan tentang satu variabel numerik: bagaimana nilai-nilainya tersebar? Histogram memotong rentang data menjadi interval-interval yang berurutan (bin), menghitung berapa banyak observasi yang masuk ke setiap bin, lalu menggambar satu batang per bin dengan tinggi sesuai hitungan itu. Di tempat datanya padat, batangnya tinggi; di tempat datanya jarang, batangnya pendek.
Satu gambar itu memberi tahu hal-hal yang tidak bisa diberikan rata-rata dan standar deviasi: apakah datanya punya satu puncak atau dua, apakah simetris atau miring ke salah satu ekor, dan apakah ada nilai nyasar yang jauh dari yang lain. Biasanya ini plot pertama yang dibuat saat kamu bertemu dataset baru, berdampingan dengan angka-angka dari statistik deskriptif.
Di R, fungsinya adalah hist(), dan cukup satu baris.
Histogram pertamamu dengan hist()
Mari kita simulasikan tinggi badan 200 orang, berdistribusi normal di sekitar 170 cm dengan standar deviasi 10 (lihat bilangan acak untuk apa yang dilakukan set.seed() dan rnorm()):
set.seed(42)
heights <- rnorm(200, mean = 170, sd = 10)
hist(heights)
R memilih bin-nya sendiri dan menggambar tumpukan batang berbentuk lonceng: batang pendek di dekat 145 cm, naik melewati angka 160-an, memuncak di sekitar 170, lalu turun secara simetris setelah 190. Sumbu vertikalnya berlabel "Frequency" (hitungan mentah), dan judul serta label sumbunya berasal dari nama variabel.
Pengaturan default-nya sengaja polos. Argumen-argumen untuk mempercantik tampilan yang biasa dipakai semuanya bekerja di sini:
hist(heights,
main = "Distribution of heights",
xlab = "Height (cm)",
col = "steelblue",
border = "white")
col mengisi warna batang, border mewarnai garis tepinya; border = "white" memberikan tampilan batang yang terpisah dengan bersih seperti di kebanyakan publikasi. Semua yang dikatakan panduan plot() tentang warna dan judul berlaku tanpa perubahan.
Lebar bin: argumen breaks
Argumen terpenting hist() adalah breaks, karena lebar bin menentukan cerita yang disampaikan plot. Data yang sama, dua pengaturan:
hist(heights, breaks = 5) # five wide bins: a crude, blocky bell
hist(heights, breaks = 30) # thirty narrow bins: detail, plus noise
Dengan breaks = 5, histogramnya begitu kasar sehingga semuanya terlihat seperti satu punuk yang mulus; gerombolan kedua atau celah di data tidak akan terlihat. Dengan breaks = 30, kamu melihat struktur yang halus, tapi goyangan acak mulai menyamar sebagai fitur. Tidak ada yang "benar"; langkah yang jujur adalah mencoba beberapa pengaturan dan melihat fitur mana yang tetap bertahan.
breaks menerima tiga bentuk:
- Sebuah angka:
breaks = 30adalah saran jumlah bin. R menyesuaikannya supaya jatuh di batas yang rapi, jadi kamu mungkin mendapat 28 atau 33 bin. Ini mengejutkan semua orang setidaknya sekali. - Vector berisi titik potong:
breaks = seq(140, 200, by = 5)menentukan tepi bin yang persis, tanpa tawar-menawar. Pakai ini saat bin harus sejajar di beberapa histogram yang sedang kamu bandingkan. - Nama aturan:
breaks = "FD"untuk Freedman-Diaconis, yang memilih lebar bin dari sebaran data dan ukuran sampel, dan berperilaku baik pada data yang miring.
Histogram densitas dan kurva normal
Secara default, tinggi batang adalah hitungan (freq = TRUE). Mengatur freq = FALSE mengubah skala batang sehingga total luasnya adalah 1, yaitu skala densitas. Bentuknya tidak berubah; yang berubah adalah sumbu vertikalnya. Gunanya adalah histogram densitas berada pada skala yang sama dengan fungsi kepadatan peluang, sehingga kamu bisa menumpangkan kurva teoretis langsung di atas data:
hist(heights,
freq = FALSE,
col = "gray90",
main = "Heights vs. a normal curve",
xlab = "Height (cm)")
curve(dnorm(x, mean = mean(heights), sd = sd(heights)),
add = TRUE, col = "tomato", lwd = 2)
curve() dengan add = TRUE menggambar kurva lonceng di atas histogram yang sudah ada (x di dalam dnorm(x, ...) adalah penanda yang diisi oleh curve(), bukan variabel milikmu). Kalau batangnya mengikuti kurva dengan rapat, model normal masuk akal; di tempat batangnya menggembung menjauhi kurva (ekor yang berat, puncak kedua), modelnya melewatkan sesuatu. Lewati freq = FALSE, maka kurvanya akan merayap tak berguna di dasar plot, karena hitungan dan densitas berada pada skala yang berbeda.
Angka di balik batang
hist() tidak hanya menggambar; fungsi ini juga mengembalikan pembagian bin-nya sebagai list. Dengan plot = FALSE, ia melewatkan penggambaran sepenuhnya dan hanya menghitung, artinya yang ini bisa kamu jalankan di sini:
h$counts adalah histogram dalam bentuk data: setiap angka adalah tinggi satu batang. Baris table(cut(...)) adalah padanannya dalam mode teks (cut() membagi nilai ke dalam bin, table() menghitung setiap bin), dan cukup bagus sebagai pemeriksaan kewajaran yang dicetak sebelum atau sebagai pengganti plot. Kalau kamu melakukan penugasan tanpa plot = FALSE (h <- hist(heights)), R menggambar dan mengembalikan list-nya; penugasan tidak mencegah plotnya muncul.
Histogram dengan ggplot2
Versi ggplot2 menukar breaks dengan binwidth, yang sering kali menjadi pengatur yang lebih alami: kamu menyebutkan lebar satu bin dalam satuan data, bukan berapa banyak bin yang kamu inginkan:
library(ggplot2)
ggplot(data.frame(heights), aes(x = heights)) +
geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
labs(title = "Distribution of heights", x = "Height (cm)", y = "Count")
binwidth = 5 berarti setiap batang mencakup 5 cm. ggplot2 memberi peringatan kalau kamu tidak mengatur binwidth dan diam-diam memakai default 30 bin; perhatikan peringatan itu, karena default-nya jarang menjadi lebar yang tepat untuk datamu. Untuk melihat sekilas satu variabel, hist() lebih sedikit ketikan; ggplot2 layak dipakai saat histogramnya butuh facet, kelompok, atau tema yang konsisten dengan gambar-gambarmu yang lain.
Yang kamu bawa pulang
- Histogram menunjukkan distribusi satu variabel numerik:
hist(x)dan selesai. breaksadalah argumen yang penting: angka hanyalah saran, vector menentukan tepi yang persis,"FD"memilih lebar yang bisa dipertanggungjawabkan. Selalu coba lebih dari satu pengaturan.freq = FALSEberalih ke skala densitas, dan itulah yang membuatcurve(dnorm(...), add = TRUE)bisa menumpangkan kurva normal dengan bermakna.hist(x, plot = FALSE)mengembalikan bin sebagai data ($breaks,$counts,$mids);table(cut(x, breaks))adalah padanannya dalam teks saja.- Di ggplot2,
geom_histogram(binwidth = ...), dan atur sendiribinwidth-nya.
Berikutnya: boxplot, plot distribusi yang benar-benar bersinar saat kamu membandingkan kelompok secara berdampingan.
Pertanyaan yang sering diajukan
Bagaimana cara membuat histogram di R?
Panggil hist(x) pada sebuah numeric vector. R membagi rentang x menjadi beberapa kelompok (bin) dan menggambar satu batang per bin, dengan tinggi batang menunjukkan berapa banyak nilai yang masuk ke dalamnya. Tambahkan breaks = untuk mengatur jumlah bin dan col = untuk mewarnai batangnya.
Apa fungsi argumen breaks di hist()?
Argumen ini mengatur pembagian bin. Satu angka seperti breaks = 30 adalah saran jumlah bin yang dipakai (R membulatkannya ke batas yang rapi), vector seperti breaks = seq(140, 200, by = 5) menentukan titik potong yang persis, dan breaks = "FD" memakai aturan Freedman-Diaconis.
Bagaimana cara menumpangkan kurva normal pada histogram di R?
Gambar histogram pada skala densitas dengan freq = FALSE, lalu tambahkan kurvanya dengan curve(dnorm(x, mean = mean(data), sd = sd(data)), add = TRUE). Pada skala frekuensi, kurvanya akan tergeletak tak berguna di dekat nol, jadi freq = FALSE wajib dipakai.
Apa perbedaan histogram dan diagram batang?
Histogram mengelompokkan satu variabel numerik, jadi sumbu horizontalnya adalah skala kontinu dan batangnya bersentuhan. Diagram batang membandingkan kategori yang terpisah, jadi batangnya berjarak. Di R, itu berarti hist() untuk angka dan barplot() untuk hitungan kategori.