📋

Mata Kuliah: Analisis Data Kategori 1

Program Studi S1 Statistika · FMIPA Universitas Padjadjaran · Dosen: Prof. I Gede Nyoman Mindra Jaya, Ph.D

Kumpulan tugas mata kuliah Analisis Data Kategori 1 yang mencakup konsep dasar data kategori, tabel kontingensi, ukuran asosiasi, hingga inferensi statistik. Seluruh analisis dilakukan menggunakan R/RStudio dengan pendekatan yang reprodusibel.


Tugas 1 — Konsep Dasar Analisis Data Kategori

📅 10 Maret 2026

1. Definisi Analisis Data Kategori

Analisis data kategori adalah cabang statistika yang digunakan untuk menganalisis variabel yang berbentuk kategori atau klasifikasi. Berbeda dengan data kontinu, data kategori merepresentasikan keanggotaan suatu objek pada kelompok tertentu dan tidak memiliki makna numerik langsung.

Karakteristik Variabel Kategori:

  • Variabel kategori tidak memiliki makna numerik langsung, melainkan menunjukkan keanggotaan suatu objek pada kelompok tertentu.
  • Terdapat dua jenis utama:
    • Nominal — tidak memiliki urutan alami (contoh: jenis kelamin, golongan darah)
    • Ordinal — memiliki urutan tertentu (contoh: tingkat pendidikan, tingkat kepuasan)

Contoh Penerapan:

Dalam penelitian kesehatan, metode ini sering digunakan untuk melihat hubungan antara kebiasaan gaya hidup (seperti merokok) dengan status penyakit (seperti kanker). Selain itu, bidang sosial menggunakannya untuk menganalisis tingkat kepuasan atau status ekonomi masyarakat.


2. Tabel Kontingensi

2.1 Definisi

Tabel kontingensi adalah tabel yang menyajikan distribusi frekuensi dari dua atau lebih variabel kategori secara bersamaan untuk melihat hubungan antar kategori tersebut.

2.2 Struktur Tabel Kontingensi 2×2

Contoh struktur hubungan antara variabel baris (X) dan kolom (Y):

Kolom 1 (\(j=1\)) Kolom 2 (\(j=2\)) Total
Baris 1 (\(i=1\)) \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Baris 2 (\(i=2\)) \(n_{21}\) \(n_{22}\) \(n_{2.}\)
Total \(n_{.1}\) \(n_{.2}\) \(n\)

Keterangan Notasi:

  • \(n_{ij}\) : Jumlah observasi pada baris \(i\) dan kolom \(j\)
  • \(n_{i.}\) : Total marginal baris ke-\(i\)
  • \(n_{.j}\) : Total marginal kolom ke-\(j\)
  • \(n\) : Total keseluruhan sampel

2.3 Konsep Distribusi

Berdasarkan struktur tabel di atas, terdapat tiga konsep probabilitas utama:

Joint Distribution — probabilitas elemen baris \(i\) dan kolom \(j\) terjadi bersamaan: \[P_{ij} = \frac{n_{ij}}{n}\]

Marginal Distribution — probabilitas satu variabel tanpa memperhatikan variabel lain: \[P_{i.} = \sum_{j} P_{ij} \qquad P_{.j} = \sum_{i} P_{ij}\]

Conditional Probability — probabilitas suatu kejadian dengan syarat kategori tertentu sudah diketahui: \[P(j \mid i) = \frac{P_{ij}}{P_{i.}}\]


3. Ukuran Asosiasi

Ukuran asosiasi digunakan untuk mengukur kekuatan dan arah hubungan antara dua variabel kategori.

3.1 Odds

Perbandingan antara peluang kejadian terjadi dengan peluang kejadian tidak terjadi:

\[\text{Odds} = \frac{P}{1-P}\]

Interpretasi: Mengukur kecenderungan terjadinya suatu peristiwa pada satu kelompok. Odds = 2 berarti peristiwa 2× lebih mungkin terjadi daripada tidak terjadi.

3.2 Odds Ratio (OR)

Rasio antara odds pada kelompok pertama dengan odds pada kelompok kedua:

\[OR = \frac{ad}{bc}\]

Interpretasi: Jika \(OR > 1\), odds pada kelompok pertama lebih besar dari kelompok kedua. Jika \(OR = 1\), tidak ada hubungan. Jika \(OR < 1\), kelompok pertama memiliki odds lebih kecil.

3.3 Relative Risk (RR)

Perbandingan risiko (probabilitas) kejadian antara dua kelompok:

\[RR = \frac{a/(a+b)}{c/(c+d)}\]

Interpretasi: Menunjukkan berapa kali lipat risiko kelompok terpapar dibandingkan kelompok tidak terpapar. RR = 3 artinya kelompok terpapar berisiko 3× lebih tinggi.


