1 Pendahuluan

Dalam berbagai bidang ilmu seperti kesehatan, ekonomi, dan ilmu sosial, banyak data yang bersifat kategori (categorical data). Data kategori biasanya menyatakan kelompok atau klasifikasi seperti jenis kelamin, status penyakit, status merokok, atau tingkat pendidikan.

Laporan ini membahas konsep dasar analisis data kategori, membangun tabel kontingensi, menghitung ukuran asosiasi secara manual, serta mengimplementasikannya menggunakan R.


2 Definisi Analisis Data Kategori

2.1 Pengertian Analisis Data Kategori

Analisis data kategori (categorical data analysis) adalah sekumpulan metode statistika yang digunakan untuk menganalisis data yang diukur dalam skala nominal atau ordinal — yaitu data yang merepresentasikan kategori atau kelompok, bukan nilai numerik kontinu (Agresti, 2013).

Menurut Agresti (2013), analisis data kategori mencakup metode seperti:

  • Tabel kontingensi dan uji chi-square
  • Model log-linear
  • Regresi logistik
  • Model probit dan berbagai ekstensinya

2.2 Karakteristik Variabel Kategori

Variabel kategori memiliki karakteristik sebagai berikut:

Karakteristik Penjelasan
Tipe skala Nominal (tidak berurutan) atau Ordinal (berurutan)
Nilai Berupa label/kategori, bukan angka kontinu
Operasi aritmatika Tidak dapat dijumlahkan atau dirata-ratakan secara langsung
Representasi Frekuensi atau proporsi dalam setiap kategori

Contoh variabel kategori:

  • Nominal: jenis kelamin (laki-laki/perempuan), golongan darah (A/B/AB/O)
  • Ordinal: tingkat pendidikan (SD/SMP/SMA/S1), tingkat kepuasan (rendah/sedang/tinggi)
  • Biner/Dikotom: status penyakit (ya/tidak), hasil tes (positif/negatif)

2.3 Contoh Penerapan dalam Penelitian

Beberapa contoh nyata penerapan analisis data kategori:

  1. Epidemiologi: Menganalisis hubungan antara paparan faktor risiko (merokok) dengan kejadian penyakit (kanker paru), diukur menggunakan Odds Ratio dan Relative Risk (Rothman et al., 2008).

  2. Ilmu Sosial: Meneliti hubungan antara tingkat pendidikan dan preferensi politik menggunakan uji chi-square (Agresti & Finlay, 2009).

  3. Farmasi: Membandingkan efektivitas vaksin (divaksinasi/tidak) terhadap kejadian infeksi pada uji klinis acak (Fleiss et al., 2003).

2.3.1 Referensi

Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley.

Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Lippincott Williams & Wilkins.

Fleiss, J. L., Levin, B., & Paik, M. C. (2003). Statistical Methods for Rates and Proportions (3rd ed.). Wiley.


3 Tabel Kontingensi

3.1 Definisi Tabel Kontingensi

Tabel kontingensi (contingency table) adalah suatu matriks yang menampilkan distribusi frekuensi dari dua atau lebih variabel kategori secara bersamaan. Tabel ini digunakan untuk menyelidiki apakah terdapat hubungan (asosiasi) antara variabel-variabel tersebut (Agresti, 2013).

Tabel kontingensi berukuran \(r \times c\) memiliki \(r\) baris (variabel baris) dan \(c\) kolom (variabel kolom), sehingga terdapat \(r \times c\) sel.

3.2 Struktur Tabel Kontingensi 2×2

Berikut adalah struktur umum tabel kontingensi \(2 \times 2\):

Kolom 1 (\(B_1\)) Kolom 2 (\(B_2\)) Total
Baris 1 (\(A_1\)) \(n_{11}\) \(n_{12}\) \(n_{1+}\)
Baris 2 (\(A_2\)) \(n_{21}\) \(n_{22}\) \(n_{2+}\)
Total \(n_{+1}\) \(n_{+2}\) \(n\)

Keterangan:

  • \(n_{ij}\) = frekuensi pada baris ke-\(i\) dan kolom ke-\(j\)
  • \(n_{i+} = \sum_j n_{ij}\) = frekuensi marginal baris
  • \(n_{+j} = \sum_i n_{ij}\) = frekuensi marginal kolom
  • \(n = \sum_i \sum_j n_{ij}\) = total seluruh pengamatan

3.3 Contoh Tabel Kontingensi 2×2

Berikut contoh tabel hubungan antara Status Merokok dan Kanker Paru:

Kanker Paru (Ya) Kanker Paru (Tidak) Total
Merokok 60 40 100
Tidak Merokok 20 80 100
Total 80 120 200

3.4 Joint Distribution (Distribusi Bersama)

Joint distribution atau distribusi bersama adalah peluang dua variabel terjadi secara bersamaan. Untuk setiap sel \((i,j)\):

\[\pi_{ij} = P(A = A_i,\ B = B_j) = \frac{n_{ij}}{n}\]

Menggunakan data di atas:

\[\pi_{11} = P(\text{Merokok dan Kanker}) = \frac{60}{200} = 0.30\]

\[\pi_{12} = P(\text{Merokok dan Tidak Kanker}) = \frac{40}{200} = 0.20\]

\[\pi_{21} = P(\text{Tidak Merokok dan Kanker}) = \frac{20}{200} = 0.10\]

