Analisis data kategori digunakan untuk mempelajari hubungan antarvariabel yang dinyatakan dalam bentuk kategori, misalnya status merokok, kejadian penyakit, gender, atau identifikasi partai politik. Salah satu alat utama dalam analisis ini adalah tabel kontingensi, yaitu tabel yang menyajikan frekuensi gabungan dari dua variabel kategorik sehingga hubungan, pola proporsi, dan asosiasi antarkategori dapat ditelaah secara sistematis Agresti (2019).
Pada tugas ini dibahas dua kasus inferensi tabel kontingensi dua arah. Kasus pertama berfokus pada tabel kontingensi 2 x 2, sehingga memungkinkan estimasi proporsi, risk difference (RD), relative risk (RR), odds ratio (OR), serta perbandingan beberapa pengujian hipotesis. Kasus kedua membahas tabel 2 x 3, sehingga perhatian utama diarahkan pada uji independensi chi-square, frekuensi harapan, residual, dan partisi chi-square. Laporan ini disusun mengikuti format RPubs yang diminta pada instruksi tugas.
Data yang digunakan:
Smoker: 688 kanker, 650 kontrolNon-Smoker: 21 kanker, 59 kontrolkasus1 <- matrix(
c(688, 650,
21, 59),
nrow = 2,
byrow = TRUE,
dimnames = list(
"Status Merokok" = c("Smoker", "Non-Smoker"),
"Status Penyakit" = c("Cancer", "Control")
)
)
kasus1
## Status Penyakit
## Status Merokok Cancer Control
## Smoker 688 650
## Non-Smoker 21 59
addmargins(kasus1)
## Status Penyakit
## Status Merokok Cancer Control Sum
## Smoker 688 650 1338
## Non-Smoker 21 59 80
## Sum 709 709 1418
Data yang digunakan:
Female: 495, 272, 590Male: 330, 265, 498kasus2 <- matrix(
c(495, 272, 590,
330, 265, 498),
nrow = 2,
byrow = TRUE,
dimnames = list(
Gender = c("Female", "Male"),
Identifikasi = c("Democrat", "Republican", "Independent")
)
)
kasus2
## Identifikasi
## Gender Democrat Republican Independent
## Female 495 272 590
## Male 330 265 498
addmargins(kasus2)
## Identifikasi
## Gender Democrat Republican Independent Sum
## Female 495 272 590 1357
## Male 330 265 498 1093
## Sum 825 537 1088 2450
Metode yang dipakai pada laporan ini dijelaskan singkat terlebih dahulu agar alur analisis mudah diikuti.
G^2) adalah alternatif dari chi-square yang berbasis likelihood.2 x 2.2 x 3 dipakai untuk melihat sel mana yang paling berkontribusi pada hubungan.Hipotesis umum untuk uji independensi:
H0: tidak ada hubungan antara dua variabel.
H1: ada hubungan antara dua variabel.
knitr::kable(addmargins(kasus1), caption = "Tabel Kontingensi Kasus 1")
| Cancer | Control | Sum | |
|---|---|---|---|
| Smoker | 688 | 650 | 1338 |
| Non-Smoker | 21 | 59 | 80 |
| Sum | 709 | 709 | 1418 |
a <- kasus1[1, 1]
b <- kasus1[1, 2]
c <- kasus1[2, 1]
d <- kasus1[2, 2]
n1 <- a + b
n2 <- c + d
p_smoker <- a / n1
p_nonsmoker <- c / n2
proporsi_kasus1 <- data.frame(
Kelompok = c("Smoker", "Non-Smoker"),
Kasus = c(a, c),
Total = c(n1, n2),
Proporsi = c(p_smoker, p_nonsmoker)
)
proporsi_kasus1
## Kelompok Kasus Total Proporsi
## 1 Smoker 688 1338 0.5142
## 2 Non-Smoker 21 80 0.2625
ci_p1 <- prop_wilson(a, n1)
ci_p2 <- prop_wilson(c, n2)
ci_rd <- risk_difference_ci(a, b, c, d)
ci_rr <- risk_ratio_ci(a, b, c, d)
ci_or <- odds_ratio_ci(a, b, c, d)
ringkasan_ci <- data.frame(
Parameter = c(
"Proporsi Smoker",
"Proporsi Non-Smoker",
"Risk Difference",
"Relative Risk",
"Odds Ratio"
),
Estimasi = c(
p_smoker,
p_nonsmoker,
ci_rd["estimate"],
ci_rr["estimate"],
ci_or["estimate"]
),
Lower95 = c(
ci_p1["lower"],
ci_p2["lower"],
ci_rd["lower"],
ci_rr["lower"],
ci_or["lower"]
),
Upper95 = c(
ci_p1["upper"],
ci_p2["upper"],
ci_rd["upper"],
ci_rr["upper"],
ci_or["upper"]
)
)
ringkasan_ci
## Parameter Estimasi Lower95 Upper95
## 1 Proporsi Smoker 0.5142 0.4874 0.5409
## 2 Proporsi Non-Smoker 0.2625 0.1786 0.3682
## 3 Risk Difference 0.2517 0.1516 0.3518
## 4 Relative Risk 1.9589 1.3517 2.8387
## 5 Odds Ratio 2.9738 1.7867 4.9494
Uji ini digunakan untuk membandingkan proporsi kejadian kanker pada kelompok Smoker dan Non-Smoker.
uji_dua_proporsi <- prop.test(
x = c(a, c),
n = c(n1, n2),
correct = FALSE
)
uji_dua_proporsi
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(a, c) out of c(n1, n2)
## X-squared = 19, df = 1, p-value = 1e-05
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.1516 0.3518
## sample estimates:
## prop 1 prop 2
## 0.5142 0.2625
Uji chi-square dipakai untuk menguji apakah status merokok dan status penyakit saling independen.
uji_chi1 <- chisq.test(kasus1, correct = FALSE)
uji_chi1
##
## Pearson's Chi-squared test
##
## data: kasus1
## X-squared = 19, df = 1, p-value = 1e-05
uji_chi1$expected
## Status Penyakit
## Status Merokok Cancer Control
## Smoker 669 669
## Non-Smoker 40 40
G^2)Uji ini menghitung statistik berbasis likelihood dan menjadi pembanding untuk uji chi-square Pearson.
uji_g2_1 <- g_test_2way(kasus1)
data.frame(
Statistik = uji_g2_1$statistic,
df = uji_g2_1$parameter,
p_value = uji_g2_1$p.value
)
## Statistik df p_value
## 1 19.88 1 8.254e-06
Uji ini memberi pembanding eksak untuk tabel 2 x 2.
uji_fisher1 <- fisher.test(kasus1)
uji_fisher1
##
## Fisher's Exact Test for Count Data
##
## data: kasus1
## p-value = 1e-05
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.756 5.211
## sample estimates:
## odds ratio
## 2.972
ringkasan_uji_kasus1 <- data.frame(
Uji = c(
"Uji Dua Proporsi",
"Chi-Square Pearson",
"Likelihood Ratio (G^2)",
"Fisher Exact Test"
),
Hipotesis = c(
"p_smoker = p_non_smoker",
"Status merokok independen dengan status penyakit",
"Status merokok independen dengan status penyakit",
"Status merokok independen dengan status penyakit"
),
Statistik_Uji = c(
unname(uji_dua_proporsi$statistic),
unname(uji_chi1$statistic),
unname(uji_g2_1$statistic),
unname(uji_fisher1$estimate)
),
p_value = c(
uji_dua_proporsi$p.value,
uji_chi1$p.value,
uji_g2_1$p.value,
uji_fisher1$p.value
),
Keputusan = ifelse(
c(uji_dua_proporsi$p.value, uji_chi1$p.value, uji_g2_1$p.value, uji_fisher1$p.value) < 0.05,
"Tolak H0",
"Gagal Tolak H0"
)
)
ringkasan_uji_kasus1
## Uji Hipotesis
## 1 Uji Dua Proporsi p_smoker = p_non_smoker
## 2 Chi-Square Pearson Status merokok independen dengan status penyakit
## 3 Likelihood Ratio (G^2) Status merokok independen dengan status penyakit
## 4 Fisher Exact Test Status merokok independen dengan status penyakit
## Statistik_Uji p_value Keputusan
## 1 19.129 1.222e-05 Tolak H0
## 2 19.129 1.222e-05 Tolak H0
## 3 19.878 8.254e-06 Tolak H0
## 4 2.972 1.476e-05 Tolak H0
barplot(
t(prop.table(kasus1, margin = 1)),
col = c("#c1121f", "#669bbc"),
legend.text = TRUE,
args.legend = list(x = "topright", bty = "n"),
main = "Proporsi Cancer dan Control per Kelompok",
ylab = "Proporsi"
)
knitr::kable(addmargins(kasus2), caption = "Tabel Kontingensi Kasus 2")
| Democrat | Republican | Independent | Sum | |
|---|---|---|---|---|
| Female | 495 | 272 | 590 | 1357 |
| Male | 330 | 265 | 498 | 1093 |
| Sum | 825 | 537 | 1088 | 2450 |
Frekuensi harapan menunjukkan nilai yang diharapkan jika Gender dan Identifikasi saling independen.
uji_chi2 <- chisq.test(kasus2, correct = FALSE)
uji_chi2$expected
## Identifikasi
## Gender Democrat Republican Independent
## Female 456.9 297.4 602.6
## Male 368.1 239.6 485.4
uji_chi2
##
## Pearson's Chi-squared test
##
## data: kasus2
## X-squared = 13, df = 2, p-value = 0.002
Residual dipakai untuk melihat kategori mana yang paling berpengaruh terhadap hubungan.
uji_chi2$residuals
## Identifikasi
## Gender Democrat Republican Independent
## Female 1.780 -1.475 -0.5140
## Male -1.983 1.643 0.5728
uji_chi2$stdres
## Identifikasi
## Gender Democrat Republican Independent
## Female 3.272 -2.499 -1.032
## Male -3.272 2.499 1.032
Partisi dilakukan untuk:
Democrat vs Republican(Democrat + Republican) vs Independentpartisi1 <- kasus2[, c("Democrat", "Republican")]
partisi2 <- cbind(
`Democrat + Republican` = kasus2[, "Democrat"] + kasus2[, "Republican"],
Independent = kasus2[, "Independent"]
)
uji_partisi1 <- chisq.test(partisi1, correct = FALSE)
uji_partisi2 <- chisq.test(partisi2, correct = FALSE)
ringkasan_partisi <- data.frame(
Partisi = c(
"Democrat vs Republican",
"(Democrat + Republican) vs Independent"
),
Statistik = c(
unname(uji_partisi1$statistic),
unname(uji_partisi2$statistic)
),
df = c(
unname(uji_partisi1$parameter),
unname(uji_partisi2$parameter)
),
p_value = c(
uji_partisi1$p.value,
uji_partisi2$p.value
)
)
ringkasan_partisi
## Partisi Statistik df p_value
## 1 Democrat vs Republican 11.555 1 0.0006758
## 2 (Democrat + Republican) vs Independent 1.065 1 0.3019790
mosaicplot(
kasus2,
color = c("#9ad1d4", "#f4d35e", "#ee964b", "#f95738"),
main = "Mosaic Plot Gender dan Identifikasi Partai Politik",
xlab = "Gender",
ylab = "Identifikasi"
)
Smoker lebih tinggi dibanding Non-Smoker.Smoker memang memiliki peluang kejadian yang lebih besar.Smoker.Smoker lebih tinggi daripada Non-Smoker.Smoker juga lebih tinggi.G^2, dan Fisher semuanya membandingkan dua kelompok dari sudut yang sedikit berbeda, tetapi kalau p-value semuanya kecil maka kesimpulannya tetap sama: ada hubungan yang signifikan.G^2 berbasis likelihood, sedangkan Fisher berbasis probabilitas eksak.H0.2 x 3 menunjukkan apakah Gender dan Identifikasi Partai Politik saling berhubungan.Democrat biasanya memberi kontribusi paling kuat, terutama pada perbedaan antara Female dan Male.Democrat vs Republican atau dari Independent versus gabungan dua kategori lain.Untuk Kasus 1, seluruh hasil menunjukkan bahwa terdapat hubungan yang signifikan antara status merokok dan kejadian kanker paru. Kelompok Smoker memiliki proporsi kejadian yang lebih tinggi, serta nilai RD, RR, dan OR yang menunjukkan risiko lebih besar dibanding kelompok Non-Smoker.
Untuk Kasus 2, terdapat indikasi hubungan antara Gender dan Identifikasi Partai Politik. Hasil residual dan partisi chi-square membantu menunjukkan kategori mana yang paling banyak menyumbang terhadap hubungan tersebut.