Satu pertanyaan analisis sering melibatkan lebih dari dua kelompok sekaligus, misalnya waktu penyelesaian soal untuk tiga teknik latihan yang berbeda. Topik ini membahas ANOVA satu arah (one-way ANOVA), yaitu metode untuk membandingkan rata-rata (mean) tiga kelompok atau lebih melalui satu pengujian, beserta dekomposisi variansi (variance) yang menjadi dasarnya. Pembahasan juga mencakup langkah lanjutan setelah hasilnya signifikan, karena hasil ANOVA yang signifikan belum menyebut kelompok mana yang berbeda. Data contoh dibangkitkan dengan benih (seed) tetap agar setiap keluaran dapat direproduksi.
Mengapa bukan uji t berulang#
Tiga kelompok menghasilkan tiga pasangan perbandingan, yaitu A berbanding B, A berbanding C, dan B berbanding C. Mengulangi uji t untuk setiap pasangan pada taraf signifikansi 0.05 membuat peluang positif palsu menumpuk karena setiap uji membawa peluang 5 persen untuk salah. Hipotesis nol (null hypothesis) yang seharusnya diuji bersama berbunyi semua rata-rata kelompok sama, sedangkan hipotesis alternatifnya menyatakan minimal satu rata-rata berbeda. ANOVA menjawab pertanyaan bersama itu dalam satu pengujian, sehingga tingkat kesalahan per pengujian tidak dilipatgandakan.
Besarnya penumpukan tersebut layak diperhitungkan. Pada tiga uji yang saling bebas, peluang minimal satu positif palsu mendekati 14 persen, dan angkanya terus membesar seiring bertambahnya kelompok. Penghitungan lengkapnya beserta koreksi yang tersedia dibahas pada topik Perbandingan Berganda. Bagian ini berhenti pada satu pesan utama, yaitu pengujian berulang tanpa koreksi bukan perluasan yang wajar dari uji t.
Rasio variansi antar dan dalam#
ANOVA membandingkan dua sumber keragaman data. Keragaman pertama berada di antara kelompok, yaitu jarak rata-rata setiap kelompok terhadap rata-rata keseluruhan. Keragaman kedua berada di dalam kelompok, yaitu sebaran nilai anggota di sekitar rata-rata kelompoknya masing-masing. Gambar berikut menempatkan keduanya berdampingan pada data tiga teknik latihan.
Total keragaman data terpecah tanpa sisa menjadi dua bagian tersebut. Setiap bagian diubah menjadi rata-rata kuadrat dengan membaginya dengan derajat kebebasan (degrees of freedom) masing-masing, yaitu untuk bagian antar kelompok dan untuk bagian dalam kelompok. Statistik uji F berupa rasio keduanya, sebagaimana dituliskan berikut.
Nilai F dibaca dengan membandingkan dua sumber keragaman itu. Nilai F mendekati 1 berarti jarak antarrata-rata tidak lebih besar daripada sebaran di dalam kelompok, sehingga data cocok dengan hipotesis nol. Nilai F yang jauh melebihi 1 berarti perbedaan antarkelompok melampaui sebaran di dalam kelompok itu sendiri. Distribusi nolnya berupa distribusi F dengan dua pasang derajat kebebasan tersebut.
ANOVA dengan SciPy#
Fungsi f_oneway dari scipy.stats menerima setiap kelompok sebagai satu argumen array dan mengembalikan statistik F beserta p-value-nya. Program berikut sekaligus menghitung dekomposisi variansi secara manual agar angka di balik F terlihat, lalu menggambarkan boxplot ketiga kelompok. Hasil manual yang identik dengan fungsi formal menjadi pemeriksaan silang yang murah. Seluruh perhitungan berjalan dalam satu berkas Python yang dapat dijalankan ulang.
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# Waktu penyelesaian satu set soal (menit) untuk tiga teknik latihan
rng_a = np.random.default_rng(42)
rng_b = np.random.default_rng(43)
rng_c = np.random.default_rng(44)
tanpa = np.round(rng_a.normal(41.0, 4.5, size=25), 1)
mingguan = np.round(rng_b.normal(39.0, 4.5, size=25), 1)
harian = np.round(rng_c.normal(36.5, 4.5, size=25), 1)
# Dekomposisi variansi: SS antarkelompok dan SS dalam kelompok
semua = np.concatenate([tanpa, mingguan, harian])
ss_antar = sum(len(g) * (g.mean() - semua.mean()) ** 2 for g in (tanpa, mingguan, harian))
ss_dalam = sum(((g - g.mean()) ** 2).sum() for g in (tanpa, mingguan, harian))
ms_antar = ss_antar / 2
ms_dalam = ss_dalam / (len(semua) - 3)
f_manual = ms_antar / ms_dalam
print(f"rata-rata: tanpa latihan = {tanpa.mean():.4f}, mingguan = {mingguan.mean():.4f}, harian = {harian.mean():.4f}")
print(f"SS antarkelompok = {ss_antar:.4f}, SS dalam kelompok = {ss_dalam:.4f}")
print(f"MS antarkelompok = {ms_antar:.4f}, MS dalam kelompok = {ms_dalam:.4f}")
print(f"F manual = {f_manual:.4f}")
# Pengujian formal dengan f_oneway
hasil = stats.f_oneway(tanpa, mingguan, harian)
print(f"f_oneway : F = {hasil.statistic:.4f}, p-value = {hasil.pvalue:.4f}")
fig, ax = plt.subplots(figsize=(7, 4), constrained_layout=True)
ax.boxplot([tanpa, mingguan, harian], tick_labels=["Tanpa latihan", "Mingguan", "Harian"])
ax.set_ylabel("Waktu penyelesaian (menit)")
ax.set_title("Waktu penyelesaian soal untuk tiga teknik latihan")
fig.savefig("anova-boxplot.png", dpi=110)rata-rata: tanpa latihan = 40.8480, mingguan = 38.0920, harian = 37.0800
SS antarkelompok = 190.1459, SS dalam kelompok = 1034.8408
MS antarkelompok = 95.0729, MS dalam kelompok = 14.3728
F manual = 6.6148
f_oneway : F = 6.6148, p-value = 0.0023
Dekomposisi manual menghasilkan F = 6.6148, dan f_oneway mengembalikan angka yang sama. p-value 0.0023 berada jauh di bawah 0.05, sehingga hipotesis nol ditolak dan minimal satu rata-rata berbeda. Boxplot menempatkan kelompok tanpa latihan pada posisi tertinggi, disusul kelompok mingguan dan harian. Pesan ANOVA berhenti pada kata minimal karena hasil yang signifikan belum menyebut pasangan mana yang benar-benar berbeda.
Tiga rata-rata berurutan 40.8480, 38.0920, dan 37.0800 membentuk pola menurun yang tampak siap ditafsirkan seketika. Menafsirkan pola itu menuntut perbandingan antarpasangan dengan koreksi, bukan tiga uji t bebas, dan kelengkapannya dibahas pada topik Perbandingan Berganda. Sisa bagian ini merangkum langkah yang tepat setelah F dinyatakan signifikan.
Setelah F signifikan#
Penelusuran antarpasangan setelah ANOVA disebut uji lanjutan atau post hoc. Prosedurnya membandingkan seluruh pasangan kelompok sekaligus sambil menjaga peluang positif palsu pada tingkat keluarga, sehingga bentuknya berbeda dari uji t yang diulang tanpa koreksi. SciPy menyediakan tukey_hsd untuk keperluan ini, baik pada rancangan yang seimbang maupun tidak seimbang. Nama post hoc berasal dari bahasa Latin yang berarti setelah ini, karena pengujian pasangannya baru dilakukan setelah ANOVA utama menyatakan adanya sinyal.
Alur kerjanya berurutan dan tetap. Pertama, jalankan ANOVA untuk memastikan ada sinyal yang layak ditelusuri. Kedua, jalankan uji lanjutan atas seluruh pasangan untuk menemukan letak perbedaannya. Ketiga, laporkan selisih rata-rata beserta interval kepercayaannya agar besaran efek (effect size) terbaca, bukan hanya status signifikannya. Pada data contoh, kelanjutan yang paling alami adalah menguji tiga pasangan teknik latihan dengan koreksi yang sesuai.
Kesalahan umum#
Kesalahan pertama adalah membaca F yang signifikan sebagai bukti bahwa semua kelompok saling berbeda. Hipotesis alternatif ANOVA hanya menyatakan minimal satu perbedaan, sehingga dua kelompok yang hampir sama dapat ikut terbawa oleh kelompok yang jauh. Uji lanjutan antarpasangan yang berkoreksi itulah yang menjawab pertanyaan tersebut.
Kesalahan kedua adalah menjalankan uji t untuk semua pasangan langsung setelah F signifikan tanpa koreksi apa pun, karena peluang positif palsunya tetap membengkak meskipun ANOVA sudah signifikan. Kesalahan ketiga adalah mengabaikan asumsi variansi kelompok yang kira-kira sama, terutama pada rancangan tidak seimbang. Apabila variansi kelompok berbeda jauh, pertimbangkan bentuk ANOVA yang tidak mensyaratkan kesamaan variansi, misalnya uji Alexander-Govern pada scipy.stats.alexandergovern.
Ringkasan#
- ANOVA satu arah membandingkan tiga rata-rata atau lebih melalui satu pengujian sehingga tingkat kesalahan per pengujian tidak dilipatgandakan.
- Statistik F adalah rasio variansi antarkelompok terhadap variansi dalam kelompok, dan total keragaman data terpecah tanpa sisa menjadi keduanya.
- Fungsi
f_onewaymenghitung F dan p-value secara langsung, dan hasil hitung manualnya identik. - F yang signifikan berarti minimal satu rata-rata berbeda, dan letak perbedaannya dicari dengan uji lanjutan antarpasangan yang berkoreksi.
Referensi#
- scipy.stats.f_oneway — SciPy — Dokumentasi ANOVA satu arah untuk banyak kelompok.
- scipy.stats.tukey_hsd — SciPy — Dokumentasi uji Tukey HSD untuk perbandingan seluruh pasangan kelompok.
- NIST/SEMATECH e-Handbook of Statistical Methods — NIST — Panduan teknik statistika yang membahas analisis variansi.
- OpenIntro Statistics — OpenIntro — Buku pengantar statistika dengan pembahasan ANOVA satu arah.