Menanyakan kepuasan seluruh pelanggan toko di Indonesia artinya menjangkau jutaan orang — mahal, lambat, dan sering mustahil. Sampling menyelesaikannya: ukur sebagian, lalu tarik kesimpulan tentang keseluruhan, lengkap dengan ukuran ketidakpastiannya. Dua pertanyaan mengendalikan seluruh chapter: bagaimana memilih anggota sampel agar tidak bias, dan bagaimana mengukur seberapa jauh statistik sampel bisa meleset dari populasi. Cakupan materinya:

  • Populasi vs sampel, dan standard error std/sqrt(n)
  • Simple random sampling dengan randperm
  • Systematic dan stratified sampling
  • Bootstrap: sebaran statistik dari data itu sendiri

Populasi, Sampel, dan Standard Error #

Statistik sampel — mean, median, proporsi — adalah estimasi, bukan kebenaran populasi; estimasi yang diambil ulang akan bergeser. Mekanismenya: besar pergeseran itu diatur standard error (se), yang untuk mean bernilai s/√n dengan s simpangan baku sampel. Semakin bervariasi populasi, semakin besar galat; semakin besar sampel, semakin kecil galatnya. Kita ukur pada durasi sepuluh kunjungan pelanggan:

matlab
durasi = [12 18 15 22 25 14 20 17 19 16];   % menit
n = numel(durasi);
fprintf('n    = %d\n', n);
fprintf('mean = %.4f menit\n', mean(durasi));
fprintf('std  = %.4f menit\n', std(durasi));
fprintf('se   = %.4f menit\n', std(durasi)/sqrt(n));

Output yang Dihasilkan:

text
n    = 10
mean = 17.8000 menit
std  = 3.8816 menit
se   = 1.2275 menit

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (durasi = ...): sampel 10 kunjungan; mean 17.8 menit adalah estimasi mean populasi.
  2. Baris 5 (std(durasi)/sqrt(n)): se = 3.8816/√10 = 1.2275 — perkiraan seberapa jauh mean sampel lain akan berayun.
  3. Implikasi praktisnya: mean populasi diperkirakan berada di sekitar 17.8 ± 2×1.23 — aturan dua-sigma yang menjadi dasar Chapter Confidence Interval.

Bagaimana ukuran sampel memengaruhi galat? Kurva se = s/√n menjawabnya:

matlab
s = std(durasi);
for nn = [10 40 160 640]
  fprintf('n = %3d -> se = %.4f\n', nn, s/sqrt(nn));
end

Output yang Dihasilkan:

text
n =  10 -> se = 1.2275
n =  40 -> se = 0.6137
n = 160 -> se = 0.3069
n = 640 -> se = 0.1534

Empat kali lipat data hanya memangkas separuh galat — itulah harga √n. Survei nasional dengan “margin of error” kecil memang membutuhkan ribuan responden.

Simple Random Sampling #

Cara paling jujur mengambil sampel: setiap anggota populasi berpeluang sama terpilih. Mekanismenya di MATLAB: randperm(N, n) menghasilkan n indeks unik dari 1..N — sampling tanpa penggantian — lalu indeks itu memilih anggota populasi.

matlab
populasi = [55 58 60 62 64 65 67 68 70 71 73 74 ...
            75 77 79 80 82 84 86 90];          % skor kepuasan 20 toko
idx = randperm(numel(populasi), 6);
sampel = populasi(idx);
fprintf('terpilih %d dari %d toko\n', numel(sampel), numel(populasi));
fprintf('mean sampel   : %.4f\n', mean(sampel));
fprintf('mean populasi : %.4f\n', mean(populasi));

Indeks idx dan mean sampel berganti nilai pada setiap eksekusi — itulah hakikat pengambilan acak — sehingga blok output hanya menampilkan baris yang stabil:

Output yang Dihasilkan:

