Pendahuluan

Pada Tugas ini, kita akan membahas inferensi statistik, yaitu menggunakan data sampel untuk membuat kesimpulan tentang populasi. Hal yang akan dilakukan:

Terdapat dua kasus yang akan dianalisis:


Kasus 1: Tabel Kontingensi 2x2 (Merokok dan Kanker Paru)

Soal 1 — Penyusunan Tabel Kontingensi

Tabel kontingensi menyusun frekuensi dua variabel kategori secara silang. Berikut data hubungan antara status merokok dan kanker paru:

# Membuat matriks data untuk Kasus 1
# Baris : Status Merokok (Smoker / Non-Smoker)
# Kolom : Status Kanker  (Cancer+ / Control-)
tabel1 <- matrix(
  c(688, 650,
     21,  59),
  nrow = 2, byrow = TRUE
)

rownames(tabel1) <- c("Smoker", "Non-Smoker")
colnames(tabel1) <- c("Cancer (+)", "Control (-)")

# Tampilkan tabel dengan baris/kolom Total
addmargins(tabel1)
##            Cancer (+) Control (-)  Sum
## Smoker            688         650 1338
## Non-Smoker         21          59   80
## Sum               709         709 1418

Keterangan sel:

  • \(a = 688\) : Perokok yang terkena kanker
  • \(b = 650\) : Perokok yang tidak terkena kanker (control)
  • \(c = 21\) : Bukan perokok yang terkena kanker
  • \(d = 59\) : Bukan perokok yang tidak terkena kanker

Soal 2 — Estimasi Titik Proporsi

Estimasi titik adalah satu nilai tunggal yang digunakan untuk menduga parameter populasi. Di sini kita menduga proporsi (probabilitas) seseorang terkena kanker paru pada masing-masing kelompok.

\[\hat{p}_1 = \frac{a}{a+b} \quad \text{(proporsi kanker pada Smoker)}\]

\[\hat{p}_2 = \frac{c}{c+d} \quad \text{(proporsi kanker pada Non-Smoker)}\]

# Mengambil nilai dari tabel
a <- tabel1[1, 1]   # 688
b <- tabel1[1, 2]   # 650
c <- tabel1[2, 1]   # 21
d <- tabel1[2, 2]   # 59

n1 <- a + b         # total Smoker     = 1338
n2 <- c + d         # total Non-Smoker = 80
n  <- n1 + n2       # grand total      = 1418

# Hitung proporsi
p1 <- a / n1
p2 <- c / n2

cat("Proporsi kanker pada Smoker     :", round(p1, 4), "\n")
## Proporsi kanker pada Smoker     : 0.5142
cat("Proporsi kanker pada Non-Smoker :", round(p2, 4), "\n")
## Proporsi kanker pada Non-Smoker : 0.2625

Interpretasi: Sekitar 51.42% perokok adalah kasus kanker paru, sedangkan hanya 26.25% bukan perokok yang merupakan kasus kanker paru. Secara deskriptif, perokok memiliki proporsi kanker yang jauh lebih tinggi.


Soal 3 — Interval Kepercayaan 95%

Interval kepercayaan (CI) adalah rentang nilai yang dengan tingkat keyakinan 95% kita percaya memuat nilai parameter sebenarnya. Kita hitung CI untuk proporsi masing-masing kelompok, serta tiga ukuran asosiasi: RD, RR, dan OR (sudah dikenalkan pada tugas sebelumnya).

CI untuk Proporsi Masing-Masing Kelompok

Rumus (metode Wald): \[\hat{p} \pm 1.96 \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\]

z <- qnorm(0.975)   # z = 1.96 untuk CI 95%

# CI untuk Smoker
se_p1 <- sqrt(p1 * (1 - p1) / n1)
ci_p1 <- c(p1 - z * se_p1, p1 + z * se_p1)

# CI untuk Non-Smoker
se_p2 <- sqrt(p2 * (1 - p2) / n2)
ci_p2 <- c(p2 - z * se_p2, p2 + z * se_p2)

cat("CI 95% untuk Smoker     : [", round(ci_p1[1], 4),
    ",", round(ci_p1[2], 4), "]\n")
## CI 95% untuk Smoker     : [ 0.4874 , 0.541 ]
cat("CI 95% untuk Non-Smoker : [", round(ci_p2[1], 4),
    ",", round(ci_p2[2], 4), "]\n")
## CI 95% untuk Non-Smoker : [ 0.1661 , 0.3589 ]

CI untuk Risk Difference (RD)

Risk Difference (RD) adalah selisih proporsi antara dua kelompok (risiko absolut).