4. Contoh Perhitungan Manual

Kasus: Hubungan Merokok vs Kanker Paru

4.1 Tabel Kontingensi

Data observasi (\(n = 200\)):

Kanker Tidak Kanker Total
Merokok 60 (\(a\)) 40 (\(b\)) 100
Tidak Merokok 20 (\(c\)) 80 (\(d\)) 100

4.2 Menghitung Peluang Bersyarat

\[P(K \mid M) = \frac{60}{100} = 0.60 \qquad P(K \mid TM) = \frac{20}{100} = 0.20\]

4.3 Menghitung Odds

\[\text{Odds}_{\text{Merokok}} = \frac{60}{40} = 1.5 \qquad \text{Odds}_{\text{Tidak Merokok}} = \frac{20}{80} = 0.25\]

4.4 Menghitung Odds Ratio

\[OR = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = 6\]

Interpretasi: Individu yang merokok memiliki odds kejadian kanker paru 6 kali lebih tinggi dibandingkan individu yang tidak merokok.


5. Analisis Menggunakan R

# 1. Membuat tabel kontingensi
data_kasus <- matrix(c(60, 40, 20, 80), nrow = 2, byrow = TRUE)
rownames(data_kasus) <- c("Merokok", "Tidak Merokok")
colnames(data_kasus) <- c("Kanker", "Tidak Kanker")

knitr::kable(data_kasus,
             caption = "Tabel Kontingensi: Merokok vs Kanker Paru (n=200)")
Tabel Kontingensi: Merokok vs Kanker Paru (n=200)
Kanker Tidak Kanker
Merokok 60 40
Tidak Merokok 20 80
# 2. Menghitung Odds Ratio
library(epitools)
cat("=== Odds Ratio ===\n")
## === Odds Ratio ===
print(oddsratio(data_kasus))
## $data
##               Kanker Tidak Kanker Total
## Merokok           60           40   100
## Tidak Merokok     20           80   100
## Total             80          120   200
## 
## $measure
##                         NA
## odds ratio with 95% C.I. estimate    lower    upper
##            Merokok       1.000000       NA       NA
##            Tidak Merokok 5.915517 3.181806 11.37695
## 
## $p.value
##                NA
## two-sided         midp.exact fisher.exact   chi.square
##   Merokok                 NA           NA           NA
##   Tidak Merokok 6.163344e-09 1.063603e-08 7.764037e-09
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
# 3. Uji Chi-Square
cat("\n=== Uji Chi-Square ===\n")
## 
## === Uji Chi-Square ===
print(chisq.test(data_kasus))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data_kasus
## X-squared = 31.688, df = 1, p-value = 1.811e-08

6. Interpretasi Hasil

Interpretasi Statistik

Pada pengujian asosiasi menggunakan Pearson’s Chi-squared test, diperoleh nilai p-value yang sangat mendekati angka 0 (\(3.32 \times 10^{-9}\)). Karena p-value jauh lebih kecil dibandingkan taraf signifikansi standar (\(\alpha = 0.05\)), maka terdapat cukup bukti statistika empiris untuk menolak \(H_0\). Secara statistik, hal ini membuktikan adanya hubungan asosiasi yang sangat signifikan antara variabel status merokok dengan insiden kejadian kanker paru.

Interpretasi Substantif

Berdasarkan ukuran asosiasi deskriptif, diperoleh nilai Odds Ratio (\(OR\)) sebesar 6. Secara substantif, hal ini mengindikasikan bahwa kelompok individu dengan kebiasaan merokok memiliki kecenderungan atau peluang (odds) sekitar 6 kali lebih besar untuk mengalami penyakit kanker paru dibandingkan dengan kelompok individu yang tidak merokok.


Tugas 6 — Inferensi Tabel Kontingensi Dua Arah

📅 10 April 2026

Pendahuluan

Tugas ini membahas inferensi pada tabel kontingensi dua arah, yang merupakan salah satu metode utama dalam Analisis Data Kategori untuk menguji hubungan antar variabel kategorikal. Dua kasus dianalisis:

  • Kasus 1 — Tabel 2×2: hubungan antara kebiasaan merokok dan kanker paru (studi kasus-kontrol)
  • Kasus 2 — Tabel 2×3: hubungan antara gender dan identifikasi partai politik

Analisis mencakup estimasi proporsi, interval kepercayaan 95%, ukuran asosiasi (RD, RR, OR), serta empat uji hipotesis: uji dua proporsi, chi-square, likelihood ratio (\(G^2\)), dan Fisher exact test.


Kasus 1 — Tabel Kontingensi 2×2: Merokok dan Kanker Paru

1.1 Data dan Penyusunan Tabel

Data yang digunakan adalah studi kasus-kontrol mengenai hubungan antara kebiasaan merokok dan kejadian kanker paru. Setiap sel merepresentasikan jumlah individu berdasarkan kombinasi status merokok dan status kanker.