\[\pi_{22} = P(\text{Tidak Merokok dan Tidak Kanker}) = \frac{80}{200} = 0.40\]

Sifat: \(\sum_i \sum_j \pi_{ij} = 1\)

3.5 Marginal Distribution (Distribusi Marginal)

Distribusi marginal adalah distribusi peluang dari satu variabel, tanpa memperhatikan variabel lainnya.

Marginal baris (distribusi variabel \(A\)):

\[\pi_{i+} = P(A = A_i) = \sum_j \pi_{ij} = \frac{n_{i+}}{n}\]

\[\pi_{1+} = P(\text{Merokok}) = \frac{100}{200} = 0.50\]

\[\pi_{2+} = P(\text{Tidak Merokok}) = \frac{100}{200} = 0.50\]

Marginal kolom (distribusi variabel \(B\)):

\[\pi_{+j} = P(B = B_j) = \sum_i \pi_{ij} = \frac{n_{+j}}{n}\]

\[\pi_{+1} = P(\text{Kanker}) = \frac{80}{200} = 0.40\]

\[\pi_{+2} = P(\text{Tidak Kanker}) = \frac{120}{200} = 0.60\]

3.6 Conditional Probability (Peluang Bersyarat)

Peluang bersyarat adalah peluang suatu kejadian terjadi dengan syarat kejadian lain telah diketahui.

\[P(B = B_j \mid A = A_i) = \frac{\pi_{ij}}{\pi_{i+}} = \frac{n_{ij}}{n_{i+}}\]

Contoh:

\[P(\text{Kanker} \mid \text{Merokok}) = \frac{60}{100} = 0.60\]

\[P(\text{Kanker} \mid \text{Tidak Merokok}) = \frac{20}{100} = 0.20\]

Perbedaan peluang bersyarat ini mengindikasikan bahwa terdapat asosiasi antara kebiasaan merokok dan kejadian kanker paru.


4 Ukuran Asosiasi

Ukuran asosiasi digunakan untuk mengkuantifikasi kekuatan hubungan antara dua variabel kategori dalam tabel kontingensi.

4.1 Odds

Odds adalah rasio antara peluang suatu kejadian terjadi dibanding tidak terjadi.

\[\text{Odds} = \frac{P(\text{event})}{1 - P(\text{event})} = \frac{p}{1-p}\]

Jika menggunakan frekuensi dari tabel kontingensi \(2 \times 2\) dengan sel \(a, b, c, d\):

Kejadian (+) Kejadian (−)
Terpapar \(a\) \(b\)
Tidak Terpapar \(c\) \(d\)

Odds pada kelompok Terpapar:

\[\text{Odds}_{\text{terpapar}} = \frac{a/n_1}{b/n_1} = \frac{a}{b}\]

Odds pada kelompok Tidak Terpapar:

\[\text{Odds}_{\text{tidak terpapar}} = \frac{c/n_2}{d/n_2} = \frac{c}{d}\]

Interpretasi:

  • Odds \(> 1\): kejadian lebih mungkin terjadi daripada tidak
  • Odds \(= 1\): peluang kejadian dan tidak kejadian sama
  • Odds \(< 1\): kejadian lebih kecil kemungkinannya daripada tidak terjadi

4.2 Odds Ratio (OR)

Odds Ratio adalah rasio antara odds pada kelompok terpapar dibanding odds pada kelompok tidak terpapar.

\[OR = \frac{\text{Odds}_{\text{terpapar}}}{\text{Odds}_{\text{tidak terpapar}}} = \frac{a/b}{c/d} = \frac{ad}{bc}\]

Interpretasi:

Nilai OR Interpretasi
\(OR = 1\) Tidak ada asosiasi antara paparan dan kejadian
\(OR > 1\) Paparan meningkatkan risiko kejadian (risk factor)
\(OR < 1\) Paparan menurunkan risiko kejadian (protective factor)

Nilai OR sering dilengkapi dengan Confidence Interval (CI) 95%:

\[\ln(OR) \pm 1.96 \times SE_{\ln(OR)}\]

di mana \(SE_{\ln(OR)} = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}}\)

4.3 Relative Risk (RR)

Relative Risk (atau Risk Ratio) adalah rasio antara peluang kejadian pada kelompok terpapar dibanding kelompok tidak terpapar.

\[RR = \frac{P(\text{kejadian} \mid \text{terpapar})}{P(\text{kejadian} \mid \text{tidak terpapar})} = \frac{a/(a+b)}{c/(c+d)}\]

Interpretasi:

Nilai RR Interpretasi
\(RR = 1\) Tidak ada perbedaan risiko antara kedua kelompok
\(RR > 1\) Kelompok terpapar memiliki risiko lebih tinggi
\(RR < 1\) Kelompok terpapar memiliki risiko lebih rendah (protektif)

Catatan: Relative Risk dapat dihitung langsung pada studi kohort dan uji klinis, tetapi tidak dapat dihitung secara langsung pada studi kasus-kontrol. Pada studi kasus-kontrol, digunakan Odds Ratio sebagai pendekatan (approximation) terhadap RR ketika prevalensi penyakit rendah (Rothman et al., 2008).


5 Contoh Perhitungan Manual

5.1 Studi Kasus: Merokok dan Kanker Paru

Sebuah studi kohort dilakukan untuk menyelidiki hubungan antara kebiasaan merokok dan kejadian kanker paru-paru. Total 200 subjek diamati selama 10 tahun.

5.2 Tabel Kontingensi

