Kerangka lima langkah, α, dan p-value kini lengkap — saatnya menjalankannya pada pertanyaan yang paling sering diajukan data: apakah rata-rata berbeda dari klaim? Uji mean adalah mesin pengujian yang paling tua dan paling sering dipakai, dan mesin ini punya dua varian yang telah kita siapkan sejak Section Variabel Acak dan Distribusi: z-test memakai σ populasi yang diketahui, t-test menaksir σ dengan s dari sampel. Chapter ini mengerjakan kasus sekolah secara formal dari nol, menambahkan versi yang berujung tolak, memperluas ke perbandingan dua kelompok independen dan berpasangan, lalu menutup dengan scipy sebagai alat produksi.

Kapan z, Kapan t #

Pilihan distribusi mengikuti satu pertanyaan: dari mana penyebut standard error berasal?

KondisiDistribusiStatistik uji
σ populasi diketahui (misalnya dari kalibrasi panjang mesin)normal bakuz
σ tidak diketahui, n kecilt dengan df = n − 1t
σ tidak diketahui, n besarz memadai (s sangat dekat ke σ); t tetap sah dipakaiz atau t

Tabel ini adalah rekap langsung chapter Distribusi t-Student: mengganti σ dengan s menambah ketidakpastian, ekor distribusi menebal, dan t dengan df = n − 1 mengimbanginya secara eksak. Ketika n besar, s menempel dekat ke σ sehingga selisih praktis keduanya menipis — perangkat lunak modern tetap menghitung t tanpa beban, dan itu pilihan yang aman diambil kapan pun σ tidak diketahui.

Rumus kedua statistik itu hanya berbeda pada penyebut:

text
z = (x̄ - μ0) / (σ / √n)          [σ populasi diketahui]

t = (x̄ - μ0) / (s / √n)          [σ ditaksir dengan s dari sampel]

Contoh singkat untuk jalur z: mesin pengisi kaleng dikalibrasi dengan simpangan baku terpasang σ = 4 gram; klaim isi bersih μ0 = 250. Audit 36 kaleng menghasilkan x̄ = 251.5, sehingga z = (251.5 − 250)/(4/√36) = 2.25 dan p-value dua arah 0.0244 (dibulatkan ke empat desimal) — klaim “tepat 250” ditolak pada α = 0.05. Jalur t, yang menangani kasus jauh lebih umum σ tidak diketahui, kita kerjakan penuh sekarang.

Worked Example: Lima Langkah Formal #

Kepala sekolah mengklaim rata-rata nilai μ = 80. Kita mengambil sampel acak 16 siswa dan mencatat nilai berikut:

text
69, 73, 74, 75, 79, 80, 81, 82, 83, 84, 86, 89, 90, 92, 95, 96

Data ini memiliki x̄ = 83 dan s = 8 (keduanya persis; pembulatan tidak berperan). σ populasi tidak diketahui dan n kecil, sehingga t-test dengan df = n − 1 = 15 menjadi pilihan yang tepat. Kelima langkah formalnya:

  1. H0 dan H1. H0: μ = 80; H1: μ ≠ 80 (dua arah — klaim “tepat 80” dilanggar bila kenyataannya di salah satu sisi).
  2. α. Ditetapkan 0.05 sebelum data dilihat.
  3. Statistik uji.
text
t = (x̄ - μ0) / (s / √n)
  = (83 - 80) / (8 / √16)
  = 3 / 2
  = 1.5        dengan df = 15
  1. p-value. Dua arah: p = 2 × P(T > 1.5; df = 15) = 0.1544.
  2. Keputusan. Karena 0.1544 ≥ 0.05, gagal menolak H0 — data konsisten dengan klaim μ = 80; selisih tiga poin masih berada dalam rentang fluktuasi sampling yang wajar.

Perbandingan ganda memperkuat keputusan itu: batas kritis t untuk α = 0.05 dua arah pada df = 15 adalah 2.1314 (chapter Distribusi t-Student), dan 1.5 berada jauh di dalamnya. Sekarang versi yang berbalik arah. Sampel kedua dari 16 siswa lainnya — nilai 72, 75, 77, 81, 82, 84, 85, 86, 87, 88, 89, 91, 94, 96, 97, 100 — menghasilkan x̄ = 86.5 dengan s yang sama 8:

text
t = (86.5 - 80) / (8 / √16) = 6.5 / 2 = 3.25      df = 15
p = 2 × P(T > 3.25; df = 15) = 0.0054

Karena 0.0054 < 0.05, H0 ditolak: rata-rata sampel berjarak 3.25 standard error dari klaim, statistik yang melampaui batas kritis 2.1314, dan data seperti ini hanya muncul pada kurang dari 1% pengulangan pengambilan sampel bila klaim benar. Dua sampel berukuran sama menghasilkan dua keputusan berbeda bukan karena prosedurnya berubah, melainkan karena jarak data ke klaim memang berbeda — persis perilaku yang diinginkan dari keputusan terstruktur.