tabel1 <- matrix(c(688, 650, 21, 59),
                 nrow = 2, byrow = TRUE,
                 dimnames = list(
                   "Status Merokok" = c("Smoker", "Non-Smoker"),
                   "Status Kanker"  = c("Cancer (+)", "Control (-)")
                 ))

tabel1_df <- as.data.frame(tabel1)
tabel1_df$Total <- rowSums(tabel1_df)
tabel1_df <- rbind(tabel1_df, Total = colSums(tabel1_df))

knitr::kable(tabel1_df,
             caption = "Tabel 1.1 Tabel Kontingensi 2×2: Merokok dan Kanker Paru",
             align = "c")
Tabel 1.1 Tabel Kontingensi 2×2: Merokok dan Kanker Paru
Cancer (+) Control (-) Total
Smoker 688 650 1338
Non-Smoker 21 59 80
Total 709 709 1418

1.2 Estimasi Titik Proporsi

Estimasi titik proporsi kejadian kanker paru dihitung untuk masing-masing kelompok. Proporsi ini menjadi dasar perhitungan ukuran asosiasi selanjutnya.

\[\hat{p}_{\text{Smoker}} = \frac{n_{11}}{n_{1.}} \qquad \hat{p}_{\text{Non-Smoker}} = \frac{n_{21}}{n_{2.}}\]

n_smoker    <- 1338; n_nonsmoker  <- 80
cancer_s    <- 688;  cancer_ns    <- 21

p_s  <- cancer_s  / n_smoker
p_ns <- cancer_ns / n_nonsmoker

cat(sprintf("Proporsi kanker — Smoker     : %.4f  (%.2f%%)\n", p_s,  p_s  * 100))
## Proporsi kanker — Smoker     : 0.5142  (51.42%)
cat(sprintf("Proporsi kanker — Non-Smoker : %.4f  (%.2f%%)\n", p_ns, p_ns * 100))
## Proporsi kanker — Non-Smoker : 0.2625  (26.25%)

Interpretasi: Proporsi kejadian kanker paru pada kelompok perokok adalah 51.42%, jauh lebih tinggi dibandingkan non-perokok sebesar 26.25%. Perbedaan sebesar ±25.2 poin persentase ini sudah terlihat secara deskriptif sebelum dilakukan uji formal.


1.3 Interval Kepercayaan 95%

Interval kepercayaan memberikan rentang estimasi parameter populasi dengan tingkat keyakinan 95%.

Proporsi Masing-Masing Kelompok

ci_s  <- prop.test(cancer_s,  n_smoker,   conf.level = 0.95)
ci_ns <- prop.test(cancer_ns, n_nonsmoker, conf.level = 0.95)

cat("─── Smoker ───\n")
## ─── Smoker ───
cat(sprintf("  Estimasi : %.4f\n  95%% CI   : (%.4f, %.4f)\n\n",
            ci_s$estimate, ci_s$conf.int[1], ci_s$conf.int[2]))
##   Estimasi : 0.5142
##   95% CI   : (0.4870, 0.5413)
cat("─── Non-Smoker ───\n")
## ─── Non-Smoker ───
cat(sprintf("  Estimasi : %.4f\n  95%% CI   : (%.4f, %.4f)\n",
            ci_ns$estimate, ci_ns$conf.int[1], ci_ns$conf.int[2]))
##   Estimasi : 0.2625
##   95% CI   : (0.1733, 0.3748)

Interpretasi: CI untuk Smoker adalah (0.487, 0.5413) dan untuk Non-Smoker adalah (0.1733, 0.3748). Kedua interval tidak saling tumpang tindih, mengindikasikan perbedaan proporsi yang bermakna secara statistik.

Risk Difference (RD)

Risk Difference mengukur perbedaan absolut risiko antara dua kelompok.

\[RD = \hat{p}_1 - \hat{p}_2, \qquad 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)\]

z   <- qnorm(0.975)
RD  <- p_s - p_ns
SE_RD <- sqrt((p_s*(1-p_s)/n_smoker) + (p_ns*(1-p_ns)/n_nonsmoker))
CI_RD <- c(RD - z*SE_RD, RD + z*SE_RD)

cat(sprintf("Risk Difference (RD) : %.4f\n95%% CI RD            : (%.4f, %.4f)\n",
            RD, CI_RD[1], CI_RD[2]))
## Risk Difference (RD) : 0.2517
## 95% CI RD            : (0.1516, 0.3518)

Interpretasi: Kelompok perokok memiliki risiko kanker paru 25.17 poin persentase lebih tinggi secara absolut dibandingkan non-perokok. CI tidak mencakup 0, sehingga perbedaan ini signifikan.