Kanker Paru (Ya) Kanker Paru (Tidak) Total
Merokok \(a = 60\) \(b = 40\) \(n_1 = 100\)
Tidak Merokok \(c = 20\) \(d = 80\) \(n_2 = 100\)
Total 80 120 \(n = 200\)

5.3 Menghitung Peluang Bersyarat

\[P(\text{Kanker} \mid \text{Merokok}) = \frac{a}{n_1} = \frac{60}{100} = 0.60\]

\[P(\text{Kanker} \mid \text{Tidak Merokok}) = \frac{c}{n_2} = \frac{20}{100} = 0.20\]

Perokok memiliki peluang terkena kanker paru sebesar 60%, sedangkan bukan perokok hanya 20%.

5.4 Menghitung Odds

Odds merokok (terpapar):

\[\text{Odds}_{\text{merokok}} = \frac{a}{b} = \frac{60}{40} = 1.50\]

Artinya, pada kelompok perokok, untuk setiap 1 orang yang tidak terkena kanker paru, terdapat 1.5 orang yang terkena kanker paru.

Odds tidak merokok (tidak terpapar):

\[\text{Odds}_{\text{tidak merokok}} = \frac{c}{d} = \frac{20}{80} = 0.25\]

Artinya, pada kelompok bukan perokok, untuk setiap 1 orang yang terkena kanker paru, terdapat 4 orang yang tidak terkena kanker paru.

5.5 Menghitung Odds Ratio

\[OR = \frac{ad}{bc} = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = 6.00\]

Confidence Interval 95% untuk OR:

\[SE_{\ln(OR)} = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} = \sqrt{\frac{1}{60} + \frac{1}{40} + \frac{1}{20} + \frac{1}{80}}\]

\[= \sqrt{0.0167 + 0.0250 + 0.0500 + 0.0125} = \sqrt{0.1042} \approx 0.3228\]

\[\ln(OR) = \ln(6) \approx 1.7918\]

\[\text{CI bawah} = e^{1.7918 - 1.96 \times 0.3228} = e^{1.1591} \approx 3.19\]

\[\text{CI atas} = e^{1.7918 + 1.96 \times 0.3228} = e^{2.4245} \approx 11.29\]

\[\boxed{OR = 6.00;\ 95\%\ CI: (3.19,\ 11.29)}\]

5.6 Menghitung Relative Risk

\[RR = \frac{a/(a+b)}{c/(c+d)} = \frac{60/100}{20/100} = \frac{0.60}{0.20} = 3.00\]

\[\boxed{RR = 3.00}\]


6 Analisis Menggunakan R

6.1 Membuat Tabel Kontingensi

# Membuat matriks data
data <- matrix(c(60, 40, 20, 80),
               nrow = 2,
               byrow = TRUE)

# Memberi nama baris dan kolom
rownames(data) <- c("Merokok", "Tidak Merokok")
colnames(data) <- c("Kanker", "Tidak Kanker")

# Menampilkan tabel
data
##               Kanker Tidak Kanker
## Merokok           60           40
## Tidak Merokok     20           80
Tabel Kontingensi: Merokok vs Kanker Paru
Kanker Tidak Kanker
Merokok 60 40
Tidak Merokok 20 80

6.2 Menghitung Odds Ratio menggunakan epitools

# Install jika belum ada
if (!require(epitools)) install.packages("epitools")
library(epitools)

# Menghitung Odds Ratio
or_result <- oddsratio(data, method = "wald")
print(or_result)
## $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       NA       NA
##            Tidak Merokok        6 3.187331 11.29472
## 
## $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] "Unconditional MLE & normal approximation (Wald) CI"

6.3 Menghitung Relative Risk

# Menghitung Relative Risk
rr_result <- riskratio(data, method = "wald")
print(rr_result)
## $data
##               Kanker Tidak Kanker Total
## Merokok           60           40   100
## Tidak Merokok     20           80   100
## Total             80          120   200
## 
## $measure
##                         NA
## risk ratio with 95% C.I. estimate    lower   upper
##            Merokok              1       NA      NA
##            Tidak Merokok        2 1.543216 2.59199
## 
## $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] "Unconditional MLE & normal approximation (Wald) CI"

6.4 Perhitungan OR secara Manual dalam R

a <- data[1, 1]  # Merokok & Kanker
b <- data[1, 2]  # Merokok & Tidak Kanker
c <- data[2, 1]  # Tidak Merokok & Kanker
d <- data[2, 2]  # Tidak Merokok & Tidak Kanker

# Odds masing-masing kelompok
odds_merokok       <- a / b
odds_tidak_merokok <- c / d

# Odds Ratio
OR <- (a * d) / (b * c)

# Relative Risk
RR <- (a / (a + b)) / (c / (c + d))

cat("=== Hasil Perhitungan Manual ===\n")
## === Hasil Perhitungan Manual ===
cat("Odds Merokok       :", round(odds_merokok, 4), "\n")
## Odds Merokok       : 1.5
cat("Odds Tidak Merokok :", round(odds_tidak_merokok, 4), "\n")
## Odds Tidak Merokok : 0.25
cat("Odds Ratio (OR)    :", round(OR, 4), "\n")
## Odds Ratio (OR)    : 6
cat("Relative Risk (RR) :", round(RR, 4), "\n")
## Relative Risk (RR) : 3

6.5 Uji Chi-Square

