Satu angka dari sampel menyembunyikan keraguannya, sedangkan interval kepercayaan menyatakannya secara terbuka. Topik ini menghitung interval kepercayaan untuk rata-rata PM2.5 dengan dua jalan, yaitu rumus distribusi-t dan bootstrap, lalu melatih penafsirannya yang sering keliru. Setelah membacanya, setiap rata-rata pada laporan disertai intervalnya, dan klaim “berbeda nyata” berhenti dilafalkan tanpa melihat tumpang tindihnya.
Dari kesalahan baku ke interval#
Topik sebelumnya menetapkan bahwa rata-rata sampel berdenyut di sekitar rata-rata populasi dengan lebar kesalahan bakunya. Interval kepercayaan mengambil kesimpulan itu ke tempat kerja, yaitu melaporkan rentang yang menutup rata-rata populasi pada tingkat kepercayaan tertentu, dan bentuk paling umumnya adalah 95 persen.
Untuk rata-rata dengan ukuran sampel moderat, intervalnya dibangun dari distribusi-t karena simpangan populasi tidak diketahui dan dihimpunkan dari sampel itu sendiri:
dengan bergantung pada tingkat kepercayaan dan derajat kebebasannya. Nilai yang sedikit lebih besar daripada 2 pada sampel besar menjelaskan mengapa angka “sekitar dua kali kesalahan baku” sering dipakai sebagai aturan kasar.
Skrip berikut menghitung interval tersebut pada 52 pengukuran PM2.5 yang bersih, lalu mengulanginya dengan bootstrap sebagai pembanding bebas asumsi.
"""Interval kepercayaan untuk rata-rata PM2.5: rumus t dan bootstrap."""
from scipy import stats
import numpy as np
import pandas as pd
data = pd.read_csv(
"ukuran_udara.csv",
na_values=["kosong", "-999.0"],
dtype={"pm25": "string", "kelembapan": "string"},
)
data["pm25"] = data["pm25"].astype("float")
x = data.loc[data["pm25"] < 500, "pm25"].dropna()
sem = x.std(ddof=1) / np.sqrt(len(x))
lo, hi = stats.t.interval(0.95, len(x) - 1, loc=x.mean(), scale=sem)
print(f"n = {len(x)} | mean = {x.mean():.1f} | SEM = {sem:.2f}")
print(f"interval t 95% : [{lo:.1f}, {hi:.1f}]")
rng = np.random.default_rng(42)
boot = rng.choice(x.to_numpy(), size=(5000, len(x))).mean(axis=1)
blo, bhi = np.percentile(boot, [2.5, 97.5])
print(f"interval bootstrap : [{blo:.1f}, {bhi:.1f}]")n = 52 | mean = 44.9 | SEM = 1.69
interval t 95% : [41.5, 48.3]
interval bootstrap : [41.5, 48.2]Kedua jalan berimpit, yaitu [41.5, 48.3] berbanding [41.5, 48.2], dan kesesuaian itu adalah pemeriksaan silang yang murah. Rata-rata PM2.5 dilaporkan sebagai 44.9 dengan interval 95 persen [41.5, 48.3], dan kalimat inilah yang masuk laporan menggantikan satu angka tanpa keraguan.
Bootstrap: sebaran dari data sendiri#
Bootstrap membangun distribusi rata-rata dengan menyampel ulang data yang ada, yaitu menarik sampel dengan pengembalian sebanyak ukuran aslinya berulang kali, menghitung rata-rata setiap ulangan, lalu mengambil persentil 2.5 dan 97.5 sebagai intervalnya. Logikanya sederhana, yaitu sebaran sampel ulangan meniru sebaran sampel nyata dari populasi.
Kelebihannya adalah lepas dari asumsi bentuk distribusi, sehingga cocok untuk data kecil, menceng, atau statistik yang rumit seperti median yang tidak punya rumus interval sederhana. Harganya adalah ketergantungan pada data asli, yaitu bootstrap tidak dapat memperbaiki sampel yang bias, dan biji acak yang dicatat membuat hasilnya dapat direproduksi.
Pada praktiknya, kedua jalan dijalankan bila waktu memungkinkan, dan kesesuaian hasilnya menambah kepercayaan. Apabila keduanya menyimpang jauh, bentuk distribusi atau ukuran sampel sedang memberi sinyal bahwa asumsi rumus-t belum layak dipercaya.
Penafsiran yang benar dan yang keliru#
Penafsiran yang benar menyebut prosedurnya, yaitu apabila pengambilan sampel dan perhitungan ini diulang berkali-kali, sekitar 95 persen interval yang dihasilkan memuat rata-rata populasi yang sebenarnya. Pernyataan tersebut berbicara tentang prosedur, bukan tentang satu interval yang sudah tercetak.
Tiga penafsiran yang salah menyusulnya secara teratur. Interval tidak menyatakan bahwa 95 persen data berada di dalamnya, karena rentang itu milik distribusi nilai, bukan rata-rata. Ia juga tidak menyatakan peluang 95 persen bahwa rata-rata populasi berada di dalam interval ini secara khusus, sebab rata-rata populasi bersifat tetap, bukan acak. Dan ia tidak membuat dua interval yang tumpang tindih otomatis berarti tidak berbeda, karena pemeriksaan beda dua rata-rata memiliki aturan tersendiri pada topik pengujian hipotesis.
Kegunaan kerjanya tetap jelas walau penafsirannya hati-hati. Interval yang menyempit menandakan data yang lebih banyak, dan ambang kualitas yang berada di luar interval menyatakan kesimpulan yang tahan terhadap keraguan sampel.
Kesalahan umum#
Kesalahan pertama adalah memakai rumus-t pada sampel kecil yang sangat menceng tanpa memeriksa asumsinya. Interval bootstrap pada data yang sama adalah pemeriksaan murah, dan selisih yang besar menggantikan rumusnya.
Kesalahan kedua adalah melaporkan interval tanpa tingkat kepercayaan dan ukuran sampelnya. Angka 95 persen dan n adalah bagian dari kalimat hasil, sebab interval yang sama pada n berbeda menyatakan keyakinan yang berbeda.
Kesalahan ketiga adalah memperlakukan batas interval sebagai dinding keras. Nilai di luar interval bukan hal mustahil, melainkan nilai yang kurang sesuai dengan data ini, dan interval 99 persen memberi ruang yang lebih luas bila keputusannya menuntut kehati-hatian ekstra.
Ringkasan#
- Interval kepercayaan melaporkan rata-rata beserta keraguannya, dan bentuk rumusnya adalah .
- Bootstrap membangun interval dari sampel ulang data sendiri, tanpa asumsi bentuk, dengan biji acak yang dicatat.
- Penafsiran yang benar berbicara tentang prosedur pengulangan, bukan peluang atas satu interval tercetak.
- Interval dilaporkan bersama tingkat kepercayaan dan ukuran sampelnya, dan dua interval yang tumpang tindih belum menyatakan ketiadaan perbedaan.
Referensi#
- scipy.stats.t — SciPy documentation — rujukan resmi distribusi-t beserta metode intervalnya.
- An Introduction to the Bootstrap — Efron & Tibshirani, CRC Press — rujukan klasik metode bootstrap yang dipraktikkan topik ini.
- numpy.random.Generator.choice — NumPy documentation — rujukan resmi sampel ulang acak berbiji yang dipakai bootstrap.