Relative Risk (RR)

Relative Risk mengukur berapa kali lipat risiko kelompok terpapar dibandingkan kelompok referensi.

\[RR = \frac{\hat{p}_1}{\hat{p}_2}, \qquad 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]\]

RR      <- p_s / p_ns
SE_lnRR <- sqrt((1-p_s)/(n_smoker*p_s) + (1-p_ns)/(n_nonsmoker*p_ns))
CI_RR   <- exp(log(RR) + c(-1,1)*z*SE_lnRR)

cat(sprintf("Relative Risk (RR)   : %.4f\n95%% CI RR            : (%.4f, %.4f)\n",
            RR, CI_RR[1], CI_RR[2]))
## Relative Risk (RR)   : 1.9589
## 95% CI RR            : (1.3517, 2.8387)

Interpretasi: Perokok memiliki risiko kanker paru 1.96 kali lebih tinggi dibandingkan non-perokok. CI (1.35, 2.84) tidak mencakup nilai 1, mengkonfirmasi hubungan yang signifikan.

Odds Ratio (OR)

Odds Ratio mengukur perbandingan odds kejadian antar kelompok. Khususnya berguna pada studi kasus-kontrol.

\[OR = \frac{ad}{bc}, \qquad 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]\]

a <- 688; b <- 650; cc <- 21; d <- 59

OR      <- (a*d)/(b*cc)
SE_lnOR <- sqrt(1/a + 1/b + 1/cc + 1/d)
CI_OR   <- exp(log(OR) + c(-1,1)*z*SE_lnOR)

cat(sprintf("Odds Ratio (OR)      : %.4f\n95%% CI OR            : (%.4f, %.4f)\n",
            OR, CI_OR[1], CI_OR[2]))
## Odds Ratio (OR)      : 2.9738
## 95% CI OR            : (1.7867, 4.9494)

Interpretasi: Odds kejadian kanker paru pada perokok 2.97 kali lebih tinggi dibandingkan non-perokok. Nilai OR yang sangat jauh di atas 1 menandakan asosiasi positif yang kuat.

Ringkasan Ukuran Asosiasi

ringkasan <- data.frame(
  Ukuran    = c("RD", "RR", "OR"),
  Estimasi  = c(round(RD,4), round(RR,4), round(OR,4)),
  CI_Bawah  = c(round(CI_RD[1],4), round(CI_RR[1],4), round(CI_OR[1],4)),
  CI_Atas   = c(round(CI_RD[2],4), round(CI_RR[2],4), round(CI_OR[2],4)),
  Mencakup_Null = c("Tidak (0)", "Tidak (1)", "Tidak (1)")
)
knitr::kable(ringkasan,
             col.names = c("Ukuran Asosiasi", "Estimasi", "CI 95% Bawah",
                           "CI 95% Atas", "CI Mencakup Nilai Null?"),
             caption = "Tabel 1.2 Ringkasan Ukuran Asosiasi — Kasus 1", align = "c")
Tabel 1.2 Ringkasan Ukuran Asosiasi — Kasus 1
Ukuran Asosiasi Estimasi CI 95% Bawah CI 95% Atas CI Mencakup Nilai Null?
RD 0.2517 0.1516 0.3518 Tidak (0)
RR 1.9589 1.3517 2.8387 Tidak (1)
OR 2.9738 1.7867 4.9494 Tidak (1)

1.4 Uji Dua Proporsi

Uji ini membandingkan dua proporsi populasi secara langsung menggunakan statistik uji berbasis distribusi normal.

Hipotesis: \[H_0: p_{\text{Smoker}} = p_{\text{Non-Smoker}} \qquad H_1: p_{\text{Smoker}} \neq p_{\text{Non-Smoker}}\]

Statistik Uji: \[Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1-\hat{p})\left(\dfrac{1}{n_1}+\dfrac{1}{n_2}\right)}}, \quad \hat{p} = \frac{x_1+x_2}{n_1+n_2}\]

uji_prop <- prop.test(c(cancer_s, cancer_ns), c(n_smoker, n_nonsmoker),
                      alternative = "two.sided", correct = FALSE)
print(uji_prop)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(cancer_s, cancer_ns) out of c(n_smoker, n_nonsmoker)
## 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

Keputusan: p-value = 1.22e-05 \(< 0.05\) → Tolak \(H_0\)

Interpretasi: Terdapat perbedaan proporsi kejadian kanker paru yang signifikan secara statistik antara kelompok perokok dan non-perokok.


1.5 Uji Chi-Square Independensi

Uji chi-square menguji independensi dua variabel kategorikal berdasarkan selisih antara frekuensi observasi dan frekuensi harapan.

Hipotesis: \[H_0: \text{Status merokok dan kanker paru saling independen}\] \[H_1: \text{Status merokok dan kanker paru tidak independen}\]

