Pemasok sirup mengklaim setiap gelas kopi susu di kedai kita berisi rata-rata 300 ml. Pelanggan menduga porsi mereka lebih sedikit. Siapa yang benar? Interval kepercayaan memberi rentang, tetapi banyak keputusan menuntut jawaban ya-tidak atas satu klaim. Pengujian hipotesis (hypothesis testing) adalah kerangka resmi untuk mengadu klaim melawan data: rumuskan dua dugaan yang saling bertentangan, hitung satu statistik dari sampel, lalu putuskan dengan aturan yang disepakati di muka. Pada chapter ini kita jalankan seluruh prosesnya — dari rumusan sampai kalimat keputusan — untuk kasus rata-rata satu sampel.

Kerangka H0 dan H1 #

Setiap uji memuat dua hipotesis. Hipotesis nol H0 adalah pernyataan status quo — klaim yang dianggap benar sampai data membuktikan sebaliknya. Hipotesis alternatif H1 adalah tuduhan yang kita periksa. Logikanya meniru asas praduga tak bersalah di pengadilan: pemasok dianggap jujur (H0: μ = 300) sampai bukti cukup untuk menyimpulkan sebaliknya (H1: μ ≠ 300). Dua hal tentang pasangan ini perlu dipegang:

UnsurContoh pada kasus porsi kopiCatatan
H0 (nol)μ = 300 mlSelalu memuat tanda sama dengan
H1 (alternatif)μ ≠ 300 mlDua sisi: bisa lebih atau kurang
α (tingkat signifikansi)0,05Ambang bukti, ditetapkan sebelum uji

Kata kunci pada H1 menentukan arah uji. Klaim “berbeda dari 300” memberi uji dua sisi seperti di atas; dugaan “lebih sedikit dari 300” akan memberi uji satu sisi dengan daerah kritis hanya di ekor kiri. Kita pakai bentuk dua sisi karena pertanyaan bisnisnya simetris: porsi yang terlalu jauh ke arah mana pun sama-sama masalah.

Perlu juga disepakati sejak awal: keputusan uji hanya punya dua keluaran — tolak H0 atau gagal tolak H0. Kita tidak pernah “menerima H0”, karena gagal menemukan bukti bukanlah bukti ketiadaan — sama seperti vonis bebas bukan bukti ketidakterlibatan.

Lima Langkah Pengujian #

Seluruh uji hipotesis klasik berjalan dalam lima langkah yang sama:

  1. Rumuskan H0 dan H1.
  2. Tetapkan α (di sini 0,05) dan pilih uji yang sesuai (uji-t satu sampel, karena σ tak diketahui).
  3. Kumpulkan data dan hitung statistik ringkas: xbar, s, n.
  4. Hitung statistik uji dan daerah kritisnya.
  5. Putuskan dan tafsirkan dalam bahasa masalah.

Statistik uji untuk rata-rata satu sampel adalah t hitung — kakak dari rumus z yang sudah kita kenal, dengan s menggantikan σ:

text
t = (xbar - mu0) / (s / √n)

Uji t Satu Sampel, Dihitung Tangan #

Kita ukur 16 gelas yang disajikan acak sepanjang sepekan. Keempat langkah pertama dijalankan satu blok:

python
import numpy as np
from scipy.stats import t

porsi = np.array([
    296, 302, 288, 291, 299, 285, 293, 306,
    297, 290, 288, 301, 294, 287, 295, 292,
])
mu0 = 300.0
n = porsi.size
xbar = porsi.mean()
s = porsi.std(ddof=1)

t_hitung = (xbar - mu0) / (s / np.sqrt(n))
t_kiri = t.ppf(0.025, df=n - 1)
t_kanan = t.ppf(0.975, df=n - 1)

print(f"Langkah 1-2: H0: mu = {mu0:.0f} ml | H1: mu != {mu0:.0f} ml")
print(f"Langkah 3: n = {n}, xbar = {xbar:.2f} ml, s = {s:.2f} ml")
print(f"Langkah 4: t hitung = {t_hitung:.3f}")
print(f"           daerah kritis: t < {t_kiri:.3f} atau t > {t_kanan:.3f}")
if t_hitung < t_kiri or t_hitung > t_kanan:
    print("Langkah 5: tolak H0 -> rata-rata berbeda dari klaim 300 ml")
else:
    print("Langkah 5: gagal tolak H0 -> bukti kurang untuk melawan klaim")

Output yang Dihasilkan:

text
Langkah 1-2: H0: mu = 300 ml | H1: mu != 300 ml
Langkah 3: n = 16, xbar = 294.00 ml, s = 5.93 ml
Langkah 4: t hitung = -4.045
           daerah kritis: t < -2.131 atau t > 2.131