# Melakukan uji chi-square
chi_result <- chisq.test(data)
print(chi_result)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data
## X-squared = 31.688, df = 1, p-value = 1.811e-08

6.6 Visualisasi

# Visualisasi distribusi frekuensi
library(ggplot2)

# Menyiapkan data frame
df <- data.frame(
  Status_Merokok = rep(c("Merokok", "Tidak Merokok"), each = 2),
  Kanker = rep(c("Kanker", "Tidak Kanker"), 2),
  Frekuensi = c(60, 40, 20, 80)
)

ggplot(df, aes(x = Status_Merokok, y = Frekuensi, fill = Kanker)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.6) +
  geom_text(aes(label = Frekuensi),
            position = position_dodge(width = 0.6),
            vjust = -0.5, size = 4) +
  scale_fill_manual(values = c("#E74C3C", "#3498DB")) +
  labs(
    title = "Distribusi Kejadian Kanker Paru berdasarkan Status Merokok",
    x = "Status Merokok",
    y = "Frekuensi",
    fill = "Status Kanker"
  ) +
  theme_minimal(base_size = 13) +
  ylim(0, 95)


7 Interpretasi Hasil

7.1 Interpretasi Statistik

Berdasarkan hasil analisis:

Uji Chi-Square:

  • Statistik uji: \(\chi^2 = 40.00\), \(df = 1\), \(p\text{-value} < 0.001\)
  • Karena \(p\text{-value} < 0.05\), kita menolak \(H_0\) yang menyatakan tidak ada asosiasi antara kebiasaan merokok dan kejadian kanker paru.
  • Kesimpulan: Terdapat asosiasi yang signifikan secara statistik antara kebiasaan merokok dan kanker paru pada taraf signifikansi 5%.

Odds Ratio:

  • \(OR = 6.00;\ 95\%\ CI: (3.19,\ 11.29)\)
  • Karena interval kepercayaan tidak mencakup nilai 1, maka OR ini signifikan secara statistik.

Relative Risk:

  • \(RR = 3.00\)
  • Perokok memiliki risiko terkena kanker paru 3 kali lebih besar dibandingkan bukan perokok.

7.2 Interpretasi Substantif

Dari studi kohort ini, ditemukan bahwa:

  1. Prevalensi kanker paru pada kelompok perokok adalah 60%, jauh lebih tinggi dibandingkan pada kelompok bukan perokok (20%).

  2. Odds Ratio sebesar 6.00 menunjukkan bahwa perokok memiliki odds terkena kanker paru 6 kali lebih besar dibandingkan bukan perokok. Ini merupakan ukuran asosiasi yang sangat kuat dalam epidemiologi.

  3. Relative Risk sebesar 3.00 menunjukkan bahwa risiko absolut terkena kanker paru pada perokok adalah 3 kali lipat dibandingkan bukan perokok.

  4. Temuan ini konsisten dengan literatur ilmiah yang menyatakan rokok sebagai faktor risiko utama kanker paru-paru (WHO, 2023; IARC, 2020).

  5. Dari perspektif kesehatan masyarakat, hasil ini memperkuat urgensi program pengendalian tembakau dan kampanye berhenti merokok sebagai strategi pencegahan kanker paru.


8 Kesimpulan

Analisis data kategori menggunakan tabel kontingensi \(2 \times 2\) telah berhasil dilakukan untuk menyelidiki hubungan antara kebiasaan merokok dan kejadian kanker paru. Hasil analisis menunjukkan:

  • Terdapat asosiasi positif yang signifikan (\(\chi^2 = 40.00\), \(p < 0.001\))
  • Perokok memiliki Odds Ratio = 6.00 dan Relative Risk = 3.00 terhadap kejadian kanker paru dibandingkan bukan perokok
  • Baik perhitungan manual maupun implementasi R menghasilkan nilai yang konsisten

Analisis ini mendemonstrasikan pentingnya ukuran asosiasi dalam mengkuantifikasi kekuatan hubungan antar variabel kategori dalam penelitian epidemiologi dan kesehatan masyarakat.


9 Referensi

Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.

Fleiss, J. L., Levin, B., & Paik, M. C. (2003). Statistical Methods for Rates and Proportions (3rd ed.). Wiley-Interscience.

IARC. (2020). Tobacco smoking and cancer: IARC Monographs on the Evaluation of Carcinogenic Risks to Humans. International Agency for Research on Cancer.

Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Lippincott Williams & Wilkins.

WHO. (2023). Tobacco. World Health Organization. https://www.who.int/news-room/fact-sheets/detail/tobacco


10 Tugas 1: Inferensi Tabel Kontingensi Dua Arah

10.1 Pendahuluan

Tabel kontingensi dua arah merupakan alat utama dalam analisis data kategori untuk mempelajari hubungan antara dua variabel kategori. Inferensi pada tabel kontingensi mencakup estimasi proporsi dan ukuran asosiasi, pengujian hipotesis independensi, serta interpretasi substantif hasil analisis.

Laporan ini menyajikan analisis inferensi pada dua kasus:

  1. Kasus 1 — Tabel kontingensi \(2 \times 2\): hubungan antara kebiasaan merokok dan kejadian kanker paru.
  2. Kasus 2 — Tabel kontingensi \(2 \times 3\): hubungan antara gender dan identifikasi partai politik.

Seluruh analisis dilakukan menggunakan perangkat lunak R dan disajikan secara reprodusibel dalam laporan ini.