\[RD = \hat{p}_1 - \hat{p}_2\]

\[SE(RD) = \sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1} + \frac{\hat{p}_2(1-\hat{p}_2)}{n_2}}\]

\[CI_{95\%}(RD) = RD \pm 1.96 \times SE(RD)\]

Nilai null RD = 0 (artinya tidak ada perbedaan risiko).

RD    <- p1 - p2
se_RD <- sqrt(p1*(1-p1)/n1 + p2*(1-p2)/n2)
ci_RD <- c(RD - z*se_RD, RD + z*se_RD)

cat("Risk Difference (RD) :", round(RD, 4), "\n")
## Risk Difference (RD) : 0.2517
cat("SE(RD)               :", round(se_RD, 4), "\n")
## SE(RD)               : 0.0511
cat("CI 95% untuk RD      : [", round(ci_RD[1], 4),
    ",", round(ci_RD[2], 4), "]\n")
## CI 95% untuk RD      : [ 0.1516 , 0.3518 ]

CI untuk Relative Risk (RR)

Diketahui bahwa RR terbentuk sebagai berikut: \[RR = \frac{\hat{p}_1}{\hat{p}_2}\]

CI dihitung pada skala logaritma natural karena distribusi RR miring ke kanan:

\[SE(\ln RR) = \sqrt{\frac{1-\hat{p}_1}{n_1 \hat{p}_1} + \frac{1-\hat{p}_2}{n_2 \hat{p}_2}}\]

\[CI_{95\%}(RR) = \exp\!\left[\ln(RR) \pm 1.96 \times SE(\ln RR)\right]\]

Nilai null RR = 1 (artinya risiko sama di kedua kelompok).

RR      <- p1 / p2
se_lnRR <- sqrt((1-p1)/(n1*p1) + (1-p2)/(n2*p2))
ci_RR   <- exp(log(RR) + c(-1, 1) * z * se_lnRR)

cat("Relative Risk (RR)   :", round(RR, 4), "\n")
## Relative Risk (RR)   : 1.9589
cat("SE(ln RR)            :", round(se_lnRR, 4), "\n")
## SE(ln RR)            : 0.1893
cat("CI 95% untuk RR      : [", round(ci_RR[1], 4),
    ",", round(ci_RR[2], 4), "]\n")
## CI 95% untuk RR      : [ 1.3517 , 2.8387 ]

CI untuk Odds Ratio (OR)

Diketahui bahwa OR terbentuk sebagai berikut: \[OR = \frac{a \times d}{b \times c}\]

\[SE(\ln OR) = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}}\]

\[CI_{95\%}(OR) = \exp\!\left[\ln(OR) \pm 1.96 \times SE(\ln OR)\right]\]

Nilai null OR = 1 (artinya odds sama di kedua kelompok).

OR      <- (a * d) / (b * c)
se_lnOR <- sqrt(1/a + 1/b + 1/c + 1/d)
ci_OR   <- exp(log(OR) + c(-1, 1) * z * se_lnOR)

cat("Odds Ratio (OR)      :", round(OR, 4), "\n")
## Odds Ratio (OR)      : 2.9738
cat("SE(ln OR)            :", round(se_lnOR, 4), "\n")
## SE(ln OR)            : 0.2599
cat("CI 95% untuk OR      : [", round(ci_OR[1], 4),
    ",", round(ci_OR[2], 4), "]\n")
## CI 95% untuk OR      : [ 1.7867 , 4.9494 ]

Ringkasan Ukuran Asosiasi

cat("==================================================\n")
## ==================================================
cat(" Ukuran        Estimasi    CI 95% Bawah  CI 95% Atas\n")
##  Ukuran        Estimasi    CI 95% Bawah  CI 95% Atas
cat("==================================================\n")
## ==================================================
cat(sprintf(" p̂ Smoker     %-10.4f  %-12.4f  %.4f\n",
            p1, ci_p1[1], ci_p1[2]))
##  p̂ Smoker     0.5142      0.4874        0.5410
cat(sprintf(" p̂ Non-Smoker %-10.4f  %-12.4f  %.4f\n",
            p2, ci_p2[1], ci_p2[2]))
##  p̂ Non-Smoker 0.2625      0.1661        0.3589
cat(sprintf(" RD           %-10.4f  %-12.4f  %.4f\n",
            RD, ci_RD[1], ci_RD[2]))
##  RD           0.2517      0.1516        0.3518
cat(sprintf(" RR           %-10.4f  %-12.4f  %.4f\n",
            RR, ci_RR[1], ci_RR[2]))
