Mean 29.8 dan std 3.67 meringkas data suhu 15 hari menjadi dua angka, tetapi dua angka itu tidak bisa membedakan data yang simetris dari data yang miring atau berk dua puncak. Histogram menjawab pertanyaan tentang bentuk sebaran: nilai menumpuk di mana, sebar lebar, dan seberapa simetris. Cara kerjanya memotong rentang data menjadi interval (bin) lalu menghitung berapa observasi jatuh di tiap interval — frekuensi menjadi tinggi batang. Cakupan chapter ini:
- Cara menghitung dan menggambar histogram dengan
hist histogram()modern (R2014b+):NumBins, tepi bin,Normalization- Empat jenis normalisasi: count, probability, pdf, cumulative
- Overlay kurva normal di atas histogram
- Pengenalan
histogram2untuk dua variabel
Menghitung Frekuensi per Bin #
Aturannya: histogram membagi rentang [min, max] menjadi bin selebar sama, lalu menghitung jumlah observasi per bin. Mekanismenya: hist(x, nbins) menentukan tepi bin dari rentang data, menjatuhkan tiap nilai ke bin pemiliknya, dan menggambar batang setinggi jumlah itu. Versi legacy hist hadir sejak MATLAB awal dan berjalan di lingkungan uji kita; versi modern histogram dibahas di bagian berikutnya.
suhu = [23 25 26 28 28 29 29 30 30 31 31 32 33 35 37];
fprintf('n : %d\n', numel(suhu));
fprintf('mean : %.2f\n', mean(suhu));
fprintf('std : %.2f\n', std(suhu));
fprintf('min/max : %d %d\n', min(suhu), max(suhu));
f = figure('visible', 'off');
hist(suhu, 5);
xlabel('Suhu (C)');
ylabel('Frekuensi');
title('Distribusi suhu 15 hari');
saveas(f, 'hist-suhu.png');
fprintf('Grafik tersimpan: hist-suhu.png\n');
delete(f);Output yang Dihasilkan:
n : 15
mean : 29.80
std : 3.67
min/max : 23 37
Grafik tersimpan: hist-suhu.pngGrafik yang tersimpan: lima batang dengan puncak di tengah (bin 30-an berisi 6 observasi) dan dua ekor yang menipis — bentuk yang mendekati lonceng. Satu perilaku hist yang penting: memanggil hist tanpa output menggambar, sedangkan memanggil dengan output ([n, centers] = hist(x, nbins)) hanya menghitung tanpa menggambar.
[n, centers] = hist(suhu, 5);
binwidth = centers(2) - centers(1);
fprintf('counts : %d %d %d %d %d\n', n);
fprintf('centers : %g %g %g %g %g\n', centers);
fprintf('binwidth : %g\n', binwidth);
fprintf('total : %d\n', sum(n));Output yang Dihasilkan:
counts : 2 3 6 2 2
centers : 24.4 27.2 30 32.8 35.6
binwidth : 2.8
total : 15Mari kita bedah baris-baris kode di atas:
- Baris 1 (
[n, centers] = hist(suhu, 5)):nberisi frekuensi per bin dancenterstitik tengah tiap bin — verifikasi: 2+3+6+2+2 = 15 sama dengan jumlah observasi. - Baris 2 (
binwidth = centers(2) - centers(1)): 27.2 − 24.4 = 2.8; lebar bin seragam sehingga selisih dua pusat berturutan selalu sama. - Baris 3-6 (
fprintf): mencetak hasil hitung ke Command Window — angka-angka ini yang menjamin histogram kita jujur (total bin = jumlah data).
histogram Modern dan hist Legacy #
MATLAB R2014b memperkenalkan histogram() sebagai pengganti hist — versi lama kini berstatus not recommended tetapi tetap berfungsi. histogram() mengembalikan objek yang bisa disimpan dan dimodifikasi, dengan argumen yang lebih kaya:
h = histogram(suhu, 5); % 5 bin
h = histogram(suhu, 23:2:37); % tepi bin eksplisit
h = histogram(suhu, 'BinLimits', [23 33]); % batasi rentang bin
h = histogram(suhu, 'Normalization', 'probability');Kode tersebut berjalan di MATLAB R2014b ke atas; GNU Octave belum menyediakan histogram(), sehingga berkas contoh.m chapter ini memakai hist yang portabel. Perbedaan praktis yang paling terasa:
| Aspek | hist (legacy) | histogram (R2014b+) |
|---|---|---|
| Menggambar | ya (tanpa output) | ya |
| Nilai balik | n, centers (vektor) | objek Histogram (properti: Values, BinEdges, NumBins) |
| Tepi bin | hist(x, v) (pusat bin) | histogram(x, edges) (tepi bin) |
| Normalisasi | tidak ada | Normalization: count/probability/pdf/cdf/… |
| Ubah jumlah bin setelah dibuat | gambar ulang | h.NumBins = 10 |
Empat Jenis Normalisasi #
Tinggi batang mentah (count) menjawab “berapa banyak”, tetapi pertanyaan lain butuh skala lain. Opsi Normalization pada histogram() mengubah apa yang diwakili tinggi batang:
| Normalisasi | Tinggi batang berarti | Ciri khas |
|---|---|---|
'count' (default) | jumlah observasi di bin | jumlah semua batang = N |
'probability' | peluang observasi jatuh di bin | jumlah semua batang = 1 |
'pdf' | estimasi fungsi densitas | luas semua batang = 1 |
'cumulative' | jumlah kumulatif sampai bin itu | batang terakhir = N (atau 1 versi ‘cdf’) |
Mekanismenya: tiap jenis membagi ulang nilai count — 'probability' membagi dengan N, 'pdf' membagi dengan N × lebar bin. Karena itulah overlay kurva teoretis ke histogram count membutuhkan pengali N * binwidth — kita mengembalikan skala pdf ke skala frekuensi.
Overlay Kurva Normal #
Aturannya: kurva densitas normal pdf(x) = exp(−(x−μ)²/2σ²) / (σ√2π) bisa ditumpangkan pada histogram sebagai pembanding bentuk; untuk histogram count, kurva diskalakan N * binwidth * pdf. Mekanismenya: hist menggambar batang, hold on menahan batang itu, lalu plot menggambar kurva merah dari titik-titik linspace yang rapat.
f2 = figure('visible', 'off');
hist(suhu, 5);
hold on;
mu = mean(suhu);
sig = std(suhu);
xx = linspace(min(suhu) - 3, max(suhu) + 3, 200);
yy = numel(suhu) * binwidth * ...
exp(-(xx - mu).^2 / (2 * sig^2)) / (sig * sqrt(2 * pi));
plot(xx, yy, 'r-', 'LineWidth', 1.5);
hold off;
xlabel('Suhu (C)');
ylabel('Frekuensi');
title('Histogram suhu + kurva normal');
saveas(f2, 'hist-normal.png');
fprintf('Grafik tersimpan: hist-normal.png\n');
fprintf('puncak : %.2f\n', max(yy));
delete(f2);Output yang Dihasilkan:
Grafik tersimpan: hist-normal.png
puncak : 4.57Mari kita bedah baris-baris kode di atas:
- Baris 4-5 (
mu,sig): parameter kurva diambil dari data — μ = 29.8 dan σ = 3.67, sehingga kurva “fit” secara parametrik, bukan diketik manual. - Baris 6 (
linspace(min(suhu)-3, max(suhu)+3, 200)): 200 titik dari 20 sampai 40 membuat kurva mulus, bukan patah-patah; melebar 3 unit di kedua ujung agar ekor kurva terlihat. - Baris 7-8 (
yy = numel(suhu) * binwidth * exp(...)): rumus pdf ditulis eksplisit (bukannormpdfmilik Statistics Toolbox) lalu diskalakan dengan N × 2.8 = 42 agar satuannya menjadi frekuensi per bin. - Baris 3 dan 10 (
hold on,hold off): tanpahold on,plotmenghapus batang histogram yang baru selesai digambar.
Grafik yang tersimpan: lima batang dengan kurva merah berpuncak 4.57 di sekitar suhu 29.8 — puncak batang (6) sedikit lebih tinggi dari kurva, ekor data lebih lebar di kanan; dengan 15 observasi, perbedaan sebesar ini masih wajar untuk variasi sampel.
histogram2: Dua Variabel Sekaligus #
Distribusi bivariat menjawab “apakah dua variabel menumpuk di wilayah yang sama” — misal suhu dan kelembapan tinggi bersamaan. Fungsi histogram2(x, y) (MATLAB, R2015b+) membagi bidang x-y menjadi bin persegi dan mewarnai tiap bin sesuai frekuensinya; histogram2(suhu, kelembapan, 10) meminta kisi 10×10 bin. histogram2 dan fungsi hitungannya histcounts2 sama-sama belum tersedia di Octave; untuk kebutuhan yang portabel, densitas dua variabel cukup dikenali lewat scatter plot berwarna (chapter Scatter Plot) atau surface plot dari frekuensi ter-agregasi (chapter Surface Plot).
Berkas contoh.m pada bagian bawah halaman menjalankan kedua grafik (hist dasar dan overlay kurva normal) lengkap dengan statistik mean, std, dan verifikasi total bin.
Ringkasan #
Histogram memotret bentuk sebaran lewat frekuensi per bin: hist versi legacy menggambar dan menghitung (dengan output), histogram() modern menambahkan objek dengan NumBins, tepi bin eksplisit, dan Normalization (count/probability/pdf/cumulative). Overlay kurva normal menskalakan pdf dengan N * binwidth agar satuannya cocok dengan frekuensi, dan histogram2 memperluas konsep yang sama ke dua variabel. Setelah bentuk sebaran satu variabel terlihat, pertanyaan berikutnya adalah “bagaimana membandingkan sebaran antar grup” — inilah pekerjaan box plot, chapter berikutnya.