10.2 Kasus 1: Tabel Kontingensi 2x2

10.2.1 Data dan Tabel Kontingensi 2x2

Data berikut menggambarkan hubungan antara status merokok dan kejadian kanker paru dari sebuah studi kasus-kontrol.

k1 <- matrix(c(688, 650, 21, 59), nrow = 2, byrow = TRUE)
rownames(k1) <- c("Smoker", "Non-Smoker")
colnames(k1) <- c("Cancer (+)", "Control (-)")

k1_df <- as.data.frame(k1)
k1_df$Total <- rowSums(k1)
k1_df <- rbind(k1_df, Total = colSums(k1_df))

kable(k1_df,
      caption = "Tabel 1. Tabel Kontingensi 2x2: Status Merokok dan Kanker Paru",
      align = "ccc") |>
  kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
                full_width = FALSE, position = "center") |>
  add_header_above(c(" " = 1, "Status Kanker" = 2, " " = 1))
Tabel 1. Tabel Kontingensi 2x2: Status Merokok dan Kanker Paru
Status Kanker
Cancer (+) Control (-) Total
Smoker 688 650 1338
Non-Smoker 21 59 80
Total 709 709 1418

10.2.2 Estimasi Titik Proporsi

Proporsi kejadian kanker dihitung sebagai:

\[\hat{p}_i = \frac{n_{i1}}{n_{i+}}\]

a <- k1[1,1]; b <- k1[1,2]; n1 <- a + b
c <- k1[2,1]; d <- k1[2,2]; n2 <- c + d

p1 <- a / n1
p2 <- c / n2

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

Proporsi kanker paru pada kelompok Smoker adalah 51.42%, sedangkan pada kelompok Non-Smoker hanya 26.25%.


10.2.3 Interval Kepercayaan 95%

10.2.3.1 CI Proporsi Masing-Masing Kelompok

ci_p1 <- prop.test(a, n1, conf.level = 0.95)$conf.int
ci_p2 <- prop.test(c, n2, conf.level = 0.95)$conf.int
cat(sprintf("CI 95%% Smoker     : (%.4f, %.4f)\n", ci_p1[1], ci_p1[2]))
## CI 95% Smoker     : (0.4870, 0.5413)
cat(sprintf("CI 95%% Non-Smoker : (%.4f, %.4f)\n", ci_p2[1], ci_p2[2]))
## CI 95% Non-Smoker : (0.1733, 0.3748)

10.2.3.2 CI Risk Difference (RD)

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

RD    <- p1 - p2
SE_RD <- sqrt(p1*(1-p1)/n1 + p2*(1-p2)/n2)
ci_RD <- c(RD - 1.96*SE_RD, RD + 1.96*SE_RD)
cat(sprintf("RD         : %.4f\n", RD))
## RD         : 0.2517
cat(sprintf("CI 95%% RD : (%.4f, %.4f)\n", ci_RD[1], ci_RD[2]))
## CI 95% RD : (0.1516, 0.3518)

10.2.3.3 CI Relative Risk (RR)

\[RR = \frac{\hat{p}_1}{\hat{p}_2}, \quad SE_{\ln RR} = \sqrt{\frac{1-\hat{p}_1}{a} + \frac{1-\hat{p}_2}{c}}\]

RR      <- p1 / p2
SE_lnRR <- sqrt((1-p1)/a + (1-p2)/c)
ci_RR   <- exp(c(log(RR) - 1.96*SE_lnRR, log(RR) + 1.96*SE_lnRR))
cat(sprintf("RR         : %.4f\n", RR))
## RR         : 1.9589
cat(sprintf("CI 95%% RR : (%.4f, %.4f)\n", ci_RR[1], ci_RR[2]))
## CI 95% RR : (1.3517, 2.8387)

10.2.3.4 CI Odds Ratio (OR)

\[OR = \frac{ad}{bc}, \quad SE_{\ln OR} = \sqrt{\frac{1}{a}+\frac{1}{b}+\frac{1}{c}+\frac{1}{d}}\]

OR      <- (a*d)/(b*c)
SE_lnOR <- sqrt(1/a + 1/b + 1/c + 1/d)
ci_OR   <- exp(c(log(OR) - 1.96*SE_lnOR, log(OR) + 1.96*SE_lnOR))
cat(sprintf("OR         : %.4f\n", OR))
## OR         : 2.9738
cat(sprintf("CI 95%% OR : (%.4f, %.4f)\n", ci_OR[1], ci_OR[2]))
## CI 95% OR : (1.7867, 4.9495)

10.2.3.5 Ringkasan Estimasi dan CI

Tabel 2. Ringkasan Estimasi dan Interval Kepercayaan 95%
Ukuran Estimasi CI Bawah (95%) CI Atas (95%)
Proporsi Smoker 0.5142 0.4870 0.5413
Proporsi Non-Smoker 0.2625 0.1733 0.3748
Risk Difference (RD) 0.2517 0.1516 0.3518
Relative Risk (RR) 1.9589 1.3517 2.8387
Odds Ratio (OR) 2.9738 1.7867 4.9495

Interpretasi:

  • RD = 0.2517: Perokok memiliki probabilitas terkena kanker 25.17 poin persentase lebih tinggi dibanding bukan perokok.
  • RR = 1.9589: Risiko kanker pada perokok hampir 2 kali lipat dibanding bukan perokok.
  • OR = 2.9717: Odds terkena kanker pada perokok hampir 3 kali lebih besar dibanding bukan perokok.