##  RR           1.9589      1.3517        2.8387
cat(sprintf(" OR           %-10.4f  %-12.4f  %.4f\n",
            OR, ci_OR[1], ci_OR[2]))
##  OR           2.9738      1.7867        4.9494
cat("==================================================\n")
## ==================================================

Interpretasi:

  • RD = 0.2517: Risiko kanker pada perokok lebih tinggi sekitar 25.17 poin persen dibandingkan bukan perokok.
  • RR = 1.9589: Perokok memiliki risiko kanker paru sekitar 1.96 kali lipat dibandingkan bukan perokok.
  • OR = 2.9738: Odds terkena kanker pada perokok sekitar 2.97 kali odds pada bukan perokok.
  • Semua CI 95% tidak mencakup nilai null (0 untuk RD; 1 untuk RR dan OR), menandakan asosiasi yang signifikan secara statistik.

Soal 4 — Uji Dua Proporsi

Uji ini menguji apakah proporsi kanker paru pada dua kelompok berbeda secara statistik.

Hipotesis:

  • \(H_0\): \(p_1 = p_2\) (proporsi kanker pada perokok dan bukan perokok sama)
  • \(H_1\): \(p_1 \neq p_2\) (ada perbedaan proporsi)

Statistik Uji:

\[\hat{p}_{pool} = \frac{a + c}{n}, \qquad Z = \frac{\hat{p}_1 - \hat{p}_2} {\sqrt{\hat{p}_{pool}(1-\hat{p}_{pool})\left(\dfrac{1}{n_1}+\dfrac{1}{n_2}\right)}}\]

Tolak \(H_0\) jika \(|Z| > 1.96\) atau \(p\)-value \(< 0.05\).

hasil_prop <- prop.test(
  x = c(a, c),
  n = c(n1, n2),
  alternative = "two.sided",
  conf.level = 0.95,
  correct = FALSE
)

cat("=== Uji Dua Proporsi ===\n\n")
## === Uji Dua Proporsi ===
cat("Statistik uji X² :", round(hasil_prop$statistic, 4),
    "  (Z =", round(sqrt(hasil_prop$statistic), 4), ")\n")
## Statistik uji X² : 19.1292   (Z = 4.3737 )
cat("p-value          :", format(hasil_prop$p.value, scientific = TRUE), "\n\n")
## p-value          : 1.221601e-05
cat("Keputusan: p-value < 0.05  -->  TOLAK H0\n")
## Keputusan: p-value < 0.05  -->  TOLAK H0
cat("Kesimpulan: Terdapat perbedaan proporsi kanker yang signifikan\n")
## Kesimpulan: Terdapat perbedaan proporsi kanker yang signifikan
cat("antara perokok dan bukan perokok.\n")
## antara perokok dan bukan perokok.

Soal 5 — Uji Chi-Square Independensi

Uji chi-square independensi menguji apakah dua variabel kategori independen atau tidak.

Hipotesis:

  • \(H_0\): Status merokok dan kanker paru independen (tidak ada asosiasi)
  • \(H_1\): Status merokok dan kanker paru tidak independen (ada asosiasi)

Frekuensi Harapan: \[E_{ij} = \frac{n_{i.} \times n_{.j}}{n}\]

Statistik Uji Pearson Chi-Square: \[\chi^2 = \sum_{i,j} \frac{(O_{ij} - E_{ij})^2}{E_{ij}}, \quad df = (r-1)(c-1) = 1\]

# Frekuensi harapan manual
E11 <- (n1 * (a + c)) / n
E12 <- (n1 * (b + d)) / n
E21 <- (n2 * (a + c)) / n
E22 <- (n2 * (b + d)) / n

cat("=== Frekuensi Harapan ===\n")
## === Frekuensi Harapan ===
tabel_E <- matrix(c(round(E11,2), round(E12,2),
                    round(E21,2), round(E22,2)),
                  nrow = 2, byrow = TRUE)
rownames(tabel_E) <- c("Smoker", "Non-Smoker")
colnames(tabel_E) <- c("Cancer (+)", "Control (-)")
print(tabel_E)
##            Cancer (+) Control (-)
## Smoker            669         669
## Non-Smoker         40          40
# Uji chi-square dengan R
hasil_chi1 <- chisq.test(tabel1, correct = FALSE)