text
terpilih 6 dari 20 toko
mean populasi : 72.0000

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (populasi = ...): 20 skor kepuasan sebagai populasi mini — mean populasi 72.0000 adalah angka acuan yang ingin diperkirakan.
  2. Baris 3 (randperm(20, 6)): 6 indeks berbeda; setiap himpunan 6-toko berpeluang sama, definisi simple random sampling.
  3. Baris 5 (mean(sampel)): bergantung pada indeks terundi — bandingkan nilainya dengan 72 tiap kali dijalankan; kadang lebih tinggi, kadang lebih rendah.

Systematic Sampling #

Cara lain yang lebih murah: pilih setiap anggota ke-k setelah titik awal. Mekanismenya: interval k = N/n dihitung dari target ukuran sampel, lalu indeks berjalan 1, 1+k, 1+2k, … — penuh determinisme tanpa angka acak.

matlab
k = 4;                             % interval: setiap toko ke-4
idx = 1:k:numel(populasi);         % mulai dari toko pertama
sys = populasi(idx);
for t = 1:numel(idx)
  fprintf('tarikan %d: toko indeks %d, skor %g\n', t, idx(t), sys(t));
end
fprintf('mean sampel sistematik : %.4f\n', mean(sys));
fprintf('mean populasi          : %.4f\n', mean(populasi));

Output yang Dihasilkan:

text
tarikan 1: toko indeks 1, skor 55
tarikan 2: toko indeks 5, skor 64
tarikan 3: toko indeks 9, skor 70
tarikan 4: toko indeks 13, skor 75
tarikan 5: toko indeks 17, skor 82
mean sampel sistematik : 69.2000
mean populasi          : 72.0000

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (k = 4): populasi 20 dibagi target 5 sampel menghasilkan interval 4.
  2. Baris 2 (1:k:20): operator rentang menghasilkan indeks [1 5 9 13 17] — terdeterminasi penuh, hasil identik tiap eksekusi.
  3. Baris 8: mean sistematik 69.2 meleset 2.8 poin dari populasi — tanpa unsur acak, satu-satunya “keberuntungan” adalah titik awal 1.

Stratified Sampling #

Populasi sering terdiri dari kelompok yang berbeda karakter — dan SRS bisa saja tidak mengambil satu pun anggota kelompok minoritas. Solusinya: belah populasi menjadi stratum, lalu ambil sampel dari masing-masing kelompok secara proporsional. Mekanismenya: alokasi n×(ukuran stratum/N) anggota per stratum, masing-masing dipilih dengan randperm.

matlab
reguler = [55 60 62 65 68 70 72 75 78 80 82 85];  % 12 toko reguler
premium = [78 82 85 88 90 92 95 98];              % 8 toko premium
nSampel = 10;
nReg = round(nSampel * numel(reguler) / 20);      % alokasi proporsional
nPre = nSampel - nReg;
fprintf('alokasi: %d reguler + %d premium = %d toko\n', nReg, nPre, nSampel);
idxR = randperm(numel(reguler), nReg);
idxP = randperm(numel(premium), nPre);
fprintf('mean populasi reguler : %.4f\n', mean(reguler));
fprintf('mean populasi premium : %.4f\n', mean(premium));

Output yang Dihasilkan:

text
alokasi: 6 reguler + 4 premium = 10 toko
mean populasi reguler : 71.0000
mean populasi premium : 88.5000

Mari kita bedah baris-baris kode di atas:

  1. Baris 3-4 (nReg, nPre): 10 × 12/20 = 6 kursi untuk toko reguler dan 4 untuk premium — komposisi sampel meniru komposisi populasi.
  2. Baris 6-7 (randperm per stratum): pengacakan berjalan terpisah per kelompok; idxR dan idxP berganti tiap eksekusi.
  3. Baris 8-9: kedua stratum terpisah 17.5 poin — informasi yang akan terhapus jika kedua kelompok dilebur jadi satu angka rata-rata.

Bootstrap: Ketidakpastian Tanpa Rumus #

