Analisis Data Kategorik: Asosiasi Penggunaan Kelas Online dan Kelulusan Mahasiswa dengan Jalur Masuk sebagai Kovariat

Latar Belakang dan Tujuan

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.

Variabel yang digunakan:

Peran Variabel Kategori
X (penjelas) Penggunaan Kelas Online Ya, Tidak
Y (respons) Kelulusan Lulus, Tidak Lulus
Z (kovariat/stratum) Jalur Masuk Reguler, Beasiswa

Karena ketiganya berskala kategori dengan dua level, datanya berbentuk tabel kontingensi 2 × 2 × 2. Analisis mengikuti lima langkah: (1) menyusun tabel kontingensi 3 arah, (2) menghitung OR marginal dan OR bersyarat, (3) memeriksa Paradoks Simpson, (4) uji Breslow-Day dan CMH dengan R, serta (5) kesimpulan akhir.

1. Menyusun Tabel Kontingensi 3 Arah

Data disimulasikan (n = 800 mahasiswa, 400 per jalur masuk) dengan pola yang realistis: mahasiswa jalur Beasiswa cenderung berprestasi sehingga tingkat kelulusannya tinggi, sedangkan pengguna kelas online lebih banyak berasal dari jalur Reguler. Data disusun sebagai array 3 dimensi, urutan: Kelas Online × Kelulusan × Jalur Masuk.

dat <- array(c(190, 52, 110, 48,   # stratum: Reguler  (Ya-Lulus, Tidak-Lulus, Ya-Gagal, Tidak-Gagal)
                90, 255, 10, 45),  # stratum: Beasiswa
             dim = c(2, 2, 2),
             dimnames = list(Kelas_Online = c("Ya", "Tidak"),
                             Kelulusan    = c("Lulus", "Tidak Lulus"),
                             Jalur_Masuk  = c("Reguler", "Beasiswa")))

# Tabel 3 arah (tampilan datar)
ftable(dat, row.vars = c("Jalur_Masuk", "Kelas_Online"))
##                          Kelulusan Lulus Tidak Lulus
## Jalur_Masuk Kelas_Online                            
## Reguler     Ya                       190         110
##             Tidak                     52          48
## Beasiswa    Ya                        90          10
##             Tidak                    255          45
# Tabel 3 arah dengan total baris dan kolom (addmargins)
ftable(addmargins(dat), row.vars = c("Jalur_Masuk", "Kelas_Online"))
##                          Kelulusan Lulus Tidak Lulus Sum
## Jalur_Masuk Kelas_Online                                
## Reguler     Ya                       190         110 300
##             Tidak                     52          48 100
##             Sum                      242         158 400
## Beasiswa    Ya                        90          10 100
##             Tidak                    255          45 300
##             Sum                      345          55 400
## Sum         Ya                       280         120 400
##             Tidak                    307          93 400
##             Sum                      587         213 800

Tabel parsial (tabel 2 × 2 untuk tiap jalur masuk) beserta total barisnya:

cat("== Stratum: Reguler ==\n")
## == Stratum: Reguler ==
addmargins(dat[, , "Reguler"])
##             Kelulusan
## Kelas_Online Lulus Tidak Lulus Sum
##        Ya      190         110 300
##        Tidak    52          48 100
##        Sum     242         158 400
cat("\n== Stratum: Beasiswa ==\n")
## 
## == Stratum: Beasiswa ==
addmargins(dat[, , "Beasiswa"])
##             Kelulusan
## Kelas_Online Lulus Tidak Lulus Sum
##        Ya       90          10 100
##        Tidak   255          45 300
##        Sum     345          55 400

Interpretasi.

Total data 800 mahasiswa terbagi rata ke dua jalur masuk, masing-masing 400 mahasiswa. Namun, komposisi pengguna kelas online sangat tidak seimbang: dari 400 pengguna kelas online, 300 orang (75%) berasal dari jalur Reguler, sedangkan dari 400 non-pengguna, hanya 100 orang (25%) yang berasal dari jalur Reguler. Ketidakseimbangan ini merupakan sinyal awal bahwa jalur masuk dapat memengaruhi hubungan antara kelas online dan kelulusan.

2. Menghitung OR Marginal dan OR Tiap Stratum (Bersyarat)