cat("\n=== Uji Chi-Square ===\n\n")
## 
## === Uji Chi-Square ===
cat("Statistik uji χ² :", round(hasil_chi1$statistic, 4), "\n")
## Statistik uji χ² : 19.1292
cat("Derajat bebas df :", hasil_chi1$parameter, "\n")
## Derajat bebas df : 1
cat("p-value          :", format(hasil_chi1$p.value, scientific = TRUE), "\n\n")
## p-value          : 1.221601e-05
cat("Nilai kritis χ²(0.05,1) :", round(qchisq(0.95, 1), 4), "\n\n")
## Nilai kritis χ²(0.05,1) : 3.8415
cat("Keputusan: χ² > nilai kritis  -->  TOLAK H0\n")
## Keputusan: χ² > nilai kritis  -->  TOLAK H0
cat("Kesimpulan: Terdapat asosiasi yang signifikan antara\n")
## Kesimpulan: Terdapat asosiasi yang signifikan antara
cat("kebiasaan merokok dan kanker paru.\n")
## kebiasaan merokok dan kanker paru.

Soal 6 — Uji Likelihood Ratio (G²)

Uji Likelihood Ratio adalah alternatif dari uji chi-square Pearson, menggunakan perbandingan log-likelihood antara model jenuh dan model independensi.

Statistik Uji: \[G^2 = 2 \sum_{i,j} O_{ij} \ln\!\left(\frac{O_{ij}}{E_{ij}}\right)\]

Seperti chi-square, \(G^2\) mengikuti distribusi \(\chi^2\) dengan \(df = (r-1)(c-1) = 1\).

# Hitung G² secara manual
obs <- c(a, b, c, d)
exp <- c(E11, E12, E21, E22)

G2 <- 2 * sum(obs * log(obs / exp))
pval_G2 <- pchisq(G2, df = 1, lower.tail = FALSE)

cat("=== Uji Likelihood Ratio ===\n\n")
## === Uji Likelihood Ratio ===
cat("Statistik uji G² :", round(G2, 4), "\n")
## Statistik uji G² : 19.878
cat("Derajat bebas df :", 1, "\n")
## Derajat bebas df : 1
cat("p-value          :", format(pval_G2, scientific = TRUE), "\n\n")
## p-value          : 8.25441e-06
cat("Keputusan: p-value < 0.05  -->  TOLAK H0\n")
## Keputusan: p-value < 0.05  -->  TOLAK H0
cat("Kesimpulan: Uji likelihood ratio juga menunjukkan asosiasi\n")
## Kesimpulan: Uji likelihood ratio juga menunjukkan asosiasi
cat("yang signifikan antara merokok dan kanker paru.\n")
## yang signifikan antara merokok dan kanker paru.

Soal 7 — Fisher Exact Test

Fisher Exact Test menghitung probabilitas secara eksak dari tabel kontingensi, tanpa bergantung pada asumsi distribusi chi-square. Cocok untuk sampel kecil atau frekuensi harapan < 5.

Hipotesis:

  • \(H_0\): \(OR = 1\) (tidak ada asosiasi)
  • \(H_1\): \(OR \neq 1\) (ada asosiasi)
hasil_fisher <- fisher.test(tabel1, alternative = "two.sided")

cat("=== Fisher Exact Test ===\n\n")
## === Fisher Exact Test ===
cat("OR estimasi (Fisher) :", round(hasil_fisher$estimate, 4), "\n")
## OR estimasi (Fisher) : 2.9716
cat("CI 95% untuk OR      : [",
    round(hasil_fisher$conf.int[1], 4), ",",
    round(hasil_fisher$conf.int[2], 4), "]\n")
## CI 95% untuk OR      : [ 1.7556 , 5.2107 ]
cat("p-value              :", format(hasil_fisher$p.value, scientific = TRUE), "\n\n")
## p-value              : 1.476303e-05
cat("Keputusan: p-value < 0.05  -->  TOLAK H0\n")
## Keputusan: p-value < 0.05  -->  TOLAK H0
cat("Kesimpulan: Secara eksak, terdapat asosiasi yang signifikan\n")
## Kesimpulan: Secara eksak, terdapat asosiasi yang signifikan
cat("antara merokok dan kanker paru.\n")
## antara merokok dan kanker paru.

Soal 8 — Perbandingan Keempat Uji

cat("=================================================================\n")
## =================================================================
cat(" Metode Uji         H0          Statistik    df  p-value    Keputusan\n")
##  Metode Uji         H0          Statistik    df  p-value    Keputusan
cat("=================================================================\n")
## =================================================================
cat(sprintf(" Uji Dua Proporsi   p1 = p2     Z = %-6.4f   1   %-10s %s\n",
    sqrt(hasil_prop$statistic),
    format(hasil_prop$p.value, scientific=TRUE, digits=3),
    "Tolak H0"))