Langkah 5: tolak H0 -> rata-rata berbeda dari klaim 300 ml

Mari kita telaah kode di atas:

  1. Baris 14 (t_hitung = ...): rumus t diterjemahkan langsung. xbar = 294 ml meleset 6 ml dari klaim; dibagi SE = s/√n = 5,93/4 = 1,48 menghasilkan −4,045 — rata-rata sampel berjarak lebih dari empat galat standar di bawah klaim.
  2. Baris 15-16 (t.ppf(0.025) dan t.ppf(0.975)): nilai kritis dua sisi pada df = 15 adalah ±2,131. Daerah kritis adalah wilayah ekstrem kurva t — jatuh ke sana berarti xbar terlalu jauh dari μ0 untuk masih bisa disebut kebetulan nyaman.
  3. Baris 20-23 (if t_hitung < t_kiri ...): −4,045 < −2,131, jadi statistik uji jatuh di daerah kritis; H0 ditolak. Perhatikan bahwa keputusan memakai if/else biasa — statistik uji pada akhirnya hanyalah aturan keputusan berbentuk kode.

Versi scipy: ttest_1samp #

Perhitungan manual tadi penting untuk memahami mekanismenya, tetapi pada pekerjaan analisis kita memanggil satu fungsi:

python
import numpy as np
from scipy.stats import ttest_1samp

porsi = np.array([
    296, 302, 288, 291, 299, 285, 293, 306,
    297, 290, 288, 301, 294, 287, 295, 292,
])
hasil = ttest_1samp(porsi, popmean=300.0)

print(f"t hitung : {hasil.statistic:.4f}")
print(f"p-value  : {hasil.pvalue:.6f}")
print(f"Selisih rata-rata : {porsi.mean() - 300.0:+.2f} ml")
print(f"Signifikan pada alpha 0.05 : {hasil.pvalue < 0.05}")

Output yang Dihasilkan:

text
t hitung : -4.0452
p-value  : 0.001058
Selisih rata-rata : -6.00 ml
Signifikan pada alpha 0.05 : True

Nilai statistiknya identik dengan hitungan tangan: −4,0452. Tambahan pentingnya adalah p-value 0,001058 — peluang melihat xbar sejauh ini (atau lebih jauh) dari 300 ml bila klaim pemasok benar-benar benar. Karena peluang itu jauh di bawah α = 0,05, kesimpulan tolak H0 berdiri di dua jalur yang sama: lewat daerah kritis, maupun lewat p-value. Cara kedua inilah yang menjadi standar pelaporan riset modern — dan penuh jebakan tafsirannya, sehingga kita sediakan satu chapter penuh untuknya.

Keputusan dalam Bahasa Bisnis #

Keluaran statistik belum menjadi keputusan. Laporan yang siap dibaca pemilik kedai berbunyi: “Rata-rata porsi terukur 294 ml, secara statistik berbeda dari klaim 300 ml (t = −4,05, p = 0,001); porsi rata-rata lebih rendah 6 ml dari klaim.” Kalimat itu memuat tiga bahan wajib — arah perbedaan (lebih rendah), besaran praktisnya (6 ml), dan bukti statistiknya (t dan p) — dan sengaja tidak menyebut “H0 ditolak” yang tidak bermakna bagi pembaca non-statistik. Perlu dicatat juga: selisih 6 ml mungkin signifikan secara statistik tetapi remeh secara bisnis; membedakan keduanya adalah pokok bahasan chapter Ukuran Efek.

Rangkuman #

  • Pengujian hipotesis mengadu H0 (status quo, memuat tanda sama dengan) melawan H1 (dugaan); keputusan hanya “tolak” atau “gagal tolak” — tidak pernah “terima H0”.
  • Lima langkah baku: rumusan, α dan pilihan uji, statistik ringkas, statistik uji, keputusan dan tafsiran.
  • Uji-t satu sampel memakai t = (xbar − μ0)/(s/√n) dengan nilai kritis t.ppf pada df = n − 1; kasus porsi kopi menghasilkan t = −4,05 terhadap batas ±2,13 → H0 ditolak.
  • scipy.stats.ttest_1samp memberi statistik dan p-value yang sama dalam satu panggilan; keputusan akhir selalu diterjemahkan ke bahasa masalah.

Keputusan kita bertumpu pada satu angka kecil bernama p-value. Apa sebenarnya arti angka 0,001 itu, dan tafsiran salah apa yang paling sering menimpanya? Chapter berikutnya membedahnya sampai tuntas.

Referensi #

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