Rasio odds untuk tabel 2 × 2 dihitung dengan

\[\theta = \frac{n_{11}\, n_{22}}{n_{12}\, n_{21}}\]

dengan \(n_{11}\) = Online-Lulus, \(n_{22}\) = Tidak Online-Tidak Lulus, \(n_{12}\) = Online-Tidak Lulus, dan \(n_{21}\) = Tidak Online-Lulus.

OR Marginal (Naif)

Tabel marginal diperoleh dengan menjumlahkan frekuensi pada seluruh tingkat jalur masuk.

or_fun <- function(t) (t[1, 1] * t[2, 2]) / (t[1, 2] * t[2, 1])

marg <- margin.table(dat, c(1, 2))   # tabel marginal Kelas Online x Kelulusan
addmargins(marg)
##             Kelulusan
## Kelas_Online Lulus Tidak Lulus Sum
##        Ya      280         120 400
##        Tidak   307          93 400
##        Sum     587         213 800
persen_marg <- round(prop.table(marg, 1) * 100, 2)
persen_marg
##             Kelulusan
## Kelas_Online Lulus Tidak Lulus
##        Ya    70.00       30.00
##        Tidak 76.75       23.25
or_marg <- or_fun(marg)
or_marg
## [1] 0.7068

Interpretasi.

Secara keseluruhan, persentase lulus pengguna kelas online (70,00%) lebih rendah daripada non-pengguna (76,75%). OR marginal = 0,707 (< 1) berarti odds lulus pengguna kelas online sekitar 0,71 kali odds non-pengguna, sehingga analisis naif ini seolah-olah menyimpulkan bahwa kelas online menurunkan peluang lulus.

OR Bersyarat (Tiap Stratum)

or_reguler  <- or_fun(dat[, , "Reguler"])
or_beasiswa <- or_fun(dat[, , "Beasiswa"])

# Persentase lulus per stratum
cat("Persentase lulus - Reguler:\n");  print(round(prop.table(dat[, , "Reguler"], 1) * 100, 2))
## Persentase lulus - Reguler:
##             Kelulusan
## Kelas_Online Lulus Tidak Lulus
##        Ya    63.33       36.67
##        Tidak 52.00       48.00
cat("\nPersentase lulus - Beasiswa:\n"); print(round(prop.table(dat[, , "Beasiswa"], 1) * 100, 2))
## 
## Persentase lulus - Beasiswa:
##             Kelulusan
## Kelas_Online Lulus Tidak Lulus
##        Ya       90          10
##        Tidak    85          15
hasil_or <- data.frame(
  Tabel = c("Marginal", "Bersyarat: Reguler", "Bersyarat: Beasiswa"),
  OR    = c(or_marg, or_reguler, or_beasiswa)
)
hasil_or
##                 Tabel     OR
## 1            Marginal 0.7068
## 2  Bersyarat: Reguler 1.5944
## 3 Bersyarat: Beasiswa 1.5882

Interpretasi.

Setelah data dipisah per jalur masuk, arah hubungan berbalik. Pada jalur Reguler, OR = 1,594 (lulus 63,33% pada pengguna online vs 52,00% pada non-pengguna), dan pada jalur Beasiswa OR = 1,588 (lulus 90,00% vs 85,00%). Kedua OR bersyarat lebih dari 1 dan nilainya sangat dekat, artinya di dalam setiap jalur masuk, pengguna kelas online memiliki odds lulus sekitar 1,6 kali lebih besar dibanding non-pengguna.

3. Memeriksa Paradoks Simpson

Paradoks Simpson terjadi apabila arah asosiasi marginal berlawanan dengan arah asosiasi bersyarat pada setiap stratum.

simpson <- (or_marg < 1) & (or_reguler > 1) & (or_beasiswa > 1)