##  Uji Dua Proporsi   p1 = p2     Z = 4.3737   1   1.22e-05   Tolak H0
cat(sprintf(" Chi-Square         Independen  χ² = %-6.4f  1   %-10s %s\n",
    hasil_chi1$statistic,
    format(hasil_chi1$p.value, scientific=TRUE, digits=3),
    "Tolak H0"))
##  Chi-Square         Independen  χ² = 19.1292  1   1.22e-05   Tolak H0
cat(sprintf(" Likelihood Ratio   Independen  G² = %-6.4f  1   %-10s %s\n",
    G2,
    format(pval_G2, scientific=TRUE, digits=3),
    "Tolak H0"))
##  Likelihood Ratio   Independen  G² = 19.8780  1   8.25e-06   Tolak H0
cat(sprintf(" Fisher Exact Test  OR = 1      (eksak)         %-10s %s\n",
    format(hasil_fisher$p.value, scientific=TRUE, digits=3),
    "Tolak H0"))
##  Fisher Exact Test  OR = 1      (eksak)         1.48e-05   Tolak H0
cat("=================================================================\n")
## =================================================================

Perbandingan:

  • Uji Dua Proporsi: Menguji langsung perbedaan proporsi, cocok untuk 2 kelompok.
  • Chi-Square: Membandingkan frekuensi observasi vs harapan. Paling umum digunakan.
  • Likelihood Ratio (G²): Alternatif chi-square; nilai G² sedikit berbeda dari χ² karena rumusnya berbeda, tapi keduanya menghasilkan kesimpulan yang sama.
  • Fisher Exact Test: Menghitung probabilitas eksak tanpa asumsi n besar; paling cocok untuk data frekuensi kecil.

Meskipun cara penghitungannya berbeda, semua keempat uji menghasilkan keputusan yang sama: tolak \(H_0\). Ini menunjukkan hasil yang robust (tidak sensitif terhadap pilihan metode).


Soal 9 — Kesimpulan Akhir Kasus 1

# Mosaic Plot untuk visualisasi asosiasi
mosaicplot(tabel1,
           main  = "Hubungan Merokok dan Kanker Paru",
           color = c("#e74c3c", "#3498db"),
           xlab  = "Status Merokok",
           ylab  = "Status Kanker")

Kesimpulan Kasus 1:

Berdasarkan seluruh analisis terhadap data hubungan merokok dan kanker paru:

  1. Proporsi kanker pada perokok (51.4%) jauh lebih tinggi dibandingkan bukan perokok (26.2%).

  2. Ukuran asosiasi menunjukkan hubungan yang kuat:

    • RD = 0.252: Perokok berisiko kanker lebih tinggi 25.2 poin persen secara absolut.
    • RR = 1.959 (CI 95%: 1.35–2.84): Perokok 2 kali lebih berisiko terkena kanker paru.
    • OR = 2.974 (CI 95%: 1.79–4.95): Odds kanker pada perokok 3 kali lebih besar.
  3. Keempat uji hipotesis (uji Z, chi-square, likelihood ratio, Fisher exact) konsisten menolak \(H_0\) dengan p-value yang kecil.

  4. Terdapat asosiasi yang signifikan dan kuat antara kebiasaan merokok dan kanker paru. Perokok memiliki risiko yang jauh lebih tinggi terkena kanker paru dibandingkan bukan perokok.


Kasus 2: Tabel Kontingensi 2x3 (Gender dan Identifikasi Partai Politik)

Soal 1 — Penyusunan Tabel Kontingensi

Berbeda dari Kasus 1, tabel 2x3 memiliki 3 kategori pada salah satu variabel (partai: Democrat, Republican, Independent), sehingga analisis menjadi lebih kompleks.

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

Soal 2 — Frekuensi Harapan

Frekuensi harapan adalah frekuensi yang diharapkan terjadi jika \(H_0\) benar (kedua variabel independen).

\[E_{ij} = \frac{n_{i.} \times n_{.j}}{n}\]

Di mana \(n_{i.}\) = total baris ke-\(i\), \(n_{.j}\) = total kolom ke-\(j\), \(n\) = grand total.

Aturan penting: Asumsi chi-square terpenuhi jika semua \(E_{ij} \geq 5\).

n_total2 <- sum(tabel2)
n_baris2 <- rowSums(tabel2)
n_kolom2 <- colSums(tabel2)

# Matriks frekuensi harapan
E2 <- outer(n_baris2, n_kolom2) / n_total2