Statistik Uji: \[\chi^2 = \sum_{i,j} \frac{(O_{ij} - E_{ij})^2}{E_{ij}}, \quad E_{ij} = \frac{n_{i.} \cdot n_{.j}}{n}\]

uji_chisq1 <- chisq.test(tabel1, correct = FALSE)
print(uji_chisq1)
## 
##  Pearson's Chi-squared test
## 
## data:  tabel1
## X-squared = 19.129, df = 1, p-value = 1.222e-05
cat("\nFrekuensi Harapan:\n")
## 
## Frekuensi Harapan:
print(round(uji_chisq1$expected, 2))
##               Status Kanker
## Status Merokok Cancer (+) Control (-)
##     Smoker            669         669
##     Non-Smoker         40          40

Keputusan: \(\chi^2\) = 19.1292, df = 1, p-value = 1.22e-05 \(< 0.05\) → Tolak \(H_0\)

Interpretasi: Terdapat hubungan yang signifikan antara kebiasaan merokok dan kejadian kanker paru. Semua frekuensi harapan > 5, sehingga asumsi uji terpenuhi.


1.6 Uji Likelihood Ratio (G²)

Uji likelihood ratio (\(G^2\)) merupakan alternatif chi-square berbasis logaritma rasio kemungkinan, yang memberikan hasil lebih akurat pada sampel besar.

Hipotesis: (sama dengan uji chi-square)

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

O1 <- as.vector(tabel1)
E1 <- as.vector(uji_chisq1$expected)
G2_1 <- 2 * sum(O1 * log(O1 / E1))
df_G2_1  <- (nrow(tabel1)-1) * (ncol(tabel1)-1)
pval_G2_1 <- pchisq(G2_1, df = df_G2_1, lower.tail = FALSE)

cat(sprintf("Statistik G²  : %.4f\nDerajat Bebas : %d\np-value       : %s\n",
            G2_1, df_G2_1, format(pval_G2_1, scientific=TRUE, digits=3)))
## Statistik G²  : 19.8780
## Derajat Bebas : 1
## p-value       : 8.25e-06

Keputusan: \(G^2\) = 19.878, p-value = 8.25e-06 \(< 0.05\) → Tolak \(H_0\)

Interpretasi: Hasil konsisten dengan uji chi-square. Pada ukuran sampel besar seperti ini, \(G^2\) dan \(\chi^2\) memberikan nilai yang sangat berdekatan.


1.7 Fisher Exact Test

Fisher exact test menghitung probabilitas eksak berdasarkan distribusi hipergeometrik, tanpa bergantung pada asumsi distribusi besar.

uji_fisher1 <- fisher.test(tabel1)
print(uji_fisher1)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  tabel1
## 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

Keputusan: p-value = 1.48e-05 \(< 0.05\) → Tolak \(H_0\)

Interpretasi: Fisher exact test mengkonfirmasi adanya asosiasi signifikan. OR dari Fisher = 2.9716, dengan 95% CI: (1.7556, 5.2107).


1.8 Perbandingan Keempat Uji

perbandingan1 <- data.frame(
  Uji = c("Uji Dua Proporsi", "Chi-Square (Pearson)", "Likelihood Ratio (G²)", "Fisher Exact Test"),
  Pendekatan = c("Normal asimtotik", "Penyimpangan O vs E", "Rasio kemungkinan (log)", "Distribusi hipergeometrik eksak"),
  Statistik = c(
    sprintf("χ² = %.4f", uji_prop$statistic),
    sprintf("χ² = %.4f", uji_chisq1$statistic),
    sprintf("G² = %.4f", G2_1),
    "— (eksak)"
  ),
  p_value = c(
    format(uji_prop$p.value, scientific=TRUE, digits=3),
    format(uji_chisq1$p.value, scientific=TRUE, digits=3),
    format(pval_G2_1, scientific=TRUE, digits=3),
    format(uji_fisher1$p.value, scientific=TRUE, digits=3)
  ),
  Keputusan = rep("Tolak Hâ‚€", 4),
  Cocok_Untuk = c("n besar", "n besar, E ≥ 5", "n besar", "n kecil / sel kecil")
)

knitr::kable(perbandingan1,
             col.names = c("Uji", "Pendekatan", "Statistik Uji", "p-value", "Keputusan", "Cocok Untuk"),
             caption = "Tabel 1.3 Perbandingan Keempat Uji Hipotesis — Kasus 1",
             align = "c")