pemeriksaan <- data.frame(
  Tabel        = c("Marginal", "Reguler", "Beasiswa"),
  `Lulus Online (%)` = c(persen_marg["Ya", "Lulus"],
                         prop.table(dat[, , "Reguler"], 1)["Ya", "Lulus"] * 100,
                         prop.table(dat[, , "Beasiswa"], 1)["Ya", "Lulus"] * 100),
  `Lulus Tidak Online (%)` = c(persen_marg["Tidak", "Lulus"],
                               prop.table(dat[, , "Reguler"], 1)["Tidak", "Lulus"] * 100,
                               prop.table(dat[, , "Beasiswa"], 1)["Tidak", "Lulus"] * 100),
  OR = c(or_marg, or_reguler, or_beasiswa),
  Arah = ifelse(c(or_marg, or_reguler, or_beasiswa) > 1,
                "Online lebih baik", "Tidak online lebih baik"),
  check.names = FALSE
)
pemeriksaan
##      Tabel Lulus Online (%) Lulus Tidak Online (%)     OR
## 1 Marginal            70.00                  76.75 0.7068
## 2  Reguler            63.33                  52.00 1.5944
## 3 Beasiswa            90.00                  85.00 1.5882
##                      Arah
## 1 Tidak online lebih baik
## 2       Online lebih baik
## 3       Online lebih baik
cat("\nParadoks Simpson terjadi? ->", ifelse(simpson, "YA", "TIDAK"), "\n")
## 
## Paradoks Simpson terjadi? -> YA
# Penyebab: distribusi kovariat
cat("\nProporsi jalur masuk pada tiap kelompok penggunaan kelas online (%):\n")
## 
## Proporsi jalur masuk pada tiap kelompok penggunaan kelas online (%):
round(prop.table(margin.table(dat, c(1, 3)), 1) * 100, 2)
##             Jalur_Masuk
## Kelas_Online Reguler Beasiswa
##        Ya         75       25
##        Tidak      25       75
cat("\nTingkat kelulusan tiap jalur masuk (%):\n")
## 
## Tingkat kelulusan tiap jalur masuk (%):
round(prop.table(margin.table(dat, c(3, 2)), 1) * 100, 2)
##            Kelulusan
## Jalur_Masuk Lulus Tidak Lulus
##    Reguler  60.50       39.50
##    Beasiswa 86.25       13.75

Interpretasi.

Paradoks Simpson terjadi: OR marginal (0,707) menyatakan kelas online merugikan, tetapi OR bersyarat pada kedua jalur masuk (1,594 dan 1,588) menyatakan sebaliknya. Penyebabnya adalah jalur masuk berperan sebagai variabel pengganggu (confounder). Mahasiswa Reguler memiliki tingkat kelulusan lebih rendah (60,50%) dibanding Beasiswa (86,25%), dan 75% pengguna kelas online berasal dari jalur Reguler. Akibatnya, rata-rata kelulusan pengguna online “tertarik turun” oleh dominasi mahasiswa Reguler, padahal di dalam tiap jalur kelas online justru berasosiasi dengan kelulusan yang lebih baik.

4. Uji Breslow-Day dan Cochran-Mantel-Haenszel (CMH) dengan R

Estimator Mantel-Haenszel (OR Gabungan)

\[\hat{\theta}_{MH} = \frac{\sum_k n_{11k}\, n_{22k}/n_{++k}}{\sum_k n_{12k}\, n_{21k}/n_{++k}}\]

n_k <- apply(dat, 3, sum)                          # total tiap stratum
num <- sum(dat[1, 1, ] * dat[2, 2, ] / n_k)
den <- sum(dat[1, 2, ] * dat[2, 1, ] / n_k)

cat("Pembilang (num) =", round(num, 3), "\n")
## Pembilang (num) = 32.92
cat("Penyebut  (den) =", round(den, 3), "\n")
## Penyebut  (den) = 20.68
theta_MH <- num / den
cat("theta_MH        =", round(theta_MH, 3), "\n")
## theta_MH        = 1.593

Interpretasi.

Setelah mengontrol jalur masuk, odds lulus pengguna kelas online sekitar 1,59 kali odds non-pengguna. Nilai ini berlawanan arah dengan OR marginal (0,707) dan konsisten dengan kedua OR bersyarat.

Uji Breslow-Day (Homogenitas OR Antar Stratum)

Hipotesis:

  • \(H_0\): \(\theta_{XY|Z=Reguler} = \theta_{XY|Z=Beasiswa}\) (asosiasi homogen, tidak ada interaksi tiga arah)
  • \(H_1\): minimal ada satu OR stratum yang berbeda (ada interaksi tiga arah)
