Dalam berbagai bidang ilmu seperti kesehatan, ekonomi, dan ilmu sosial, peneliti sering berhadapan dengan variabel yang tidak dinyatakan dalam bentuk numerik melainkan dalam bentuk kategori. Variabel tersebut dikenal sebagai variabel kategorik (categorical variables). Contoh variabel kategorik antara lain jenis kelamin, status merokok, status penyakit, tingkat pendidikan, serta preferensi politik.
Berbeda dengan variabel numerik yang memiliki makna jarak atau besaran kuantitatif, variabel kategorik hanya merepresentasikan pengelompokan atau klasifikasi objek ke dalam kategori tertentu. Oleh karena itu metode analisis yang digunakan juga berbeda dengan analisis data numerik.
Salah satu pendekatan yang paling umum digunakan dalam analisis data kategori adalah tabel kontingensi (contingency table). Tabel ini digunakan untuk menggambarkan distribusi bersama dari dua variabel kategorik sehingga hubungan antar variabel dapat dianalisis.
Tujuan dari laporan ini adalah: 1. Menjelaskan konsep dasar analisis data kategori 2. Memahami struktur tabel kontingensi 3. Menghitung ukuran asosiasi pada tabel kontingensi 4. Melakukan perhitungan manual 5. Melakukan analisis menggunakan perangkat lunak R 6. Menginterpretasikan hasil analisis
Analisis data kategori adalah metode statistik yang digunakan untuk menganalisis variabel yang berbentuk kategori atau klasifikasi. Menurut Agresti (2013), analisis data kategori berfokus pada distribusi frekuensi serta hubungan antara variabel yang memiliki skala nominal atau ordinal.
Variabel kategorik tidak memiliki nilai numerik yang bermakna secara matematis, melainkan hanya menunjukkan keanggotaan suatu objek pada kategori tertentu.
Metode yang sering digunakan dalam analisis data kategori antara lain:
Variabel kategori memiliki beberapa karakteristik utama:
Contoh variabel kategorik:
| Variabel | Kategori |
|---|---|
| Jenis kelamin | Laki-laki / Perempuan |
| Status merokok | Ya / Tidak |
| Tingkat pendidikan | SD / SMP / SMA / PT |
Analisis data kategori digunakan dalam berbagai bidang penelitian.
Bidang kesehatan: Meneliti hubungan antara merokok dan kanker paru.
Bidang epidemiologi: Meneliti hubungan antara vaksinasi dan infeksi.
Bidang sosial: Meneliti hubungan antara tingkat pendidikan dan status pekerjaan.
Tabel kontingensi adalah tabel yang menyajikan distribusi frekuensi bersama dari dua atau lebih variabel kategorik. Tabel ini membantu peneliti memahami hubungan antara variabel tersebut.
Contoh tabel kontingensi 2×2
| Penyakit | Tidak Penyakit | Total | |
|---|---|---|---|
| Terpapar | a | b | a+b |
| Tidak Terpapar | c | d | c+d |
| Total | a+c | b+d | n |
Distribusi bersama dinyatakan sebagai
\[ P(X=i,Y=j)=\frac{n_{ij}}{n} \]
Distribusi marginal dinyatakan sebagai
\[ P(X=i)=\frac{n_{i+}}{n} \]
\[ P(Y=j)=\frac{n_{+j}}{n} \]
Probabilitas bersyarat dinyatakan sebagai
\[ P(Y=j|X=i)=\frac{n_{ij}}{n_{i+}} \]
Ukuran asosiasi digunakan untuk mengukur kekuatan hubungan antara dua variabel kategorik.
Misalkan tabel:
| Penyakit | Tidak | |
|---|---|---|
| Terpapar | a | b |
| Tidak | c | d |
Odds adalah perbandingan antara probabilitas terjadinya suatu kejadian dengan probabilitas tidak terjadinya kejadian tersebut.
\[ Odds = \frac{P}{1-P} \]
Untuk kelompok terpapar:
\[ Odds_{terpapar}=\frac{a}{b} \]
Untuk kelompok tidak terpapar:
\[ Odds_{tidak}=\frac{c}{d} \]
Odds Ratio adalah perbandingan odds antara dua kelompok.
\[ OR=\frac{a/b}{c/d} \]
atau
\[ OR=\frac{ad}{bc} \]
Interpretasi:
Relative Risk dinyatakan sebagai
\[ RR = \frac{a/(a+b)}{c/(c+d)} \]
Misalkan penelitian mengenai hubungan antara merokok dan kanker paru.
| Kanker | Tidak Kanker | Total | |
|---|---|---|---|
| Merokok | 60 | 40 | 100 |
| Tidak Merokok | 20 | 80 | 100 |
| Total | 80 | 120 | 200 |
Total observasi
\[ n = 60 + 40 + 20 + 80 = 200 \]
\[ P(Kanker|Merokok)=\frac{60}{100}=0.6 \]
\[ P(Kanker|Tidak)=\frac{20}{100}=0.2 \]
\[ Odds_{merokok}=\frac{60}{40}=1.5 \]
\[ Odds_{tidak}=\frac{20}{80}=0.25 \]
\[ OR=\frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = 6 \]
Interpretasi: Perokok memiliki peluang sekitar 6 kali lebih besar mengalami kanker paru dibandingkan non-perokok.
\[ RR = \frac{60/100}{20/100} = \frac{0.6}{0.2} = 3 \]
Interpretasi: Perokok memiliki risiko 3 kali lebih tinggi untuk terkena kanker paru dibandingkan non-perokok.
# Membuat data tabel kontingensi
data_kanker <- matrix(c(60, 40, 20, 80), nrow = 2, byrow = TRUE)
rownames(data_kanker) <- c("Merokok", "Tidak Merokok")
colnames(data_kanker) <- c("Kanker", "Tidak Kanker")
# Menampilkan tabel
print("Tabel Kontingensi:")
## [1] "Tabel Kontingensi:"
data_kanker
## Kanker Tidak Kanker
## Merokok 60 40
## Tidak Merokok 20 80
# Mengambil nilai dari tabel
a <- data_kanker[1, 1] # Merokok & Kanker
b <- data_kanker[1, 2] # Merokok & Tidak Kanker
c <- data_kanker[2, 1] # Tidak Merokok & Kanker
d <- data_kanker[2, 2] # Tidak Merokok & Tidak Kanker
# Menghitung Odds Ratio
OR <- (a * d) / (b * c)
print(paste("Odds Ratio (OR):", round(OR, 3)))
## [1] "Odds Ratio (OR): 6"
# Menghitung Relative Risk
RR <- (a/(a+b)) / (c/(c+d))
print(paste("Relative Risk (RR):", round(RR, 3)))
## [1] "Relative Risk (RR): 3"
# Menghitung selang kepercayaan 95% untuk OR
SE_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_lower <- exp(log(OR) - 1.96 * SE_OR)
CI_upper <- exp(log(OR) + 1.96 * SE_OR)
print(paste("95% CI untuk OR:", round(CI_lower, 3), "-", round(CI_upper, 3)))
## [1] "95% CI untuk OR: 3.187 - 11.295"
# Melakukan uji chi-square
hasil_chi <- chisq.test(data_kanker)
print(hasil_chi)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_kanker
## X-squared = 31.688, df = 1, p-value = 1.811e-08
# Menampilkan tabel ekspektasi
print("Tabel Ekspektasi:")
## [1] "Tabel Ekspektasi:"
round(hasil_chi$expected, 2)
## Kanker Tidak Kanker
## Merokok 40 60
## Tidak Merokok 40 60
# Mosaic plot
par(mfrow = c(1, 2)) # 1 baris, 2 kolom
# Mosaic plot dasar
mosaicplot(data_kanker,
main = "Hubungan Merokok dan Kanker\n(Mosaic Plot)",
xlab = "Status Merokok",
ylab = "Status Kanker",
color = c("lightblue", "lightcoral"),
cex.axis = 0.8)
# Bar plot bertumpuk
barplot(data_kanker,
beside = FALSE,
main = "Distribusi Kanker berdasarkan Status Merokok",
xlab = "Status Kanker",
ylab = "Jumlah",
col = c("darkblue", "lightblue"),
legend.text = rownames(data_kanker),
args.legend = list(x = "topright"))
# Visualisasi dengan ggplot2
library(reshape2)
# Mengubah data ke format long untuk ggplot
data_long <- melt(data_kanker, varnames = c("Merokok", "Kanker"), value.name = "Frekuensi")
# Membuat stacked bar chart dengan proporsi
ggplot(data_long, aes(x = Kanker, y = Frekuensi, fill = Merokok)) +
geom_bar(stat = "identity", position = "fill") +
scale_y_continuous(labels = scales::percent) +
labs(title = "Proporsi Kanker berdasarkan Status Merokok",
x = "Status Kanker",
y = "Proporsi",
fill = "Status Merokok") +
theme_minimal() +
scale_fill_manual(values = c("lightblue", "lightcoral"))
# Menghitung residual dari uji chi-square
print("Residual Pearson:")
## [1] "Residual Pearson:"
round(hasil_chi$residuals, 3)
## Kanker Tidak Kanker
## Merokok 3.162 -2.582
## Tidak Merokok -3.162 2.582
# Uji Fisher's Exact Test (alternatif ketika sampel kecil)
fisher.test(data_kanker)
##
## Fisher's Exact Test for Count Data
##
## data: data_kanker
## p-value = 1.064e-08
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 3.055033 11.932317
## sample estimates:
## odds ratio
## 5.940316
# Menampilkan ringkasan interpretasi
print("=== RINGKASAN HASIL ANALISIS ===")
## [1] "=== RINGKASAN HASIL ANALISIS ==="
print(paste("1. Odds Ratio (OR) =", round(OR, 3)))
## [1] "1. Odds Ratio (OR) = 6"
print(paste(" Interpretasi: Perokok memiliki peluang", round(OR, 1),
"kali lebih besar untuk terkena kanker paru"))
## [1] " Interpretasi: Perokok memiliki peluang 6 kali lebih besar untuk terkena kanker paru"
print(paste("2. Relative Risk (RR) =", round(RR, 3)))
## [1] "2. Relative Risk (RR) = 3"
print(paste(" Interpretasi: Risiko kanker paru pada perokok", round(RR, 1),
"kali lebih tinggi"))
## [1] " Interpretasi: Risiko kanker paru pada perokok 3 kali lebih tinggi"
print(paste("3. Uji Chi-square: X-squared =", round(hasil_chi$statistic, 3)))
## [1] "3. Uji Chi-square: X-squared = 31.688"
print(paste(" p-value =", format(hasil_chi$p.value, scientific = TRUE, digits = 3)))
## [1] " p-value = 1.81e-08"
# Interpretasi p-value
if(hasil_chi$p.value < 0.05) {
print("4. Kesimpulan: Terdapat hubungan yang signifikan antara merokok dan kanker paru (p < 0.05)")
} else {
print("4. Kesimpulan: Tidak terdapat hubungan yang signifikan antara merokok dan kanker paru (p > 0.05)")
}
## [1] "4. Kesimpulan: Terdapat hubungan yang signifikan antara merokok dan kanker paru (p < 0.05)"
Berdasarkan hasil analisis, ditemukan bahwa:
Odds Ratio sebesar 6 menunjukkan bahwa individu yang merokok memiliki odds (peluang) 6 kali lebih tinggi untuk menderita kanker paru dibandingkan dengan individu yang tidak merokok.
Relative Risk sebesar 3 menunjukkan bahwa risiko terkena kanker paru pada kelompok perokok adalah 3 kali lebih tinggi dibandingkan kelompok non-perokok.
Uji Chi-square menghasilkan p-value < 0.05, yang mengindikasikan bahwa hubungan antara merokok dan kanker paru secara statistik signifikan.
Secara substantif, hasil ini menunjukkan bahwa merokok merupakan faktor risiko yang signifikan untuk kejadian kanker paru. Temuan ini konsisten dengan berbagai penelitian epidemiologi yang telah dilakukan sebelumnya.
Analisis data kategori merupakan metode statistik yang esensial untuk menganalisis variabel kategorik. Melalui tabel kontingensi, hubungan antara variabel kategorik dapat dipelajari secara sistematis. Ukuran asosiasi seperti odds ratio dan relative risk memberikan gambaran kuantitatif mengenai kekuatan hubungan antar variabel.
Dalam studi kasus yang dianalisis:
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley.
Agresti, A. (2018). An Introduction to Categorical Data Analysis (3rd ed.). Wiley.
Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley. ```