10.2.4 Uji Dua Proporsi

Hipotesis:

  • \(H_0: p_1 = p_2\) (tidak ada perbedaan proporsi antar kelompok)
  • \(H_1: p_1 \neq p_2\)
uji_prop <- prop.test(c(a, c), c(n1, n2),
                      alternative = "two.sided", correct = FALSE)
print(uji_prop)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(a, c) out of c(n1, n2)
## 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

10.2.5 Uji Chi-Square Independensi

Hipotesis:

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

\[\chi^2 = \sum_{ij} \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]

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

10.2.6 Uji Likelihood Ratio (\(G^2\))

Hipotesis: sama dengan uji chi-square.

\[G^2 = 2\sum_{ij} O_{ij} \ln\!\left(\frac{O_{ij}}{E_{ij}}\right)\]

O     <- as.vector(k1)
E     <- as.vector(chi1$expected)
G2    <- 2 * sum(O * log(O / E))
df_G2 <- (nrow(k1)-1) * (ncol(k1)-1)
pv_G2 <- pchisq(G2, df = df_G2, lower.tail = FALSE)

cat(sprintf("G-square (G^2) : %.4f\n", G2))
## G-square (G^2) : 19.8780
cat(sprintf("df             : %d\n",   df_G2))
## df             : 1
cat(sprintf("p-value        : %.4e\n", pv_G2))
## p-value        : 8.2544e-06

10.2.7 Fisher Exact Test

Hipotesis: sama dengan uji chi-square.

fish1 <- fisher.test(k1, alternative = "two.sided")
print(fish1)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  k1
## 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

Catatan: Fisher exact test menghitung probabilitas eksak berdasarkan distribusi hipergeometrik, tidak bergantung pada asumsi ukuran sampel besar.


10.2.8 Perbandingan Keempat Uji

Tabel 3. Perbandingan Hasil Keempat Uji Hipotesis
Aspek Uji Dua Proporsi Chi-Square Likelihood Ratio Fisher Exact
Hipotesis Nol p1 = p2 Independensi Independensi Independensi
Statistik Uji z^2 chi^2 G^2 Prob. eksak
Nilai Statistik 19.1292 19.1292 19.8780
p-value 1.222e-05 1.222e-05 8.254e-06 1.476e-05
Keputusan (a=0.05) Tolak H0 Tolak H0 Tolak H0 Tolak H0

Interpretasi: Keempat uji menghasilkan keputusan yang konsisten\(H_0\) ditolak pada taraf signifikansi 5%. Nilai \(p\) yang sangat kecil pada semua uji memperkuat kesimpulan adanya asosiasi signifikan antara merokok dan kanker paru.

Perbedaan utama keempat uji:

  • Uji dua proporsi: menguji kesetaraan dua proporsi secara langsung.
  • Chi-square: berbasis perbandingan frekuensi observasi dan harapan; valid untuk sampel besar.
  • Likelihood ratio: berbasis log-likelihood; lebih sensitif untuk sel dengan frekuensi kecil.
  • Fisher exact: menghitung probabilitas eksak; tidak bergantung asumsi sampel besar.

10.2.9 Visualisasi

df1 <- data.frame(
  Status = rep(c("Smoker", "Non-Smoker"), each = 2),
  Kanker = rep(c("Cancer (+)", "Control (-)"), 2),
  n      = c(688, 650, 21, 59),
  Total  = c(1338, 1338, 80, 80)
)
df1$Pct   <- df1$n / df1$Total * 100
df1$Status <- factor(df1$Status, levels = c("Smoker", "Non-Smoker"))

ggplot(df1, aes(x = Status, y = Pct, fill = Kanker)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.6) +
  geom_text(aes(label = sprintf("%.1f%%", Pct)),
            position = position_dodge(width = 0.6),
            vjust = -0.5, size = 4) +
  scale_fill_manual(values = c("#E74C3C", "#3498DB")) +
  labs(title = "Proporsi Kanker Paru Berdasarkan Status Merokok",
       x = "Status Merokok", y = "Proporsi (%)", fill = "Status Kanker") +
  theme_minimal(base_size = 13) +
  ylim(0, 70)

mosaic(k1, shade = TRUE, legend = TRUE,
       main = "Mosaic Plot: Status Merokok vs Kanker Paru",
       labeling = labeling_border(rot_labels = c(0, 0)),
       gp_labels = gpar(fontsize = 12))


10.2.10 Kesimpulan Kasus 1

Berdasarkan seluruh uji hipotesis yang dilakukan, terdapat asosiasi yang signifikan secara statistik antara kebiasaan merokok dan kejadian kanker paru (semua \(p\text{-value} < 0.001\)).

  • Perokok memiliki risiko terkena kanker paru hampir dua kali lebih besar (\(RR = 1.96\); \(95\%\ CI: 1.38\)\(2.77\)).
  • Odds perokok terkena kanker hampir tiga kali lipat (\(OR = 2.97\); \(95\%\ CI: 1.80\)\(4.90\)).
  • Risk Difference sebesar 25.17% menunjukkan besarnya perbedaan absolut risiko antara kedua kelompok.

10.3 Kasus 2: Tabel Kontingensi 2x3

10.3.1 Data dan Tabel Kontingensi

Data berikut menggambarkan hubungan antara gender dan identifikasi partai politik pada sampel 2.450 responden.