Kita sudah memakai rumus se = s/√n untuk mean. Tetapi bagaimana mengukur ketidakpastian median, atau rasio, atau statistik apa pun yang rumus galatnya tidak tersedia? Bootstrap menjawab: perlakukan sampel sebagai populasi mini, lalu resample dengan penggantian berkali-kali dan amati sebaran statistiknya.

matlab
sampel12 = [52 55 58 60 63 65 67 70 72 75 78 82];  % skor kepuasan 12 toko
B = 2000;
nB = numel(sampel12);
bootMean = zeros(B, 1);
for b = 1:B
  idxB = randi(nB, nB, 1);          % indeks boleh berulang
  bootMean(b) = mean(sampel12(idxB));
end
ci = quantile(bootMean, [0.025 0.975]);
fprintf('mean sampel         : %.4f\n', mean(sampel12));
fprintf('se teori (s/sqrt n) : %.4f\n', std(sampel12)/sqrt(nB));
fprintf('se bootstrap        : %.4f\n', std(bootMean));
fprintf('CI 95 persen        : [%.4f, %.4f]\n', ci(1), ci(2));

Output yang Dihasilkan:

text
mean sampel         : 66.4167
se teori (s/sqrt n) : 2.6953
se bootstrap        : 2.6021
CI 95 persen        : [61.5000, 71.5000]

Angka se bootstrap dan CI pada blok di atas bergeser sedikit pada tiap eksekusi karena resampling memakai randi; berkas contoh.m menyetel rng(42) di baris pertama sehingga nilainya dapat direproduksi di engine yang sama (di MATLAB angkanya sedikit berbeda). Mari kita bedah baris-baris kode di atas:

  1. Baris 4 (zeros(B,1)): 2000 hasil disiapkan — bootstrap adalah eksperimen berulang, bukan satu hitungan.
  2. Baris 6 (randi(nB, nB, 1)): 12 indeks dari 1..12 dengan penggantian — resample berukuran sama dengan sampel asli; beberapa toko muncul dua kali, yang lain absen.
  3. Baris 10 (quantile(bootMean, [.025 .975])): memotong 2.5% ekor kiri dan kanan sebaran bootstrap — interval 95% untuk mean populasi.
  4. Hasilnya: se bootstrap 2.60 dekat dengan rumus teori 2.70 — bootstrap menemukan kembali rumus yang sudah kita kenal, dan itulah alasan memercayainya untuk statistik yang rumusnya tidak ada.

Alur Pemilihan Metode #

Diagram ini membaca dari atas ke bawah: populasi masuk, metode pemilihan ditentukan struktur datanya (acak murni, pola interval, atau kelompok heterogen), statistik dihitung, lalu ketidakpastian dilengkapi lewat rumus atau bootstrap sebelum dilaporkan.

Tabel Perbandingan Metode #

MetodeMekanismeKekuatanKelemahan
SRSrandperm(N,n)tanpa bias by designbutuh daftar seluruh populasi
Systematicinterval ksederhana, meratarentan pola berkala
Stratifiedalokasi per stratumpresisi tinggi, kelompok terwakilibutuh info kelompok tiap anggota
Bootstrapresample dengan penggantianbekerja untuk statistik apa punbergantung kualitas sampel

Berkas contoh.m menjalankan keempat metode berurutan: standard error, SRS, systematic, stratified, lalu bootstrap 2000 resample.

Ringkasan #

Sampling menjembatani sampel dan populasi: SRS memberi peluang sama lewat randperm, systematic memangkas biaya dengan interval tetap, dan stratified menjaga kelompok minoritas tetap terwakili. Ketidakpastian estimasi diukur standard error s/√n — yang hanya membaik sebanding akar ukuran sampel — atau oleh bootstrap ketika rumus tidak tersedia. Setelah estimasi dan galatnya lengkap, pertanyaan berikutnya adalah apakah pola antar variabel nyata: itu materi Chapter Korelasi.