cat("=== Frekuensi Harapan ===\n\n")
## === Frekuensi Harapan ===
print(round(addmargins(E2), 2))
##        Democrat Republican Independent  Sum
## Female   456.95     297.43      602.62 1357
## Male     368.05     239.57      485.38 1093
## Sum      825.00     537.00     1088.00 2450
cat("\nNilai minimum E :", round(min(E2), 2),
    " --> Semua E >= 5? :",
    ifelse(min(E2) >= 5, "YA, asumsi terpenuhi.",
           "TIDAK, perlu metode alternatif."), "\n")
## 
## Nilai minimum E : 239.57  --> Semua E >= 5? : YA, asumsi terpenuhi.

Soal 3 — Uji Chi-Square Independensi (Tabel Keseluruhan)

Hipotesis:

  • \(H_0\): Gender dan identifikasi partai politik independen
  • \(H_1\): Gender dan identifikasi partai politik tidak independen

Derajat bebas untuk tabel \(r \times c\): \[df = (r-1)(c-1) = (2-1)(3-1) = 2\]

hasil_chi2 <- chisq.test(tabel2, correct = FALSE)

cat("=== Uji Chi-Square Kasus 2 ===\n\n")
## === Uji Chi-Square Kasus 2 ===
cat("Statistik uji χ² :", round(hasil_chi2$statistic, 4), "\n")
## Statistik uji χ² : 12.5693
cat("Derajat bebas df :", hasil_chi2$parameter, "\n")
## Derajat bebas df : 2
cat("p-value          :", format(hasil_chi2$p.value, scientific = TRUE), "\n\n")
## p-value          : 1.86475e-03
cat("Nilai kritis χ²(0.05, 2) :", round(qchisq(0.95, 2), 4), "\n\n")
## Nilai kritis χ²(0.05, 2) : 5.9915
cat("Keputusan: χ² > nilai kritis  -->  TOLAK H0\n")
## Keputusan: χ² > nilai kritis  -->  TOLAK H0
cat("Kesimpulan: Terdapat asosiasi signifikan antara gender\n")
## Kesimpulan: Terdapat asosiasi signifikan antara gender
cat("dan identifikasi partai politik.\n")
## dan identifikasi partai politik.

Soal 4 — Residual Pearson dan Standardized Residual

Setelah mengetahui bahwa ada asosiasi, kita ingin tahu sel mana yang paling menyimpang dari yang diharapkan di bawah \(H_0\).

Residual Pearson: \[r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}}\]

Standardized Residual: \[d_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1-\hat{p}_{i.})(1-\hat{p}_{.j})}}\]

Aturan interpretasi: \(|d_{ij}| > 2\) → sel tersebut menyimpang secara signifikan.

  • Nilai positif (> +2): sel memiliki frekuensi lebih banyak dari harapan
  • Nilai negatif (< -2): sel memiliki frekuensi lebih sedikit dari harapan
# Residual Pearson
resid_pearson2 <- hasil_chi2$residuals

# Standardized Residual
resid_std2 <- hasil_chi2$stdres

cat("=== Residual Pearson ===\n")
## === Residual Pearson ===
print(round(resid_pearson2, 4))
##        Democrat Republican Independent
## Female   1.7801    -1.4747     -0.5140
## Male    -1.9834     1.6431      0.5728
cat("\n=== Standardized Residual ===\n")
## 
## === Standardized Residual ===
print(round(resid_std2, 4))
##        Democrat Republican Independent
## Female   3.2724    -2.4986     -1.0322
## Male    -3.2724     2.4986      1.0322
cat("\n=== Interpretasi (|d| > 2 = signifikan) ===\n\n")
## 
## === Interpretasi (|d| > 2 = signifikan) ===
for (i in rownames(resid_std2)) {
  for (j in colnames(resid_std2)) {
    val   <- resid_std2[i, j]
    arah  <- ifelse(val > 0, "lebih BANYAK dari harapan",
                             "lebih SEDIKIT dari harapan")
    flag  <- ifelse(abs(val) > 2, "* SIGNIFIKAN", "  normal")
    cat(sprintf("  %-8s & %-12s : d = %+.4f  %s  [%s]\n",
                i, j, val, flag, arah))
  }
}
##   Female   & Democrat     : d = +3.2724  * SIGNIFIKAN  [lebih BANYAK dari harapan]
##   Female   & Republican   : d = -2.4986  * SIGNIFIKAN  [lebih SEDIKIT dari harapan]
##   Female   & Independent  : d = -1.0322    normal  [lebih SEDIKIT dari harapan]
##   Male     & Democrat     : d = -3.2724  * SIGNIFIKAN  [lebih SEDIKIT dari harapan]
##   Male     & Republican   : d = +2.4986  * SIGNIFIKAN  [lebih BANYAK dari harapan]
##   Male     & Independent  : d = +1.0322    normal  [lebih BANYAK dari harapan]
# Visualisasi dengan mosaic plot (shading berdasarkan residual)
mosaicplot(tabel2,
           shade  = TRUE,
           legend = TRUE,
           main   = "Mosaic Plot Gender vs Partai Politik\n(Shading = Standardized Residual)",
           xlab   = "Gender",
           ylab   = "Identifikasi Partai")
