Program Studi S1 Statistika · FMIPA Universitas Padjadjaran
Laporan ini membahas konsep dasar analisis data kategori mulai dari definisi, tabel kontingensi, distribusi peluang, ukuran asosiasi, hingga perhitungan manual dan analisis menggunakan R. Contoh yang digunakan adalah data hubungan antara keikutsertaan bimbingan belajar (bimbel) dan kelulusan Seleksi Nasional Penerimaan Mahasiswa Baru (SNPMB/PTN).
Definisi
Analisis data kategori (categorical data analysis) adalah sekumpulan metode statistik untuk menganalisis data yang nilainya berupa kategori atau kelompok, bukan angka kontinu. Data semacam ini mewakili karakteristik yang bisa dikelompokkan ke dalam dua kategori atau lebih yang saling eksklusif (Agresti, 2013).
Variabel kategori dibagi menjadi dua jenis utama:
| Karakteristik | Penjelasan |
|---|---|
| Diskrit | Nilainya terbatas, tidak ada nilai di antara dua kategori |
| Non-numerik | Berupa label atau kode, meski bisa dikodekan dengan angka |
| Mutually exclusive | Satu observasi hanya masuk ke satu kategori |
| Exhaustive | Semua kemungkinan nilai sudah tercakup |
| Distribusi khusus | Mengikuti distribusi Binomial atau Multinomial |
Referensi: Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley. | Agresti & Franklin (2014). Statistics: The Art and Science of Learning from Data. Pearson. | Hosmer & Lemeshow (2000). Applied Logistic Regression. Wiley.
Definisi
Tabel kontingensi (contingency table) adalah tabel yang merangkum hubungan antara dua variabel kategori atau lebih. Setiap sel berisi frekuensi observasi untuk kombinasi kategori tertentu. Tabel dengan \(r\) baris dan \(c\) kolom disebut tabel \(r \times c\) (Agresti, 2013).
Bentuk paling sederhana adalah tabel \(2 \times 2\), di mana kedua variabel masing-masing punya dua kategori:
| 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\) |
Keterangan: \(n_{ij}\) = frekuensi sel baris ke-\(i\) kolom ke-\(j\); \(n_{i+}\) dan \(n_{+j}\) = total marginal baris dan kolom; \(n\) = total keseluruhan.
Tabel berikut menunjukkan hubungan antara keikutsertaan bimbel dan kelulusan PTN pada 200 siswa:
| Lolos PTN | Tidak Lolos | Total | |
|---|---|---|---|
| Ikut Bimbel | 60 | 40 | 100 |
| Tidak Bimbel | 20 | 80 | 100 |
| Total | 80 | 120 | 200 |
Nilai sel: \(a = 60,\ b = 40,\ c = 20,\ d = 80,\ n = 200\).
Distribusi bersama menunjukkan probabilitas observasi jatuh pada sel \((i, j)\) tertentu:
\[\hat{\pi}_{ij} = \frac{n_{ij}}{n}\]
Dari tabel di atas:
\[\hat{\pi}_{11} = \frac{60}{200} = 0{,}30 \qquad \hat{\pi}_{12} = \frac{40}{200} = 0{,}20\]
\[\hat{\pi}_{21} = \frac{20}{200} = 0{,}10 \qquad \hat{\pi}_{22} = \frac{80}{200} = 0{,}40\]
Jumlah seluruh probabilitas bersama = 1.
Distribusi marginal adalah distribusi peluang untuk masing-masing variabel secara terpisah, diperoleh dengan menjumlahkan sel sepanjang baris atau kolom:
\[\hat{\pi}_{i+} = \frac{n_{i+}}{n} \quad \text{(marginal baris)} \qquad \hat{\pi}_{+j} = \frac{n_{+j}}{n} \quad \text{(marginal kolom)}\]
Dari contoh: \(P(\text{Ikut Bimbel}) = 0{,}50\); \(P(\text{Lolos PTN}) = 0{,}40\); \(P(\text{Tidak Lolos}) = 0{,}60\).
Probabilitas bersyarat adalah peluang \(Y\) mengambil nilai tertentu, diketahui nilai \(X\):
\[P(Y = j \mid X = i) = \frac{n_{ij}}{n_{i+}}\]
Dari contoh:
\[P(\text{Lolos PTN} \mid \text{Ikut Bimbel}) = \frac{60}{100} = 0{,}60 \qquad P(\text{Lolos PTN} \mid \text{Tidak Bimbel}) = \frac{20}{100} = 0{,}20\]
Independensi: Dua variabel dikatakan independen bila \(P(Y=j \mid X=i) = P(Y=j)\) untuk semua \(i\) dan \(j\). Di sini \(P(\text{Lolos PTN} \mid \text{Ikut Bimbel}) = 0{,}60 \neq P(\text{Lolos PTN}) = 0{,}40\), jadi keduanya tidak independen.
Dari tabel kontingensi dapat dihitung berbagai ukuran yang menggambarkan seberapa kuat hubungan antara dua variabel.
Definisi
Odds adalah perbandingan antara peluang suatu kejadian terjadi dengan peluang kejadian itu tidak terjadi.
\[\text{Odds} = \frac{\pi}{1 - \pi} = \frac{n_{i1}}{n_{i2}}\]
| Nilai Odds | Artinya |
|---|---|
| Odds = 1 | Sama mungkin terjadi maupun tidak |
| Odds > 1 | Lebih mungkin terjadi |
| Odds < 1 | Lebih kecil kemungkinannya terjadi |
Dari contoh:
Odds Ratio membandingkan odds antara dua kelompok:
\[\boxed{OR = \frac{ad}{bc}}\]
Interval kepercayaan 95% dihitung sebagai:
\[95\%\, CI: \quad \exp\!\left(\ln(\widehat{OR}) \pm 1{,}96 \times \sqrt{\tfrac{1}{a}+\tfrac{1}{b}+\tfrac{1}{c}+\tfrac{1}{d}}\right)\]
| Nilai OR | Artinya |
|---|---|
| OR = 1 | Tidak ada asosiasi |
| OR > 1 | Kelompok X = 1 punya odds lebih tinggi (asosiasi positif) |
| OR < 1 | Kelompok X = 1 punya odds lebih rendah (asosiasi negatif) |
Relative Risk membandingkan risiko (probabilitas) kejadian antara dua kelompok secara langsung:
\[\boxed{RR = \frac{a/(a+b)}{c/(c+d)}}\]
| Nilai RR | Artinya |
|---|---|
| RR = 1 | Risiko sama di kedua kelompok |
| RR > 1 | Kelompok X = 1 lebih berisiko |
| RR < 1 | Kelompok X = 1 lebih terlindungi |
Catatan: RR hanya valid untuk studi cohort atau cross-sectional. Pada studi case-control, OR dipakai sebagai pendekatan RR saat prevalensi penyakit rendah (rare disease assumption).
Studi cross-sectional dilakukan pada 200 siswa SMA untuk melihat hubungan antara keikutsertaan bimbingan belajar (bimbel) dan kelulusan Seleksi Nasional Penerimaan Mahasiswa Baru (PTN). Data tersedia pada tabel berikut.
| Lolos PTN | Tidak Lolos | Total | |
|---|---|---|---|
| Ikut Bimbel | 60 | 40 | 100 |
| Tidak Bimbel | 20 | 80 | 100 |
| Total | 80 | 120 | 200 |
Nilai sel: \(a = 60,\ b = 40,\ c = 20,\ d = 80,\ n = 200\).
1
Berapa peluang lolos PTN di masing-masing kelompok?
\[P(\text{Lolos PTN} \mid \text{Ikut Bimbel}) = \frac{60}{100} = \mathbf{0{,}60}\]
\[P(\text{Lolos PTN} \mid \text{Tidak Bimbel}) = \frac{20}{100} = \mathbf{0{,}20}\]
2
\[\text{Odds}_{\text{Ikut Bimbel}} = \frac{60}{40} = \mathbf{1{,}50}\]
\[\text{Odds}_{\text{Tidak Bimbel}} = \frac{20}{80} = \mathbf{0{,}25}\]
3
\[OR = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = \mathbf{6{,}00}\]
\[SE_{\ln(OR)} = \sqrt{\frac{1}{60} + \frac{1}{40} + \frac{1}{20} + \frac{1}{80}} = \sqrt{0{,}1042} = 0{,}3228\]
\[\ln(6) = 1{,}7918 \quad \Rightarrow \quad 95\%\, CI:\ 1{,}7918 \pm 1{,}96 \times 0{,}3228 = (1{,}159\,;\,2{,}425)\]
\[95\%\, CI\ \text{untuk } OR = \left(e^{1{,}159}\,;\,e^{2{,}425}\right) = \mathbf{(3{,}19\,;\,11{,}30)}\]
4
\[RR = \frac{0{,}60}{0{,}20} = \mathbf{3{,}00}\]
5
Frekuensi harapan di bawah \(H_0\) (independensi):
\[E_{11} = \frac{100 \times 80}{200} = 40 \quad E_{12} = 60 \quad E_{21} = 40 \quad E_{22} = 60\]
\[\chi^2 = \frac{(60-40)^2}{40} + \frac{(40-60)^2}{60} + \frac{(20-40)^2}{40} + \frac{(80-60)^2}{60} = \mathbf{33{,}33}\]
Dengan \(df = 1\) dan nilai kritis \(\chi^2_{0{,}05} = 3{,}841\): karena \(33{,}33 > 3{,}841\), maka \(H_0\) ditolak ada hubungan yang signifikan antara keikutsertaan bimbel dan kelulusan PTN.
Ringkasan hasil:
6,00
Odds Ratio
3,00
Relative Risk
33,33
χ² Statistik
<0,001
p-value
# Buat matriks tabel kontingensi
data <- matrix(c(60, 40, 20, 80),
nrow = 2,
byrow = TRUE)
rownames(data) <- c("Ikut Bimbel", "Tidak Bimbel")
colnames(data) <- c("Lolos PTN", "Tidak Lolos")
# Tampilkan dengan total
addmargins(data)
#> Lolos PTN Tidak Lolos Sum
#> Ikut Bimbel 60 40 100
#> Tidak Bimbel 20 80 100
#> Sum 80 120 200
n <- sum(data)
cat("Joint Distribution:\n")
#> Joint Distribution:
round(data / n, 4)
#> Lolos PTN Tidak Lolos
#> Ikut Bimbel 0.3 0.2
#> Tidak Bimbel 0.1 0.4
cat("\nMarginal — Baris:\n")
#>
#> Marginal — Baris:
round(rowSums(data / n), 4)
#> Ikut Bimbel Tidak Bimbel
#> 0.5 0.5
cat("\nMarginal — Kolom:\n")
#>
#> Marginal — Kolom:
round(colSums(data / n), 4)
#> Lolos PTN Tidak Lolos
#> 0.4 0.6
cat("\nConditional Probability P(Lolos PTN | Status Bimbel):\n")
#>
#> Conditional Probability P(Lolos PTN | Status Bimbel):
round(prop.table(data, margin = 1), 4)
#> Lolos PTN Tidak Lolos
#> Ikut Bimbel 0.6 0.4
#> Tidak Bimbel 0.2 0.8
a <- data[1, 1]; b <- data[1, 2]
c <- data[2, 1]; d <- data[2, 2]
odds_bimbel <- a / b
odds_tdk_bimbel <- c / d
OR <- (a * d) / (b * c)
RR <- (a / (a + b)) / (c / (c + d))
SE_ln_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_lower <- exp(log(OR) - 1.96 * SE_ln_OR)
CI_upper <- exp(log(OR) + 1.96 * SE_ln_OR)
cat(sprintf("Odds ikut bimbel = %.4f\n", odds_bimbel))
#> Odds ikut bimbel = 1.5000
cat(sprintf("Odds tidak bimbel = %.4f\n", odds_tdk_bimbel))
#> Odds tidak bimbel = 0.2500
cat(sprintf("Odds Ratio (OR) = %.4f\n", OR))
#> Odds Ratio (OR) = 6.0000
cat(sprintf("Relative Risk(RR) = %.4f\n", RR))
#> Relative Risk(RR) = 3.0000
cat(sprintf("95%% CI untuk OR = (%.4f ; %.4f)\n", CI_lower, CI_upper))
#> 95% CI untuk OR = (3.1873 ; 11.2948)
epitoolsif (!require(epitools, quietly = TRUE))
install.packages("epitools", repos = "https://cran.r-project.org")
library(epitools)
or_result <- oddsratio(data, method = "wald")
or_result$measure
#> NA
#> odds ratio with 95% C.I. estimate lower upper
#> Ikut Bimbel 1 NA NA
#> Tidak Bimbel 6 3.187331 11.29472
chi_result <- chisq.test(data, correct = FALSE)
print(chi_result)
#>
#> Pearson's Chi-squared test
#>
#> data: data
#> X-squared = 33.333, df = 1, p-value = 7.764e-09
cat("\nFrekuensi yang Diharapkan:\n")
#>
#> Frekuensi yang Diharapkan:
round(chi_result$expected, 2)
#> Lolos PTN Tidak Lolos
#> Ikut Bimbel 40 60
#> Tidak Bimbel 40 60
cat(sprintf("\nX-squared = %.4f, df = %d, p-value = %.6f\n",
chi_result$statistic, chi_result$parameter, chi_result$p.value))
#>
#> X-squared = 33.3333, df = 1, p-value = 0.000000
par(mfrow = c(1, 2), bg = "#fafafa",
family = "sans", col.main = "#1a1a2e",
col.lab = "#3d3d5c", col.axis = "#6b6b8a")
# Barplot proporsi bersyarat
prop_data <- prop.table(data, margin = 1)
barplot(t(prop_data),
beside = TRUE,
col = c("#2c5282", "#a0aec0"),
border = NA,
main = "Proporsi Lolos PTN berdasarkan Keikutsertaan Bimbel",
ylab = "Proporsi",
xlab = "",
ylim = c(0, 0.85),
cex.main = .93, cex.axis = .85)
legend("topright",
legend = colnames(data),
fill = c("#2c5282", "#a0aec0"),
border = NA, bty = "n", cex = .85)
abline(h = seq(0, 0.8, .2), col = "#e4e4ed", lwd = .6)
# Mosaic plot
mosaicplot(data,
color = c("#2c5282", "#a0aec0"),
border = "white",
main = "Mosaic Plot: Bimbel vs Lolos PTN",
xlab = "Status Bimbel",
ylab = "Status Kelulusan PTN",
cex.axis = .85)
par(mfrow = c(1, 1))
Uji Chi-Square. Nilai \(\chi^2 = 33{,}33\) dengan \(df = 1\) dan \(p < 0{,}001\). Karena \(p < 0{,}05\), \(H_0\) ditolak maka ada hubungan yang signifikan secara statistik antara keikutsertaan bimbel dan kelulusan PTN.
Odds Ratio. \(OR = 6{,}0\) dengan \(95\%\, CI: (3{,}19\,;\,11{,}30)\). Karena interval kepercayaannya tidak melewati angka 1, OR ini signifikan dan menunjukkan asosiasi yang kuat.
Relative Risk. \(RR = 3{,}0\) risiko lolos PTN pada siswa yang ikut bimbel tiga kali lebih besar dibanding yang tidak ikut bimbel.
Kekuatan asosiasi. Siswa yang ikut bimbel punya odds lolos PTN 6 kali lebih tinggi daripada siswa yang tidak ikut bimbel. Ini tergolong asosiasi yang kuat.
Risiko relatif. Secara lebih langsung, siswa yang ikut bimbel 3 kali lebih mungkin lolos PTN.
Probabilitas bersyarat. Dari 100 siswa yang ikut bimbel, 60 orang (60%) berhasil lolos PTN jauh lebih tinggi dibanding hanya 20 dari 100 siswa yang tidak ikut bimbel (20%).
Implikasi. Hasil ini menunjukkan bahwa keikutsertaan bimbel berkaitan erat dengan peluang lolos seleksi masuk PTN. Namun perlu diperhatikan bahwa hubungan ini bersifat asosiasi, bukan kausalitas faktor lain seperti kemampuan awal siswa, intensitas belajar mandiri, dan kualitas bimbel turut berperan.