Sebuah kampus ingin mengetahui apakah penggunaan kelas online berhubungan dengan kelulusan mahasiswa, dengan jalur masuk (Reguler/Beasiswa) sebagai kovariat yang diduga memengaruhi pola hubungan tersebut.
Data disimulasikan untuk 400 mahasiswa (N = 400) dengan jumlah sel yang ditetapkan agar dapat menggambarkan kemungkinan terjadinya Paradoks Simpson.
dat <- data.frame(
Jalur = rep(c("Beasiswa", "Reguler"), each = 4),
Online = rep(c("Tinggi", "Rendah"), each = 2, times = 2),
Lulus = rep(c("Ya", "Tidak"), times = 4),
n = c(18, 2, 64, 16, # Beasiswa
90, 90, 48, 72) # Reguler
)
dat$Online <- factor(dat$Online, levels = c("Tinggi", "Rendah"))
dat$Lulus <- factor(dat$Lulus, levels = c("Ya", "Tidak"))
dat$Jalur <- factor(dat$Jalur, levels = c("Reguler", "Beasiswa"))
tab3 <- xtabs(n ~ Online + Lulus + Jalur, data = dat)
ftable(tab3, row.vars = c("Jalur", "Online"), col.vars = "Lulus")
## Lulus Ya Tidak
## Jalur Online
## Reguler Tinggi 90 90
## Rendah 48 72
## Beasiswa Tinggi 18 2
## Rendah 64 16
Tabel parsial per stratum jalur masuk:
tab_reg <- tab3[, , "Reguler"]
tab_bea <- tab3[, , "Beasiswa"]
cat("Jalur Reguler\n"); print(addmargins(tab_reg))
## Jalur Reguler
## Lulus
## Online Ya Tidak Sum
## Tinggi 90 90 180
## Rendah 48 72 120
## Sum 138 162 300
cat("\nJalur Beasiswa\n"); print(addmargins(tab_bea))
##
## Jalur Beasiswa
## Lulus
## Online Ya Tidak Sum
## Tinggi 18 2 20
## Rendah 64 16 80
## Sum 82 18 100
Tabel marginal (mengabaikan jalur masuk):
tab_marg <- margin.table(tab3, margin = c(1, 2))
addmargins(tab_marg)
## Lulus
## Online Ya Tidak Sum
## Tinggi 108 92 200
## Rendah 112 88 200
## Sum 220 180 400
Odds ratio dihitung sebagai \(OR = \frac{a \cdot d}{b \cdot c}\) dengan selang kepercayaan 95% menggunakan metode Woolf (log-OR).
hitung_or <- function(t) {
a <- t[1, 1]; b <- t[1, 2]; c <- t[2, 1]; d <- t[2, 2]
or <- (a * d) / (b * c)
se <- sqrt(1/a + 1/b + 1/c + 1/d)
c(OR = or,
Lower95 = exp(log(or) - 1.96 * se),
Upper95 = exp(log(or) + 1.96 * se))
}
hasil_or <- rbind(
"Marginal (gabungan)" = hitung_or(tab_marg),
"Bersyarat: Reguler" = hitung_or(tab_reg),
"Bersyarat: Beasiswa" = hitung_or(tab_bea)
)
kable(round(hasil_or, 3), caption = "OR kelas online tinggi vs rendah terhadap kelulusan")
| OR | Lower95 | Upper95 | |
|---|---|---|---|
| Marginal (gabungan) | 0.922 | 0.622 | 1.368 |
| Bersyarat: Reguler | 1.500 | 0.940 | 2.395 |
| Bersyarat: Beasiswa | 2.250 | 0.473 | 10.710 |
Proporsi lulus per kelompok:
prop_lulus <- function(t) round(prop.table(t, 1)[, "Ya"], 3)
kable(data.frame(
Online = c("Tinggi", "Rendah"),
Marginal = prop_lulus(tab_marg),
Reguler = prop_lulus(tab_reg),
Beasiswa = prop_lulus(tab_bea)
), row.names = FALSE, caption = "Proporsi lulus menurut tingkat penggunaan kelas online")
| Online | Marginal | Reguler | Beasiswa |
|---|---|---|---|
| Tinggi | 0.54 | 0.5 | 0.9 |
| Rendah | 0.56 | 0.4 | 0.8 |
Paradoks Simpson terjadi jika arah asosiasi marginal berbeda dengan arah asosiasi di dalam setiap stratum. Untuk mencari penyebabnya, diperiksa hubungan jalur masuk dengan kedua variabel lainnya.
or_m <- hasil_or["Marginal (gabungan)", "OR"]
or_r <- hasil_or["Bersyarat: Reguler", "OR"]
or_b <- hasil_or["Bersyarat: Beasiswa", "OR"]
simpson <- (or_m < 1 & or_r > 1 & or_b > 1) | (or_m > 1 & or_r < 1 & or_b < 1)
cat("OR marginal =", round(or_m, 3), "| OR Reguler =", round(or_r, 3),
"| OR Beasiswa =", round(or_b, 3), "\n")
## OR marginal = 0.922 | OR Reguler = 1.5 | OR Beasiswa = 2.25
cat("Paradoks Simpson terdeteksi:", ifelse(simpson, "YA", "TIDAK"), "\n")
## Paradoks Simpson terdeteksi: YA
cat("Jalur masuk x Penggunaan kelas online (proporsi baris)\n")
## Jalur masuk x Penggunaan kelas online (proporsi baris)
print(round(prop.table(margin.table(tab3, c(3, 1)), 1), 3))
## Online
## Jalur Tinggi Rendah
## Reguler 0.6 0.4
## Beasiswa 0.2 0.8
cat("\nJalur masuk x Kelulusan (proporsi baris)\n")
##
## Jalur masuk x Kelulusan (proporsi baris)
print(round(prop.table(margin.table(tab3, c(3, 2)), 1), 3))
## Lulus
## Jalur Ya Tidak
## Reguler 0.46 0.54
## Beasiswa 0.82 0.18
Mahasiswa jalur Beasiswa cenderung lulus dengan proporsi tinggi, tetapi sebagian besar tergolong pengguna kelas online yang rendah. Sebaliknya, mahasiswa Reguler banyak menggunakan kelas online tetapi tingkat kelulusannya lebih rendah. Struktur ini membuat jalur masuk bertindak sebagai confounder yang menutupi (bahkan membalik) efek kelas online pada data gabungan.
bd <- BreslowDayTest(tab3, correct = TRUE) # dengan koreksi Tarone
bd
##
## Breslow-Day Test on Homogeneity of Odds Ratios (with Tarone correction)
##
## data: tab3
## X-squared = 0.24067, df = 1, p-value = 0.6237
cmh <- mantelhaen.test(tab3, correct = TRUE)
cmh
##
## Mantel-Haenszel chi-squared test with continuity correction
##
## data: tab3
## Mantel-Haenszel X-squared = 3.3886, df = 1, p-value = 0.06565
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.9991649 2.4394591
## sample estimates:
## common odds ratio
## 1.561224
kable(data.frame(
Uji = c("Breslow-Day (Tarone)", "CMH"),
Statistik = round(c(unname(bd$statistic), unname(cmh$statistic)), 3),
df = c(unname(bd$parameter), unname(cmh$parameter)),
p_value = signif(c(bd$p.value, cmh$p.value), 4)
), caption = "Ringkasan uji statistik")
| Uji | Statistik | df | p_value |
|---|---|---|---|
| Breslow-Day (Tarone) | 0.241 | 1 | 0.62370 |
| CMH | 3.389 | 1 | 0.06565 |
cat("OR bersama (Mantel-Haenszel):", round(unname(cmh$estimate), 3),
"| CI 95%:", round(cmh$conf.int[1], 3), "-", round(cmh$conf.int[2], 3), "\n")
## OR bersama (Mantel-Haenszel): 1.561 | CI 95%: 0.999 - 2.439
Interpretasi
Kesimpulan
Analisis yang hanya berdasarkan tabel marginal berpotensi menyesatkan. Setelah jalur masuk (Reguler/Beasiswa) dikendalikan, penggunaan kelas online yang tinggi cenderung berhubungan positif dengan kelulusan mahasiswa di kedua jalur. Jalur masuk berperan sebagai confounder yang menimbulkan Paradoks Simpson. Karena itu, kampus sebaiknya menilai efektivitas kelas online dengan analisis terstratifikasi (OR bersyarat atau OR Mantel-Haenszel), bukan dari data gabungan.