## Warning: In mosaicplot.default(tabel2, shade = TRUE, legend = TRUE, main = "Mosaic Plot Gender vs Partai Politik\n(Shading = Standardized Residual)", 
##     xlab = "Gender", ylab = "Identifikasi Partai") :
##  extra argument 'legend' will be disregarded

Interpretasi Residual:

  • Female & Democrat (\(d > +2\)): Perempuan lebih banyak mengidentifikasi diri sebagai Demokrat dibandingkan yang diharapkan.
  • Male & Democrat (\(d < -2\)): Laki-laki lebih sedikit mengidentifikasi sebagai Demokrat.
  • Female & Republican (\(d < -2\)): Perempuan lebih sedikit mengidentifikasi sebagai Republikan.
  • Male & Republican (\(d > +2\)): Laki-laki lebih banyak mengidentifikasi sebagai Republikan.
  • Independent: Tidak ada pola signifikan di kedua gender (|d| < 2).

Soal 5 — Partisi Chi-Square

Partisi chi-square memecah tabel 2x3 menjadi sub-tabel yang lebih kecil untuk mengidentifikasi di mana tepatnya asosiasi terjadi.

Partisi yang dilakukan:

  • Partisi A: Democrat vs Republican (mengabaikan Independent)
  • Partisi B: (Democrat + Republican) vs Independent

Syarat valid: jumlah \(df\) dari partisi = \(df\) total (\(1 + 1 = 2\)). ✓

# --- Partisi A: Democrat vs Republican ---
tabel_A <- tabel2[, c("Democrat", "Republican")]

hasil_A <- chisq.test(tabel_A, correct = FALSE)

cat("=== Partisi A: Democrat vs Republican ===\n\n")
## === Partisi A: Democrat vs Republican ===
print(addmargins(tabel_A))
##        Democrat Republican  Sum
## Female      495        272  767
## Male        330        265  595
## Sum         825        537 1362
cat("\nχ²(A) :", round(hasil_A$statistic, 4), "\n")
## 
## χ²(A) : 11.5545
cat("df(A) :", hasil_A$parameter, "\n")
## df(A) : 1
cat("p-value :", format(hasil_A$p.value, scientific = TRUE), "\n")
## p-value : 6.758479e-04
# --- Partisi B: (Dem + Rep) vs Independent ---
tabel_B <- cbind(
  "Dem+Rep"     = tabel2[, "Democrat"] + tabel2[, "Republican"],
  "Independent" = tabel2[, "Independent"]
)

hasil_B <- chisq.test(tabel_B, correct = FALSE)

cat("\n=== Partisi B: (Democrat+Republican) vs Independent ===\n\n")
## 
## === Partisi B: (Democrat+Republican) vs Independent ===
print(addmargins(tabel_B))
##        Dem+Rep Independent  Sum
## Female     767         590 1357
## Male       595         498 1093
## Sum       1362        1088 2450
cat("\nχ²(B) :", round(hasil_B$statistic, 4), "\n")
## 
## χ²(B) : 1.0654
cat("df(B) :", hasil_B$parameter, "\n")
## df(B) : 1
cat("p-value :", format(hasil_B$p.value, scientific = TRUE), "\n")
## p-value : 3.01979e-01

Soal 6 — Perbandingan Partisi vs Chi-Square Keseluruhan

chi2_total2 <- hasil_chi2$statistic
chi2_A      <- hasil_A$statistic
chi2_B      <- hasil_B$statistic
chi2_sum    <- chi2_A + chi2_B

cat("==============================================\n")
## ==============================================
cat(" Sumber              χ²        df   p-value\n")
##  Sumber              χ²        df   p-value
cat("==============================================\n")
## ==============================================
cat(sprintf(" Keseluruhan (2x3)  %-9.4f  2    %s\n",
    chi2_total2,
    format(hasil_chi2$p.value, scientific=TRUE, digits=3)))
