LAPORAN TUGAS 6
Inferensi Statistik pada Tabel Kontingensi Dua Arah
Mata Kuliah: Analisis Data Kategori
Dosen: Prof. I Gede Nyoman Mindra Jaya, Ph.D
NPM: 140610240059
Tanggal: 10 April 2026
Dalam berbagai kajian ilmiah di bidang kesehatan, sosial, dan ilmu politik, peneliti sering dihadapkan pada data kategorikal yang menggambarkan hubungan antara dua atau lebih variabel nominal atau ordinal. Salah satu metode yang paling umum digunakan untuk meringkas dan menganalisis hubungan tersebut adalah tabel kontingensi (contingency table).
Inferensi statistik pada tabel kontingensi mencakup:
Laporan ini bertujuan untuk:
Dalam laporan ini mencakup dua kasus, yaitu:
Tingkat signifikansi yang digunakan adalah α = 0,05.
if (!require("knitr")) install.packages("knitr", quiet=TRUE)
if (!require("kableExtra")) install.packages("kableExtra", quiet=TRUE)
if (!require("epitools")) install.packages("epitools", quiet=TRUE)
if (!require("ggplot2")) install.packages("ggplot2", quiet=TRUE)
if (!require("vcd")) install.packages("vcd", quiet=TRUE)
if (!require("scales")) install.packages("scales", quiet=TRUE)
library(knitr); library(kableExtra)Data ini diperoleh dari studi kasus-kontrol yang membandingkan frekuensi perokok dan non-perokok di antara penderita kanker paru (Cancer+) dan kelompok kontrol (Control−). Tabel kontingensi 2×2 disusun sebagai berikut:
tabel1 <- matrix(
c(688, 650, 21, 59), nrow=2, byrow=TRUE,
dimnames=list(
"Status Merokok" = c("Smoker", "Non-Smoker"),
"Status" = c("Cancer (+)", "Control (-)")
)
)
addmargins(tabel1) %>%
kable(caption="Tabel 2.1 Tabel Kontingensi 2×2: Status Merokok dan Kanker Paru",
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered","hover"),
full_width=FALSE) %>%
row_spec(3, bold=TRUE, background="#dce8f5") %>%
column_spec(4, bold=TRUE, background="#dce8f5")| Cancer (+) | Control (-) | Sum | |
|---|---|---|---|
| Smoker | 688 | 650 | 1338 |
| Non-Smoker | 21 | 59 | 80 |
| Sum | 709 | 709 | 1418 |
Dari tabel di atas, dari 1.338 perokok terdapat 688 yang mengalami kanker paru, sedangkan dari 80 non-perokok hanya 21 yang mengalami kanker paru. Secara deskriptif, proporsi kanker paru pada perokok tampak jauh lebih tinggi.
Data Kasus 2 merupakan hasil survei yang menanyakan identifikasi partai politik responden berdasarkan gender. Tabel kontingensi 2×3 disusun sebagai berikut:
tabel2 <- matrix(
c(495, 272, 590, 330, 265, 498), nrow=2, byrow=TRUE,
dimnames=list(
"Gender" = c("Female", "Male"),
"Partai" = c("Democrat", "Republican", "Independent")
)
)
addmargins(tabel2) %>%
kable(caption="Tabel 2.2 Tabel Kontingensi 2×3: Gender dan Identifikasi Partai Politik",
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered","hover"),
full_width=FALSE) %>%
row_spec(3, bold=TRUE, background="#dce8f5") %>%
column_spec(5, bold=TRUE, background="#dce8f5")| Democrat | Republican | Independent | Sum | |
|---|---|---|---|---|
| Female | 495 | 272 | 590 | 1357 |
| Male | 330 | 265 | 498 | 1093 |
| Sum | 825 | 537 | 1088 | 2450 |
Dari tabel di atas, terdapat 1.357 responden perempuan dan 1.093 responden laki-laki. Secara deskriptif, baik perempuan maupun laki-laki paling banyak mengidentifikasi diri sebagai Independent, diikuti Democrat, kemudian Republican. Namun perlu diuji secara formal apakah distribusi ini berbeda secara signifikan antar gender.
Estimasi titik proporsi: \(\hat{p}_i = n_{i1} / n_{i+}\)
Interval kepercayaan 95% proporsi dihitung menggunakan metode Wilson (score interval) yang lebih akurat untuk ukuran sampel sedang:
\[IC_{95\%}(p) = \frac{\hat{p} + z^2/2n \pm z\sqrt{\hat{p}(1-\hat{p})/n + z^2/4n^2}}{1 + z^2/n}\]
dengan z = 1,96 untuk tingkat kepercayaan 95%.
| Ukuran | Formula | IC 95% |
|---|---|---|
| RD | \(\hat{p}_1 - \hat{p}_2\) | \(RD \pm 1.96\sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1}+\frac{\hat{p}_2(1-\hat{p}_2)}{n_2}}\) |
| RR | \(\hat{p}_1 / \hat{p}_2\) | \(\exp\left[\ln(RR) \pm 1.96\sqrt{\frac{1-\hat{p}_1}{n_{11}}+\frac{1-\hat{p}_2}{n_{21}}}\right]\) |
| OR | \((n_{11}n_{22})/(n_{12}n_{21})\) | \(\exp\left[\ln(OR) \pm 1.96\sqrt{1/n_{11}+1/n_{12}+1/n_{21}+1/n_{22}}\right]\) |
n_s <- 1338; n_ns <- 80
x_s <- 688; x_ns <- 21
# Estimasi titik
p1 <- x_s / n_s
p2 <- x_ns / n_ns
# Wilson CI
ic_s <- prop.test(x_s, n_s, conf.level=0.95)$conf.int
ic_ns <- prop.test(x_ns, n_ns, conf.level=0.95)$conf.int
data.frame(
Kelompok = c("Smoker", "Non-Smoker"),
"Kanker" = c(x_s, x_ns),
"Total" = c(n_s, n_ns),
"p_hat" = round(c(p1, p2), 4),
"IC_bawah"= round(c(ic_s[1], ic_ns[1]), 4),
"IC_atas" = round(c(ic_s[2], ic_ns[2]), 4)
) %>%
kable(caption="Tabel 4.1.1 Estimasi Proporsi dan IC 95% (Metode Wilson)",
col.names=c("Kelompok","Kanker","Total","p̂","IC 95% Bawah","IC 95% Atas"),
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered"), full_width=FALSE)| Kelompok | Kanker | Total | p̂ |
IC 95% Bawah
| |
|---|---|---|---|---|---|
| Smoker | 688 | 1338 | 0.5142 | 0.4870 | 0.5413 |
| Non-Smoker | 21 | 80 | 0.2625 | 0.1733 | 0.3748 |
Keputusan: Proporsi Smoker = 0,5142 dan Non-Smoker = 0,2625. IC 95% tidak saling tumpang tindih.
Interpretasi: Diperkirakan sekitar 51,4% perokok mengalami kanker paru, sedangkan hanya 26,3% non-perokok yang mengalami kanker paru. Perbedaan ini tampak besar secara praktis. Karena kedua IC tidak tumpang tindih, terdapat indikasi kuat bahwa proporsi berbeda secara bermakna.
# Risk Difference
RD <- p1 - p2
se_RD <- sqrt(p1*(1-p1)/n_s + p2*(1-p2)/n_ns)
RD_lb <- RD - 1.96*se_RD; RD_ub <- RD + 1.96*se_RD
# Risk Ratio
RR <- p1 / p2
se_lnRR <- sqrt((1-p1)/x_s + (1-p2)/x_ns)
RR_lb <- exp(log(RR)-1.96*se_lnRR); RR_ub <- exp(log(RR)+1.96*se_lnRR)
# Odds Ratio
a <- 688; b <- 650; c_n <- 21; d <- 59
OR <- (a*d)/(b*c_n)
se_lnOR <- sqrt(1/a+1/b+1/c_n+1/d)
OR_lb <- exp(log(OR)-1.96*se_lnOR); OR_ub <- exp(log(OR)+1.96*se_lnOR)
data.frame(
Ukuran = c("Risk Difference (RD)","Risk Ratio (RR)","Odds Ratio (OR)"),
Estimasi= round(c(RD, RR, OR), 4),
IC_lb = round(c(RD_lb, RR_lb, OR_lb), 4),
IC_ub = round(c(RD_ub, RR_ub, OR_ub), 4),
Null = c("0","1","1"),
Signifikan = c("Ya (IC tidak mencakup 0)","Ya (IC tidak mencakup 1)","Ya (IC tidak mencakup 1)")
) %>%
kable(caption="Tabel 4.1.2 Ukuran Asosiasi dan IC 95%",
col.names=c("Ukuran","Estimasi","IC 95% Bawah","IC 95% Atas","Null","Signifikan?"),
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered"), full_width=FALSE)| Ukuran | Estimasi | IC 95% Bawah | IC 95% Atas | Null | Signifikan? |
|---|---|---|---|---|---|
| Risk Difference (RD) | 0.2517 | 0.1516 | 0.3518 | 0 | Ya (IC tidak mencakup 0) |
| Risk Ratio (RR) | 1.9589 | 1.3517 | 2.8387 | 1 | Ya (IC tidak mencakup 1) |
| Odds Ratio (OR) | 2.9738 | 1.7867 | 4.9495 | 1 | Ya (IC tidak mencakup 1) |
Keputusan: RD = 0,2517 (IC tidak mencakup 0); RR = 1,9589 (IC tidak mencakup 1); OR = 2,9738 (IC tidak mencakup 1).
Interpretasi: - RD = 0,252: Perokok memiliki risiko kanker paru yang secara absolut 25,2% lebih tinggi dari non-perokok. - RR = 1,959: Risiko kanker paru pada perokok hampir 2× lipat lebih besar dari non-perokok. - OR = 2,974: Odds kanker paru pada perokok hampir 3× lipat lebih besar dari non-perokok. Semua IC 95% tidak mencakup nilai null, mengonfirmasi asosiasi yang signifikan.
H₀: Tidak ada asosiasi antara merokok dan kanker paru vs H₁: Terdapat asosiasi (α = 0,05)
uji_2p <- prop.test(c(x_s, x_ns), c(n_s, n_ns), alternative="two.sided", correct=FALSE)
cat("z² =", round(uji_2p$statistic,4), "| df =", uji_2p$parameter,
"| p-value =", format(uji_2p$p.value, scientific=TRUE, digits=4))## z² = 19.1292 | df = 1 | p-value = 1.222e-05
Keputusan: p-value = 1,22 × 10⁻⁵ < α = 0,05 → Tolak H₀
Interpretasi: Terdapat perbedaan proporsi kanker paru yang signifikan secara statistik antara perokok dan non-perokok. Proporsi kanker pada perokok (51,4%) secara nyata lebih tinggi dari non-perokok (26,3%).
uji_chi <- chisq.test(tabel1, correct=FALSE)
cat("χ² =", round(uji_chi$statistic,4), "| df =", uji_chi$parameter,
"| p-value =", format(uji_chi$p.value, scientific=TRUE, digits=4))## χ² = 19.1292 | df = 1 | p-value = 1.222e-05
##
## Frekuensi Harapan:
## Status
## Status Merokok Cancer (+) Control (-)
## Smoker 669 669
## Non-Smoker 40 40
Keputusan: χ² = 19,129 > χ²₀,₀₅(1) = 3,841; p-value < α → Tolak H₀
Interpretasi: Nilai χ² = 19,129 jauh melampaui nilai kritis, menunjukkan perbedaan yang sangat besar antara frekuensi observasi dan harapan. Status merokok dan kanker paru tidak independen; keduanya berasosiasi secara signifikan. Semua E ≥ 5, sehingga asumsi chi-square terpenuhi.
O <- tabel1; E <- uji_chi$expected
G2 <- 2 * sum(O * log(O/E))
pval_G2 <- pchisq(G2, df=1, lower.tail=FALSE)
cat("G² =", round(G2,4), "| df = 1 | p-value =", format(pval_G2, scientific=TRUE, digits=4))## G² = 19.878 | df = 1 | p-value = 8.254e-06
Keputusan: G² = 19,878; p-value < α → Tolak H₀
Interpretasi: Uji likelihood ratio menghasilkan G² = 19,878, sedikit lebih besar dari χ² Pearson (19,129). Keduanya memberikan kesimpulan yang sama. Perbedaan kecil ini wajar dan tidak mengubah interpretasi substansial. Asosiasi merokok–kanker paru dikonfirmasi oleh pendekatan maximum likelihood.
uji_fisher <- fisher.test(tabel1)
cat("OR (exact) =", round(uji_fisher$estimate,4),
"| IC 95% = [", round(uji_fisher$conf.int[1],4), ";", round(uji_fisher$conf.int[2],4), "]",
"| p-value =", format(uji_fisher$p.value, scientific=TRUE, digits=4))## OR (exact) = 2.9716 | IC 95% = [ 1.7556 ; 5.2107 ] | p-value = 1.476e-05
Keputusan: p-value = 2,14 × 10⁻⁵ < α → Tolak H₀
Interpretasi: Fisher exact test mengonfirmasi adanya asosiasi yang signifikan menggunakan distribusi eksak (hipergeometrik), tanpa asumsi asimtotik. Konsistensi dengan metode asimtotik menunjukkan bahwa temuan ini robust terhadap pilihan metode.
data.frame(
Metode = c("Uji Dua Proporsi","Chi-Square Pearson","Likelihood Ratio (G²)","Fisher Exact"),
Statistik = c("z²","χ²","G²","OR exact"),
Nilai = c(19.129, 19.129, 19.878, 2.970),
df = c(1,1,1,NA),
pvalue = c("1,22×10⁻⁵","1,22×10⁻⁵","8,22×10⁻⁶","2,14×10⁻⁵"),
Keputusan = rep("Tolak H₀", 4)
) %>%
kable(caption="Tabel 4.1.3 Ringkasan Keempat Uji Hipotesis",
col.names=c("Metode Uji","Statistik","Nilai","df","p-value","Keputusan"),
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered","hover"), full_width=FALSE)| Metode Uji | Statistik | Nilai | df | p-value | Keputusan |
|---|---|---|---|---|---|
| Uji Dua Proporsi | z² | 19.129 | 1 | 1,22×10⁻⁵ | Tolak H₀ |
| Chi-Square Pearson | χ² | 19.129 | 1 | 1,22×10⁻⁵ | Tolak H₀ |
| Likelihood Ratio (G²) | G² | 19.878 | 1 | 8,22×10⁻⁶ | Tolak H₀ |
| Fisher Exact | OR exact | 2.970 | NA | 2,14×10⁻⁵ | Tolak H₀ |
Interpretasi Komparatif: Keempat uji konsisten menolak H₀. Uji dua proporsi dan chi-square identik (z² = χ²). G² sedikit berbeda karena pendekatan MLE. Fisher exact lebih konservatif namun tetap mengonfirmasi. Konsistensi ini menunjukkan asosiasi yang robust terhadap pilihan metode.
mosaic(tabel1, shade = TRUE, legend = TRUE,
main = "(a) Mosaic Plot",
labeling_args = list(gp_labels = gpar(fontsize = 10)))Gambar 1a. Mosaic Plot
par(mfrow = c(1, 2), mar = c(4, 4, 3.5, 1))
# (b) Bar chart proporsi
bp <- barplot(c(p1, p2),
names.arg = c("Smoker", "Non-Smoker"),
col = c("#C0392B","#2980B9"), ylim = c(0, 0.7),
ylab = "Proporsi Kanker Paru", main = "(b) Proporsi Kanker Paru",
border = "white", las = 1)
text(bp, c(p1,p2)+0.03,
labels = paste0(round(c(p1,p2)*100,1),"%"), font=2, cex=1.1)
# (c) Forest plot
plot(NA, xlim=c(-0.2,5.5), ylim=c(0.5,3.5),
xlab="Estimasi", ylab="", yaxt="n",
main="(c) Forest Plot Ukuran Asosiasi", bty="l")
axis(2, at=1:3, labels=c("RD","RR","OR"), las=1)
abline(v=c(0,1), lty=2, col="gray60")
cols <- c("#27AE60","#E67E22","#C0392B")
est <- c(RD, RR, OR)
lbs <- c(RD_lb, RR_lb, OR_lb)
ubs <- c(RD_ub, RR_ub, OR_ub)
for(i in 1:3){
segments(lbs[i],i,ubs[i],i,lwd=2.5,col=cols[i])
points(est[i],i,pch=18,cex=1.8,col=cols[i])
text(est[i],i+0.22,round(est[i],3),cex=0.85,col=cols[i],font=2)
}Gambar 1b-c. Proporsi dan Forest Plot
uji_chi2 <- chisq.test(tabel2, correct=FALSE)
round(uji_chi2$expected, 2) %>%
kable(caption="Tabel 4.2.1 Frekuensi Harapan (Eᵢⱼ)", align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered"), full_width=FALSE)Verifikasi: Semua Eᵢⱼ > 5 → asumsi chi-square terpenuhi ✓
cat("χ² =", round(uji_chi2$statistic,4), "| df =", uji_chi2$parameter,
"| p-value =", round(uji_chi2$p.value, 5))## χ² = 12.5693 | df = 2 | p-value = 0.00186
G2_k2 <- 2 * sum(tabel2 * log(tabel2/uji_chi2$expected))
pval_G2_k2 <- pchisq(G2_k2, df=2, lower.tail=FALSE)
cat("\nG² =", round(G2_k2,4), "| df = 2 | p-value =", round(pval_G2_k2, 5))##
## G² = 12.6009 | df = 2 | p-value = 0.00184
Keputusan: χ² = 12,569 > χ²₀,₀₅(2) = 5,991; p-value = 0,00186 < α → Tolak H₀
Interpretasi: Terdapat cukup bukti statistik bahwa gender dan identifikasi partai politik tidak independen. Distribusi afiliasi partai berbeda secara signifikan antara perempuan dan laki-laki. G² = 12,601 mengonfirmasi kesimpulan ini.
# Standardized residual
std_res <- round(uji_chi2$stdres, 4)
pear_res <- round(uji_chi2$residuals, 4)
data.frame(
Sel = c("Female–Democrat","Female–Republican","Female–Independent",
"Male–Democrat","Male–Republican","Male–Independent"),
O = as.vector(t(tabel2)),
E = round(as.vector(t(uji_chi2$expected)), 2),
`O-E` = round(as.vector(t(tabel2-uji_chi2$expected)), 2),
Pearson = as.vector(t(pear_res)),
Std_Res = as.vector(t(std_res)),
Ket = c("Sig. (+)","Sig. (-)","Tidak Sig.",
"Sig. (-)","Sig. (+)","Tidak Sig.")
) %>%
kable(caption="Tabel 4.2.3 Residual Pearson dan Standardized Residual",
col.names=c("Sel","Oᵢⱼ","Eᵢⱼ","Oᵢⱼ−Eᵢⱼ","Res.Pearson","Std.Residual","Keterangan"),
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered"), full_width=FALSE) %>%
row_spec(c(1,4), background="#fde8e8") %>%
row_spec(c(2,4), background="#e8eefa") %>%
row_spec(c(1,5), bold=TRUE) %>%
row_spec(c(2,4), bold=TRUE)| Sel | Oᵢⱼ | Eᵢⱼ | Oᵢⱼ−Eᵢⱼ | Res.Pearson | Std.Residual | Keterangan |
|---|---|---|---|---|---|---|
| Female–Democrat | 495 | 456.95 | 38.05 | 1.7801 | 3.2724 | Sig. (+) |
| Female–Republican | 272 | 297.43 | -25.43 | -1.4747 | -2.4986 | Sig. (-) |
| Female–Independent | 590 | 602.62 | -12.62 | -0.5140 | -1.0322 | Tidak Sig. |
| Male–Democrat | 330 | 368.05 | -38.05 | -1.9834 | -3.2724 | Sig. (-) |
| Male–Republican | 265 | 239.57 | 25.43 | 1.6431 | 2.4986 | Sig. (+) |
| Male–Independent | 498 | 485.38 | 12.62 | 0.5728 | 1.0322 | Tidak Sig. |
Keputusan: Sel signifikan (|d| > 1,96): Female–Democrat (+3,27), Female–Republican (−2,50), Male–Democrat (−3,27), Male–Republican (+2,50). Sel Independent tidak signifikan.
Interpretasi: - Female–Democrat (d = +3,27): Perempuan lebih banyak mengidentifikasi sebagai Demokrat dari yang diharapkan. - Female–Republican (d = −2,50): Perempuan lebih sedikit mengidentifikasi sebagai Republikan. - Male–Democrat (d = −3,27): Laki-laki lebih sedikit mengidentifikasi sebagai Demokrat. - Male–Republican (d = +2,50): Laki-laki lebih banyak mengidentifikasi sebagai Republikan. - Independent: Tidak ada perbedaan gender yang signifikan (|d| = 1,03).
Terdapat gender gap yang jelas: perempuan condong ke Demokrat, laki-laki condong ke Republikan.
tabel_p1 <- tabel2[, c("Democrat","Republican")]
chi_p1 <- chisq.test(tabel_p1, correct=FALSE)
G2_p1 <- 2*sum(tabel_p1*log(tabel_p1/chi_p1$expected))
cat("χ² =", round(chi_p1$statistic,4), "| G² =", round(G2_p1,4),
"| df = 1 | p-value =", format(chi_p1$p.value, digits=4))## χ² = 11.5545 | G² = 11.5357 | df = 1 | p-value = 0.0006758
Keputusan: p-value = 6,76 × 10⁻⁴ < α → Tolak H₀
Interpretasi: Terdapat perbedaan signifikan antara perempuan dan laki-laki dalam memilih antara Demokrat vs Republikan. Perempuan lebih memilih Demokrat (64,5% dari yang memilih Dem/Rep), sedangkan laki-laki lebih memilih Republikan.
tabel_p2 <- cbind("Dem+Rep"=rowSums(tabel2[,1:2]), "Independent"=tabel2[,"Independent"])
chi_p2 <- chisq.test(tabel_p2, correct=FALSE)
G2_p2 <- 2*sum(tabel_p2*log(tabel_p2/chi_p2$expected))
cat("χ² =", round(chi_p2$statistic,4), "| G² =", round(G2_p2,4),
"| df = 1 | p-value =", round(chi_p2$p.value, 4))## χ² = 1.0654 | G² = 1.0652 | df = 1 | p-value = 0.302
Keputusan: p-value = 0,302 > α → Gagal Tolak H₀
Interpretasi: Tidak terdapat perbedaan signifikan antara perempuan dan laki-laki dalam kecenderungan memilih Independent vs partai besar. Proporsi yang memilih Independent serupa antara perempuan (43,5%) dan laki-laki (45,6%).
chi2_total <- uji_chi2$statistic
G2_total <- G2_k2
data.frame(
Komponen = c("Keseluruhan (2×3)","Partisi 1: Dem vs Rep",
"Partisi 2: (Dem+Rep) vs Ind","Total Partisi (P1+P2)"),
chi2 = round(c(chi2_total, chi_p1$statistic, chi_p2$statistic,
chi_p1$statistic+chi_p2$statistic), 4),
G2 = round(c(G2_total, G2_p1, G2_p2, G2_p1+G2_p2), 4),
df = c(2,1,1,2),
pval = c("0,00186","6,76×10⁻⁴","0,302","—"),
Keputusan = c("Tolak H₀","Tolak H₀","Gagal Tolak H₀","—")
) %>%
kable(caption="Tabel 4.2.4.3 Dekomposisi Additif Chi-Square dan G²",
col.names=c("Komponen","χ²","G²","df","p-value","Keputusan"),
align="c") %>%
kable_styling(bootstrap_options=c("striped","bordered"), full_width=FALSE) %>%
row_spec(1, bold=TRUE, background="#d6eaf8") %>%
row_spec(4, bold=TRUE, background="#d5f5e3")| Komponen | χ² | G² | df | p-value | Keputusan |
|---|---|---|---|---|---|
| Keseluruhan (2×3) | 12.5693 | 12.6009 | 2 | 0,00186 | Tolak H₀ |
| Partisi 1: Dem vs Rep | 11.5545 | 11.5357 | 1 | 6,76×10⁻⁴ | Tolak H₀ |
| Partisi 2: (Dem+Rep) vs Ind | 1.0654 | 1.0652 | 1 | 0,302 | Gagal Tolak H₀ |
| Total Partisi (P1+P2) | 12.6200 | 12.6009 | 2 | — | — |
Interpretasi Partisi: Total χ² partisi (12,620 ≈ 12,569) dan G² (12,601 = 12,601) memvalidasi dekomposisi additif yang valid. Asosiasi gender–partai sepenuhnya bersumber dari perbedaan dalam memilih antara Demokrat vs Republikan, bukan dari kecenderungan memilih Independent.
kontr <- (tabel2 - uji_chi2$expected)^2 / uji_chi2$expected
kontr_pct <- kontr / chi2_total * 100
data.frame(
Gender = c("Female","Female","Female","Male","Male","Male"),
Partai = c("Democrat","Republican","Independent",
"Democrat","Republican","Independent"),
O = as.vector(t(tabel2)),
E = round(as.vector(t(uji_chi2$expected)),2),
Kontrib = round(as.vector(t(kontr)),4),
Persen = paste0(round(as.vector(t(kontr_pct)),2),"%")
) |>
dplyr::arrange(desc(Kontrib)) |>
kable(caption="Tabel 4.2.5 Kontribusi Chi-Square per Sel (Diurutkan Menurun)",
col.names=c("Gender","Partai","Oij","Eij","Kontribusi chi2","% dari Total"),
align="c") |>
kable_styling(bootstrap_options=c("striped","bordered","hover"), full_width=FALSE) |>
row_spec(1:4, background="#FADBD8")| Gender | Partai | Oij | Eij | Kontribusi chi2 | % dari Total |
|---|---|---|---|---|---|
| Male | Democrat | 330 | 368.05 | 3.9339 | 31.3% |
| Female | Democrat | 495 | 456.95 | 3.1686 | 25.21% |
| Male | Republican | 265 | 239.57 | 2.6999 | 21.48% |
| Female | Republican | 272 | 297.43 | 2.1746 | 17.3% |
| Male | Independent | 498 | 485.38 | 0.3281 | 2.61% |
| Female | Independent | 590 | 602.62 | 0.2642 | 2.1% |
Interpretasi: Kategori Democrat berkontribusi terbesar dengan 56.5% dari total \(\chi^2\), diikuti Republican (38.8%). Independent hanya berkontribusi 4.7%, mengonfirmasi bahwa asosiasi gender–partai terpusat pada perbedaan preferensi Democrat–Republican.
par(mfrow=c(2,2), mar=c(4,4,3.5,1.5))
# (a) Mosaic plot
mosaic(tabel2, shade=TRUE, legend=TRUE,
main="(a) Mosaic Plot: Gender vs Partai",
labeling_args=list(gp_labels=gpar(fontsize=9)))Gambar 2. Visualisasi Kasus 2
# (b) Grouped bar proporsi
props2 <- prop.table(tabel2, margin=1)
barplot(t(props2), beside=TRUE,
col=c("#2980B9","#C0392B","#27AE60"), ylim=c(0,0.56),
legend.text=colnames(tabel2),
args.legend=list(x="topright",cex=0.85,bty="n"),
ylab="Proporsi", main="(b) Proporsi Afiliasi per Gender",
names.arg=c("Female","Male"), border="white", las=1)
# (c) Heatmap standardized residuals
std_mat <- uji_chi2$stdres
cr <- colorRampPalette(c("#2980B9","white","#C0392B"))(100)
bk <- seq(-4,4,length.out=101)
image(1:3, 1:2, t(std_mat)[,2:1], col=cr, breaks=bk,
xlab="", ylab="", main="(c) Heatmap Standardized Residual",
xaxt="n", yaxt="n")
axis(1,at=1:3,labels=colnames(std_mat),cex.axis=0.95)
axis(2,at=1:2,labels=rev(rownames(std_mat)),cex.axis=0.95,las=1)
for(i in 1:3) for(j in 1:2){
v <- std_mat[3-j,i]
text(i,j,round(v,2),
col=ifelse(abs(v)>2,"white","black"),font=2,cex=1.1)
}
# (d) Bar kontribusi
kv <- sort(as.vector(t(kontr)),decreasing=TRUE)
nm <- c("M-Dem","F-Dem","M-Rep","F-Rep","M-Ind","F-Ind")[
order(as.vector(t(kontr)),decreasing=TRUE)]
barplot(kv, names.arg=nm,
col=c(rep("#C0392B",4),rep("#95A5A6",2)),
ylab="Kontribusi chi2", main="(d) Kontribusi Chi-Square per Sel",
border="white", las=1)
abline(h=0)
text(seq(0.7,by=1.2,length.out=6), kv+0.07,
paste0(round(kv/chi2_total*100,1),"%"), cex=0.85, font=2)
par(mfrow=c(1,1))Gambar 2. Visualisasi Kasus 2
Berdasarkan seluruh analisis inferensi yang dilakukan:
✅ Kesimpulan Akhir: Terdapat asosiasi yang signifikan secara statistik antara kebiasaan merokok dan kejadian kanker paru. Temuan ini robust terhadap pilihan metode uji dan konsisten dengan pengetahuan epidemiologis mengenai rokok sebagai faktor risiko utama kanker paru.
Berdasarkan seluruh analisis inferensi yang dilakukan:
✅ Kesimpulan Akhir: Terdapat gender gap yang signifikan dalam afiliasi partai: perempuan lebih condong ke Demokrat, laki-laki lebih condong ke Republikan. Perbedaan ini tidak berlaku untuk kategori Independent. Asosiasi sepenuhnya berasal dari pilihan antara Demokrat dan Republikan.