Sebagian besar variabel yang dijumpai dalam riset kesehatan, ekonomi, maupun sosial tidak berbentuk angka kontinu, melainkan berupa kelompok atau label — sembuh/tidak sembuh, merokok/tidak merokok, puas/cukup/tidak puas. Data semacam ini disebut data kategori, dan cara memperlakukannya berbeda dari data numerik biasa: rata-rata dan simpangan baku tidak lagi menjadi ukuran yang informatif, karena angka yang muncul (misalnya kode 1 dan 2) hanya berfungsi sebagai label, bukan nilai yang bisa dijumlahkan atau dirata-ratakan secara bermakna.
Agarwal & Agresti (2018) membedakan variabel kategori nominal — kategori tanpa urutan alami, seperti golongan darah atau jenis kelamin — dari variabel kategori ordinal, yang kategorinya memiliki tingkatan, seperti “ringan / sedang / berat”. Perbedaan ini penting karena metode analisis yang cocok untuk data ordinal (misalnya uji Wilcoxon atau model logistik ordinal) akan membuang informasi jika diterapkan pada data nominal, dan sebaliknya.
Tiga sifat yang membedakan variabel kategori dari variabel kontinu:
Beberapa contoh konkret di mana analisis data kategori menjadi kerangka kerja utama:
Dalam praktik saya sendiri saat mengerjakan tugas klasifikasi banjir
biasa vs. banjir bandang, kerangka data kategori inilah yang jadi
fondasi sebelum masuk ke regresi logistik biner — variabel respons
is_flash_flood pun pada dasarnya adalah data kategori
dengan dua level.
Tabel kontingensi (contingency table) adalah tabulasi silang (cross-tabulation) yang menyajikan frekuensi bersama dari dua variabel kategori. Setiap sel dalam tabel menunjukkan berapa banyak observasi yang jatuh pada kombinasi kategori tertentu dari kedua variabel.
Untuk dua variabel kategori \(X\) (dengan \(I\) level) dan \(Y\) (dengan \(J\) level), tabel kontingensi berukuran \(I \times J\) berisi frekuensi \(n_{ij}\) — banyaknya observasi dengan \(X = i\) dan \(Y = j\). Baris marjinal dan kolom marjinal masing-masing merupakan total per baris (\(n_{i+}\)) dan total per kolom (\(n_{+j}\)).
Kasus paling sederhana dan paling sering dijumpai adalah tabel \(2 \times 2\):
| \(Y = 1\) | \(Y = 2\) | Total | |
|---|---|---|---|
| \(X = 1\) | \(n_{11}\) | \(n_{12}\) | \(n_{1+}\) |
| \(X = 2\) | \(n_{21}\) | \(n_{22}\) | \(n_{2+}\) |
| Total | \(n_{+1}\) | \(n_{+2}\) | \(n\) |
Distribusi bersama (joint distribution) menyatakan peluang gabungan setiap kombinasi kategori:
\[\pi_{ij} = P(X = i, Y = j)\]
diestimasi dari data melalui proporsi sel: \(\hat\pi_{ij} = n_{ij}/n\).
Distribusi marjinal adalah distribusi satu variabel saja, diperoleh dengan menjumlahkan sel-sel joint distribution pada arah variabel lainnya:
\[\pi_{i+} = \sum_{j} \pi_{ij}, \qquad \pi_{+j} = \sum_{i} \pi_{ij}\]
Distribusi marjinal ini yang muncul di baris dan kolom “Total” pada tabel kontingensi.
Peluang bersyarat menyatakan distribusi satu variabel dengan syarat nilai variabel lain sudah diketahui — inilah yang mendasari interpretasi asosiasi:
\[\pi_{j|i} = P(Y = j \mid X = i) = \frac{\pi_{ij}}{\pi_{i+}}\]
Jika \(\pi_{j|i}\) sama untuk semua nilai \(i\) (peluang \(Y\) tidak berubah walau \(X\) berbeda), maka \(X\) dan \(Y\) dikatakan independen — dan inilah hipotesis nol yang diuji lewat uji chi-square pada Bagian 5.
Setelah tabel kontingensi terbentuk, pertanyaan berikutnya adalah seberapa kuat hubungan antara kedua variabel. Tiga ukuran asosiasi yang paling umum dipakai pada tabel \(2 \times 2\):
Odds adalah rasio antara peluang suatu kejadian terjadi dan peluang tidak terjadi:
\[\text{Odds} = \frac{\pi}{1-\pi}\]
Pada baris pertama tabel \(2\times2\) di atas, odds kejadian \(Y=1\) dengan syarat \(X=1\) adalah \(\dfrac{n_{11}}{n_{12}}\).
Odds ratio (OR) membandingkan odds pada satu baris terhadap odds pada baris lainnya:
\[OR = \frac{ad}{bc}\]
dengan notasi sel tabel \(2\times2\) standar \(a = n_{11}\), \(b = n_{12}\), \(c = n_{21}\), \(d = n_{22}\).
Relative risk (RR), atau rasio risiko, membandingkan proporsi kejadian secara langsung antar dua kelompok, bukan odds-nya:
\[RR = \frac{a/(a+b)}{c/(c+d)}\]
Catatan: Angka pada contoh ini bersifat ilustratif (rekaan), bukan data dari studi nyata, semata untuk mendemonstrasikan mekanisme perhitungan.
Kasus: hubungan antara status merokok dan kejadian kanker paru pada studi kasus-kontrol dengan 200 subjek.
| Kanker Paru | Tidak Kanker | Total | |
|---|---|---|---|
| Merokok | 60 | 40 | 100 |
| Tidak Merokok | 20 | 80 | 100 |
| Total | 80 | 120 | 200 |
Peluang kanker paru dengan syarat merokok: \[P(\text{Kanker} \mid \text{Merokok}) = \frac{60}{100} = 0.60\]
Peluang kanker paru dengan syarat tidak merokok: \[P(\text{Kanker} \mid \text{Tidak Merokok}) = \frac{20}{100} = 0.20\]
Selisih 0.60 versus 0.20 ini sudah memberi indikasi awal ada asosiasi, tapi besarnya asosiasi baru terlihat jelas lewat odds dan odds ratio.
Odds kanker paru pada kelompok merokok: \[\text{Odds}_{\text{merokok}} = \frac{60}{40} = 1.5\]
Odds kanker paru pada kelompok tidak merokok: \[\text{Odds}_{\text{tidak merokok}} = \frac{20}{80} = 0.25\]
\[OR = \frac{ad}{bc} = \frac{(60)(80)}{(40)(20)} = \frac{4800}{800} = 6\]
Sebagai pembanding, relative risk-nya: \[RR = \frac{60/100}{20/100} = 3\]
Perbedaan OR = 6 dan RR = 3 di sini cukup besar justru karena kejadian kanker paru pada sampel ini tidak jarang (proporsi 40%) — ini contoh baik untuk menunjukkan kenapa “rare disease assumption” penting dicek sebelum menyamakan OR dengan RR secara sembarangan.
Bagian ini mengulang kasus yang sama secara komputasional, sekaligus menambahkan uji chi-square untuk memeriksa apakah asosiasi yang terlihat cukup kuat untuk dianggap tidak terjadi karena kebetulan sampel.
data <- matrix(c(60, 40, 20, 80),
nrow = 2,
byrow = TRUE)
rownames(data) <- c("Merokok", "Tidak Merokok")
colnames(data) <- c("Kanker", "Tidak Kanker")
data## Kanker Tidak Kanker
## Merokok 60 40
## Tidak Merokok 20 80
mosaicplot(data, main = "Status Merokok vs Kejadian Kanker Paru",
color = c("#2c7fb8", "#a6bddb"), xlab = "", ylab = "")Mosaic plot ini sekilas sudah menunjukkan lebar blok “Kanker” pada baris “Merokok” jauh lebih besar dibanding baris “Tidak Merokok” — indikasi visual dari asosiasi yang akan diuji formal di bawah.
Dengan p-value jauh di bawah 0.05, hipotesis nol independensi antara status merokok dan kejadian kanker paru ditolak — data memberi cukup bukti bahwa kedua variabel ini berasosiasi, bukan sekadar variasi sampling acak. Nilai OR = 6 menunjukkan kekuatan asosiasi tersebut: odds kejadian kanker paru pada kelompok merokok enam kali odds pada kelompok tidak merokok.
Perlu digarisbawahi, chi-square test hanya menjawab ada tidaknya asosiasi (signifikansi), sedangkan odds ratio menjawab seberapa besar asosiasi itu (effect size). Sampel besar bisa membuat asosiasi yang sebenarnya lemah tetap signifikan secara statistik — sehingga membaca OR/RR tetap penting meski uji chi-square sudah signifikan.
Dalam kerangka studi kasus-kontrol semacam ini, OR = 6 lazim dibaca sebagai indikasi merokok berasosiasi kuat dengan risiko kanker paru — tapi satu batasan penting harus disebutkan: desain kasus-kontrol tidak memungkinkan klaim kausal langsung dari satu tabel kontingensi saja. Asosiasi yang teramati bisa saja dipengaruhi variabel perancu (confounding) yang tidak masuk dalam tabel, misalnya usia atau paparan polutan lain. Odds ratio sebesar ini pantas jadi dasar untuk penyelidikan lanjutan yang mengontrol variabel-variabel tersebut, bukan langsung dijadikan pernyataan sebab-akibat final.
Referensi
Agresti, A. (2018). An Introduction to Categorical Data Analysis (3rd ed.). John Wiley & Sons.
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.