Bab sebelumnya menutup dengan kejujuran yang tidak nyaman: satu perkiraan titik selalu meleset sedikit, dan kita tidak tahu seberapa jauh. Interval kepercayaan (confidence interval) mengubah kejujuran itu menjadi informasi — sebuah rentang di sekeliling perkiraan yang dilengkapi tingkat keyakinan. Pada chapter ini kita bangun interval kepercayaan 95% untuk rata-rata dalam dua skenario (σ diketahui memakai z, σ tak diketahui memakai t), kenal margin of error, dan melatih cara membacanya yang benar — bagian yang paling sering dikutip dan paling sering disalahpahami.

Rumus Dasar dan Margin of Error #

Semua interval kepercayaan rata-rata berbentuk perkiraan ditambah-minus satu kelonggaran:

text
CI = xbar ± (nilai kritis) × SE

σ diketahui : xbar ± z × (σ / √n)
σ tak diketahui : xbar ± t × (s / √n)

Nilai kritis menentukan seberapa lebar kelonggaran; SE (galat standar) menentukan seberapa sempit sebaran perkiraan. Perkalian keduanya dikenal sebagai margin of error (MoE) — angka yang sama dengan yang dikutip survei (“62,3% ± 2,8%”). Tingkat kepercayaan 95% dipilih karena nilai kritis z untuk 95% adalah 1,96: luas di antara −1,96 dan +1,96 pada kurva normal baku memang tepat 95%.

σ Diketahui: Interval z #

Skenario pertama: mesin pengemas kopi biji 200 gram memiliki galat baku yang sudah terdokumentasi, σ = 1,8 gram. Kita menimbang 25 kemasan dari batch produksi dan ingin memperkirakan rata-rata berat sesungguhnya dari batch tersebut:

python
import numpy as np
from scipy.stats import norm

sampel = np.array([
    200.9, 199.3, 200.4, 198.7, 201.2,
    199.8, 200.1, 200.6, 199.5, 200.3,
    198.9, 200.8, 199.9, 200.2, 199.6,
    201.0, 199.4, 200.5, 199.1, 200.7,
    200.0, 199.2, 200.6, 198.8, 200.3,
])
sigma = 1.8   # galat baku mesin pengemas (diketahui dari spesifikasi)

n = sampel.size
xbar = sampel.mean()
z_star = norm.ppf(0.975)
moe = z_star * sigma / np.sqrt(n)

print(f"n = {n}, xbar = {xbar:.2f} gram")
print(f"z* untuk 95% = {z_star:.4f}")
print(f"margin of error = {moe:.3f} gram")
print(f"Interval 95%: ({xbar - moe:.2f}, {xbar + moe:.2f}) gram")

Output yang Dihasilkan:

text
n = 25, xbar = 199.99 gram
z* untuk 95% = 1.9600
margin of error = 0.706 gram
Interval 95%: (199.29, 200.70) gram

Mari kita telaah kode di atas:

  1. Baris 14 (norm.ppf(0.975)): kita mencari nilai z yang melampaui 97,5% luas di kirinya — sehingga ekor kanan tersisa 2,5%, dan ekor kiri juga 2,5% (dua sisi total 5%). Hasilnya 1,96, nilai kritis paling terkenal di statistika.
  2. Baris 15 (moe = ...): margin of error adalah nilai kritis dikali SE = σ/√n = 1,8/5 = 0,36; dikali 1,96 menghasilkan 0,706 gram.
  3. Baris 17: interval akhirnya 199,29 sampai 200,70 gram — mesin bekerja terpusat sangat dekat pada target 200 gram.

Perhatikan apa yang terjadi pada MoE bila n diperbesar. Karena MoE sebanding dengan 1/√n, menggandakan sampel hanya memangkas MoE sekitar 29%; memangkasnya setengah menuntut sampel empat kali lipat — fakta yang menjelaskan kenapa survei presisi tinggi itu mahal.

σ Tak Diketahui: Interval t #

Skenario kedua jauh lebih umum: σ tidak diketahui dan harus diganti s dari sampel. Ketidakpastian tambahan ini dibayar dengan nilai kritis yang lebih besar — kita memakai distribusi t dengan derajat kebebasan n − 1. Contoh: 16 nilai ujian coba dan kita membangun interval untuk rata-rata kelas:

python
import numpy as np
from scipy.stats import t
import statsmodels.stats.weightstats as sm

sampel = np.array([
    61.5, 63.0, 62.2, 64.1, 59.8, 62.7,
    63.5, 60.9, 62.0, 61.2, 63.8, 62.4,
    60.5, 62.9, 61.7, 63.2,
])
n = sampel.size
xbar = sampel.mean()
s = sampel.std(ddof=1)
t_star = t.ppf(0.975, df=n - 1)
moe = t_star * s / np.sqrt(n)