##  Keseluruhan (2x3)  12.5693    2    1.86e-03
cat(sprintf(" Partisi A (Dem-Rep)%-9.4f  1    %s\n",
    chi2_A,
    format(hasil_A$p.value, scientific=TRUE, digits=3)))
##  Partisi A (Dem-Rep)11.5545    1    6.76e-04
cat(sprintf(" Partisi B (D+R-Ind)%-9.4f  1    %s\n",
    chi2_B,
    format(hasil_B$p.value, scientific=TRUE, digits=3)))
##  Partisi B (D+R-Ind)1.0654     1    3.02e-01
cat("----------------------------------------------\n")
## ----------------------------------------------
cat(sprintf(" Jumlah A + B       %-9.4f  2\n", chi2_sum))
##  Jumlah A + B       12.6200    2
cat("==============================================\n")
## ==============================================
cat("\nSelisih χ² total vs jumlah partisi:",
    round(chi2_total2 - chi2_sum, 4),
    "(perbedaan kecil karena pembulatan)\n")
## 
## Selisih χ² total vs jumlah partisi: -0.0507 (perbedaan kecil karena pembulatan)

Perbandingan:

  • \(\chi^2\) keseluruhan = 12.5693 dengan \(df = 2\).
  • Jumlah partisi A + B ≈ \(\chi^2\) total, dan jumlah \(df\) = 1 + 1 = 2. ✓ Ini memverifikasi bahwa partisi dilakukan dengan benar.
  • Partisi A (\(\chi^2\) lebih besar) berkontribusi lebih besar terhadap total chi-square dibandingkan Partisi B.

Soal 7 — Kategori Paling Berkontribusi

# Kontribusi tiap sel terhadap chi-square total
kontrib2 <- (tabel2 - E2)^2 / E2

cat("=== Kontribusi Tiap Sel terhadap χ² ===\n\n")
## === Kontribusi Tiap Sel terhadap χ² ===
print(round(addmargins(kontrib2), 4))
##        Democrat Republican Independent     Sum
## Female   3.1686     2.1746      0.2642  5.6074
## Male     3.9339     2.6999      0.3281  6.9618
## Sum      7.1025     4.8745      0.5923 12.5693
cat("\n=== Standardized Residual (nilai absolut, diurutkan) ===\n\n")
## 
## === Standardized Residual (nilai absolut, diurutkan) ===
# Menyusun data residual untuk identifikasi sel paling berkontribusi
resid_vec <- as.vector(abs(resid_std2))
names(resid_vec) <- paste(
  rep(rownames(resid_std2), ncol(resid_std2)),
  rep(colnames(resid_std2), each = nrow(resid_std2)),
  sep = " & "
)
print(round(sort(resid_vec, decreasing = TRUE), 4))
##    Female & Democrat      Male & Democrat  Female & Republican 
##               3.2724               3.2724               2.4986 
##    Male & Republican   Male & Independent Female & Independent 
##               2.4986               1.0322               1.0322

Interpretasi — Kategori Paling Berkontribusi:

Berdasarkan nilai standardized residual dan kontribusi \(\chi^2\), kategori yang paling berkontribusi terhadap asosiasi antara Gender dan Identifikasi Partai adalah:

  • Democrat dan Republican (Partisi A berkontribusi lebih besar)
  • Pola yang jelas: Perempuan cenderung ke Democrat, Laki-laki cenderung ke Republican
  • Independent memberikan kontribusi paling kecil — tidak ada pola yang kuat berdasarkan gender untuk pilihan Independent

Kesimpulan Kasus 2

Kesimpulan Kasus 2:

  1. Uji chi-square keseluruhan (\(\chi^2 =\) 12.5693, \(df = 2\), \(p < 0.001\)): Terdapat asosiasi yang signifikan antara gender dan identifikasi partai politik.

  2. Standardized residual mengungkap pola asosiasi:

    • Wanita cenderung lebih banyak mengidentifikasi diri sebagai Demokrat
    • Pria cenderung lebih banyak mengidentifikasi diri sebagai Republikan
    • Untuk Independent, tidak ada perbedaan signifikan antar gender
  3. Partisi chi-square mengkonfirmasi bahwa asosiasi utama bersumber dari perbedaan antara Democrat vs Republican berdasarkan gender.

  4. Kategori yang paling berkontribusi adalah Democrat (dan Republican sebagai kontrasnya), bukan Independent.


Kesimpulan Umum

Tugas 6 ini memperluas pemahaman yang telah dibangun dari tugas-tugas sebelumnya:


Laporan ini dibuat menggunakan R Markdown dan dapat direproduksi sepenuhnya.