bd <- BreslowDayTest(dat)
bd
## 
##  Breslow-Day test on Homogeneity of Odds Ratios
## 
## data:  dat
## X-squared = 7.9e-05, df = 1, p-value = 1

Interpretasi.

Nilai p-value jauh di atas \(\alpha = 0{,}05\) (X² mendekati 0, p ≈ 0,99), sehingga \(H_0\) tidak ditolak. Tidak ada bukti interaksi tiga arah: OR kedua stratum (1,594 dan 1,588) dapat dianggap sama, sehingga pola asosiasi kelas online dan kelulusan homogen pada kedua jalur masuk. Dengan demikian, penggabungan lewat estimator Mantel-Haenszel layak dilakukan.

Uji Cochran-Mantel-Haenszel (Independensi Bersyarat)

Hipotesis:

  • \(H_0\): semua OR bersyarat sama dengan 1 (kelas online dan kelulusan independen bersyarat pada jalur masuk)
  • \(H_1\): minimal ada satu OR bersyarat yang tidak sama dengan 1 (ada asosiasi bersyarat/parsial)
cmh <- mantelhaen.test(dat, correct = FALSE)
cmh
## 
##  Mantel-Haenszel chi-squared test without continuity correction
## 
## data:  dat
## Mantel-Haenszel X-squared = 5.6, df = 1, p-value = 0.02
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  1.081 2.346
## sample estimates:
## common odds ratio 
##             1.593
cat("\nOR gabungan (MH) :", round(cmh$estimate, 3), "\n")
## 
## OR gabungan (MH) : 1.593
cat("Selang kepercayaan 95% :", round(cmh$conf.int[1], 3), "-", round(cmh$conf.int[2], 3), "\n")
## Selang kepercayaan 95% : 1.081 - 2.346

Interpretasi.

Statistik CMH menghasilkan X² = 5,6 dengan p-value = 0,02 (< 0,05), sehingga \(H_0\) ditolak. Terdapat asosiasi bersyarat yang signifikan antara penggunaan kelas online dan kelulusan setelah jalur masuk dikontrol. OR gabungan 1,593 dengan selang kepercayaan 95% sekitar 1,08 hingga 2,35 tidak memuat angka 1, yang mengonfirmasi hasil uji tersebut.

Ringkasan Peta Keputusan

ringkasan <- data.frame(
  Uji = c("Breslow-Day", "Cochran-Mantel-Haenszel"),
  Hipotesis_Nol = c("OR antar stratum sama (homogen)", "Semua OR bersyarat = 1"),
  Statistik = c(unname(bd$statistic), unname(cmh$statistic)),
  p_value = c(bd$p.value, cmh$p.value),
  Keputusan = c(ifelse(bd$p.value < 0.05, "Tolak H0", "Gagal tolak H0"),
                ifelse(cmh$p.value < 0.05, "Tolak H0", "Gagal tolak H0"))
)
ringkasan
##                       Uji                   Hipotesis_Nol Statistik p_value
## 1             Breslow-Day OR antar stratum sama (homogen) 7.866e-05 0.99292
## 2 Cochran-Mantel-Haenszel          Semua OR bersyarat = 1 5.582e+00 0.01815
##        Keputusan
## 1 Gagal tolak H0
## 2       Tolak H0

5. Kesimpulan

Berdasarkan hasil analisis, terjadi Paradoks Simpson pada hubungan antara penggunaan kelas online dan kelulusan mahasiswa. Secara marginal, penggunaan kelas online tampak berasosiasi dengan odds kelulusan yang lebih rendah (OR = 0,707), tetapi setelah dikontrol berdasarkan jalur masuk, asosiasinya berbalik menjadi positif dan homogen pada jalur Reguler (OR = 1,594) maupun Beasiswa (OR = 1,588). Hasil uji Breslow-Day menunjukkan tidak terdapat perbedaan OR yang signifikan antarstratum (p ≈ 0,99), sedangkan uji CMH menunjukkan adanya asosiasi bersyarat yang signifikan (OR MH = 1,593; p = 0,018; 95% CI: 1,08–2,35). Dengan demikian, jalur masuk perlu diperhitungkan dalam menganalisis hubungan penggunaan kelas online dengan kelulusan karena distribusinya yang tidak seimbang dapat membalikkan kesimpulan yang diperoleh dari analisis marginal. *