Analisis Data Kategori (Categorical Data Analysis) adalah sekumpulan metode statistik yang dirancang khusus untuk menganalisis data yang diukur pada skala nominal atau ordinal, di mana setiap observasi dikelompokkan ke dalam kategori-kategori yang bersifat diskret dan tidak kontinu.
Berbeda dengan analisis data kontinu yang menggunakan mean, variansi, atau distribusi normal, analisis data kategori menggunakan frekuensi, proporsi, dan probabilitas sebagai dasar inferensi statistik. Metode-metode utama dalam analisis data kategori meliputi:
Variabel kategori memiliki karakteristik yang membedakannya dari variabel kontinu:
| Karakteristik | Penjelasan |
|---|---|
| Diskret | Nilai hanya berupa kategori tertentu, tidak ada nilai di antara dua kategori |
| Tidak Terukur Secara Numerik | Nilai tidak memiliki jarak (interval) yang bermakna secara matematis |
| Skala Nominal | Kategori tidak memiliki urutan alami (contoh: jenis kelamin, agama) |
| Skala Ordinal | Kategori memiliki urutan alami, tetapi jarak antar kategori tidak sama (contoh: tingkat pendidikan, tingkat kepuasan) |
| Ringkasan dengan Frekuensi | Dideskripsikan dengan frekuensi dan proporsi, bukan rata-rata |
Analisis data kategori digunakan secara luas di berbagai bidang keilmuan:
1. Bidang Kesehatan Masyarakat Meneliti apakah ada hubungan antara kebiasaan konsumsi gula berlebih (ya/tidak) dengan kejadian diabetes tipe 2 (ya/tidak) pada populasi dewasa.
2. Bidang Pendidikan Menganalisis apakah metode pembelajaran (daring/luring/hybrid) berpengaruh terhadap kelulusan tepat waktu (lulus tepat waktu/tidak) mahasiswa.
3. Bidang Sosiologi Menguji apakah terdapat hubungan antara tingkat pendidikan ibu (SD/SMP/SMA/Perguruan Tinggi) dengan status gizi balita (normal/stunting/wasting).
4. Bidang Ekonomi Memeriksa asosiasi antara kepemilikan kartu kredit (ya/tidak) dengan keputusan membeli secara impulsif (ya/tidak) pada konsumen ritel.
Tabel Kontingensi (Contingency Table atau Cross-tabulation Table) adalah suatu tabel yang merangkum distribusi frekuensi bersama dari dua atau lebih variabel kategori secara simultan. Tabel ini memperlihatkan bagaimana observasi tersebar di setiap kombinasi kategori dari variabel-variabel yang diamati.
Tabel kontingensi yang melibatkan dua variabel dengan masing-masing \(r\) baris dan \(c\) kolom disebut tabel kontingensi \(r \times c\). Kasus paling sederhana adalah tabel \(2 \times 2\) yang melibatkan dua variabel biner.
Secara umum, struktur tabel kontingensi \(r \times c\) adalah sebagai berikut:
| \(Y = 1\) | \(Y = 2\) | \(\cdots\) | \(Y = c\) | Total Baris | |
|---|---|---|---|---|---|
| \(X = 1\) | \(n_{11}\) | \(n_{12}\) | \(\cdots\) | \(n_{1c}\) | \(n_{1\bullet}\) |
| \(X = 2\) | \(n_{21}\) | \(n_{22}\) | \(\cdots\) | \(n_{2c}\) | \(n_{2\bullet}\) |
| \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\ddots\) | \(\vdots\) | \(\vdots\) |
| \(X = r\) | \(n_{r1}\) | \(n_{r2}\) | \(\cdots\) | \(n_{rc}\) | \(n_{r\bullet}\) |
| Total Kolom | \(n_{\bullet 1}\) | \(n_{\bullet 2}\) | \(\cdots\) | \(n_{\bullet c}\) | \(n\) |
Keterangan:
Distribusi Bersama (Joint Distribution) menggambarkan probabilitas bahwa dua variabel secara bersamaan mengambil nilai-nilai tertentu.
Secara formal, joint probability didefinisikan sebagai:
\[\pi_{ij} = P(X = i, Y = j)\]
Ditaksir dari data sampel sebagai:
\[\hat{\pi}_{ij} = \frac{n_{ij}}{n}\]
dengan syarat:
\[\sum_{i=1}^{r} \sum_{j=1}^{c} \pi_{ij} = 1\]
Joint distribution memberikan gambaran lengkap tentang sebaran bersama dua variabel kategori dalam suatu populasi.
Distribusi Marginal (Marginal Distribution) adalah distribusi probabilitas untuk satu variabel, diperoleh dengan menjumlahkan (memarjinalkan) probabilitas bersama atas semua nilai variabel lainnya.
Marginal distribution untuk baris (variabel X):
\[\pi_{i\bullet} = P(X = i) = \sum_{j=1}^{c} \pi_{ij}\]
Marginal distribution untuk kolom (variabel Y):
\[\pi_{\bullet j} = P(Y = j) = \sum_{i=1}^{r} \pi_{ij}\]
Distribusi marginal memberikan informasi tentang distribusi masing-masing variabel secara terpisah, tanpa memperhatikan variabel lainnya.
Probabilitas Bersyarat (Conditional Probability) adalah probabilitas suatu kejadian terjadi, dengan syarat bahwa kejadian lain telah diketahui terjadi.
Probabilitas bersyarat Y = j diberikan X = i:
\[P(Y = j \mid X = i) = \frac{P(X = i, Y = j)}{P(X = i)} = \frac{\pi_{ij}}{\pi_{i\bullet}}\]
Probabilitas bersyarat X = i diberikan Y = j:
\[P(X = i \mid Y = j) = \frac{\pi_{ij}}{\pi_{\bullet j}}\]
Jika \(P(Y = j \mid X = i) = P(Y = j)\) untuk semua \(i\) dan \(j\), maka variabel \(X\) dan \(Y\) dikatakan independen (saling bebas).
Misalkan sebuah penelitian mengamati hubungan antara kebiasaan membaca buku (Rutin/Tidak Rutin) dan kemampuan berpikir kritis (Tinggi/Rendah) pada 200 mahasiswa:
# Membuat tabel kontingensi 2x2
tabel_buku <- matrix(c(80, 20, 40, 60),
nrow = 2, byrow = TRUE)
rownames(tabel_buku) <- c("Rutin Membaca", "Tidak Rutin")
colnames(tabel_buku) <- c("Berpikir Kritis Tinggi", "Berpikir Kritis Rendah")
# Tampilkan tabel frekuensi
cat("=== Tabel Kontingensi: Kebiasaan Membaca vs Berpikir Kritis ===\n\n")#> === Tabel Kontingensi: Kebiasaan Membaca vs Berpikir Kritis ===
#> Berpikir Kritis Tinggi Berpikir Kritis Rendah Sum
#> Rutin Membaca 80 20 100
#> Tidak Rutin 40 60 100
#> Sum 120 80 200
Interpretasi distribusi:
#> === Joint Distribution (Proporsi Bersama) ===
#> Berpikir Kritis Tinggi Berpikir Kritis Rendah Sum
#> Rutin Membaca 0.4 0.1 0.5
#> Tidak Rutin 0.2 0.3 0.5
#> Sum 0.6 0.4 1.0
#>
#> === Marginal Distribution Baris (P(X=i)) ===
#> Rutin Membaca Tidak Rutin
#> 0.5 0.5
#>
#> === Marginal Distribution Kolom (P(Y=j)) ===
#> Berpikir Kritis Tinggi Berpikir Kritis Rendah
#> 0.6 0.4
#>
#> === Conditional Probability P(Y | X) ===
#> Berpikir Kritis Tinggi Berpikir Kritis Rendah
#> Rutin Membaca 0.8 0.2
#> Tidak Rutin 0.4 0.6
Ukuran Asosiasi (Measures of Association) adalah statistik yang mengukur kekuatan dan arah hubungan antara dua variabel kategori. Ukuran ini sangat penting dalam epidemiologi, ilmu kesehatan, dan ilmu sosial untuk menginterpretasikan besarnya hubungan antar variabel.
Pada tabel kontingensi \(2 \times 2\), notasi sel adalah sebagai berikut:
| Outcome (+) | Outcome (−) | Total | |
|---|---|---|---|
| Exposed (+) | \(a\) | \(b\) | \(a + b\) |
| Not Exposed (−) | \(c\) | \(d\) | \(c + d\) |
| Total | \(a + c\) | \(b + d\) | \(n\) |
Odds adalah rasio antara peluang suatu kejadian terjadi dengan peluang kejadian tersebut tidak terjadi.
Odds untuk kelompok Exposed: \[\text{Odds}_{\text{exposed}} = \frac{a / (a+b)}{b / (a+b)} = \frac{a}{b}\]
Odds untuk kelompok Not Exposed: \[\text{Odds}_{\text{unexposed}} = \frac{c / (c+d)}{d / (c+d)} = \frac{c}{d}\]
Interpretasi: Odds = 3 berarti kejadian 3 kali lebih mungkin terjadi dibandingkan tidak terjadi.
Odds Ratio adalah rasio antara odds pada kelompok terpapar (exposed) dibandingkan dengan odds pada kelompok tidak terpapar (unexposed).
\[\text{OR} = \frac{\text{Odds}_{\text{exposed}}}{\text{Odds}_{\text{unexposed}}} = \frac{a/b}{c/d} = \frac{ad}{bc}\]
Interpretasi: - \(\text{OR} = 1\): Tidak ada asosiasi antara paparan dan outcome - \(\text{OR} > 1\): Paparan meningkatkan risiko outcome (faktor risiko) - \(\text{OR} < 1\): Paparan menurunkan risiko outcome (faktor protektif)
Relative Risk (atau Risk Ratio) adalah rasio antara risiko (probabilitas) terjadinya outcome pada kelompok terpapar dibandingkan pada kelompok tidak terpapar.
\[\text{RR} = \frac{P(\text{Outcome} \mid \text{Exposed})}{P(\text{Outcome} \mid \text{Not Exposed})} = \frac{a/(a+b)}{c/(c+d)}\]
Interpretasi: - \(\text{RR} = 1\): Risiko sama di kedua kelompok - \(\text{RR} > 1\): Kelompok terpapar memiliki risiko lebih tinggi - \(\text{RR} < 1\): Kelompok terpapar memiliki risiko lebih rendah
Catatan: RR hanya dapat dihitung pada studi kohort atau cross-sectional. Pada studi case-control, gunakan OR sebagai pendekatan.
Latar Belakang: Penelitian ini menginvestigasi apakah anak-anak yang tinggal di dekat kawasan industri (paparan polusi udara tinggi) memiliki risiko kejadian asma yang lebih besar dibandingkan anak-anak yang tinggal di kawasan perumahan (paparan rendah).
Desain: Studi kohort prospektif, n = 300 anak usia 6–12 tahun, observasi selama 2 tahun.
Data yang diperoleh dari penelitian adalah sebagai berikut:
| Asma (+) | Asma (−) | Total | |
|---|---|---|---|
| Dekat Industri | 75 | 75 | 150 |
| Jauh dari Industri | 30 | 120 | 150 |
| Total | 105 | 195 | 300 |
Sehingga: \(a = 75\), \(b = 75\), \(c = 30\), \(d = 120\), \(n = 300\)
Peluang Asma pada anak dekat industri:
\[P(\text{Asma} \mid \text{Dekat Industri}) = \frac{a}{a + b} = \frac{75}{75 + 75} = \frac{75}{150} = 0{,}50\]
Peluang Asma pada anak jauh dari industri:
\[P(\text{Asma} \mid \text{Jauh dari Industri}) = \frac{c}{c + d} = \frac{30}{30 + 120} = \frac{30}{150} = 0{,}20\]
Odds Asma pada kelompok Dekat Industri:
\[\text{Odds}_{\text{dekat}} = \frac{a}{b} = \frac{75}{75} = 1{,}00\]
Artinya: Anak di dekat industri memiliki peluang asma sama besar dengan peluang tidak asma (1:1).
Odds Asma pada kelompok Jauh dari Industri:
\[\text{Odds}_{\text{jauh}} = \frac{c}{d} = \frac{30}{120} = 0{,}25\]
Artinya: Anak jauh dari industri, peluang asma 4 kali lebih kecil dari peluang tidak asma.
\[\text{OR} = \frac{\text{Odds}_{\text{dekat}}}{\text{Odds}_{\text{jauh}}} = \frac{a/b}{c/d} = \frac{ad}{bc} = \frac{75 \times 120}{75 \times 30} = \frac{9000}{2250} = 4{,}00\]
Menghitung Relative Risk:
\[\text{RR} = \frac{a/(a+b)}{c/(c+d)} = \frac{75/150}{30/150} = \frac{0{,}50}{0{,}20} = 2{,}50\]
Kesimpulan Perhitungan Manual:
# ============================================================
# DATA: Paparan Polusi Udara vs Kejadian Asma pada Anak
# ============================================================
data_asma <- matrix(c(75, 75, 30, 120),
nrow = 2,
byrow = TRUE)
rownames(data_asma) <- c("Dekat Industri", "Jauh dari Industri")
colnames(data_asma) <- c("Asma (+)", "Asma (-)")
cat("=== Tabel Kontingensi: Paparan Polusi vs Asma ===\n\n")#> === Tabel Kontingensi: Paparan Polusi vs Asma ===
#> Asma (+) Asma (-) Sum
#> Dekat Industri 75 75 150
#> Jauh dari Industri 30 120 150
#> Sum 105 195 300
# ----- Menghitung Odds -----
a <- data_asma[1, 1] # Dekat Industri & Asma
b <- data_asma[1, 2] # Dekat Industri & Tidak Asma
c_val <- data_asma[2, 1] # Jauh dari Industri & Asma
d <- data_asma[2, 2] # Jauh dari Industri & Tidak Asma
odds_dekat <- a / b
odds_jauh <- c_val / d
OR_manual <- (a * d) / (b * c_val)
RR_manual <- (a / (a + b)) / (c_val / (c_val + d))
cat("=== Hasil Perhitungan Ukuran Asosiasi ===\n\n")#> === Hasil Perhitungan Ukuran Asosiasi ===
#> Odds (Dekat Industri) : 1.0000
#> Odds (Jauh dari Industri) : 0.2500
#> Odds Ratio (OR) : 4.0000
#> Relative Risk (RR) : 2.5000
# ----- Menggunakan fungsi fisher.test untuk OR & CI -----
cat("\n=== Odds Ratio dengan Confidence Interval (Fisher's Exact Test) ===\n\n")#>
#> === Odds Ratio dengan Confidence Interval (Fisher's Exact Test) ===
#>
#> Fisher's Exact Test for Count Data
#>
#> data: data_asma
#> p-value = 7.201e-08
#> alternative hypothesis: true odds ratio is not equal to 1
#> 95 percent confidence interval:
#> 2.329297 6.928419
#> sample estimates:
#> odds ratio
#> 3.980505
#> === Uji Chi-Square: Independensi Paparan Polusi vs Asma ===
#>
#> Pearson's Chi-squared test with Yates' continuity correction
#>
#> data: data_asma
#> X-squared = 28.366, df = 1, p-value = 1.004e-07
#>
#> === Frekuensi Harapan (Expected Frequencies) ===
#> Asma (+) Asma (-)
#> Dekat Industri 52.5 97.5
#> Jauh dari Industri 52.5 97.5
par(mfrow = c(1, 2), mar = c(5, 4, 4, 2) + 0.1)
# --- Plot 1: Grouped Bar Chart ---
barplot(t(prop.table(data_asma, margin = 1)),
beside = FALSE,
col = c("#2e86c1", "#aed6f1"),
main = "Proporsi Kejadian Asma\nBerdasarkan Kelompok Paparan",
ylab = "Proporsi",
ylim = c(0, 1.1),
legend.text = colnames(data_asma),
args.legend = list(x = "topright", bty = "n", cex = 0.9),
border = "white")
box()
# --- Plot 2: Odds Ratio Plot ---
or_val <- OR_manual
ci_lower <- exp(log(or_val) - 1.96 * sqrt(1/a + 1/b + 1/c_val + 1/d))
ci_upper <- exp(log(or_val) + 1.96 * sqrt(1/a + 1/b + 1/c_val + 1/d))
plot(1, or_val,
xlim = c(0.5, 1.5),
ylim = c(0, 8),
xaxt = "n",
xlab = "",
ylab = "Odds Ratio",
main = "Odds Ratio dengan\n95% Confidence Interval",
pch = 18, cex = 2.5, col = "#1a5276")
abline(h = 1, lty = 2, col = "red", lwd = 2)
segments(1, ci_lower, 1, ci_upper, col = "#1a5276", lwd = 2)
segments(0.95, ci_lower, 1.05, ci_lower, col = "#1a5276", lwd = 2)
segments(0.95, ci_upper, 1.05, ci_upper, col = "#1a5276", lwd = 2)
text(1, or_val + 0.4,
labels = sprintf("OR = %.2f\n95%% CI: [%.2f, %.2f]", or_val, ci_lower, ci_upper),
cex = 0.9, col = "#1a5276", font = 2)#> ============================================================
#> RINGKASAN HASIL ANALISIS DATA KATEGORI
#> Studi: Paparan Polusi Udara vs Asma Anak
#> ============================================================
#> Jumlah Sampel Total : 300 anak
#> Prevalensi Asma (Overall) : 35.0%
#> Prevalensi - Dekat Industri : 50.0%
#> Prevalensi - Jauh Industri : 20.0%
#> Odds Ratio (OR) : 4.0000
#> 95% CI untuk OR : [2.3963, 6.6769]
#> Relative Risk (RR) : 2.5000
#> Chi-Square Statistic (X²) : 28.3663
#> Derajat Kebebasan (df) : 1
#> p-value : 0.000000
#> ============================================================
Dari 300 anak yang diamati, terdapat 105 anak (35%) yang didiagnosis menderita asma. Proporsi asma pada anak yang tinggal dekat kawasan industri adalah 50% (75 dari 150 anak), jauh lebih tinggi dibandingkan anak yang tinggal jauh dari industri sebesar 20% (30 dari 150 anak).
Probabilitas bersyarat menunjukkan bahwa:
Perbedaan substansial ini mengindikasikan adanya hubungan antara paparan polusi dan kejadian asma.
Relative Risk = 2,50: Risiko terkena asma pada anak dekat kawasan industri adalah 2,5 kali lebih tinggi dibandingkan anak jauh dari industri. Ini berarti paparan polusi udara secara substansial meningkatkan risiko asma pada anak.
Berdasarkan hasil uji chi-square:
| Temuan | Nilai | Makna Praktis |
|---|---|---|
| Prevalensi asma - dekat industri | 50% | Sangat tinggi, perlu intervensi segera |
| Prevalensi asma - jauh industri | 20% | Referensi baseline populasi sehat |
| Odds Ratio | 4,00 | Paparan polusi merupakan faktor risiko kuat |
| Relative Risk | 2,50 | Risiko meningkat 2,5 kali lipat akibat paparan |
| p-value | < 0,05 | Hubungan signifikan secara statistik |
Kesimpulan Akhir:
Hasil analisis data kategori dengan tabel kontingensi \(2 \times 2\) secara konsisten menunjukkan bahwa paparan polusi udara dari kawasan industri memiliki asosiasi positif yang signifikan dengan kejadian asma pada anak. Nilai OR = 4,00 dan RR = 2,50, dikonfirmasi oleh uji chi-square yang signifikan (\(p < 0{,}05\)), mengindikasikan bahwa anak-anak yang tinggal dekat kawasan industri berisiko jauh lebih tinggi untuk menderita asma.
Temuan ini memiliki implikasi penting bagi kebijakan kesehatan lingkungan, khususnya dalam pengaturan zonasi pemukiman di sekitar kawasan industri dan program pengendalian polusi udara untuk melindungi kesehatan anak.
Laporan ini dibuat menggunakan R Markdown. Seluruh perhitungan dan visualisasi dihasilkan secara reproducible menggunakan R.
#> Dibuat dengan R versi: R version 4.5.1 (2025-06-13 ucrt)
#> Tanggal render: 11 March 2026