Tabel two-way ANOVA pada chapter Two-Way ANOVA ditutup satu baris yang belum dibedah: interaksi, F = 9.60 dengan p = 0.0147, tolak H0. Baris itu menyatakan bahwa efek satu faktor tidak konstan antar level faktor lain — dan konsekuensinya mengubah cara seluruh hasil eksperimen dibaca. Chapter ini membuka konsep interaksi sampai ke dasarnya: artinya dalam bentuk mean sel, wujudnya pada interaction plot, pengujian formalnya lewat simple effect, serta disiplin interpretasi yang menjaga kesimpulan tetap jujur. Interaksi adalah bagian analisis dua faktor yang paling sering disalahbaca sekaligus paling bernilai: hanya lewat interaksilah desain faktorial menjawab pertanyaan yang tak terjangkau analisis satu-per-satu.
Apa Itu Interaksi Antar Faktor #
Interaksi antar faktor terjadi bila efek satu faktor bergantung pada level faktor lain. Pada data kita, keunggulan Metode B atas Metode A sebesar 2 poin pada durasi pendek membengkak menjadi 10 poin pada durasi panjang — “efek metode” tidak lagi bisa diringkas satu angka. Kebalikannya, dua faktor bersifat aditif bila keduanya bekerja terpisah sehingga efeknya cukup dijumlahkan:
pola aditif : mean sel = mean total + efek metode + efek durasi
pola interaksi : mean sel = mean total + efek metode + efek durasi + sisaData chapter Two-Way ANOVA memberi mean total 81, efek metode −3 (A) dan +3 (B), serta efek durasi −4 (pendek) dan +4 (panjang). Prediksi aditif dibandingkan dengan mean sel yang sesungguhnya:
| Sel | Prediksi aditif | Mean sel aktual | Sisa |
|---|---|---|---|
| Metode A, pendek | 81 − 3 − 4 = 74 | 76 | +2 |
| Metode A, panjang | 81 − 3 + 4 = 82 | 80 | −2 |
| Metode B, pendek | 81 + 3 − 4 = 80 | 78 | −2 |
| Metode B, panjang | 81 + 3 + 4 = 88 | 90 | +2 |
Sisa ±2 itulah interaksi — bagian mean sel yang tidak terjelaskan oleh penjumlahan dua efek utama. Jumlah kuadratnya persis baris interaksi tabel ANOVA: SS_AB = 3 × (2² + 2² + 2² + 2²) = 48, angka yang diuji F = 9.60 pada chapter sebelumnya. Bentuk lain dari pernyataan yang sama adalah selisih dari selisih: efek metode pada durasi panjang (10) dikurangi efek metode pada durasi pendek (2) menyisakan 8; interaksi nol berarti kedua selisih sama besar dan pola kembali aditif. Simetrinya penting untuk dipegang — “efek metode bergantung durasi” dan “efek durasi bergantung metode” adalah satu pernyataan yang sama, karena keduanya dibaca dari tabel mean sel yang sama.
Interaction Plot: Garis Sejajar, Merenggang, Menyilang #
Interaction plot menggambar mean sel: sumbu datar memuat level faktor pertama (metode), sumbu tegak mean nilai, dan satu garis untuk tiap level faktor kedua (durasi). Interaksi dibaca dari kemiringan kedua garis: bila efek metode sama besar pada kedua durasi, kedua garis naik sama jauh — sejajar, tak ada interaksi. Ilustrasi pertama memakai mean sel hipotetis yang aditif sempurna (A-pendek 76, B-pendek 80, A-panjang 86, B-panjang 90 — efek metode +4 pada kedua durasi, efek durasi +10 pada kedua metode):
92 |
90 | ------x <- durasi panjang
88 | -------------
86 | x-----
84 |
82 |
80 | ------o <- durasi pendek
78 | -----------
76 | o------
74 |
+-------------------------------
Metode A Metode BIlustrasi kedua memakai data eksperimen kita. Garis durasi pendek hanya naik 2 poin dari Metode A ke Metode B (76 ke 78), sementara garis durasi panjang menanjak 10 poin (80 ke 90) — kedua garis merenggang dari jarak 4 poin pada Metode A menjadi 12 poin pada Metode B:
92 |
90 | --x <- durasi panjang
88 | -----
86 | ----
84 | -----
82 | -----
80 | x--
78 | -----------o <- durasi pendek
76 | o------------
74 |
+-------------------------------
Metode A Metode BPola ketiga dimungkinkan: kedua garis saling menyilang (pola disordinal). Misalnya mean sel 80, 70, 68, 82 untuk A-pendek, A-panjang, B-pendek, B-panjang — Metode A unggul 12 poin pada durasi pendek dan tertinggal 12 poin pada durasi panjang, sehingga efek utama metode nol persis padahal tiap sel berjauhan. Pola menyilang paling mudah menyesatkan pembaca tabel ANOVA; di titik itulah membaca interaksi berubah dari pelengkap menjadi keharusan.
Interaksi pada Data Metode × Durasi #
Mean sel lengkap beserta efek tiap faktor pada tiap level faktor lain dihitung dari data yang sama dengan chapter Two-Way ANOVA:
import pandas as pd
baris = [
("A", "pendek", 75), ("A", "pendek", 76), ("A", "pendek", 77),
("A", "panjang", 79), ("A", "panjang", 79), ("A", "panjang", 82),
("B", "pendek", 76), ("B", "pendek", 77), ("B", "pendek", 81),
("B", "panjang", 87), ("B", "panjang", 90), ("B", "panjang", 93),
]
df = pd.DataFrame(baris, columns=["metode", "durasi", "nilai"])
sel = df.groupby(["metode", "durasi"])["nilai"].mean()
mean_metode = df.groupby("metode")["nilai"].mean()
mean_durasi = df.groupby("durasi")["nilai"].mean()
print(f"{'':10s}{'pendek':>10s}{'panjang':>10s}{'mean':>8s}")
for m in ["A", "B"]:
print(f"{'metode ' + m:10s}{sel[(m, 'pendek')]:>10.1f}"
f"{sel[(m, 'panjang')]:>10.1f}{mean_metode[m]:>8.1f}")
print(f"{'mean':10s}{mean_durasi['pendek']:>10.1f}"
f"{mean_durasi['panjang']:>10.1f}{df['nilai'].mean():>8.1f}")
print()
print(f"efek metode B - A pada durasi pendek : {sel[('B', 'pendek')] - sel[('A', 'pendek')]:5.1f}")
print(f"efek metode B - A pada durasi panjang : {sel[('B', 'panjang')] - sel[('A', 'panjang')]:5.1f}")
print(f"efek durasi panjang - pendek pada A : {sel[('A', 'panjang')] - sel[('A', 'pendek')]:5.1f}")
print(f"efek durasi panjang - pendek pada B : {sel[('B', 'panjang')] - sel[('B', 'pendek')]:5.1f}")
print(f"kontras interaksi (10 - 2) : "
f"{(sel[('B', 'panjang')] - sel[('A', 'panjang')]) - (sel[('B', 'pendek')] - sel[('A', 'pendek')]):5.1f}")Output yang Dihasilkan:
pendek panjang mean
metode A 76.0 80.0 78.0
metode B 78.0 90.0 84.0
mean 77.0 85.0 81.0
efek metode B - A pada durasi pendek : 2.0
efek metode B - A pada durasi panjang : 10.0
efek durasi panjang - pendek pada A : 4.0
efek durasi panjang - pendek pada B : 12.0
kontras interaksi (10 - 2) : 8.0Pola interaksinya dibaca dua arah dari tabel yang sama. Keunggulan Metode B atas Metode A sebesar 2.0 poin pada durasi pendek membengkak menjadi 10.0 poin pada durasi panjang; simetrinya, efek durasi naik dari 4.0 poin pada Metode A menjadi 12.0 poin pada Metode B. Dua kalimat kontekstual untuk pemegang keputusan: Metode B unggul hanya ketika durasi panjang, dan latihan panjang baru membayar bila digabungkan dengan Metode B. Kontras interaksi 10 − 2 = 8 adalah selisih dari selisih yang diuji F = 9.60 (p = 0.0147) pada chapter Two-Way ANOVA — pola non-aditif ini nyata, bukan fluktuasi sampling.
Simple Effects: Uji Faktor pada Satu Level Faktor Lain #
Karena interaksi signifikan, kedua efek utama (+6 poin metode, +8 poin durasi) berhenti menjadi ringkasan yang jujur — masing-masing adalah rata-rata dua kondisi yang berbeda. Analisis lanjutannya adalah simple effect: menguji efek satu faktor dengan level faktor lain dikunci pada satu nilai. Untuk perbandingan dua mean sel yang masing-masing berisi n observasi:
SS simple effect = n · (mean sel 1 - mean sel 2)² / 2 df = 1
F = SS simple effect / MS_galat df = (1, 8)MS_galat yang dipakai tetap galat model penuh (5.0 dengan df = 8), sehingga seluruh 12 observasi ikut menaksir derau — bukan hanya 6 nilai pada dua sel yang dibandingkan. Keempat simple effect pada data kita diuji sekaligus dan dicek silang dengan kontras model:
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
from scipy.stats import f as f_dist
baris = [
("A", "pendek", 75), ("A", "pendek", 76), ("A", "pendek", 77),
("A", "panjang", 79), ("A", "panjang", 79), ("A", "panjang", 82),
("B", "pendek", 76), ("B", "pendek", 77), ("B", "pendek", 81),
("B", "panjang", 87), ("B", "panjang", 90), ("B", "panjang", 93),
]
df = pd.DataFrame(baris, columns=["metode", "durasi", "nilai"])
df["metode"] = pd.Categorical(df["metode"], categories=["A", "B"])
df["durasi"] = pd.Categorical(df["durasi"], categories=["pendek", "panjang"])
model = smf.ols("nilai ~ C(metode) * C(durasi)", data=df).fit()
sel = df.groupby(["metode", "durasi"], observed=True)["nilai"].mean()
ms_galat = model.mse_resid
print(model.params)
print()
def uji_simple(nama, sel1, sel2):
selisih = sel[sel1] - sel[sel2]
ss = 3 * selisih ** 2 / 2 # SS kontras dua mean sel, n = 3 per sel
F = ss / ms_galat
p = f_dist.sf(F, 1, 8)
print(f"{nama:36s} selisih = {selisih:5.1f} F = {F:6.2f} p = {p:.4f}")
uji_simple("Metode B lawan A, durasi pendek", ("B", "pendek"), ("A", "pendek"))
uji_simple("Metode B lawan A, durasi panjang", ("B", "panjang"), ("A", "panjang"))
uji_simple("Durasi panjang lawan pendek, A", ("A", "panjang"), ("A", "pendek"))
uji_simple("Durasi panjang lawan pendek, B", ("B", "panjang"), ("B", "pendek"))
cek = model.f_test(np.array([[0, 1, 0, 1]])) # kontras B - A pada durasi panjang
print(f"\ncek silang statsmodels, B - A panjang: F = {float(cek.fvalue):.2f},"
f" p = {float(cek.pvalue):.4f}")Output yang Dihasilkan:
Intercept 76.0
C(metode)[T.B] 2.0
C(durasi)[T.panjang] 4.0
C(metode)[T.B]:C(durasi)[T.panjang] 8.0
dtype: float64
Metode B lawan A, durasi pendek selisih = 2.0 F = 1.20 p = 0.3052
Metode B lawan A, durasi panjang selisih = 10.0 F = 30.00 p = 0.0006
Durasi panjang lawan pendek, A selisih = 4.0 F = 4.80 p = 0.0598
Durasi panjang lawan pendek, B selisih = 12.0 F = 43.20 p = 0.0002
cek silang statsmodels, B - A panjang: F = 30.00, p = 0.0006Mari kita bedah blok tersebut: pd.Categorical(..., categories=[...]) menetapkan urutan level sehingga Metode A dan durasi pendek menjadi level acuan (reference) koefisien model. Empat koefisien di bagian atas output memuat seluruh cerita: Intercept 76 adalah mean sel A-pendek; koefisien metode 2 adalah efek B − A pada durasi pendek; koefisien durasi 4 adalah efek panjang − pendek pada Metode A; koefisien interaksi 8 menyatakan efek metode bertambah dari 2 menjadi 10 ketika durasi berubah menjadi panjang. Fungsi uji_simple menghitung SS kontras tiap pasangan mean sel lalu membaginya dengan model.mse_resid, dan f_dist.sf mengambil luas ekor kanan distribusi F(1, 8). Baris f_test memeriksa kontras [0, 1, 0, 1] — koefisien metode ditambah koefisien interaksi, 2 + 8 = 10 — dan mengembalikan F = 30.00 yang identik dengan hitungan kontras manual.
Dua baris pertama menjawab pertanyaan utama eksperimen: Metode B belum terbukti unggul pada durasi pendek (selisih 2.0, F = 1.20, p = 0.3052 — gagal tolak H0), tetapi jelas unggul pada durasi panjang (selisih 10.0, F = 30.00, p = 0.0006). Dua baris berikutnya memutar sudut pandang: durasi memberi efek besar pada Metode B (F = 43.20, p = 0.0002) dan efek yang menyentuh ambang pada Metode A (F = 4.80, p = 0.0598). Nilai p = 0.0598 berada tipis di atas α, sehingga keputusannya gagal tolak — dan pembacaannya mengikuti disiplin chapter Interpretasi Hasil Pengujian: gagal menolak bukan bukti efek durasi nihil pada Metode A, hanya belum cukup bukti pada 3 replikasi. Satu catatan terakhir: empat pengujian berjalan pada data yang sama, sehingga pengujian berganda dari chapter ANOVA berlaku kembali; bila keempatnya dirancang sebagai satu keluarga keputusan, koreksi Bonferroni mengencangkan ambang menjadi 0.05/4 = 0.0125. Kesimpulan tidak berubah — dua efek dengan p = 0.0006 dan p = 0.0002 tetap lolos, dua sisanya tetap tidak.
Prinsip Hierarki dan Disiplin Interpretasi #
Aturan pelaporan mengikuti prinsip hierarki: kedua efek utama tetap dipertahankan dalam model sekalipun p-value-nya sendiri besar, karena interaksi didefinisikan sebagai penyimpangan dari penjumlahan efek utama. Urutan bacanya: interaksi dibacakan lebih dulu, simple effect menyusul sebagai rincian, efek utama ditutup sebagai ringkasan sekunder. Contoh kalimat laporan yang lengkap untuk eksperimen kita:
Durasi latihan mengubah efektivitas metode (F = 9.60, p = 0.0147):
Metode B melampaui Metode A pada durasi panjang (selisih 10.0,
F = 30.00, p = 0.0006), tetapi tidak pada durasi pendek (selisih 2.0,
F = 1.20, p = 0.3052).Kalimat laporan di atas menempatkan interaksi sebagai pembuka karena keputusan praktis bergantung padanya: sekolah dengan latihan pendek tidak memperoleh manfaat dari berganti metode, sementara sekolah dengan program latihan panjang memperoleh manfaat 10 poin. Efek utama +6 poin, betapapun signifikannya, menyamarkan perbedaan yang justru menentukan keputusan.
Kapan Interaksi Diharapkan dan Batas Ujinya #
Interaksi bukan keanehan statistik; pola semacam ini umum di dunia nyata. Dosis × respons: efek dosis pupuk, obat, atau latihan jarang konstan antar varietas, kelompok pasien, atau jenjang kemampuan. Segmen × perlakuan: respons terhadap promosi bisa positif pada satu segmen pelanggan dan datar pada segmen lain. Metode × konteks: teknik belajar yang efektif bergantung pada jenis materi dan latar siswa. Prinsip praktisnya: semakin dua faktor bekerja pada mekanisme yang saling terkait, semakin besar peluang interaksi; dua faktor yang bekerja pada jalur terpisah cenderung aditif.
Di ujung lain, F interaksi yang tidak signifikan tidak boleh dibaca sebagai bukti kedua faktor aditif. Gagal menolak H0 bukan menerima H0 — disiplin yang ditegakkan chapter Interpretasi Hasil Pengujian — dan uji interaksi adalah uji paling haus data dalam tabel ANOVA: kontrasnya menarik selisih dari selisih, sehingga derau relatif besar terhadap efeknya. Dengan n = 3 per sel seperti contoh kita, hanya interaksi yang kuat yang terdeteksi.
Chapter ini menutup Section Pengujian Hipotesis. Perjalanan section ini merangkai rumusan H0 dan H1, α serta p-value, galat Tipe I dan II, keluarga uji z, t, χ², dan F, jalur nonparametrik Mann-Whitney, Wilcoxon, dan Kruskal-Wallis, hingga dua faktor sekaligus dengan interaksinya — dan seluruhnya menaungi satu disiplin yang sama: tetapkan hipotesis di muka, pilih alat uji yang sesuai desain, laporkan hasil dengan bahasa yang tidak lebih tegas daripada buktinya. Pertanyaan berikutnya menggeser fokus dari apakah kelompok berbeda ke bagaimana variabel berkaitan: mengukur kekuatan hubungan lewat kovarians dan korelasi, lalu memodelkannya dengan regresi — pembuka Section Korelasi dan Regresi. Pendalaman interaksi dan simple effect tersedia di NIST Engineering Statistics Handbook serta Penn State STAT 500 ; dokumentasi distribusi F ada di scipy.stats .