Uji Dua Sampel Independen #

Pertanyaan berikutnya bukan “rata-rata sama dengan 80?” melainkan “rata-rata dua kelompok sama?”. Untuk dua sampel independen (siswa yang berbeda pada tiap kelompok), statistik ujinya memakai variance gabungan (pooled):

text
s_p² = [(n1 - 1)s1² + (n2 - 1)s2²] / (n1 + n2 - 2)

t = (x̄1 - x̄2) / (s_p · √(1/n1 + 1/n2))          df = n1 + n2 - 2

Contoh numerik: kelas A (metode lama) memiliki n1 = 10, x̄1 = 82, s1 = 6; kelas B (metode baru) n2 = 10, x̄2 = 78, s2 = 6. Karena kedua simpangan baku sama, s_p² = (9·36 + 9·36)/18 = 36 sehingga s_p = 6, dan penyebutnya menjadi 6·√(1/10 + 1/10) = √7.2 ≈ 2.6833:

text
t = (82 - 78) / 2.6833 = 1.4907      df = 18

Batas kritis t dua arah pada df = 18 untuk α = 0.05 adalah 2.1009, dan p-value-nya 0.1534. Angka 1.4907 berada di dalam daerah gagal tolak, jadi gagal menolak H0 — selisih empat poin antar kelas belum cukup menjadi bukti metode baru berbeda efeknya. Perhatikan kejadian yang menarik: selisih mentah di sini (4 poin) lebih besar daripada selisih kasus satu sampel pertama (3 poin), tetapi keputusannya tetap gagal tolak — dua sampel independen membawa ketidakpastian dari kedua sisi sekaligus sehingga penyebutnya membesar. Besar selisih mentah tidak pernah bisa dibaca tanpa standard error.

Paired t-Test: Sebelum dan Sesudah #

Ketika data datang berpasangan — nilai siswa yang sama sebelum dan sesudah program remedial — membandingkan dua mean kelompok membuang informasi terpentingnya: keterpasangan. Paired t-test bekerja pada selisih tiap pasangan d = x_sesudah − x_sebelum, lalu menguji mean selisih μd terhadap nol:

text
t = (d̄ - 0) / (s_d / √n)          df = n - 1

Keterpasangan mengecilkan varians selisih (kecenderungan tiap siswa hilang dari perhitungan), sehingga uji ini jauh lebih peka untuk desain sebelum-sesudah pada individu yang sama — syaratnya pasangan memang terjaga sampai ke analisis. Desain penelitian, sekali lagi, menentukan uji mana yang benar.

Menghitung dengan Python #

scipy.stats menyediakan ketiga uji siap pakai. ttest_1samp menguji satu sampel terhadap nilai klaim; ttest_ind membandingkan dua sampel independen (default-nya pooled, sama dengan rumus di atas):

python
from scipy.stats import ttest_1samp, ttest_ind

nilai_sampel1 = [69, 73, 74, 75, 79, 80, 81, 82, 83, 84,
                 86, 89, 90, 92, 95, 96]
kelas_a = [73, 76, 76, 79, 82, 82, 85, 88, 88, 91]
kelas_b = [69, 72, 72, 75, 78, 78, 81, 84, 84, 87]

hasil1 = ttest_1samp(nilai_sampel1, popmean=80)
print(f"one-sample : t = {hasil1.statistic:.4f}, p = {hasil1.pvalue:.4f}")

hasil2 = ttest_ind(kelas_a, kelas_b)
print(f"two-sample : t = {hasil2.statistic:.4f}, p = {hasil2.pvalue:.4f}")

Output yang Dihasilkan:

text
one-sample : t = 1.5000, p = 0.1544
two-sample : t = 1.4907, p = 0.1534

Mari kita bedah blok tersebut: ttest_1samp(nilai_sampel1, popmean=80) menerima data mentah dan nilai klaim, lalu menghitung x̄, s, dan t di dalamnya — hasilnya t = 1.5000 dan p = 0.1544, persis perhitungan manual lima langkah kita (data memang dipilih sehingga x̄ = 83 dan s = 8 eksak). ttest_ind(kelas_a, kelas_b) menghasilkan t = 1.4907 dengan df = 18 dan p = 0.1534 — keduanya cocok dengan rumus pooled di atas; atribut .statistic dan .pvalue diakses terpisah agar bisa dibulatkan stabil pada empat desimal.

Uji mean menuntaskan pertanyaan numerik. Namun banyak pertanyaan data tidak berbentuk rata-rata sama sekali: preferensi transportasi, jenis kelamin, kategori produk — data kategorik membutuhkan statistik uji yang mengukur ketidaksesuaian antara hitungan amatan dan hitungan harapan. Kerangka itu adalah chi-square, topik chapter berikutnya; dokumentasi lengkap fungsi-fungsi chapter ini tersedia di scipy.stats , dengan pendalaman konsep di Penn State STAT 500 .