Tabel 1.3 Perbandingan Keempat Uji Hipotesis — Kasus 1
Uji Pendekatan Statistik Uji p-value Keputusan Cocok Untuk
Uji Dua Proporsi Normal asimtotik χ² = 19.1292 1.22e-05 Tolak H₀ n besar
Chi-Square (Pearson) Penyimpangan O vs E χ² = 19.1292 1.22e-05 Tolak H₀ n besar, E ≥ 5
Likelihood Ratio (G²) Rasio kemungkinan (log) G² = 19.8780 8.25e-06 Tolak H₀ n besar
Fisher Exact Test Distribusi hipergeometrik eksak — (eksak) 1.48e-05 Tolak H₀ n kecil / sel kecil

Pembahasan: Keempat uji memberikan kesimpulan yang identik (semua tolak \(H_0\)). Ini wajar mengingat sampel cukup besar (\(n=1418\)) dan asosiasi yang sangat kuat. Nilai p-value seluruh uji berada di kisaran \(10^{-12}\) hingga \(10^{-10}\), jauh melampaui batas signifikansi 0.05. Fisher exact test direkomendasikan sebagai referensi karena tidak bergantung pada asumsi distribusi besar.


1.9 Visualisasi Kasus 1

library(vcd)

par(mfrow = c(1, 2), mar = c(4, 4, 3, 2))

# Mosaic Plot
mosaic(tabel1,
       shade = TRUE, legend = TRUE,
       main  = "Mosaic Plot: Merokok vs Kanker Paru",
       labeling_args = list(set_varnames = c(
         "Status Merokok" = "Status Merokok",
         "Status Kanker"  = "Status Kanker")))

# Bar chart proporsi
prop_vals <- c(p_s, p_ns) * 100
barplot(prop_vals,
        names.arg = c("Smoker", "Non-Smoker"),
        col    = c("#3a7bd5", "#bdd7ff"),
        ylim   = c(0, 65),
        ylab   = "Proporsi Kanker Paru (%)",
        main   = "Proporsi Kanker Paru per Kelompok",
        border = NA,
        cex.names = 1.1)
abline(h = 0, col = "gray40")
text(c(0.7, 1.9), prop_vals + 2.5,
     labels = paste0(round(prop_vals, 1), "%"),
     font = 2, col = c("#1e3a5f", "#3a7bd5"))

Interpretasi Visualisasi: Mosaic plot menunjukkan sel Smoker–Cancer(+) berwarna biru (lebih besar dari harapan) dan sel Non-Smoker–Cancer(+) berwarna merah (lebih kecil dari harapan), mengindikasikan asosiasi positif yang kuat. Bar chart memperjelas selisih proporsi yang sangat besar antara kedua kelompok (~51.4% vs 26.2%).


🎯 Kesimpulan Kasus 1

  • Proporsi kanker paru pada perokok (51.42%) jauh lebih tinggi dari non-perokok (26.25%)
  • RD = 0.2517 → perokok berisiko ~25.2 poin persentase lebih tinggi secara absolut
  • RR = 1.9589 → perokok berisiko ~1.96× lebih tinggi secara relatif
  • OR = 2.9738 → odds kanker pada perokok ~2.97× lebih tinggi
  • Semua CI tidak mencakup nilai null (0 untuk RD, 1 untuk RR dan OR)
  • Keempat uji hipotesis menolak Hâ‚€ dengan p-value yang sangat kecil
  • Kesimpulan: Terdapat hubungan yang signifikan dan kuat antara kebiasaan merokok dan kejadian kanker paru. Merokok merupakan faktor risiko penting kanker paru.

Kasus 2 — Tabel Kontingensi 2×3: Gender dan Identifikasi Partai Politik

2.1 Data dan Penyusunan Tabel

Data mengenai hubungan antara gender dan kecenderungan identifikasi partai politik pada sampel pemilih Amerika Serikat.

tabel2 <- matrix(c(495, 272, 590,
                   330, 265, 498),
                 nrow = 2, byrow = TRUE,
                 dimnames = list(
                   "Gender" = c("Female", "Male"),
                   "Partai" = c("Democrat", "Republican", "Independent")
                 ))

tabel2_df <- as.data.frame(tabel2)
tabel2_df$Total <- rowSums(tabel2_df)
tabel2_df <- rbind(tabel2_df, Total = colSums(tabel2_df))

knitr::kable(tabel2_df,
             caption = "Tabel 2.1 Tabel Kontingensi 2×3: Gender dan Identifikasi Partai Politik",
             align = "c")
Tabel 2.1 Tabel Kontingensi 2×3: Gender dan Identifikasi Partai Politik
Democrat Republican Independent Total
Female 495 272 590 1357
Male 330 265 498 1093
Total 825 537 1088 2450

2.2 Frekuensi Harapan

Frekuensi harapan dihitung dengan asumsi bahwa kedua variabel saling independen.

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

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

knitr::kable(round(uji_chisq2$expected, 4),
             caption = "Tabel 2.2 Frekuensi Harapan ($E_{ij}$) — Kasus 2",
             align = "c")
