📌 Informasi Tugas
Laporan ini disusun sebagai penyelesaian Tugas-tugas Mata Kuliah Analisis Data Kategori yang dibimbing oleh Prof. I Gede Nyoman Mindra Jaya, Ph.D. Tugas ini mencakup dua kasus analisis inferensi tabel kontingensi dua arah menggunakan perangkat lunak R.
Inferensi pada tabel kontingensi dua arah merupakan salah satu metode statistik yang digunakan untuk menguji dan mengukur hubungan (asosiasi) antara dua variabel kategori. Dalam laporan ini, dibahas dua kasus utama:
# Load semua paket yang dibutuhkan
library(knitr) # tabel rapi
library(kableExtra) # styling tabel tambahan
library(epitools) # RR, OR + CI
library(vcd) # mosaic plot, residual
library(ggplot2) # visualisasi
library(scales) # format axis
library(dplyr) # manipulasi data📌 Definisi Formal
Tabel kontingensi (contingency table) adalah suatu tabel klasifikasi silang (cross-tabulation) dari dua atau lebih variabel yang bersifat kategori. Tabel ini menampilkan frekuensi kemunculan setiap kombinasi kategori sehingga memungkinkan peneliti untuk melihat pola hubungan secara ringkas dan sistematis.
Penamaan tabel kontingensi didasarkan pada jumlah variabel dan kategori: 2 variabel → tabel dua arah; jika variabel X memiliki \(I\) kategori dan Y memiliki \(J\) kategori → Tabel I × J. Dalam laporan ini mencakup tabel 2×2 (Kasus 1) dan 2×3 (Kasus 2).
Untuk tabel kontingensi 2×2 dengan variabel \(X\) (baris, 2 kategori) dan \(Y\) (kolom, 2 kategori):
\[ \begin{array}{c|cc|c} X \backslash Y & y_1 & y_2 & \text{Total} \\ \hline x_1 & n_{11} & n_{12} & n_{1.} \\ x_2 & n_{21} & n_{22} & n_{2.} \\ \hline \text{Total} & n_{.1} & n_{.2} & n_{..} \end{array} \]
| Notasi | Keterangan |
|---|---|
| \(n_{ij}\) | Frekuensi sel baris ke-\(i\), kolom ke-\(j\) |
| \(n_{i.} = \sum_j n_{ij}\) | Total baris ke-\(i\) |
| \(n_{.j} = \sum_i n_{ij}\) | Total kolom ke-\(j\) |
| \(n_{..} = \sum_i \sum_j n_{ij}\) | Total keseluruhan |
| \(\pi_{ij} = n_{ij}/n_{..}\) | Peluang bersama (joint probability) |
| \(\pi_{j \mid i} = n_{ij}/n_{i.}\) | Peluang bersyarat \(Y=j\) given \(X=i\) |
Rumus Distribusi Peluang
Bersama (Joint): \(\pi_{ij} = P(X=i, Y=j) = \dfrac{n_{ij}}{n_{..}}\)
Marginal: \(\pi_{i.} = \dfrac{n_{i.}}{n_{..}}\), \(\quad \pi_{.j} = \dfrac{n_{.j}}{n_{..}}\)
Bersyarat (Conditional): \(\pi_{j \mid i} = P(Y=j \mid X=i) = \dfrac{n_{ij}}{n_{i.}}\)
Independensi: \(X \perp Y \iff \pi_{ij} = \pi_{i.} \times \pi_{.j}\)
Rumus Risk Difference
\[RD = \pi_{1|1} - \pi_{1|2} = \frac{n_{11}}{n_{1.}} - \frac{n_{21}}{n_{2.}}\]
Interval Kepercayaan \((1-\alpha)\)%: \[RD \pm z_{\alpha/2} \sqrt{\frac{\hat{\pi}_{1|1}(1-\hat{\pi}_{1|1})}{n_{1.}} + \frac{\hat{\pi}_{1|2}(1-\hat{\pi}_{1|2})}{n_{2.}}}\]
Rumus Relative Risk
\[RR = \frac{\pi_{1|1}}{\pi_{1|2}} = \frac{n_{11}/n_{1.}}{n_{21}/n_{2.}}\]
Interval Kepercayaan (via log-transformasi): \[\exp\!\left(\ln RR \pm z_{\alpha/2} \cdot SE_{\ln RR}\right), \quad SE_{\ln RR} = \sqrt{\frac{1-\hat{\pi}_{1|1}}{n_{11}} + \frac{1-\hat{\pi}_{1|2}}{n_{21}}}\]
Rumus Odds Ratio
\[OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}}\]
Interval Kepercayaan (metode Woolf): \[\exp\!\left(\ln OR \pm z_{\alpha/2} \cdot SE_{\ln OR}\right), \quad SE_{\ln OR} = \sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}}\]
📋 Soal 1 — Penyusunan Tabel
Susun kembali tabel kontingensi 2×2 tentang hubungan kebiasaan merokok dan kanker paru.
tabel1 <- matrix(
c(688, 650,
21, 59),
nrow = 2,
byrow = TRUE
)
rownames(tabel1) <- c("Smoker", "Non-Smoker")
colnames(tabel1) <- c("Cancer (+)", "Control (-)")
addmargins(tabel1)#> Cancer (+) Control (-) Sum
#> Smoker 688 650 1338
#> Non-Smoker 21 59 80
#> Sum 709 709 1418
| Status Merokok | Cancer (+) | Control (-) | Total |
|---|---|---|---|
| Smoker | 688 | 650 | 1338 |
| Non-Smoker | 21 | 59 | 80 |
| Total | 709 | 709 | 1418 |
📋 Soal 2 — Estimasi Titik
Hitung estimasi titik proporsi kejadian kanker paru pada kelompok Smoker dan Non-Smoker.
📌 Konsep
Estimasi titik proporsi merupakan proporsi sampel \(\hat{\pi}_{1|i}\) yang menjadi penduga tak bias untuk parameter populasi \(\pi_{1|i}\): \[\hat{\pi}_{1|1} = \frac{n_{11}}{n_{1.}}, \qquad \hat{\pi}_{1|2} = \frac{n_{21}}{n_{2.}}\]
n1. <- sum(tabel1[1, ])
n2. <- sum(tabel1[2, ])
n_total <- sum(tabel1)
pi_smoker <- tabel1[1, 1] / n1.
pi_nonsmoker <- tabel1[2, 1] / n2.
cat("Smoker :", tabel1[1,1], "/", n1., "=", round(pi_smoker, 4),
"(", round(pi_smoker*100, 2), "%)\n")#> Smoker : 688 / 1338 = 0.5142 ( 51.42 %)
cat("Non-Smoker :", tabel1[2,1], "/", n2., "=", round(pi_nonsmoker, 4),
"(", round(pi_nonsmoker*100, 2), "%)\n")#> Non-Smoker : 21 / 80 = 0.2625 ( 26.25 %)
✅ Interpretasi
Proporsi kejadian kanker paru pada kelompok Smoker sebesar \(\hat{\pi}_{1|1} = 0.5142\) (51.42%), sedangkan pada kelompok Non-Smoker sebesar \(\hat{\pi}_{1|2} = 0.2625\) (26.25%). Terdapat perbedaan proporsi yang cukup besar antara kedua kelompok.
📋 Soal 3 — Interval Kepercayaan
Hitung interval kepercayaan 95% untuk proporsi masing-masing kelompok, RD, RR, dan OR.
z <- qnorm(0.975)
se_smoker <- sqrt(pi_smoker * (1 - pi_smoker) / n1.)
ci_smoker_lo <- pi_smoker - z * se_smoker
ci_smoker_hi <- pi_smoker + z * se_smoker
se_nonsmoker <- sqrt(pi_nonsmoker * (1 - pi_nonsmoker) / n2.)
ci_nonsmoker_lo <- pi_nonsmoker - z * se_nonsmoker
ci_nonsmoker_hi <- pi_nonsmoker + z * se_nonsmoker
cat("CI 95% Proporsi:\n")#> CI 95% Proporsi:
#> Smoker : [0.4874, 0.541]
cat("Non-Smoker :", paste0("[", round(ci_nonsmoker_lo, 4), ", ", round(ci_nonsmoker_hi, 4), "]"), "\n")#> Non-Smoker : [0.1661, 0.3589]
RD <- pi_smoker - pi_nonsmoker
se_RD <- sqrt(
pi_smoker * (1 - pi_smoker) / n1. +
pi_nonsmoker * (1 - pi_nonsmoker) / n2.
)
ci_RD_lo <- RD - z * se_RD
ci_RD_hi <- RD + z * se_RD
hasil_rr <- riskratio(tabel1, method = "wald", rev = "neither")
RR <- hasil_rr$measure[2, 1]
ci_RR_lo <- hasil_rr$measure[2, 2]
ci_RR_hi <- hasil_rr$measure[2, 3]
hasil_or <- fisher.test(tabel1)
OR <- hasil_or$estimate
ci_OR_lo <- hasil_or$conf.int[1]
ci_OR_hi <- hasil_or$conf.int[2]
df_ci <- data.frame(
Ukuran = c("RD (Risk Difference)", "RR (Relative Risk)", "OR (Odds Ratio)"),
Estimasi = round(c(RD, RR, OR), 4),
`CI 95% Bawah` = round(c(ci_RD_lo, ci_RR_lo, ci_OR_lo), 4),
`CI 95% Atas` = round(c(ci_RD_hi, ci_RR_hi, ci_OR_hi), 4),
check.names = FALSE
)
kable(df_ci,
caption = "Tabel 1.2 — Ringkasan Estimasi Titik dan Interval Kepercayaan 95%",
align = "c"
)| Ukuran | Estimasi | CI 95% Bawah | CI 95% Atas |
|---|---|---|---|
| RD (Risk Difference) | 0.2517 | 0.1516 | 0.3518 |
| RR (Relative Risk) | 1.5181 | 1.3173 | 1.7495 |
| OR (Odds Ratio) | 2.9716 | 1.7556 | 5.2107 |
✅ Interpretasi
📋 Soal 4 — Uji Dua Proporsi
Lakukan uji dua proporsi untuk menguji apakah proporsi kanker paru berbeda antara Smoker dan Non-Smoker.
Hipotesis dan Statistik Uji
Hipotesis: \[H_0: \pi_{1|1} = \pi_{1|2} \quad \text{vs} \quad H_1: \pi_{1|1} \neq \pi_{1|2}\]
Statistik Uji (proporsi gabungan): \[\hat{\pi}_p = \frac{n_{11} + n_{21}}{n_{..}}, \quad z = \frac{\hat{\pi}_{1|1} - \hat{\pi}_{1|2}}{\sqrt{\hat{\pi}_p(1-\hat{\pi}_p)\left(\frac{1}{n_{1.}} + \frac{1}{n_{2.}}\right)}} \sim N(0,1)\]
hasil_prop <- prop.test(
x = c(tabel1[1,1], tabel1[2,1]),
n = c(n1., n2.),
correct = FALSE,
alternative = "two.sided"
)
cat("Proporsi Smoker :", round(pi_smoker, 4), "\n")#> Proporsi Smoker : 0.5142
#> Proporsi Non-Smoker : 0.2625
#> Statistik chi2 (=z2): 19.1292
#> Nilai z : 4.3737
#> p-value : 1.2e-05
#> Keputusan : TOLAK H0
✅ Interpretasi
Dengan \(p\text{-value} \approx 1.22e-05\) yang jauh lebih kecil dari \(\alpha = 0{,}05\), kita menolak \(H_0\). Terdapat cukup bukti statistik bahwa proporsi kejadian kanker paru pada kelompok Smoker berbeda secara signifikan dari kelompok Non-Smoker.
📋 Soal 5 — Uji Chi-Square
Lakukan uji chi-square independensi untuk menguji apakah terdapat asosiasi antara status merokok dan kanker paru.
Hipotesis dan Statistik Uji
Hipotesis: \[H_0: \pi_{ij} = \pi_{i.} \times \pi_{.j} \text{ (independen)} \quad \text{vs} \quad H_1: \text{tidak independen}\]
Frekuensi harapan: \(\hat{\mu}_{ij} = \dfrac{n_{i.} \times n_{.j}}{n_{..}}\)
Statistik uji Pearson: \[X^2 = \sum_{i}\sum_{j} \frac{(n_{ij} - \hat{\mu}_{ij})^2}{\hat{\mu}_{ij}} \sim \chi^2_{(I-1)(J-1)}\]
#> Frekuensi Harapan:
#> Cancer (+) Control (-)
#> Smoker 669 669
#> Non-Smoker 40 40
kontribusi <- (tabel1 - hasil_chisq$expected)^2 / hasil_chisq$expected
cat("\nKontribusi per Sel terhadap X2:\n")#>
#> Kontribusi per Sel terhadap X2:
#> Cancer (+) Control (-)
#> Smoker 0.5396 0.5396
#> Non-Smoker 9.0250 9.0250
#>
#> X2 hitung : 19.1292
#> df : 1
#> p-value : 1.2e-05
#> Keputusan : TOLAK H0
✅ Interpretasi
Statistik uji \(X^2 = 19.1292\) dengan \(df = 1\) menghasilkan \(p\text{-value} \approx 1.22e-05\). Karena \(p < 0{,}05\), kita menolak \(H_0\). Terdapat asosiasi yang signifikan antara status merokok dan kejadian kanker paru.
📋 Soal 6 — Uji Likelihood Ratio
Lakukan uji likelihood ratio (\(G^2\)) sebagai alternatif uji chi-square.
Statistik Uji G²
\[G^2 = 2 \sum_{i}\sum_{j} n_{ij} \ln\!\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right) \sim \chi^2_{(I-1)(J-1)}\]
\(G^2\) dan \(X^2\) memiliki distribusi asimtotik yang sama, namun \(G^2\) didasarkan pada prinsip maximum likelihood.
mu_hat <- hasil_chisq$expected
G2 <- 2 * sum(tabel1 * log(tabel1 / mu_hat))
df_lr <- (nrow(tabel1) - 1) * (ncol(tabel1) - 1)
pval_lr <- pchisq(G2, df = df_lr, lower.tail = FALSE)
cat("G2 hitung :", round(G2, 4), "\n")#> G2 hitung : 19.878
#> df : 1
#> p-value : 8.3e-06
#> Keputusan : TOLAK H0
#>
#> Perbandingan: X2 = 19.1292 , G2 = 19.878
✅ Interpretasi
\(G^2 = 19.878\) dengan \(df = 1\) menghasilkan \(p\text{-value} \approx 8.25e-06\). Keputusan konsisten dengan uji chi-square: tolak \(H_0\). Nilai \(G^2\) (19.878) sangat dekat dengan \(X^2\) (19.1292), sesuai teori asimtotik yang menyatakan kedua statistik setara untuk sampel besar.
📋 Soal 7 — Fisher Exact Test
Lakukan Fisher Exact Test dan bandingkan hasilnya dengan uji sebelumnya.
Ide Fisher Exact Test
Fisher Exact Test menghitung probabilitas tepat (exact p-value) berdasarkan distribusi hipergeometrik, tanpa asumsi sampel besar. Dengan baris dan kolom marginal tetap:
\[P(\text{tabel} \mid \text{marginal tetap}) = \frac{\binom{n_{1.}}{n_{11}} \binom{n_{2.}}{n_{21}}}{\binom{n_{..}}{n_{.1}}}\]
p-value adalah jumlah peluang semua tabel yang sama ekstrem atau lebih ekstrem dari yang diamati.
hasil_fisher <- fisher.test(tabel1, alternative = "two.sided")
cat("OR estimasi :", round(hasil_fisher$estimate, 4), "\n")#> OR estimasi : 2.9716
cat("95% CI OR :", paste0("[", round(hasil_fisher$conf.int[1], 4), ", ", round(hasil_fisher$conf.int[2], 4), "]"), "\n")#> 95% CI OR : [1.7556, 5.2107]
#> p-value : 1.5e-05
#> Keputusan : TOLAK H0
✅ Interpretasi
Fisher Exact Test memberikan \(p\text{-value} = 1.48e-05\) dan OR = 2.9716 dengan 95% CI = [1.7556, 5.2107]. Karena CI tidak mencakup 1 dan \(p < 0{,}05\), kita menolak \(H_0\).
📋 Soal 8 — Perbandingan Keempat Uji
Bandingkan hasil uji dua proporsi, chi-square, likelihood ratio, dan Fisher exact test dari sisi hipotesis, statistik uji, p-value, keputusan, dan interpretasi substantif.
| Aspek | Uji 2 Proporsi | Chi-Square | Likelihood Ratio | Fisher Exact |
|---|---|---|---|---|
| Hipotesis H0 | pi1|1 = pi1|2 | Independensi | Independensi | OR = 1 (independen) |
| Statistik Uji | z (atau chi2 = z2) | X2 Pearson | G2 | Distribusi Hipergeometrik |
| Nilai Statistik | chi2 = 19.1292 | 19.1292 | 19.878 | OR = 2.9716 |
| Distribusi | N(0,1) atau chi2(1) | chi2(1) | chi2(1) | Hipergeometrik (exact) |
| p-value | 1.22e-05 | 1.22e-05 | 8.25e-06 | 1.48e-05 |
| Keputusan (a=0,05) | Tolak H0 | Tolak H0 | Tolak H0 | Tolak H0 |
💡 Diskusi Perbandingan Uji
Keempat uji memberikan kesimpulan yang konsisten: terdapat asosiasi signifikan antara merokok dan kanker paru. Perbedaannya terletak pada:
• Uji 2 Proporsi dan Chi-Square secara matematis ekuivalen (\(X^2 = z^2\)) — keduanya menggunakan pendekatan frekuensi harapan yang sama.
• Likelihood Ratio (\(G^2\)) memberikan nilai yang sangat dekat dengan \(X^2\) (19.878 vs 19.1292) karena sampel besar (\(n=1418\)) — kedua statistik konvergen secara asimtotik.
• Fisher Exact Test tidak memerlukan asumsi sampel besar dan memberikan nilai exact. Untuk data besar ini hasilnya konsisten dengan ketiga uji lainnya.
par(mfrow = c(1, 3), mar = c(4, 4, 3, 1), family = "sans")
barplot(
height = c(pi_smoker, pi_nonsmoker),
names.arg = c("Smoker\n(51.42%)", "Non-Smoker\n(26.25%)"),
col = c("#f43f5e", "#0d9488"),
ylim = c(0, 0.75),
main = "Proporsi Kanker Paru",
ylab = "P(Cancer | Status Merokok)",
border = NA, las = 1, cex.main = 1
)
abline(h = 0, col = "gray70")
mosaicplot(
tabel1,
color = c("#f43f5e", "#0d9488"),
main = "Mosaic Plot",
xlab = "Status Merokok",
ylab = "Diagnosis",
cex.axis = 0.85,
border = "white"
)
plot(
x = OR, y = 1,
pch = 15, col = "#7c3aed", cex = 2.5,
xlim = c(0, 8), ylim = c(0.5, 1.5),
yaxt = "n",
main = sprintf("Odds Ratio + 95%% CI\nOR = %.4f", OR),
xlab = "Odds Ratio", ylab = "",
las = 1, cex.main = 1
)
arrows(ci_OR_lo, 1, ci_OR_hi, 1,
angle = 90, code = 3, length = 0.1,
col = "#7c3aed", lwd = 2.5)
abline(v = 1, col = "#f43f5e", lty = 2, lwd = 1.5)
text(1.3, 1.35, "H0: OR=1", col = "#f43f5e", cex = 0.75)
text(OR, 0.7,
sprintf("[%.2f, %.2f]", ci_OR_lo, ci_OR_hi),
col = "#7c3aed", cex = 0.8)Visualisasi Kasus 1: Proporsi, Mosaic Plot, dan Ukuran Asosiasi
📋 Soal 9 — Kesimpulan Akhir
Buat kesimpulan akhir tentang hubungan antara merokok dan kanker paru.
🎯 Kesimpulan Kasus 1
Berdasarkan seluruh analisis pada data 1418 subjek (709 kasus kanker, 709 kontrol), diperoleh kesimpulan:
1. Terdapat asosiasi positif yang kuat dan signifikan antara kebiasaan merokok dan kejadian kanker paru. Keempat metode uji hipotesis (uji dua proporsi, chi-square, likelihood ratio, dan Fisher exact test) secara konsisten menolak \(H_0\) independensi dengan \(p\text{-value}\) yang sangat kecil.
2. Besaran asosiasi: RD = 0.2517 (Smoker 25,17% lebih berisiko secara absolut), RR = 1.5181 (Smoker 1.52 kali lebih berisiko), OR = 2.9716 (odds Smoker 2.97 kali lebih besar). Ketiga ukuran konsisten menunjukkan asosiasi positif kuat.
3. Secara substantif: Temuan ini konsisten dengan bukti epidemiologi global bahwa merokok merupakan faktor risiko utama kanker paru. Perokok memiliki risiko kanker paru hampir 2 kali lipat dibanding bukan perokok dalam studi case-control ini.
📋 Soal 1 — Penyusunan Tabel
Susun kembali tabel kontingensi 2×3 tentang hubungan gender dan identifikasi partai politik.
tabel2 <- matrix(
c(495, 272, 590,
330, 265, 498),
nrow = 2,
byrow = TRUE
)
rownames(tabel2) <- c("Female", "Male")
colnames(tabel2) <- c("Democrat", "Republican", "Independent")
addmargins(tabel2)#> Democrat Republican Independent Sum
#> Female 495 272 590 1357
#> Male 330 265 498 1093
#> Sum 825 537 1088 2450
| Gender | Democrat | Republican | Independent | Total |
|---|---|---|---|---|
| Female | 495 | 272 | 590 | 1357 |
| Male | 330 | 265 | 498 | 1093 |
| Total | 825 | 537 | 1088 | 2450 |
📋 Soal 2 — Frekuensi Harapan
Hitung frekuensi harapan untuk setiap sel.
Rumus Frekuensi Harapan
\[\hat{\mu}_{ij} = \frac{n_{i.} \times n_{.j}}{n_{..}}\]
Frekuensi harapan merepresentasikan nilai yang diharapkan di setiap sel jika \(H_0\) (independensi) benar.
chisq_k2 <- chisq.test(tabel2, correct = FALSE)
mu_hat_k2 <- chisq_k2$expected
cat("Frekuensi Harapan:\n")#> Frekuensi Harapan:
#> Democrat Republican Independent
#> Female 456.949 297.4322 602.6188
#> Male 368.051 239.5678 485.3812
cat("\nMin mu_hat =", round(min(mu_hat_k2), 4), "->",
ifelse(min(mu_hat_k2) >= 5, "Syarat Cochran terpenuhi", "Gunakan Fisher/simulasi"), "\n")#>
#> Min mu_hat = 239.5678 -> Syarat Cochran terpenuhi
| Gender | Democrat | Republican | Independent | |
|---|---|---|---|---|
| Female | Female | 456.949 | 297.4322 | 602.6188 |
| Male | Male | 368.051 | 239.5678 | 485.3812 |
✅ Interpretasi
Seluruh frekuensi harapan \(\hat{\mu}_{ij} \geq 5\) (minimum = 239.57), sehingga syarat Cochran terpenuhi dan uji chi-square asimtotik dapat digunakan dengan valid.
📋 Soal 3 — Uji Chi-Square Keseluruhan
Lakukan uji chi-square independensi untuk tabel keseluruhan.
#> X2 hitung : 12.5693
#> df : 2 [(2-1)x(3-1)]
#> p-value : 0.0019
#> Keputusan : TOLAK H0
✅ Interpretasi
\(X^2 = 12.5693\) dengan \(df = 2\) menghasilkan \(p\text{-value} = 0.0019\). Karena \(p < 0{,}05\), tolak \(H_0\) — terdapat asosiasi signifikan antara gender dan identifikasi partai politik.
📋 Soal 4 — Residual Pearson
Hitung dan interpretasikan residual Pearson atau standardized residual untuk mengidentifikasi sel yang paling berkontribusi.
Rumus Residual
Residual Pearson: \(r_{ij} = \dfrac{n_{ij} - \hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}}}\)
Standardized Residual (Adjusted): \(d_{ij} = \dfrac{n_{ij} - \hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}(1 - \hat{p}_{i.})(1 - \hat{p}_{.j})}}\)
Aturan: \(|d_{ij}| > 2\) → sel berkontribusi signifikan; \(|d_{ij}| > 3\) → sangat signifikan.
#> Residual Pearson (rij):
#> Democrat Republican Independent
#> Female 1.7801 -1.4747 -0.5140
#> Male -1.9834 1.6431 0.5728
#>
#> Standardized Residual (dij):
#> Democrat Republican Independent
#> Female 3.2724 -2.4986 -1.0322
#> Male -3.2724 2.4986 1.0322
#>
#> Kontribusi Sel terhadap X2:
#> Democrat Republican Independent
#> Female 3.1686 2.1746 0.2642
#> Male 3.9339 2.6999 0.3281
#>
#> Total X2 = 12.5693 (verifikasi: 12.5693 )
res_df <- as.data.frame(as.table(round(res_std, 3)))
names(res_df) <- c("Gender", "Partai", "Residual")
ggplot(res_df, aes(x = Partai, y = Gender, fill = Residual)) +
geom_tile(color = "white", linewidth = 1.5) +
geom_text(aes(label = sprintf("%.3f", Residual)),
size = 5, fontface = "bold",
color = ifelse(abs(res_df$Residual) > 1.5, "white", "#1e293b")) +
scale_fill_gradient2(
low = "#f43f5e",
mid = "#f8fafc",
high = "#0d9488",
midpoint = 0,
limits = c(-4, 4),
name = "Std. Residual"
) +
labs(
title = "Standardized Residual per Sel",
subtitle = "Merah = lebih rendah dari harapan | Hijau = lebih tinggi dari harapan",
x = "Identifikasi Partai Politik",
y = "Gender"
) +
theme_minimal(base_family = "sans") +
theme(
plot.title = element_text(face = "bold", size = 14, color = "#1a2744"),
plot.subtitle = element_text(size = 11, color = "#64748b"),
axis.text = element_text(size = 12, color = "#334155"),
panel.grid = element_blank()
)Heatmap Standardized Residual — Kasus 2
✅ Interpretasi Residual
Dari standardized residual: - Female–Democrat (\(d = 3.272\)): Female lebih banyak dari yang diharapkan mengidentifikasi sebagai Democrat (signifikan, \(|d|>2\)). - Female–Republican (\(d = -2.499\)): Female lebih sedikit dari yang diharapkan mengidentifikasi sebagai Republican (signifikan). - Male–Democrat (\(d = -3.272\)): Male lebih sedikit dari yang diharapkan mengidentifikasi sebagai Democrat. - Male–Republican (\(d = 2.499\)): Male lebih banyak dari yang diharapkan mengidentifikasi sebagai Republican. - Independent relatif lebih kecil residualnya, menandakan distribusinya lebih seimbang antar gender.
📋 Soal 5 — Partisi Chi-Square
Lakukan partisi chi-square untuk (a) Democrat vs Republican, dan (b) (Democrat + Republican) vs Independent.
Konsep Partisi Chi-Square
Untuk tabel \(I \times J\), chi-square total dengan \(df = (I-1)(J-1)\) dapat dipartisi menjadi komponen-komponen yang aditif: \[X^2_{\text{total}} = X^2_{\text{partisi 1}} + X^2_{\text{partisi 2}} + \cdots\] \[df_{\text{total}} = df_1 + df_2 + \cdots\]
Dengan \(df_1 + df_2 = (I-1)(J-1) = 2\) untuk tabel 2×3.
tabel_DR <- tabel2[, 1:2]
chisq_DR <- chisq.test(tabel_DR, correct = FALSE)
cat("PARTISI 1: Democrat vs Republican\n")#> PARTISI 1: Democrat vs Republican
#> Democrat Republican Sum
#> Female 495 272 767
#> Male 330 265 595
#> Sum 825 537 1362
cat("\nX2_1 =", round(chisq_DR$statistic, 4), ", df =", chisq_DR$parameter,
", p-value =", round(chisq_DR$p.value, 4), "\n")#>
#> X2_1 = 11.5545 , df = 1 , p-value = 7e-04
tabel_DRI <- cbind(rowSums(tabel2[, 1:2]), tabel2[, 3])
rownames(tabel_DRI) <- rownames(tabel2)
colnames(tabel_DRI) <- c("Dem+Rep", "Independent")
chisq_DRI <- chisq.test(tabel_DRI, correct = FALSE)
cat("\nPARTISI 2: (Dem+Rep) vs Independent\n")#>
#> PARTISI 2: (Dem+Rep) vs Independent
#> Dem+Rep Independent Sum
#> Female 767 590 1357
#> Male 595 498 1093
#> Sum 1362 1088 2450
cat("\nX2_2 =", round(chisq_DRI$statistic, 4), ", df =", chisq_DRI$parameter,
", p-value =", round(chisq_DRI$p.value, 4), "\n")#>
#> X2_2 = 1.0654 , df = 1 , p-value = 0.302
#>
#> Ringkasan Partisi:
#> X2_1 (Dem vs Rep) : 11.5545 (df = 1 )
#> X2_2 (Dem+Rep vs Ind) : 1.0654 (df = 1 )
cat("Total Partisi :", round(chisq_DR$statistic + chisq_DRI$statistic, 4),
" (df =", chisq_DR$parameter + chisq_DRI$parameter, ")\n")#> Total Partisi : 12.62 (df = 2 )
#> X2 Keseluruhan : 12.5693 (df = 2 )
📋 Soal 6 — Perbandingan Partisi vs Keseluruhan
Bandingkan hasil partisi dengan hasil uji chi-square keseluruhan.
| Perbandingan | X2 | df | p-value | Keputusan |
|---|---|---|---|---|
| Partisi 1: Democrat vs Republican | 11.5545 | 1 | 0.0007 | Tolak H0 |
| Partisi 2: (Dem+Rep) vs Independent | 1.0654 | 1 | 0.3020 | Gagal Tolak |
| Total Partisi | 12.6200 | 2 | NA | - |
| Chi-Square Keseluruhan (2x3) | 12.5693 | 2 | 0.0019 | Tolak H0 |
✅ Interpretasi Perbandingan
📋 Soal 7 — Identifikasi Kategori Paling Berkontribusi
Jelaskan kategori mana yang paling berkontribusi terhadap hubungan antara Gender dan Identifikasi Partai Politik.
par(mfrow = c(1, 2), mar = c(4, 4, 3, 1))
contrib_vec <- as.vector(t(contrib))
names(contrib_vec) <- paste0(
rep(c("F-", "M-"), each = 3),
rep(c("Dem", "Rep", "Ind"), 2)
)
warna_contrib <- ifelse(contrib_vec == max(contrib_vec), "#f43f5e",
ifelse(contrib_vec >= sort(contrib_vec, decreasing=TRUE)[2],
"#f59e0b", "#0d9488"))
barplot(
contrib_vec,
col = warna_contrib,
main = "Kontribusi Sel\nterhadap X2",
ylab = "Kontribusi (r2ij)",
las = 2, border = NA, cex.names = 0.85, cex.main = 1
)
abline(h = 0, col = "gray70")
mosaicplot(
tabel2,
color = c("#db2777", "#7c3aed", "#0d9488"),
main = "Mosaic Plot\nGender x Partai",
xlab = "Gender",
shade = TRUE,
border = "white", cex.axis = 0.85
)Kontribusi Sel terhadap Chi-Square dan Mosaic Plot — Kasus 2
🎯 Kategori Paling Berkontribusi
Berdasarkan standardized residual dan kontribusi terhadap \(X^2\):
1. Democrat adalah partai yang paling menunjukkan perbedaan gender. Female secara signifikan over-represented di Democrat (\(d_{F,Dem} = 3.272\), \(|d|>2\)) dan Male under-represented (\(d_{M,Dem} = -3.272\)).
2. Republican juga menunjukkan pola sebaliknya: Female under-represented (\(d_{F,Rep} = -2.499\)) dan Male over-represented (\(d_{M,Rep} = 2.499\)).
3. Independent memiliki residual yang paling kecil, artinya distribusi gender di kelompok Independent relatif paling proporsional dan berkontribusi paling sedikit terhadap ketidakindependensian.
Secara substantif: perbedaan gender dalam afiliasi partai paling kentara pada Democrat dan Republican, di mana wanita cenderung lebih condong ke Democrat sedangkan pria lebih condong ke Republican.
🎯 Kesimpulan Laporan
Kasus 1 (Merokok & Kanker Paru): Terdapat asosiasi positif yang kuat dan signifikan antara kebiasaan merokok dan kejadian kanker paru (\(X^2 = 19.1292\), \(p \approx 0\)). Perokok memiliki RR = 1.5181 (hampir 2x lebih berisiko) dan OR = 2.9716. Keempat uji hipotesis memberikan keputusan yang konsisten.
Kasus 2 (Gender & Partai Politik): Terdapat asosiasi signifikan antara gender dan identifikasi partai politik (\(X^2 = 12.5693\), \(p = 0.0019\)). Partisi chi-square menunjukkan bahwa asosiasi ini terutama didorong oleh perbedaan preferensi Democrat vs Republican antar gender, bukan oleh kategori Independent.