print(f"n = {n}, xbar = {xbar:.2f}, s = {s:.2f}")
print(f"t* (df={n - 1}) = {t_star:.4f}")
print(f"CI 95% manual      : ({xbar - moe:.2f}, {xbar + moe:.2f})")

bawah, atas = sm.DescrStatsW(sampel).tconfint_mean(alpha=0.05)
print(f"CI 95% statsmodels : ({bawah:.2f}, {atas:.2f})")

Output yang Dihasilkan:

text
n = 16, xbar = 62.21, s = 1.22
t* (df=15) = 2.1314
CI 95% manual      : (61.56, 62.86)
CI 95% statsmodels : (61.56, 62.86)

Mari kita telaah hasilnya:

  1. t = 2,1314 vs z = 1,96**: untuk 15 derajat kebebasan, nilai kritis t lebih besar — interval t memang lebih lebar sebagai kompensasi karena s hanya perkiraan σ.
  2. Baris 16-17 (DescrStatsW(...).tconfint_mean): statsmodels menghitung interval yang sama dari satu panggilan; hasilnya identik dengan perhitungan manual. Dalam pekerjaan analisis, pustaka inilah yang dipakai; perhitungan manual kita lakukan sekali untuk memahami isi kotak hitamnya.
  3. Semakin besar n, semakin mirip t dengan z: pada df = 15 bedanya masih terasa (2,13 vs 1,96); pada df = 200, t* = 1,972 — nyaris menyamai z. Ketidakpastian s memudar seiring bertambahnya data.

Membaca Interval dengan Benar #

Apa sebenarnya arti “95% yakin”? Simulasi berikut menjawabnya secara harfiah: kita bangun 100 interval dari 100 sampel berbeda, lalu hitung berapa banyak yang benar-benar menangkap μ:

python
import numpy as np
from scipy.stats import t

rng = np.random.default_rng(42)
mu, sigma, n = 200.0, 1.8, 25

menangkap = 0
percobaan = 100
for _ in range(percobaan):
    sampel = rng.normal(mu, sigma, size=n)
    xbar = sampel.mean()
    s = sampel.std(ddof=1)
    moe = t.ppf(0.975, df=n - 1) * s / np.sqrt(n)
    if xbar - moe <= mu <= xbar + moe:
        menangkap += 1

print(f"Dari {percobaan} interval, {menangkap} menangkap mu")
print(f"Proporsi prosedur yang berhasil: {menangkap / percobaan:.0%}")

Output yang Dihasilkan:

text
Dari 100 interval, 94 menangkap mu
Proporsi prosedur yang berhasil: 94%

Hasil 94 dari 100 — bukan persis 95, karena 100 adalah jumlah percobaan yang masih kecil, tetapi sudah berdiri sangat dekat dengan janji tingkat kepercayaan. Interpretasi yang benar kini terlihat: yang punya peluang 95% adalah prosedurnya, bukan satu interval tertentu. Begitu sampel diambil dan interval (61,56; 62,86) terbentuk, nilai μ sudah berhenti berubah — interval itu menangkap μ atau tidak, tanpa peluang di antaranya. Kalimat yang benar berbunyi: “kita 95% yakin prosedur ini menangkap μ”, dan dalam praktik laporan sering dipendekkan menjadi “rata-rata berada antara 61,56 dan 62,86 (IK 95%)”.

Rangkuman #

  • Interval kepercayaan menambahkan kelonggaran pada perkiraan titik: xbar ± nilai kritis × SE; kelonggaran itu disebut margin of error.
  • σ diketahui → nilai kritis dari normal (z, 1,96 untuk 95%); σ tak diketahui → nilai kritis dari distribusi t dengan df = n − 1, sedikit lebih besar.
  • norm.ppf(0.975), t.ppf(0.975, df), dan DescrStatsW.tconfint_mean() adalah alat resmi untuk ketiganya; hasil manual dan statsmodels identik.
  • “95% yakin” menempel pada prosedur: sekitar 95% dari interval yang dibangun prosedur ini akan menangkap μ — simulasi kita mendapat 94 dari 100.

Interval memberi kita rentang, tetapi banyak keputusan bisnis berbentuk pertanyaan ya-tidak: “apakah klaim pemasok itu benar?” Menjawabnya butuh kerangka resmi untuk mengadu dugaan melawan data — kerangka itu bernama pengujian hipotesis, topik chapter berikutnya.

Referensi #

  1. SciPy — scipy.stats: Statistical Functions
  2. statsmodels — Documentation