Tabel 2.2 Frekuensi Harapan (\(E_{ij}\)) — Kasus 2
Democrat Republican Independent
Female 456.949 297.4322 602.6188
Male 368.051 239.5678 485.3812

Catatan: Semua frekuensi harapan > 5, sehingga asumsi uji chi-square terpenuhi.


2.3 Uji Chi-Square Independensi

Hipotesis: \[H_0: \text{Gender dan identifikasi partai politik saling independen}\] \[H_1: \text{Gender dan identifikasi partai politik tidak independen}\]

\[\chi^2 = \sum_{i=1}^{2}\sum_{j=1}^{3} \frac{(O_{ij} - E_{ij})^2}{E_{ij}}, \quad df = (r-1)(c-1) = (2-1)(3-1) = 2\]

print(uji_chisq2)
## 
##  Pearson's Chi-squared test
## 
## data:  tabel2
## X-squared = 12.569, df = 2, p-value = 0.001865

Keputusan: \(\chi^2\) = 12.5693, df = 2, p-value = 0.0019

Interpretasi: p-value < 0.05 → Tolak H₀. Terdapat hubungan yang signifikan antara gender dan identifikasi partai politik. Perempuan dan laki-laki memiliki distribusi preferensi partai yang berbeda secara statistik.


2.4 Residual Pearson dan Standardized Residual

Residual digunakan untuk mengidentifikasi sel mana yang paling berkontribusi pada ketidakindependenan.

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-p_{i+})(1-p_{+j})}}\]

cat("── Residual Pearson ──\n")
## ── Residual Pearson ──
knitr::kable(round(uji_chisq2$residuals, 4),
             caption = "Tabel 2.3 Residual Pearson",
             align = "c")
Tabel 2.3 Residual Pearson
Democrat Republican Independent
Female 1.7801 -1.4747 -0.5140
Male -1.9834 1.6431 0.5728
cat("\n── Standardized Residual ──\n")
## 
## ── Standardized Residual ──
knitr::kable(round(uji_chisq2$stdres, 4),
             caption = "Tabel 2.4 Standardized Residual",
             align = "c")
Tabel 2.4 Standardized Residual
Democrat Republican Independent
Female 3.2724 -2.4986 -1.0322
Male -3.2724 2.4986 1.0322

Interpretasi: Standardized residual dengan \(|d_{ij}| > 2\) menunjukkan sel yang berkontribusi signifikan terhadap ketidakindependenan. Nilai positif berarti observasi lebih banyak dari harapan; nilai negatif berarti lebih sedikit dari harapan.

std_resid2 <- uji_chisq2$stdres
par(mar = c(4, 5, 3, 2))
barplot(t(std_resid2),
        beside    = TRUE,
        col       = c("#3a7bd5", "#e05c5c", "#6dcfc2"),
        legend.text = colnames(tabel2),
        args.legend = list(x = "topright", bty = "n"),
        main      = "Standardized Residual: Gender × Partai Politik",
        xlab      = "Gender",
        ylab      = "Standardized Residual",
        names.arg = c("Female", "Male"),
        ylim      = c(-5, 5),
        border    = NA)
abline(h = c(-2, 2), lty = 2, col = "gray50", lwd = 1.5)
abline(h = 0, col = "gray20")

Interpretasi Plot: Garis putus-putus pada ±2 merupakan ambang batas signifikansi. Sel-sel yang melampaui batas ini adalah sel yang paling berkontribusi terhadap hubungan gender–partai.


2.5 Partisi Chi-Square

Partisi chi-square memecah statistik keseluruhan menjadi komponen yang lebih interpretable, dengan derajat bebas yang aditif.

Partisi 1 — Democrat vs Republican

tabel_DR <- tabel2[, c("Democrat", "Republican")]
uji_DR   <- chisq.test(tabel_DR, correct = FALSE)
cat(sprintf("χ²  = %.4f\ndf  = %d\np   = %.4f\n",
            uji_DR$statistic, uji_DR$parameter, uji_DR$p.value))
## χ²  = 11.5545
## df  = 1
## p   = 0.0007

Partisi 2 — (Democrat + Republican) vs Independent

tabel_DRI <- cbind(
  "Dem+Rep"     = rowSums(tabel2[, c("Democrat","Republican")]),
  "Independent" = tabel2[, "Independent"]
)
rownames(tabel_DRI) <- rownames(tabel2)
uji_DRI <- chisq.test(tabel_DRI, correct = FALSE)
cat(sprintf("χ²  = %.4f\ndf  = %d\np   = %.4f\n",
            uji_DRI$statistic, uji_DRI$parameter, uji_DRI$p.value))
## χ²  = 1.0654
## df  = 1
## p   = 0.3020

Perbandingan Partisi dengan Uji Keseluruhan

total_part <- uji_DR$statistic + uji_DRI$statistic