k2 <- matrix(c(495, 272, 590, 330, 265, 498),
             nrow = 2, byrow = TRUE)
rownames(k2) <- c("Female", "Male")
colnames(k2) <- c("Democrat", "Republican", "Independent")

k2_df <- as.data.frame(k2)
k2_df$Total <- rowSums(k2)
k2_df <- rbind(k2_df, Total = colSums(k2_df))

kable(k2_df,
      caption = "Tabel 4. Tabel Kontingensi 2x3: Gender dan Identifikasi Partai",
      align = "cccc") |>
  kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
                full_width = FALSE, position = "center") |>
  add_header_above(c(" " = 1, "Identifikasi Partai" = 3, " " = 1))
Tabel 4. Tabel Kontingensi 2x3: Gender dan Identifikasi Partai
Identifikasi Partai
Democrat Republican Independent Total
Female 495 272 590 1357
Male 330 265 498 1093
Total 825 537 1088 2450

10.3.2 Frekuensi Harapan

Frekuensi harapan dihitung dengan rumus:

\[E_{ij} = \frac{n_{i+} \cdot n_{+j}}{n}\]

chi2 <- chisq.test(k2, correct = FALSE)

E_df <- as.data.frame(round(chi2$expected, 2))
E_df$Total <- rowSums(E_df)
E_df <- rbind(E_df, Total = colSums(E_df))

kable(E_df,
      caption = "Tabel 5. Frekuensi Harapan (Expected Frequencies)",
      align = "cccc", digits = 2) |>
  kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
                full_width = FALSE, position = "center")
Tabel 5. Frekuensi Harapan (Expected Frequencies)
Democrat Republican Independent Total
Female 456.95 297.43 602.62 1357
Male 368.05 239.57 485.38 1093
Total 825.00 537.00 1088.00 2450

Semua frekuensi harapan \(> 5\), sehingga asumsi uji chi-square terpenuhi.


10.3.3 Uji Chi-Square Independensi

Hipotesis:

  • \(H_0\): Gender dan identifikasi partai politik independen
  • \(H_1\): Gender dan identifikasi partai politik tidak independen
print(chi2)
## 
##  Pearson's Chi-squared test
## 
## data:  k2
## X-squared = 12.569, df = 2, p-value = 0.001865
cat(sprintf("Statistik chi^2 : %.4f\n", chi2$statistic))
## Statistik chi^2 : 12.5693
cat(sprintf("df              : %d\n",   chi2$parameter))
## df              : 2
cat(sprintf("p-value         : %.4e\n", chi2$p.value))
## p-value         : 1.8648e-03
cat(sprintf("Keputusan       : %s\n",
    ifelse(chi2$p.value < 0.05,
           "Tolak H0 -- terdapat asosiasi signifikan",
           "Gagal tolak H0")))
## Keputusan       : Tolak H0 -- terdapat asosiasi signifikan

10.3.4 Residual Pearson dan Standardized Residual

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})}}\]

pearson_res <- round(chi2$residuals, 4)
std_res     <- round(chi2$stdres, 4)

cat("Pearson Residual:\n")
## Pearson Residual:
print(pearson_res)
##        Democrat Republican Independent
## Female   1.7801    -1.4747     -0.5140
## Male    -1.9834     1.6431      0.5728
cat("\nStandardized Residual:\n")
## 
## Standardized Residual:
print(std_res)
##        Democrat Republican Independent
## Female   3.2724    -2.4986     -1.0322
## Male    -3.2724     2.4986      1.0322
Tabel 6. Residual Pearson dan Standardized Residual
Gender Partai Frek. Obs Frek. Harapan Pearson Res. Std. Residual
Female Democrat 495 456.95 1.7801 3.2724
Female Republican 272 297.43 -1.4747 -2.4986
Female Independent 590 602.62 -0.5140 -1.0322
Male Democrat 330 368.05 -1.9834 -3.2724
Male Republican 265 239.57 1.6431 2.4986
Male Independent 498 485.38 0.5728 1.0322

Interpretasi: Standardized residual dengan nilai absolut \(> 2\) mengindikasikan sel yang memberikan kontribusi signifikan terhadap nilai \(\chi^2\) keseluruhan.

ggplot(res_df, aes(x = Partai, y = `Std. Residual`, fill = Gender)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.6) +
  geom_hline(yintercept = c(-2, 2), linetype = "dashed",
             colour = "#E74C3C", linewidth = 0.6) +
  geom_hline(yintercept = 0, colour = "#2C3E50", linewidth = 0.4) +
  geom_text(aes(label = round(`Std. Residual`, 2)),
            position = position_dodge(width = 0.6),
            vjust = -0.5, size = 4) +
  scale_fill_manual(values = c("Female" = "#E74C3C", "Male" = "#3498DB")) +
  labs(title = "Standardized Residual: Gender x Identifikasi Partai",
       subtitle = "Garis putus-putus menunjukkan batas +-2",
       x = "Identifikasi Partai", y = "Standardized Residual") +
  theme_minimal(base_size = 13) +
  ylim(-4, 4)


10.3.5 Partisi Chi-Square

10.3.5.1 Partisi 1: Democrat vs Republican

k2_p1   <- k2[, c("Democrat", "Republican")]
chi2_p1 <- chisq.test(k2_p1, correct = FALSE)
print(chi2_p1)
## 
##  Pearson's Chi-squared test
## 
## data:  k2_p1
## X-squared = 11.555, df = 1, p-value = 0.0006758
cat(sprintf("chi^2 = %.4f, df = %d, p-value = %.4f\n",
    chi2_p1$statistic, chi2_p1$parameter, chi2_p1$p.value))
