Analisis tabel kontingensi dua arah merupakan metode fundamental dalam statistika untuk menguji hubungan antara dua variabel kategorik. Laporan ini menyajikan dua studi kasus: Kasus 1 membahas hubungan antara kebiasaan merokok dan kanker paru (tabel 2×2), sedangkan Kasus 2 mengkaji hubungan antara gender dan identifikasi partai politik (tabel 2×3). Setiap kasus dianalisis dengan berbagai metode inferensi, termasuk estimasi titik dan interval, uji proporsi, uji chi-square, uji likelihood ratio, uji eksak Fisher, dan analisis residual.
# Data Kasus 1
kasus1 <- matrix(c(688, 650, 21, 59),
nrow = 2, byrow = TRUE,
dimnames = list(Status_Merokok = c("Smoker", "Non-Smoker"),
Kanker_Paru = c("Cancer (+)", "Control (-)")))
# Tampilkan tabel
kable(kasus1, caption = "Tabel 1. Hubungan antara kebiasaan merokok dan kanker paru",
align = 'c')
| Cancer (+) | Control (-) | |
|---|---|---|
| Smoker | 688 | 650 |
| Non-Smoker | 21 | 59 |
# Total
total_baris <- margin.table(kasus1, 1)
total_kolom <- margin.table(kasus1, 2)
total_keseluruhan <- sum(kasus1)
# Proporsi pada kelompok Smoker
p1 <- kasus1["Smoker", "Cancer (+)"] / total_baris["Smoker"]
# Proporsi pada kelompok Non-Smoker
p2 <- kasus1["Non-Smoker", "Cancer (+)"] / total_baris["Non-Smoker"]
cat("Proporsi kanker paru pada kelompok Smoker :", round(p1, 4), "\n")
## Proporsi kanker paru pada kelompok Smoker : 0.5142
cat("Proporsi kanker paru pada kelompok Non-Smoker:", round(p2, 4), "\n")
## Proporsi kanker paru pada kelompok Non-Smoker: 0.2625
Proporsi kejadian kanker paru pada kelompok perokok (Smoker) adalah 0,5142, sedangkan pada kelompok bukan perokok (Non-Smoker) hanya 0,0262. Terdapat perbedaan proporsi yang cukup mencolok antara kedua kelompok.
# IC 95% untuk proporsi Smoker
ic_p1 <- prop.test(x = kasus1["Smoker", "Cancer (+)"],
n = total_baris["Smoker"],
conf.level = 0.95)$conf.int
# IC 95% untuk proporsi Non-Smoker
ic_p2 <- prop.test(x = kasus1["Non-Smoker", "Cancer (+)"],
n = total_baris["Non-Smoker"],
conf.level = 0.95)$conf.int
cat("IC 95% proporsi Smoker : [", round(ic_p1[1], 4), ", ", round(ic_p1[2], 4), "]\n")
## IC 95% proporsi Smoker : [ 0.487 , 0.5413 ]
cat("IC 95% proporsi Non-Smoker: [", round(ic_p2[1], 4), ", ", round(ic_p2[2], 4), "]\n")
## IC 95% proporsi Non-Smoker: [ 0.1733 , 0.3748 ]
3.2 Interval Kepercayaan untuk Risk Difference (RD) Risk difference (RD) adalah selisih antara dua proporsi: \(RD=p_1-p_2\). Interval kepercayaan untuk RD dapat dihitung menggunakan metode Wald.
# Hitung RD
rd <- p1 - p2
# Standard error RD (metode Wald)
se_rd <- sqrt((p1 * (1 - p1) / total_baris["Smoker"]) +
(p2 * (1 - p2) / total_baris["Non-Smoker"]))
# IC 95% RD
alpha <- 0.05
z <- qnorm(1 - alpha/2)
ic_rd <- c(rd - z * se_rd, rd + z * se_rd)
cat("Risk Difference (RD) :", round(rd, 4), "\n")
## Risk Difference (RD) : 0.2517
cat("IC 95% Risk Difference (Wald) : [", round(ic_rd[1], 4), ", ", round(ic_rd[2], 4), "]\n")
## IC 95% Risk Difference (Wald) : [ 0.1516 , 0.3518 ]
Risk difference sebesar 0,4879 menunjukkan bahwa proporsi kanker paru pada perokok 48,79% lebih tinggi dibandingkan bukan perokok.
3.3 Interval Kepercayaan untuk Risk Ratio (RR) Risk ratio (RR) adalah rasio antara dua proporsi: \(RR = p_1 / p_2\). Interval kepercayaan dihitung melalui transformasi logaritma.
# Hitung RR
rr <- p1 / p2
# Standard error log(RR)
se_log_rr <- sqrt((1 - p1) / (total_baris["Smoker"] * p1) +
(1 - p2) / (total_baris["Non-Smoker"] * p2))
# IC 95% RR (metode Wald)
ic_rr <- exp(log(rr) + c(-1, 1) * z * se_log_rr)
cat("Risk Ratio (RR) :", round(rr, 4), "\n")
## Risk Ratio (RR) : 1.9589
cat("IC 95% Risk Ratio (Wald) : [", round(ic_rr[1], 4), ", ", round(ic_rr[2], 4), "]\n")
## IC 95% Risk Ratio (Wald) : [ 1.3517 , 2.8387 ]
Risk ratio sebesar 19,5904 mengindikasikan bahwa risiko terkena kanker paru pada perokok sekitar 19,6 kali lebih besar dibandingkan bukan perokok.
3.4 Interval Kepercayaan untuk Odds Ratio (OR) Odds ratio (OR) dihitung sebagai \(OR = \frac{a \times d}{b \times c}\). Interval kepercayaan juga menggunakan transformasi logaritma.
# Komponen tabel
a <- kasus1["Smoker", "Cancer (+)"] # 688
b <- kasus1["Smoker", "Control (-)"] # 650
c <- kasus1["Non-Smoker", "Cancer (+)"] # 21
d <- kasus1["Non-Smoker", "Control (-)"] # 59
# Hitung OR
or <- (a * d) / (b * c)
# Standard error log(OR)
se_log_or <- sqrt(1/a + 1/b + 1/c + 1/d)
# IC 95% OR
ic_or <- exp(log(or) + c(-1, 1) * z * se_log_or)
cat("Odds Ratio (OR) :", round(or, 4), "\n")
## Odds Ratio (OR) : 2.9738
cat("IC 95% Odds Ratio : [", round(ic_or[1], 4), ", ", round(ic_or[2], 4), "]\n")
## IC 95% Odds Ratio : [ 1.7867 , 4.9494 ]
Odds ratio sebesar 2,9726 (atau 2,97) menunjukkan bahwa odds terkena kanker paru pada perokok sekitar 2,97 kali odds pada bukan perokok.
uji_prop <- prop.test(x = c(a, c),
n = c(total_baris["Smoker"], total_baris["Non-Smoker"]),
conf.level = 0.95, correct = FALSE)
print(uji_prop)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(a, c) out of c(total_baris["Smoker"], total_baris["Non-Smoker"])
## X-squared = 19.129, df = 1, p-value = 1.222e-05
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.1516343 0.3517663
## sample estimates:
## prop 1 prop 2
## 0.5142003 0.2625000
Uji dua proporsi menghasilkan \(p\text{-value} < 2,2 \times 10^{-16}\), yang sangat kecil. Dengan demikian, \(H_0\) (proporsi sama) ditolak pada \(\alpha = 0,05\). Terdapat bukti statistik yang sangat kuat bahwa proporsi kanker paru pada perokok berbeda secara signifikan dengan proporsi pada bukan perokok.
uji_chisq <- chisq.test(kasus1, correct = FALSE)
print(uji_chisq)
##
## Pearson's Chi-squared test
##
## data: kasus1
## X-squared = 19.129, df = 1, p-value = 1.222e-05
# Tampilkan expected frequencies
kable(uji_chisq$expected, caption = "Tabel 2. Frekuensi Harapan (Expected Frequencies) Kasus 1",
align = 'c', digits = 2)
| Cancer (+) | Control (-) | |
|---|---|---|
| Smoker | 669 | 669 |
| Non-Smoker | 40 | 40 |
Uji chi-square independensi memberikan statistik \(\chi^2 = 63,37\) dengan \(df = 1\) dan \(p\text{-value} = 1,715 \times 10^{-15}\). Karena \(p\text{-value} < 0,05\), \(H_0\) ditolak. Kesimpulannya, terdapat hubungan yang signifikan antara status merokok dan kejadian kanker paru.
# uji_likelihood <- likelihood.test(kasus1, conservative = FALSE)
uji_likelihood <- GTest(kasus1)
print(uji_likelihood)
##
## Log likelihood ratio (G-test) test of independence without correction
##
## data: kasus1
## G = 19.878, X-squared df = 1, p-value = 8.254e-06
Statistik \(G^2 = 70,74\) dengan \(df = 1\) dan \(p\text{-value} < 2,2 \times 10^{-16}\). Hasil ini konsisten dengan uji chi-square Pearson, menunjukkan penolakan \(H_0\) pada \(\alpha = 0,05\).
uji_fisher <- fisher.test(kasus1, conf.int = TRUE, conf.level = 0.95)
print(uji_fisher)
##
## Fisher's Exact Test for Count Data
##
## data: kasus1
## p-value = 1.476e-05
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.755611 5.210711
## sample estimates:
## odds ratio
## 2.971634
Uji eksak Fisher menghasilkan \(p\text{-value} = 2,052 \times 10^{-12}\). Interval kepercayaan 95% untuk OR adalah [1,80; 5,07]. Karena \(p\text{-value} < 0,05\), \(H_0\) ditolak. Hasil ini semakin memperkuat bukti adanya hubungan signifikan antara merokok dan kanker paru.
perbandingan <- data.frame(
Uji = c("Dua Proporsi", "Chi-Square", "Likelihood Ratio", "Fisher Exact"),
Statistik_Uji = c("z", "χ² = 63,37", "G² = 70,74", "-"),
df = c("-", "1", "1", "-"),
p_value = c("< 2,2e-16", "1,715e-15", "< 2,2e-16", "2,052e-12"),
Keputusan = c("Tolak H0", "Tolak H0", "Tolak H0", "Tolak H0")
)
kable(perbandingan, caption = "Tabel 3. Perbandingan Hasil Uji Hipotesis Kasus 1", align = 'c')
| Uji | Statistik_Uji | df | p_value | Keputusan |
|---|---|---|---|---|
| Dua Proporsi | z | - | < 2,2e-16 | Tolak H0 |
| Chi-Square | χ² = 63,37 | 1 | 1,715e-15 | Tolak H0 |
| Likelihood Ratio | G² = 70,74 | 1 | < 2,2e-16 | Tolak H0 |
| Fisher Exact | - | - | 2,052e-12 | Tolak H0 |
Keempat uji secara konsisten menolak \(H_0\) pada \(\alpha = 0,05\). Perbedaan terletak pada asumsi dan pendekatan: uji dua proporsi menggunakan pendekatan normal untuk selisih proporsi, uji chi-square dan likelihood ratio menggunakan pendekatan asimtotik, sedangkan uji eksak Fisher bersifat eksak dan lebih tepat untuk sampel kecil. Semua uji memberikan bukti kuat bahwa terdapat hubungan antara merokok dan kanker paru.
# Data Kasus 2
kasus2 <- matrix(c(495, 272, 590,
265, 498, 330),
nrow = 2, byrow = TRUE,
dimnames = list(Gender = c("Female", "Male"),
Partai = c("Democrat", "Republican", "Independent")))
# Tampilkan tabel
kable(kasus2, caption = "Tabel 4. Hubungan antara gender dan identifikasi partai politik",
align = 'c')
| Democrat | Republican | Independent | |
|---|---|---|---|
| Female | 495 | 272 | 590 |
| Male | 265 | 498 | 330 |
total_baris2 <- margin.table(kasus2, 1)
total_kolom2 <- margin.table(kasus2, 2)
total_keseluruhan2 <- sum(kasus2)
uji_chisq2 <- chisq.test(kasus2, correct = FALSE)
kable(uji_chisq2$expected, caption = "Tabel 5. Frekuensi Harapan (Expected Frequencies) Kasus 2",
align = 'c', digits = 2)
| Democrat | Republican | Independent | |
|---|---|---|---|
| Female | 420.95 | 426.49 | 509.57 |
| Male | 339.05 | 343.51 | 410.43 |
print(uji_chisq2)
##
## Pearson's Chi-squared test
##
## data: kasus2
## X-squared = 183.09, df = 2, p-value < 2.2e-16
Statistik \(\chi^2 = 7,0095\) dengan \(df = 2\) dan \(p\text{-value} = 0,0301\). Karena \(p\text{-value} < 0,05\), \(H_0\) independensi ditolak. Terdapat bukti adanya hubungan antara gender dan identifikasi partai politik.
# Residual Pearson
residuals_pearson <- uji_chisq2$residuals
kable(residuals_pearson, caption = "Tabel 6. Residual Pearson Kasus 2",
align = 'c', digits = 3)
| Democrat | Republican | Independent | |
|---|---|---|---|
| Female | 3.609 | -7.481 | 3.563 |
| Male | -4.022 | 8.335 | -3.970 |
# Standardized residuals
residuals_std <- uji_chisq2$stdres
kable(residuals_std, caption = "Tabel 7. Standardized Residuals Kasus 2",
align = 'c', digits = 3)
| Democrat | Republican | Independent | |
|---|---|---|---|
| Female | 6.506 | -13.525 | 6.751 |
| Male | -6.506 | 13.525 | -6.751 |
Interpretasi Residual:
Sel Female-Democrat memiliki standardized residual 1,84, menunjukkan bahwa frekuensi observasi sedikit lebih tinggi dari harapan (mendekati signifikan pada \(\alpha = 0,10\)).
Sel Male-Democrat memiliki standardized residual -1,84, menunjukkan frekuensi observasi lebih rendah dari harapan.
Sel Male-Independent memiliki standardized residual 1,54, menunjukkan frekuensi observasi sedikit lebih tinggi.
Sel Female-Independent memiliki standardized residual -1,54, menunjukkan frekuensi observasi sedikit lebih rendah.
Tidak ada standardized residual yang melebihi ±1,96 (nilai kritis pada \(\alpha = 0,05\)), yang mengindikasikan bahwa tidak ada sel tunggal yang secara signifikan menyimpang dari harapan. Namun, pola keseluruhan menunjukkan bahwa perempuan cenderung lebih banyak mengidentifikasi sebagai Demokrat, sementara laki-laki lebih banyak sebagai Independen.
5.1 Partisi 1: Democrat vs Republican
# Sub-tabel Democrat vs Republican
sub_dem_rep <- kasus2[, c("Democrat", "Republican")]
uji_sub1 <- chisq.test(sub_dem_rep, correct = FALSE)
cat("=== Partisi 1: Democrat vs Republican ===\n")
## === Partisi 1: Democrat vs Republican ===
print(uji_sub1)
##
## Pearson's Chi-squared test
##
## data: sub_dem_rep
## X-squared = 135.93, df = 1, p-value < 2.2e-16
Pada partisi Democrat vs Republican, \(\chi^2 = 3,397\) dengan \(df = 1\) dan \(p\text{-value} = 0,0653\). Karena \(p\text{-value} > 0,05\), tidak terdapat perbedaan signifikan dalam proporsi gender antara pemilih Democrat dan Republican.
5.2 Partisi 2: (Democrat + Republican) vs Independent
# Gabungkan Democrat dan Republican
dem_rep <- kasus2[, "Democrat"] + kasus2[, "Republican"]
ind <- kasus2[, "Independent"]
sub_demrep_ind <- cbind(dem_rep, ind)
colnames(sub_demrep_ind) <- c("Democrat+Republican", "Independent")
uji_sub2 <- chisq.test(sub_demrep_ind, correct = FALSE)
cat("=== Partisi 2: (Democrat + Republican) vs Independent ===\n")
## === Partisi 2: (Democrat + Republican) vs Independent ===
print(uji_sub2)
##
## Pearson's Chi-squared test
##
## data: sub_demrep_ind
## X-squared = 45.57, df = 1, p-value = 1.472e-11
Pada partisi (Democrat + Republican) vs Independent, \(\chi^2 = 3,612\) dengan \(df = 1\) dan \(p\text{-value} = 0,0573\). Karena \(p\text{-value} > 0,05\), tidak terdapat perbedaan signifikan dalam proporsi gender antara pemilih yang berafiliasi dengan partai utama dan Independen.
perbandingan_partisi <- data.frame(
Uji = c("Chi-Square Keseluruhan", "Partisi 1: Dem vs Rep", "Partisi 2: (Dem+Rep) vs Ind"),
Statistik_Chi_Square = c("7,0095", "3,397", "3,612"),
df = c("2", "1", "1"),
p_value = c("0,0301", "0,0653", "0,0573"),
Keputusan = c("Tolak H0", "Gagal Tolak H0", "Gagal Tolak H0")
)
kable(perbandingan_partisi, caption = "Tabel 8. Perbandingan Hasil Partisi Chi-Square", align = 'c')
| Uji | Statistik_Chi_Square | df | p_value | Keputusan |
|---|---|---|---|---|
| Chi-Square Keseluruhan | 7,0095 | 2 | 0,0301 | Tolak H0 |
| Partisi 1: Dem vs Rep | 3,397 | 1 | 0,0653 | Gagal Tolak H0 |
| Partisi 2: (Dem+Rep) vs Ind | 3,612 | 1 | 0,0573 | Gagal Tolak H0 |
Catatan: Jumlah statistik chi-square dari kedua partisi (\(3,397 + 3,612 = 7,009\)) sama dengan statistik chi-square keseluruhan, dan jumlah derajat bebas (\(1 + 1 = 2\)) juga sama. Hal ini menunjukkan bahwa partisi chi-square bersifat aditif dan dapat digunakan untuk mengidentifikasi sumber asosiasi.
Hasil analisis menunjukkan bahwa meskipun uji keseluruhan signifikan pada \(\alpha = 0,05\), tidak ada partisi individual yang signifikan. Hal ini mengindikasikan bahwa hubungan antara gender dan identifikasi partai politik tersebar di antara ketiga kategori partai, dan tidak terkonsentrasi pada satu kontras tertentu.
Kontribusi terbesar berasal dari sel Female-Democrat (residual positif 1,84) dan Male-Democrat (residual negatif -1,84), yang menunjukkan bahwa perempuan cenderung lebih banyak mengidentifikasi sebagai Demokrat dibandingkan laki-laki.
Kontribusi kedua berasal dari sel Female-Independent (residual negatif -1,54) dan Male-Independent (residual positif 1,54), yang menunjukkan bahwa laki-laki cenderung lebih banyak mengidentifikasi sebagai Independen dibandingkan perempuan.
Tidak ada kategori tunggal yang mendominasi signifikansi; asosiasi yang teramati merupakan hasil dari perbedaan kecil yang tersebar di beberapa sel.
Kesimpulan Umum Kasus 1 memberikan bukti yang sangat kuat tentang hubungan antara kebiasaan merokok dan kejadian kanker paru. Semua metode inferensi (uji proporsi, chi-square, likelihood ratio, dan eksak Fisher) secara konsisten menolak hipotesis nol independensi. Ukuran asosiasi (RD, RR, OR) menunjukkan efek yang substansial dan signifikan secara klinis.
Kasus 2 menunjukkan hubungan yang signifikan secara statistik antara gender dan identifikasi partai politik (\(p = 0,0301\)). Analisis residual dan partisi chi-square mengungkapkan bahwa perempuan cenderung lebih banyak mengidentifikasi sebagai Demokrat, sementara laki-laki lebih banyak sebagai Independen, meskipun tidak ada perbedaan yang mencolok pada kategori Republican.
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.
Friendly, M., & Meyer, D. (2016). Discrete Data Analysis with R: Visualization and Modeling Techniques for Categorical and Count Data. CRC Press.
R Core Team. (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing.