Dalam statistika, data dapat dibedakan menjadi dua jenis besar: data kontinu dan data kategori. Data kontinu nilainya berupa angka yang bisa mengambil nilai berapa saja dalam suatu rentang misalnya tinggi badan, berat badan, atau suhu. Sedangkan data kategori adalah data yang nilainya hanya bisa masuk ke dalam kelompok atau kategori tertentu yang sudah ditentukan, tanpa ada nilai di antaranya.
Analisis data kategori (categorical data analysis) adalah kumpulan metode statistik yang dirancang khusus untuk menganalisis data jenis ini. Menurut Agresti (2013), cakupannya mulai dari yang sederhana seperti tabel kontingensi dan uji chi-square, sampai yang lebih kompleks seperti regresi logistik dan model log-linear. Metode-metode ini tidak bisa begitu saja digantikan oleh metode untuk data kontinu, karena asumsi dasarnya memang berbeda misalnya asumsi normalitas jelas tidak berlaku untuk data yang hanya bernilai “ya” atau “tidak”.
Ada beberapa hal yang perlu dipahami tentang variabel kategori agar tidak salah dalam memilih metode analisis:
1. Nilainya berupa kategori, bukan angka pengukuran
Variabel kategori merepresentasikan keanggotaan dalam suatu kelompok. Jenis kelamin (laki-laki/perempuan), status gizi, atau golongan darah adalah contohnya. Meskipun kadang dikodekan dengan angka (misal: 0 dan 1), angka itu hanya label, tidak punya makna numerik seperti pada variabel kontinu.
2. Tidak ada jarak antar kategori yang bermakna
Ini yang jadi pembeda utama dari variabel kontinu. Pada variabel kontinu, kita bisa bilang selisih antara nilai 10 dan 20 sama besarnya dengan selisih antara 20 dan 30. Pada variabel kategori, konsep “jarak” ini tidak berlaku tidak ada artinya bilang kategori “gizi kurang” lebih jauh dari “gizi baik” dibanding kategori lainnya.
3. Skala pengukurannya nominal atau ordinal
Mengacu pada klasifikasi Stevens (1946):
4. Dirangkum dengan frekuensi dan proporsi
Karena tidak bisa dijumlah atau dirata-rata secara langsung, ringkasan yang tepat untuk variabel kategori adalah frekuensi (jumlah per kelompok) dan proporsi atau persentasenya. Ukuran seperti mean dan standar deviasi tidak relevan di sini.
Analisis data kategori sangat luas penggunaannya. Beberapa contoh nyata:
Epidemiologi: menguji apakah ada hubungan antara kebiasaan merokok (ya/tidak) dengan kejadian hipertensi (ya/tidak). Ukuran seperti odds ratio dan relative risk digunakan untuk mengkuantifikasi besarnya risiko.
Gizi dan kesehatan masyarakat: menganalisis apakah status gizi balita (gizi kurang/gizi baik) berhubungan dengan kejadian ISPA. Ini yang akan saya gunakan sebagai contoh kasus dalam laporan ini.
Psikologi: mengukur tingkat kesepakatan dua observer dalam menilai perilaku subjek yang dikategorikan (misal: agresif/tidak agresif), menggunakan koefisien Kappa Cohen.
Tabel kontingensi (contingency table) adalah tabel yang digunakan untuk menampilkan distribusi frekuensi dari dua atau lebih variabel kategori secara bersamaan. Tabel ini menyusun observasi berdasarkan kombinasi kategori dari masing-masing variabel, sehingga memungkinkan kita melihat pola hubungan antarvariabel secara langsung sebelum melakukan pengujian statistik.
Bentuk paling sederhana adalah tabel \(2 \times 2\), yang terbentuk ketika masing-masing variabel hanya punya dua kategori. Inilah yang paling sering ditemui dalam praktik, terutama untuk variabel biner seperti ya/tidak atau terpapar/tidak terpapar (Agresti, 2013).
Secara umum, struktur tabel kontingensi \(2 \times 2\) adalah sebagai berikut:
| Y = 1 | Y = 0 | Total | |
|---|---|---|---|
| X = 1 | \(n_{11}\) | \(n_{12}\) | \(n_{1+}\) |
| X = 0 | \(n_{21}\) | \(n_{22}\) | \(n_{2+}\) |
| Total | \(n_{+1}\) | \(n_{+2}\) | \(n\) |
Keterangan:
Untuk menjelaskan konsep-konsep berikutnya, saya gunakan satu contoh yang sama sepanjang bagian ini: data hasil pencatatan di posyandu terhadap 200 balita, dengan variabel status gizi (gizi kurang/gizi baik) dan kejadian ISPA dalam tiga bulan terakhir (ya/tidak).
| ISPA | Tidak ISPA | Total | |
|---|---|---|---|
| Gizi Kurang | 55 | 45 | 100 |
| Gizi Baik | 25 | 75 | 100 |
| Total | 80 | 120 | 200 |
Joint distribution atau distribusi bersama adalah distribusi peluang yang menggambarkan kemungkinan suatu observasi jatuh pada kombinasi kategori tertentu dari kedua variabel secara simultan.
Rumus:
\[\pi_{ij} = P(X = i,\; Y = j) = \frac{n_{ij}}{n}\]
dengan syarat \(\displaystyle\sum_{i,j} \pi_{ij} = 1\).
Contoh:
\[\pi_{11} = P(\text{Gizi Kurang} \cap \text{ISPA}) = \frac{55}{200} = 0{,}275\]
\[\pi_{12} = P(\text{Gizi Kurang} \cap \text{Tidak ISPA}) = \frac{45}{200} = 0{,}225\]
\[\pi_{21} = P(\text{Gizi Baik} \cap \text{ISPA}) = \frac{25}{200} = 0{,}125\]
\[\pi_{22} = P(\text{Gizi Baik} \cap \text{Tidak ISPA}) = \frac{75}{200} = 0{,}375\]
Cek: \(0{,}275 + 0{,}225 + 0{,}125 + 0{,}375 = 1{,}00\) ✓
Marginal distribution adalah distribusi peluang dari satu variabel saja, tanpa memperhatikan variabel lainnya. Diperoleh dengan menjumlahkan frekuensi sepanjang baris atau kolom — istilah “marginal” mengacu pada posisinya yang berada di tepi (margin) tabel.
Rumus:
\[\pi_{i+} = \sum_j \pi_{ij} = \frac{n_{i+}}{n} \qquad \pi_{+j} = \sum_i \pi_{ij} = \frac{n_{+j}}{n}\]
Jika dua variabel independen, berlaku \(\pi_{ij} = \pi_{i+} \cdot \pi_{+j}\) untuk semua sel. Kondisi ini menjadi hipotesis nol dalam uji chi-square.
Contoh:
\[\pi_{1+} = P(\text{Gizi Kurang}) = \frac{100}{200} = 0{,}50 \qquad \pi_{2+} = P(\text{Gizi Baik}) = \frac{100}{200} = 0{,}50\]
\[\pi_{+1} = P(\text{ISPA}) = \frac{80}{200} = 0{,}40 \qquad \pi_{+2} = P(\text{Tidak ISPA}) = \frac{120}{200} = 0{,}60\]
Sebagai cek independensi: jika independen, seharusnya \(\pi_{11} = 0{,}50 \times 0{,}40 = 0{,}20\), namun kenyataannya \(\pi_{11} = 0{,}275\) — ini sudah memberi sinyal awal adanya asosiasi.
Conditional probability atau peluang bersyarat adalah peluang variabel \(Y\) mengambil nilai tertentu, dengan syarat nilai variabel \(X\) sudah diketahui.
Rumus:
\[P(Y = j \mid X = i) = \frac{\pi_{ij}}{\pi_{i+}} = \frac{n_{ij}}{n_{i+}}\]
Contoh:
\[P(\text{ISPA} \mid \text{Gizi Kurang}) = \frac{55}{100} = 0{,}55\]
\[P(\text{ISPA} \mid \text{Gizi Baik}) = \frac{25}{100} = 0{,}25\]
Perbedaan yang cukup besar antara kedua peluang bersyarat ini (0,55 vs 0,25) mengindikasikan bahwa status gizi dan kejadian ISPA tidak independen. Kalau keduanya benar-benar independen, kedua nilai ini seharusnya sama besarnya.
Ukuran asosiasi digunakan untuk mengkuantifikasi seberapa kuat hubungan antara dua variabel kategori dalam tabel kontingensi. Tiga ukuran yang umum digunakan adalah Odds, Odds Ratio, dan Relative Risk. Untuk penjelasan rumus, digunakan notasi tabel \(2 \times 2\) standar berikut:
| Y = 1 | Y = 0 | |
|---|---|---|
| X = 1 | \(a\) | \(b\) |
| X = 0 | \(c\) | \(d\) |
Odds adalah perbandingan antara peluang suatu kejadian terjadi dengan peluang kejadian tersebut tidak terjadi. Berbeda dengan peluang (probability) yang nilainya antara 0 dan 1, odds bisa bernilai lebih dari 1.
\[\text{Odds}(Y=1 \mid X=1) = \frac{P(Y=1 \mid X=1)}{P(Y=0 \mid X=1)} = \frac{a}{b}\]
\[\text{Odds}(Y=1 \mid X=0) = \frac{P(Y=1 \mid X=0)}{P(Y=0 \mid X=0)} = \frac{c}{d}\]
Interpretasi: Jika odds = 2, artinya dalam kelompok tersebut kejadian \(Y=1\) dua kali lebih mungkin terjadi dibanding tidak terjadi. Odds = 1 berarti peluang terjadi dan tidak terjadi sama besar. Odds < 1 berarti kejadian lebih jarang terjadi dibanding tidak terjadi.
Odds Ratio (OR) adalah rasio antara odds kelompok \(X=1\) (terpapar) dengan odds kelompok \(X=0\) (tidak terpapar).
\[OR = \frac{a/b}{c/d} = \frac{ad}{bc}\]
OR merupakan ukuran asosiasi yang paling banyak digunakan dalam analisis data kategori karena dapat diestimasi pada semua desain studi, termasuk case-control (Fleiss et al., 2003).
Interpretasi:
Relative Risk (RR) atau Risk Ratio adalah perbandingan langsung antara peluang kejadian \(Y=1\) pada kelompok \(X=1\) dengan peluang kejadian \(Y=1\) pada kelompok \(X=0\).
\[RR = \frac{P(Y=1 \mid X=1)}{P(Y=1 \mid X=0)} = \frac{a/(a+b)}{c/(c+d)}\]
Interpretasi:
Perlu dicatat bahwa RR hanya valid dihitung pada studi dengan desain prospektif (cohort atau cross-sectional). Pada studi case-control, sampling dilakukan berdasarkan status \(Y\), sehingga proporsi \(a/(a+b)\) dan \(c/(c+d)\) tidak mencerminkan peluang kejadian sesungguhnya — dalam kondisi ini hanya OR yang dapat digunakan.
Data berasal dari pencatatan di posyandu terhadap 200 balita. Variabel yang diamati adalah status gizi (gizi kurang/gizi baik) dan apakah balita pernah mengalami ISPA dalam tiga bulan terakhir.
| ISPA | Tidak ISPA | Total | |
|---|---|---|---|
| Gizi Kurang | \(a = 55\) | \(b = 45\) | \(100\) |
| Gizi Baik | \(c = 25\) | \(d = 75\) | \(100\) |
| Total | \(80\) | \(120\) | \(n = 200\) |
\[P(\text{ISPA} \mid \text{Gizi Kurang}) = \frac{a}{a+b} = \frac{55}{100} = 0{,}55\]
\[P(\text{ISPA} \mid \text{Gizi Baik}) = \frac{c}{c+d} = \frac{25}{100} = 0{,}25\]
Balita dengan gizi kurang punya peluang terkena ISPA sebesar 55%, jauh lebih tinggi dibanding balita gizi baik yang hanya 25%.
\[\text{Odds}_{\text{Gizi Kurang}} = \frac{a}{b} = \frac{55}{45} \approx 1{,}222\]
Pada balita gizi kurang, kejadian ISPA 1,22 kali lebih mungkin terjadi dibanding tidak terjadi.
\[\text{Odds}_{\text{Gizi Baik}} = \frac{c}{d} = \frac{25}{75} \approx 0{,}333\]
Pada balita gizi baik, ISPA justru lebih jarang terjadi — odds-nya di bawah 1, artinya lebih banyak yang tidak mengalami ISPA.
\[OR = \frac{ad}{bc} = \frac{55 \times 75}{45 \times 25} = \frac{4125}{1125} \approx 3{,}667\]
Odds balita gizi kurang terkena ISPA sekitar 3,67 kali lebih besar dibandingkan balita gizi baik. Nilai OR yang jauh di atas 1 ini mengindikasikan asosiasi yang cukup kuat antara status gizi dan kejadian ISPA.
Karena data cross-sectional, RR juga bisa dihitung:
\[RR = \frac{a/(a+b)}{c/(c+d)} = \frac{55/100}{25/100} = \frac{0{,}55}{0{,}25} = 2{,}20\]
Balita gizi kurang 2,2 kali lebih berisiko terkena ISPA dibanding balita gizi baik.
Perlu diperhatikan bahwa \(OR \neq RR\) (3,67 vs 2,20). Ini wajar karena proporsi kejadian ISPA secara keseluruhan cukup besar (40%), sehingga kondisi rare event tidak terpenuhi dan OR cenderung melebih-besarkan risiko relatif. Semakin langka kejadian, OR dan RR akan semakin konvergen.
# input data
data <- matrix(c(55, 45, 25, 75),
nrow = 2,
byrow = TRUE)
rownames(data) <- c("Gizi Kurang", "Gizi Baik")
colnames(data) <- c("ISPA", "Tidak ISPA")
cat("Tabel Kontingensi:\n")## Tabel Kontingensi:
## ISPA Tidak ISPA
## Gizi Kurang 55 45
## Gizi Baik 25 75
##
## Joint Distribution:
## ISPA Tidak ISPA
## Gizi Kurang 0.275 0.225
## Gizi Baik 0.125 0.375
##
## Conditional Distribution (per baris):
## ISPA Tidak ISPA
## Gizi Kurang 0.55 0.45
## Gizi Baik 0.25 0.75
a <- data[1, 1]
b <- data[1, 2]
c <- data[2, 1]
d <- data[2, 2]
odds_gk <- a / b
odds_gb <- c / d
OR <- (a * d) / (b * c)
RR <- (a / (a + b)) / (c / (c + d))
cat("Odds Gizi Kurang :", round(odds_gk, 4), "\n")## Odds Gizi Kurang : 1.2222
## Odds Gizi Baik : 0.3333
## Odds Ratio (OR) : 3.6667
## Relative Risk : 2.2
Hasilnya konsisten dengan perhitungan manual: OR ≈ 3,667 dan RR = 2,20.
Uji chi-square digunakan untuk menguji hipotesis bahwa kedua variabel independen. Hipotesisnya:
Statistik ujinya:
\[\chi^2 = \sum_{i,j} \frac{(n_{ij} - \hat{\mu}_{ij})^2}{\hat{\mu}_{ij}}, \quad \hat{\mu}_{ij} = \frac{n_{i+} \cdot n_{+j}}{n}\]
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 17.521, df = 1, p-value = 2.842e-05
##
## Frekuensi yang diharapkan di bawah H0:
## ISPA Tidak ISPA
## Gizi Kurang 40 60
## Gizi Baik 40 60
# mosaic plot untuk visualisasi distribusi bersama
mosaicplot(data,
main = "Status Gizi vs Kejadian ISPA pada Balita",
color = c("#E74C3C", "#2980B9"),
xlab = "Status Gizi",
ylab = "Kejadian ISPA",
las = 1)Uji chi-square menghasilkan \(p\)-value \(< 0{,}05\), sehingga \(H_0\) ditolak pada tingkat signifikansi 5%. Artinya, data memberikan bukti yang cukup kuat bahwa status gizi dan kejadian ISPA tidak independen, ada asosiasi yang signifikan secara statistik antara keduanya.
Nilai \(OR \approx 3{,}67\) menunjukkan bahwa odds balita gizi kurang terkena ISPA hampir 4 kali lebih besar dibanding balita gizi baik. Nilai \(RR = 2{,}20\) mengonfirmasi dari sudut peluang: risiko ISPA pada balita gizi kurang 2,2 kali lebih tinggi. Perbedaan antara OR dan RR wajar terjadi karena proporsi kejadian ISPA keseluruhan cukup besar (40%), sehingga OR melebih-besarkan risiko relatif dibanding RR.
Secara substantif, temuan ini konsisten dengan teori yang sudah lama dikenal dalam ilmu gizi dan kesehatan anak. Balita dengan gizi kurang memiliki sistem imun yang lebih lemah karena kekurangan mikronutrien seperti vitamin A, zinc, dan zat besi yang berperan penting dalam respons imunologis. Kondisi ini membuat mereka lebih rentan terhadap infeksi saluran pernapasan akut.
Hasil ini bisa menjadi dasar untuk memperkuat program pemantauan gizi balita di posyandu, khususnya sebagai upaya pencegahan ISPA. Meski begitu, perlu diingat beberapa keterbatasan: data ini bersifat cross-sectional sehingga tidak bisa menyimpulkan kausalitas secara langsung, dan faktor perancu seperti kondisi sanitasi rumah, kepadatan hunian, serta paparan asap rokok tidak dikontrol dalam analisis ini.