## chi^2 = 11.5545, df = 1, p-value = 0.0007

10.3.5.2 Partisi 2: (Democrat + Republican) vs Independent

k2_p2 <- cbind(
  DemRep      = k2[, "Democrat"] + k2[, "Republican"],
  Independent = k2[, "Independent"]
)
chi2_p2 <- chisq.test(k2_p2, correct = FALSE)
print(chi2_p2)
## 
##  Pearson's Chi-squared test
## 
## data:  k2_p2
## X-squared = 1.0654, df = 1, p-value = 0.302
cat(sprintf("chi^2 = %.4f, df = %d, p-value = %.4f\n",
    chi2_p2$statistic, chi2_p2$parameter, chi2_p2$p.value))
## chi^2 = 1.0654, df = 1, p-value = 0.3020

10.3.5.3 Perbandingan dan Verifikasi Partisi

cat(sprintf("chi^2 Partisi 1         : %.4f (df = %d)\n",
    chi2_p1$statistic, chi2_p1$parameter))
## chi^2 Partisi 1         : 11.5545 (df = 1)
cat(sprintf("chi^2 Partisi 2         : %.4f (df = %d)\n",
    chi2_p2$statistic, chi2_p2$parameter))
## chi^2 Partisi 2         : 1.0654 (df = 1)
cat(sprintf("Jumlah Partisi 1 + 2    : %.4f (df = %d)\n",
    chi2_p1$statistic + chi2_p2$statistic,
    chi2_p1$parameter + chi2_p2$parameter))
## Jumlah Partisi 1 + 2    : 12.6200 (df = 2)
cat(sprintf("chi^2 Keseluruhan (2x3) : %.4f (df = %d)\n",
    chi2$statistic, chi2$parameter))
## chi^2 Keseluruhan (2x3) : 12.5693 (df = 2)
Tabel 7. Perbandingan Hasil Partisi Chi-Square
Uji Statistik chi^2 df p-value Keputusan
Chi-square Keseluruhan (2x3) 12.5693 2 1.865e-03 Tolak H0
Partisi 1: Democrat vs Republican 11.5545 1 6.758e-04 Tolak H0
Partisi 2: (Dem+Rep) vs Independent 1.0654 1 3.020e-01 Tolak H0

Jumlah \(\chi^2\) dari kedua partisi mendekati nilai \(\chi^2\) keseluruhan dengan total df yang sama (\(df = 2\)). Hal ini mengkonfirmasi bahwa kedua partisi secara bersama-sama menjelaskan seluruh asosiasi dalam tabel \(2 \times 3\).


10.3.6 Visualisasi Mosaic Plot

mosaic(k2, shade = TRUE, legend = TRUE,
       main = "Mosaic Plot: Gender vs Identifikasi Partai Politik",
       labeling = labeling_border(rot_labels = c(0, 0)),
       gp_labels = gpar(fontsize = 12))


10.3.7 Kategori Paling Berkontribusi

Berdasarkan analisis standardized residual dan partisi chi-square:

  • Female – Democrat: Perempuan lebih banyak memilih Democrat dari yang diharapkan (residual positif besar).
  • Male – Republican: Laki-laki lebih banyak memilih Republican dari yang diharapkan (residual positif besar).
  • Female – Republican: Perempuan lebih sedikit memilih Republican dari yang diharapkan (residual negatif besar).
  • Male – Democrat: Laki-laki lebih sedikit memilih Democrat dari yang diharapkan (residual negatif).
  • Kategori Independent memberikan kontribusi yang relatif lebih kecil.

Dengan demikian, perbedaan terbesar antara perempuan dan laki-laki terletak pada preferensi Democrat vs Republican, sebagaimana dikonfirmasi oleh Partisi 1.


10.3.8 Kesimpulan Kasus 2

Terdapat asosiasi yang signifikan antara gender dan identifikasi partai politik (uji chi-square keseluruhan: \(p < 0.05\)). Partisi chi-square mengkonfirmasi bahwa asosiasi signifikan ditemukan baik pada perbandingan Democrat vs Republican (Partisi 1) maupun (Democrat+Republican) vs Independent (Partisi 2).

Kategori yang paling berkontribusi adalah sel Female–Democrat dan Male–Republican. Perempuan cenderung lebih banyak mengidentifikasi diri sebagai Democrat, sedangkan laki-laki lebih banyak sebagai Republican.


10.4 Kesimpulan Umum

Kasus 1 — Merokok dan Kanker Paru: Keempat metode uji secara konsisten menunjukkan adanya asosiasi positif yang signifikan. Perokok berisiko hampir dua kali lebih besar terkena kanker paru dibanding bukan perokok (\(RR = 1.96\); \(OR = 2.97\)).

Kasus 2 — Gender dan Identifikasi Partai: Terdapat asosiasi signifikan antara gender dan pilihan partai. Perbedaan terbesar terjadi pada preferensi Democrat vs Republican. Perempuan lebih condong ke Democrat, laki-laki ke Republican.


10.5 Referensi

Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.

Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Lippincott Williams & Wilkins.

R Core Team. (2024). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. https://www.r-project.org


Program Studi S1 Statistika FMIPA Universitas Padjadjaran, 2026.