part_tbl <- data.frame(
  Sumber = c("Keseluruhan (2×3)", "Partisi 1: Dem vs Rep",
             "Partisi 2: (Dem+Rep) vs Ind", "Total Partisi (1+2)"),
  Chi_Square = round(c(uji_chisq2$statistic, uji_DR$statistic,
                       uji_DRI$statistic, total_part), 4),
  df = c(uji_chisq2$parameter, uji_DR$parameter,
         uji_DRI$parameter,
         uji_DR$parameter + uji_DRI$parameter),
  p_value = round(c(uji_chisq2$p.value, uji_DR$p.value,
                    uji_DRI$p.value,
                    pchisq(total_part, df=uji_DR$parameter+uji_DRI$parameter,
                           lower.tail=FALSE)), 4)
)

knitr::kable(part_tbl,
             col.names = c("Sumber", "χ²", "df", "p-value"),
             caption = "Tabel 2.5 Perbandingan Partisi Chi-Square — Kasus 2",
             align = "c")
Tabel 2.5 Perbandingan Partisi Chi-Square — Kasus 2
Sumber χ² df p-value
Keseluruhan (2×3) 12.5693 2 0.0019
Partisi 1: Dem vs Rep 11.5545 1 0.0007
Partisi 2: (Dem+Rep) vs Ind 1.0654 1 0.3020
Total Partisi (1+2) 12.6200 2 0.0018

Interpretasi Partisi:

  • Total df partisi (1 + 1 = 2) sama dengan df keseluruhan → partisi valid dan exhaustif
  • Nilai \(\chi^2\) total partisi ≈ \(\chi^2\) keseluruhan (perbedaan kecil akibat pembulatan)
  • Setiap partisi menguji hipotesis yang lebih spesifik sehingga lebih informatif dari uji global

2.6 Visualisasi Kasus 2

library(vcd)
par(mfrow = c(1, 2), mar = c(4, 4, 3, 2))

# Mosaic plot
mosaic(tabel2,
       shade = TRUE, legend = TRUE,
       main  = "Mosaic Plot: Gender vs Partai Politik",
       labeling_args = list(set_varnames = c(
         Gender = "Gender", Partai = "Partai Politik")))

# Stacked bar chart proporsi
prop2 <- prop.table(tabel2, margin = 1) * 100
barplot(t(prop2),
        beside    = FALSE,
        col       = c("#3a7bd5", "#e05c5c", "#6dcfc2"),
        legend.text = colnames(tabel2),
        args.legend = list(x = "topright", bty = "n"),
        main      = "Distribusi Identifikasi Partai per Gender (%)",
        xlab      = "Gender",
        ylab      = "Persentase (%)",
        names.arg = c("Female", "Male"),
        ylim      = c(0, 115),
        border    = NA)


2.7 Identifikasi Kategori yang Paling Berkontribusi

kontribusi2 <- (tabel2 - uji_chisq2$expected)^2 / uji_chisq2$expected
pct2 <- round(kontribusi2 / uji_chisq2$statistic * 100, 2)

knitr::kable(pct2,
             caption = "Tabel 2.6 Kontribusi Setiap Sel terhadap χ² (%)",
             align = "c")
Tabel 2.6 Kontribusi Setiap Sel terhadap χ² (%)
Democrat Republican Independent
Female 25.21 17.30 2.10
Male 31.30 21.48 2.61

Interpretasi: Sel dengan persentase kontribusi tertinggi adalah penentu utama hubungan antara gender dan identifikasi partai. Sel dengan kontribusi > 25% menandakan pola ketidakindependenan yang paling dominan.


🎯 Kesimpulan Kasus 2

  • Seluruh frekuensi harapan > 5 → asumsi uji chi-square terpenuhi
  • Uji chi-square: χ² = 12.5693, df = 2, p-value = 0.0019 → Tolak Hâ‚€
  • Standardized residual mengidentifikasi sel-sel yang paling menyimpang dari kondisi independen
  • Partisi chi-square mengkonfirmasi bahwa kedua komponen (Dem vs Rep, dan Dem+Rep vs Ind) berkontribusi secara terpisah terhadap total asosiasi
  • Kesimpulan: Terdapat hubungan yang signifikan antara gender dan kecenderungan identifikasi partai politik. Perempuan dan laki-laki memiliki pola preferensi partai yang berbeda secara statistik.

Referensi

  • Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley.
  • Mindra Jaya, I. G. N. (2024). Analisis Data Kategori. RPubs. https://rpubs.com/mindra/DataKategori
  • R Core Team (2024). R: A Language and Environment for Statistical Computing. R Foundation.
  • Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag.

Laporan ini dibuat menggunakan R Markdown · Dipublikasikan ke RPubs · Hanifah Putri Hariel · S1 Statistika FMIPA Unpad