Analisis yang menyimpulkan sesuatu tentang banyak orang atau objek hampir selalu bekerja pada sampel, yaitu sebagian kecil data yang benar-benar terkumpul, sedangkan kesimpulannya menyasar populasi yang jauh lebih besar. Topik ini membahas hubungan populasi dan sampel, simulasi pengambilan sampel yang memperlihatkan variasi hasil antarsampel, efek seleksi yang membuat sampel menyesatkan, dan syarat sampel yang mewakili populasi. Setelah membacanya, kualitas sebuah sampel dapat dinilai terlebih dahulu sebelum angka hasilnya dilaporkan.
Populasi, sampel, dan parameter#
Populasi adalah sekumpulan lengkap objek yang menjadi sasaran kesimpulan, misalnya seluruh siswa pada satu angkatan, sedangkan sampel adalah bagian dari populasi yang datanya benar-benar terukur. Angka yang menggambarkan populasi disebut parameter, contohnya mean (rata-rata) nilai ujian populasi yang dilambangkan . Angka yang dihitung dari sampel disebut statistik, contohnya mean sampel . Analisis menghitung statistik sebagai perkiraan atas parameter, dan kualitas perkiraan itu bergantung pada cara sampelnya diambil.
Menghitung seluruh populasi jarang memungkinkan karena biaya dan waktunya, sehingga bekerja pada sampel menjadi pilihan yang wajar. Yang tidak wajar adalah menganggap setiap sampel otomatis mewakili populasi. Sampel yang diambil tanpa aturan cenderung membawa bias, yaitu penyimpangan sistematis yang arahnya konsisten dan tidak hilang meskipun sampelnya diperbesar. Angka dari sampel yang bias dapat terlihat rapi dan presisi, tetapi parameter yang ditunjuknya keliru.
Cara termudah untuk melihat perilaku sampel adalah mensimulasikannya. Populasi kecil ditulis lengkap, sampelnya diambil berulang-ulang oleh komputer, dan sebaran hasilnya diamati. Simulasi semacam ini tidak menghasilkan temuan baru tentang dunia nyata, tetapi memperlihatkan mekanisme yang bekerja pada setiap analisis berbasis sampel, termasuk variasi kebetulan yang melekat pada satu sampel tunggal.
Simulasi pengambilan sampel pada populasi literal#
Populasi pada contoh berikut terdiri atas nilai ujian delapan puluh siswa satu angkatan dengan skala 0 sampai 100, ditulis lengkap dalam kode sehingga parameternya dapat dihitung persis. Sampel diambil tanpa pengembalian dengan numpy, satu kali dengan ukuran dua belas, lalu seribu kali untuk mengamati variasinya. Seed pada generator acak ditetapkan agar keluarannya dapat direproduksi.
import numpy as np
# populasi: nilai ujian 80 siswa satu angkatan (skala 0 sampai 100)
populasi = np.array([
58, 61, 62, 63, 64, 65, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70,
70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75,
75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78,
78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82,
83, 83, 84, 84, 85, 85, 86, 86, 87, 88, 88, 89, 90, 91, 92, 94,
])
rng = np.random.default_rng(42)
# satu sampel acak berukuran 12 tanpa pengembalian
satu_sampel = rng.choice(populasi, size=12, replace=False)
# seribu sampel berukuran 12 dan seribu sampel berukuran 48
mean_12 = [rng.choice(populasi, size=12, replace=False).mean() for _ in range(1000)]
mean_48 = [rng.choice(populasi, size=48, replace=False).mean() for _ in range(1000)]
print(f"mean populasi : {populasi.mean():.2f}")
print(f"mean satu sampel (n=12) : {satu_sampel.mean():.2f}")
print(f"mean dari 1000 sampel (n=12) : {np.mean(mean_12):.2f}")
print(f"simpangan baku mean (n=12) : {np.std(mean_12, ddof=1):.2f}")
print(f"simpangan baku mean (n=48) : {np.std(mean_48, ddof=1):.2f}")
print(f"rentang mean sampel (n=12) : {np.min(mean_12):.2f} sampai {np.max(mean_12):.2f}")mean populasi : 76.41
mean satu sampel (n=12) : 78.33
mean dari 1000 sampel (n=12) : 76.41
simpangan baku mean (n=12) : 2.03
simpangan baku mean (n=48) : 0.70
rentang mean sampel (n=12) : 69.00 sampai 82.58Mean populasi adalah 76,41. Satu sampel berukuran 12 memberi mean 78,33, yaitu menyimpang hampir dua poin dari parameter, dan penyimpangan seperti ini terjadi bukan karena kesalahan, melainkan karena kebetulan pada siapa yang terpilih. Rata-rata dari seribu mean sampel kembali ke 76,41, sama dengan mean populasi, yang menegaskan bahwa penyimpangan satu sampel saling meniadakan apabila pengambilannya diulang banyak kali.
Baris terakhir keluaran menyatakan seberapa jauh satu mean sampel biasanya menyimpang dari parameter. Pada ukuran dua belas, simpangan bakunya 2,03 poin dengan rentang hasil dari 69,00 sampai 82,58, sedangkan pada ukuran 48 simpangan bakunya turun menjadi 0,70 poin. Ukuran sampel yang lebih besar tidak mengubah parameter yang dituju, tetapi mempersempit rentang jawaban yang mungkin diberikan oleh sampel.
Efek seleksi pada survei di perpustakaan#
Efek seleksi (selection bias) muncul ketika mekanisme pengambilan sampel sendiri memilih anggota populasi secara tidak merata, sehingga kelompok tertentu terlalu banyak atau terlalu sedikit terwakili. Contohnya adalah angket kebiasaan belajar yang disebar hanya di perpustakaan pada siang hari. Sampel seperti ini disebut sampel kenyamanan (convenience sample) karena mudah dijangkau, dan seluruh respondennya otomatis adalah siswa yang memang berkumpul di perpustakaan. Data berikut menampilkan populasi 24 siswa secara lengkap sebagai DataFrame pandas, disertai waktu belajar mingguannya dan lokasi saat angket disebar, sehingga dampak seleksinya dapat dihitung.
import pandas as pd
# populasi 24 siswa beserta waktu belajar per minggu (jam) dan lokasi saat angket disebar
data = {
"siswa": ["Ali", "Budi", "Citra", "Dewi", "Eko", "Farah", "Gilang",
"Hana", "Indra", "Joko", "Kartika", "Lutfi", "Maya", "Nanda",
"Oki", "Putri", "Rian", "Sari", "Tono", "Umi", "Vina",
"Wawan", "Yanti", "Zaki"],
"lokasi": ["perpustakaan", "rumah", "perpustakaan", "rumah", "rumah",
"perpustakaan", "rumah", "perpustakaan", "perpustakaan",
"rumah", "rumah", "perpustakaan", "rumah", "rumah",
"perpustakaan", "rumah", "rumah", "rumah", "perpustakaan",
"rumah", "rumah", "perpustakaan", "rumah", "rumah"],
"waktu_belajar": [14, 3, 12, 4, 5, 11, 2, 15, 10, 6, 3, 13, 5, 2,
9, 7, 4, 8, 12, 3, 6, 14, 4, 5],
}
siswa = pd.DataFrame(data)
# angket hanya menjangkau siswa yang sedang berada di perpustakaan
sampel = siswa[siswa["lokasi"] == "perpustakaan"]
print(f"banyak populasi : {len(siswa)}")
print(f"banyak sampel : {len(sampel)}")
print(f"mean waktu belajar populasi : {siswa['waktu_belajar'].mean():.2f}")
print(f"mean waktu belajar sampel : {sampel['waktu_belajar'].mean():.2f}")banyak populasi : 24
banyak sampel : 9
mean waktu belajar populasi : 7.38
mean waktu belajar sampel : 12.22Mean waktu belajar populasi adalah 7,38 jam per minggu, sedangkan mean sampel yang terkumpul di perpustakaan mencapai 12,22 jam. Selisihnya hampir lima jam, dan arahnya selalu sama karena siswa yang paling rajin justru paling sering berada di lokasi pengambilan sampel. Laporan yang menyatakan siswa belajar 12 jam per minggu pada kenyataannya mendeskripsikan kelompok paling rajin, bukan populasi siswa.
Angka 12,22 jam tampak dapat dipercaya karena dihitung dari data yang sungguhan, dan di situlah jebakannya. Ketelitian perhitungan tidak memperbaiki sampel yang salah dibentuk. Menambah responden di lokasi yang sama juga tidak menolong, karena responden tambahan tetap membawa arah bias yang sama.
Syarat sampel yang mewakili populasi#
Sampel yang mewakili populasi tidak diperoleh dengan harapan, melainkan dengan prosedur. Syarat pertama adalah cakupan yang penuh, yaitu setiap anggota populasi muncul pada daftar yang digunakan untuk mengambil sampel. Daftar yang tidak lengkap sudah memilih sebelum pengambilan dimulai, misalnya daftar yang hanya memuat siswa yang mengisi formulir secara daring.
Syarat kedua adalah pengambilan acak, dan bentuk paling dasarnya disebut sampel acak sederhana (simple random sampling), yaitu pengambilan yang memberi setiap anggota populasi peluang terpilih yang sama. Randomisasi (randomization) menjadi satu-satunya cara yang andal untuk menyebarkan faktor yang tidak terukur secara merata ke dalam sampel. Syarat ketiga adalah ukuran yang cukup, karena simulasi sebelumnya memperlihatkan bahwa kebetulan pengambilan sampel menyempit seiring bertambahnya ukuran. Syarat keempat adalah tidak ada seleksi dari dua arah, baik dari pihak pengumpul data maupun dari partisipan yang menentukan sendiri untuk ikut atau tidak.
Empat syarat ini menjadi pemeriksaan cepat sebelum angka sampel dilaporkan. Apabila salah satu syarat tidak terpenuhi, keterbatasannya dinyatakan bersama hasilnya, misalnya hasil berlaku untuk siswa yang hadir di perpustakaan dan belum tentu untuk seluruh angkatan. Kalimat pembatas semacam ini tidak melemahkan laporan, melainkan menetapkan batas klaim yang sah.
Ringkasan#
- Statistik yang dihitung dari sampel memperkirakan parameter populasi, dan satu sampel tunggal dapat menyimpang jauh karena kebetulan pengambilan sampel.
- Simulasi dengan seed tetap memperlihatkan variasi mean antarsampel yang menyempit ketika ukuran sampel diperbesar dari 12 menjadi 48.
- Sampel kenyamanan seperti responden di satu lokasi membawa bias seleksi yang arahnya konsisten dan tidak hilang meskipun responden ditambah.
- Sampel yang mewakili menuntut cakupan penuh, pengambilan acak, ukuran yang cukup, dan bebas dari seleksi oleh pengumpul data maupun partisipan.
Referensi#
- OpenIntro Statistics — OpenIntro — Bab desain pengumpulan data yang membahas populasi, sampel, dan sumber bias.
- Dokumentasi resmi numpy — NumPy Project — Dokumentasi Generator dan rng.choice yang digunakan pada simulasi sampling.
- Dokumentasi resmi pandas — pandas-dev — Dokumentasi DataFrame dan penyaringan baris yang digunakan pada contoh efek seleksi.