1 Definisi Analisis Data Kategori

1.1 Pengertian Analisis Data Kategori

📘 Definisi

Analisis data kategori (categorical data analysis) adalah cabang statistika yang berfokus pada pengumpulan, penyajian, dan inferensi terhadap data yang diukur dalam skala nominal atau ordinal — yakni data yang nilainya berupa kategori atau label, bukan angka kontinu (Agresti, 2013).

Berbeda dengan analisis regresi linier yang mengasumsikan variabel respons berdistribusi normal dan bersifat kontinu, analisis data kategori menggunakan distribusi probabilitas diskrit seperti binomial, multinomial, dan Poisson. Metode yang umum digunakan meliputi:

  • Uji chi-square (chi-square test)
  • Regresi logistik (logistic regression)
  • Analisis log-linier (log-linear analysis)
  • Model generalized linear (GLM) dengan fungsi tautan yang sesuai

(Agresti, 2013; Hosmer & Lemeshow, 2000)

1.2 Karakteristik Variabel Kategori

Variabel kategori memiliki sejumlah karakteristik pembeda sebagai berikut:

Karakteristik Penjelasan Contoh
Skala Nominal Kategori tanpa urutan yang bermakna Jenis kelamin, golongan darah (A/B/AB/O)
Skala Ordinal Kategori dengan urutan, tetapi jarak tidak sama Tingkat pendidikan (SD < SMP < SMA < PT)
Bersifat Diskrit Nilai hanya berupa bilangan bulat non-negatif Jumlah pasien, jumlah kejadian
Tidak Asumsi Normalitas Distribusi tidak harus normal Distribusi multinomial atau Poisson
Representasi Frekuensi Disajikan sebagai frekuensi atau proporsi Tabel frekuensi, tabel kontingensi

1.3 Jenis-Jenis Skala Pengukuran Kategori

📋 Klasifikasi Skala

1. Skala Nominal
Kategori yang hanya berfungsi sebagai label tanpa urutan. Operasi matematika tidak bermakna. Contoh: status pernikahan (menikah / belum menikah / cerai), jenis pekerjaan.

2. Skala Ordinal
Kategori yang memiliki urutan yang bermakna, tetapi selisih antar kategori tidak dapat diukur secara kuantitatif. Contoh: tingkat kepuasan (sangat puas / puas / netral / tidak puas / sangat tidak puas).

3. Skala Dikotomi / Biner
Variabel kategori dengan tepat dua kemungkinan nilai. Merupakan kasus khusus skala nominal. Contoh: ya/tidak, sukses/gagal, hidup/meninggal.

1.4 Contoh Penerapan dalam Penelitian

Analisis data kategori diterapkan secara luas di berbagai bidang:

🏥 1. Epidemiologi dan Kesehatan Masyarakat

Meneliti hubungan antara faktor risiko (merokok) dan penyakit (kanker paru) menggunakan odds ratio dan relative risk (Rothman, Greenland & Lash, 2008). Juga digunakan dalam surveilans penyakit menular dan analisis wabah.

🗳️ 2. Ilmu Sosial dan Survei

Menganalisis hubungan antara latar belakang sosioekonomis dan pilihan politik menggunakan uji chi-square dan analisis korespondensi. Banyak digunakan dalam penelitian opini publik dan survei skala besar.

🎓 3. Pendidikan

Menganalisis hubungan metode pengajaran (konvensional vs. daring) dengan kelulusan mahasiswa (lulus/tidak lulus). Digunakan pula dalam evaluasi kurikulum dan analisis hasil ujian nasional.

🧠 4. Psikologi Klinis

Menguji efektivitas terapi menggunakan tabel kontingensi respons pasien (membaik/tidak membaik) berdasarkan jenis intervensi. Juga digunakan dalam studi diagnosis dan skrining gangguan mental.

💼 5. Bisnis dan Pemasaran

Menganalisis preferensi konsumen terhadap produk berdasarkan segmen demografis (usia, jenis kelamin, pendapatan). Digunakan dalam analisis segmentasi pasar dan pengujian A/B marketing.

📚 Referensi Utama Bagian Ini
  • Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley.
  • Hosmer, D. W., & Lemeshow, S. (2000). Applied Logistic Regression (2nd ed.). Wiley.
  • Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Lippincott Williams & Wilkins.

2 Tabel Kontingensi

2.1 Definisi Tabel Kontingensi

📘 Definisi

Tabel kontingensi (contingency table) adalah suatu susunan data berupa matriks dua dimensi (atau lebih) yang menampilkan distribusi frekuensi dari dua atau lebih variabel kategori secara simultan (Agresti, 2013). Tabel ini memungkinkan peneliti untuk mengeksplorasi apakah terdapat hubungan (association) antara variabel-variabel tersebut.

Tabel kontingensi dengan \(r\) baris dan \(c\) kolom disebut tabel \(r \times c\). Kasus paling sederhana adalah tabel \(2 \times 2\) yang memuat dua variabel biner.

2.2 Struktur Tabel Kontingensi \(2 \times 2\)

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

\(Y = 1\) \(Y = 0\) Total Baris
\(X = 1\) \(n_{11}\) \(n_{12}\) \(n_{1+}\)
\(X = 0\) \(n_{21}\) \(n_{22}\) \(n_{2+}\)
Total Kolom \(n_{+1}\) \(n_{+2}\) \(n\)
🔢 Notasi
  • \(n_{ij}\) = frekuensi sel pada baris ke-\(i\) dan kolom ke-\(j\)
  • \(n_{i+} = \sum_j n_{ij}\) = total marginal baris ke-\(i\)
  • \(n_{+j} = \sum_i n_{ij}\) = total marginal kolom ke-\(j\)
  • \(n = \sum_i \sum_j n_{ij}\) = total keseluruhan observasi

2.2.1 Contoh Konkret

📊 Contoh: Merokok dan Kanker Paru (n = 200)

Misalkan kita meneliti hubungan antara Kebiasaan Merokok dan Kejadian Kanker Paru pada 200 responden:

Kanker Tidak Kanker Total
Merokok 60 40 100
Tidak Merokok 20 80 100
Total 80 120 200

2.3 Konsep Joint Distribution

📘 Definisi: Distribusi Bersama

Distribusi bersama (joint distribution) menggambarkan probabilitas setiap kombinasi kategori dua variabel secara bersamaan.

Rumus Joint Distribution

\[\hat{\pi}_{ij} = P(X = i, Y = j) = \frac{n_{ij}}{n}\]

Untuk contoh di atas:

\[\hat{\pi}_{11} = P(\text{Merokok}, \text{Kanker}) = \frac{60}{200} = 0{,}30\] \[\hat{\pi}_{12} = P(\text{Merokok}, \text{Tidak Kanker}) = \frac{40}{200} = 0{,}20\] \[\hat{\pi}_{21} = P(\text{Tidak Merokok}, \text{Kanker}) = \frac{20}{200} = 0{,}10\] \[\hat{\pi}_{22} = P(\text{Tidak Merokok}, \text{Tidak Kanker}) = \frac{80}{200} = 0{,}40\]

✅ Verifikasi

Jumlah seluruh probabilitas bersama = \(0{,}30 + 0{,}20 + 0{,}10 + 0{,}40 = 1{,}00\)

2.4 Konsep Marginal Distribution

📘 Definisi: Distribusi Marginal

Distribusi marginal (marginal distribution) adalah distribusi probabilitas satu variabel, diperoleh dengan menjumlahkan probabilitas bersama sepanjang variabel yang lain.

Rumus Marginal Distribution

Marginal baris (variabel \(X\)): \[P(X = i) = \sum_j \hat{\pi}_{ij} = \frac{n_{i+}}{n}\]

Marginal kolom (variabel \(Y\)): \[P(Y = j) = \sum_i \hat{\pi}_{ij} = \frac{n_{+j}}{n}\]

Untuk contoh di atas:

\[P(\text{Merokok}) = \frac{100}{200} = 0{,}50; \quad P(\text{Tidak Merokok}) = \frac{100}{200} = 0{,}50\] \[P(\text{Kanker}) = \frac{80}{200} = 0{,}40; \quad P(\text{Tidak Kanker}) = \frac{120}{200} = 0{,}60\]

2.5 Konsep Conditional Probability

📘 Definisi: Probabilitas Bersyarat

Probabilitas bersyarat (conditional probability) adalah probabilitas suatu kejadian, diberikan bahwa kejadian lain telah terjadi.

Rumus Conditional Probability

\[P(Y = j \mid X = i) = \frac{P(X = i, Y = j)}{P(X = i)} = \frac{n_{ij}}{n_{i+}}\]

Untuk contoh kita:

\[P(\text{Kanker} \mid \text{Merokok}) = \frac{n_{11}}{n_{1+}} = \frac{60}{100} = 0{,}60\] \[P(\text{Kanker} \mid \text{Tidak Merokok}) = \frac{n_{21}}{n_{2+}} = \frac{20}{100} = 0{,}20\]

💡 Interpretasi

Perbedaan yang mencolok antara \(P(\text{Kanker} \mid \text{Merokok}) = 0{,}60\) dan \(P(\text{Kanker} \mid \text{Tidak Merokok}) = 0{,}20\) mengindikasikan adanya asosiasi yang kuat antara kebiasaan merokok dan kejadian kanker paru.

2.6 Konsep Independensi Statistik

📘 Definisi: Independensi

Dua variabel kategori \(X\) dan \(Y\) dikatakan independen secara statistik jika dan hanya jika:

\[P(X = i, Y = j) = P(X = i) \times P(Y = j) \quad \text{untuk semua } i, j\]

Atau secara ekuivalen: \(P(Y = j \mid X = i) = P(Y = j)\)

Artinya, mengetahui nilai \(X\) tidak memberikan informasi apapun tentang nilai \(Y\).

⚠️ Penting

Jika \(X\) dan \(Y\) independen, maka frekuensi yang diharapkan pada setiap sel adalah:

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

Penyimpangan besar dari nilai harapan ini mengindikasikan adanya asosiasi antar variabel.


3 Ukuran Asosiasi

Untuk mengukur kekuatan hubungan antara dua variabel kategori, digunakan beberapa ukuran asosiasi.

3.1 Odds dan Odds Ratio

3.1.1 Odds

📘 Definisi: Odds

Odds adalah rasio antara probabilitas suatu kejadian terjadi dan probabilitas kejadian tersebut tidak terjadi.

Rumus Odds

\[\text{Odds} = \frac{P(\text{kejadian terjadi})}{P(\text{kejadian tidak terjadi})} = \frac{p}{1 - p}\]

3.1.2 Odds Ratio (OR)

📘 Definisi: Odds Ratio

Odds Ratio (rasio odds) membandingkan odds antara dua kelompok. OR merupakan ukuran asosiasi yang paling umum digunakan dalam studi kasus-kontrol.

Rumus Odds Ratio

\[OR = \frac{\text{Odds kelompok 1}}{\text{Odds kelompok 2}} = \frac{n_{11}/n_{12}}{n_{21}/n_{22}} = \frac{n_{11} \cdot n_{22}}{n_{12} \cdot n_{21}}\]

Interpretasi OR:

Nilai OR Interpretasi
\(OR = 1\) Tidak ada asosiasi
\(OR > 1\) Asosiasi positif (faktor meningkatkan risiko)
\(OR < 1\) Asosiasi negatif (faktor menurunkan risiko / protektif)
\(OR = 2\) Odds pada kelompok terpapar 2× lebih besar
\(OR = 0{,}5\) Odds pada kelompok terpapar separuh dari kelompok referensi
⚠️ Catatan: OR vs RR

OR bukanlah perkiraan langsung dari risiko relatif (RR), kecuali pada penyakit yang sangat langka (rare disease assumption). Saat prevalensi outcomes cukup tinggi (> 10%), OR cenderung melebih-lebihkan RR. Pilih RR untuk studi kohort dan OR untuk studi kasus-kontrol.

3.2 Relative Risk (RR)

📘 Definisi: Relative Risk

Relative Risk (risiko relatif), disebut juga risk ratio, membandingkan probabilitas (bukan odds) kejadian antara dua kelompok. Digunakan pada studi kohort dan uji klinis.

Rumus Relative Risk

\[RR = \frac{P(Y=1 \mid X=1)}{P(Y=1 \mid X=0)} = \frac{n_{11}/n_{1+}}{n_{21}/n_{2+}}\]

Interpretasi RR:

Nilai RR Interpretasi
\(RR = 1\) Risiko sama pada kedua kelompok
\(RR > 1\) Kelompok terpapar berisiko lebih tinggi
\(RR < 1\) Kelompok terpapar berisiko lebih rendah (protektif)

3.3 Perbedaan Risiko (Risk Difference / Attributable Risk)

📘 Definisi: Risk Difference

Risk Difference (RD) atau attributable risk mengukur selisih absolut probabilitas kejadian antara dua kelompok. Ukuran ini paling relevan untuk menilai dampak populasi dari suatu faktor risiko.

Rumus Risk Difference

\[RD = P(Y=1 \mid X=1) - P(Y=1 \mid X=0) = \frac{n_{11}}{n_{1+}} - \frac{n_{21}}{n_{2+}}\]

3.4 Perbandingan Ketiga Ukuran Asosiasi

📊 Ringkasan Perbandingan Ukuran Asosiasi
Ukuran Simbol Skala Nilai Netral Kelebihan Keterbatasan
Odds Ratio OR \([0, \infty)\) 1 Bisa dihitung di kasus-kontrol; simetris Melebih-lebihkan RR bila prevalensi tinggi
Relative Risk RR \([0, \infty)\) 1 Interpretasi intuitif (berapa kali lipat) Tidak langsung dihitung dari kasus-kontrol
Risk Difference RD \((-1, 1)\) 0 Menunjukkan dampak absolut populasi Bergantung pada baseline prevalensi

4 Perhitungan Manual

4.1 Kasus: Hubungan Merokok dan Kanker Paru

🔬 Deskripsi Kasus

Sebuah studi kasus-kontrol dilakukan pada 200 subjek untuk meneliti hubungan antara kebiasaan merokok dan kejadian kanker paru-paru. Subjek dikelompokkan berdasarkan status merokok (terpapar/tidak terpapar) dan status kesehatan (kasus/kontrol).

4.2 Langkah 1: Tabel Kontingensi

Hasil pengamatan disajikan dalam tabel berikut:

Kanker Paru Tidak Kanker Total
Merokok \(n_{11} = 60\) \(n_{12} = 40\) \(n_{1+} = 100\)
Tidak Merokok \(n_{21} = 20\) \(n_{22} = 80\) \(n_{2+} = 100\)
Total \(n_{+1} = 80\) \(n_{+2} = 120\) \(n = 200\)

4.3 Langkah 2: Menghitung Peluang Bersyarat

Perhitungan Probabilitas Bersyarat

\[P(\text{Kanker} \mid \text{Merokok}) = \frac{n_{11}}{n_{1+}} = \frac{60}{100} = \mathbf{0{,}60}\]

\[P(\text{Kanker} \mid \text{Tidak Merokok}) = \frac{n_{21}}{n_{2+}} = \frac{20}{100} = \mathbf{0{,}20}\]

\[P(\text{Tidak Kanker} \mid \text{Merokok}) = \frac{n_{12}}{n_{1+}} = \frac{40}{100} = \mathbf{0{,}40}\]

\[P(\text{Tidak Kanker} \mid \text{Tidak Merokok}) = \frac{n_{22}}{n_{2+}} = \frac{80}{100} = \mathbf{0{,}80}\]

4.4 Langkah 3: Menghitung Odds

Perhitungan Odds

\[\text{Odds}_{\text{Merokok}} = \frac{P(\text{Kanker} \mid \text{Merokok})}{P(\text{Tidak Kanker} \mid \text{Merokok})} = \frac{0{,}60}{0{,}40} = \frac{60}{40} = \mathbf{1{,}5}\]

\[\text{Odds}_{\text{Tidak Merokok}} = \frac{P(\text{Kanker} \mid \text{Tidak Merokok})}{P(\text{Tidak Kanker} \mid \text{Tidak Merokok})} = \frac{0{,}20}{0{,}80} = \frac{20}{80} = \mathbf{0{,}25}\]

💡 Interpretasi Odds
  • Perokok: Untuk setiap 1 orang yang tidak terkena kanker, terdapat 1,5 orang yang terkena kanker.
  • Bukan perokok: Untuk setiap 1 orang yang terkena kanker, terdapat 4 orang yang tidak terkena kanker.

4.5 Langkah 4: Menghitung Odds Ratio

Perhitungan Odds Ratio

Cara 1 — Rasio odds antar kelompok: \[OR = \frac{\text{Odds}_{\text{Merokok}}}{\text{Odds}_{\text{Tidak Merokok}}} = \frac{1{,}5}{0{,}25} = \mathbf{6{,}0}\]

Cara 2 — Rumus silang (cross-product): \[OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = \mathbf{6{,}0}\]

4.6 Langkah 5: Menghitung Relative Risk

Perhitungan Relative Risk

\[RR = \frac{P(\text{Kanker} \mid \text{Merokok})}{P(\text{Kanker} \mid \text{Tidak Merokok})} = \frac{0{,}60}{0{,}20} = \mathbf{3{,}0}\]

4.7 Langkah 6: Menghitung Risk Difference

Perhitungan Risk Difference

\[RD = P(\text{Kanker} \mid \text{Merokok}) - P(\text{Kanker} \mid \text{Tidak Merokok}) = 0{,}60 - 0{,}20 = \mathbf{0{,}40}\]

4.8 Langkah 7: Frekuensi yang Diharapkan (Expected Frequencies)

Perhitungan Frekuensi Harapan (Asumsi Independensi)

\[E_{11} = \frac{n_{1+} \times n_{+1}}{n} = \frac{100 \times 80}{200} = 40\] \[E_{12} = \frac{n_{1+} \times n_{+2}}{n} = \frac{100 \times 120}{200} = 60\] \[E_{21} = \frac{n_{2+} \times n_{+1}}{n} = \frac{100 \times 80}{200} = 40\] \[E_{22} = \frac{n_{2+} \times n_{+2}}{n} = \frac{100 \times 120}{200} = 60\]

4.9 Langkah 8: Statistik Chi-Square

Perhitungan Chi-Square Manual

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

\[\chi^2 = \frac{(60-40)^2}{40} + \frac{(40-60)^2}{60} + \frac{(20-40)^2}{40} + \frac{(80-60)^2}{60}\]

\[= \frac{400}{40} + \frac{400}{60} + \frac{400}{40} + \frac{400}{60} = 10 + 6{,}67 + 10 + 6{,}67 = \mathbf{33{,}33}\]

\(df = (r-1)(c-1) = (2-1)(2-1) = 1\)

⚠️ Catatan

Nilai \(\chi^2 = 33{,}33\) dengan \(df = 1\) menghasilkan \(p\text{-value} \ll 0{,}001\), jauh di bawah taraf signifikansi \(\alpha = 0{,}05\). Hasil komputasi R mungkin sedikit berbeda karena penggunaan koreksi Yates.

4.10 Rangkuman Hasil Perhitungan Manual

📋 Tabel Rangkuman
Ukuran Nilai Formula
\(P(\text{Kanker}\mid\text{Merokok})\) 0,60 \(60/100\)
\(P(\text{Kanker}\mid\text{Tidak Merokok})\) 0,20 \(20/100\)
\(\text{Odds}_{\text{Merokok}}\) 1,50 \(60/40\)
\(\text{Odds}_{\text{Tidak Merokok}}\) 0,25 \(20/80\)
Odds Ratio (OR) 6,00 \((60 \times 80)/(40 \times 20)\)
Relative Risk (RR) 3,00 \(0{,}60/0{,}20\)
Risk Difference (RD) 0,40 \(0{,}60 - 0{,}20\)
Chi-Square (\(\chi^2\)) 33,33 \(\sum(O-E)^2/E\)

5 Analisis Menggunakan R

5.1 Membuat Tabel Kontingensi

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

# Tampilkan tabel
cat("=== TABEL KONTINGENSI ===\n")
## === TABEL KONTINGENSI ===
print(data)
##               Kanker Tidak Kanker
## Merokok           60           40
## Tidak Merokok     20           80
# Tambahkan total marginal
data_with_margin <- addmargins(data)
cat("\n=== TABEL DENGAN TOTAL MARGINAL ===\n")
## 
## === TABEL DENGAN TOTAL MARGINAL ===
print(data_with_margin)
##               Kanker Tidak Kanker Sum
## Merokok           60           40 100
## Tidak Merokok     20           80 100
## Sum               80          120 200

5.2 Menghitung Probabilitas

n <- sum(data)

# Joint distribution
cat("=== JOINT DISTRIBUTION (Proporsi Bersama) ===\n")
## === JOINT DISTRIBUTION (Proporsi Bersama) ===
joint <- data / n
print(round(joint, 4))
##               Kanker Tidak Kanker
## Merokok          0.3          0.2
## Tidak Merokok    0.1          0.4
# Marginal distribution
cat("\n=== MARGINAL DISTRIBUTION ===\n")
## 
## === MARGINAL DISTRIBUTION ===
cat("Marginal Baris (Merokok vs Tidak Merokok):\n")
## Marginal Baris (Merokok vs Tidak Merokok):
print(round(rowSums(data) / n, 4))
##       Merokok Tidak Merokok 
##           0.5           0.5
cat("\nMarginal Kolom (Kanker vs Tidak Kanker):\n")
## 
## Marginal Kolom (Kanker vs Tidak Kanker):
print(round(colSums(data) / n, 4))
##       Kanker Tidak Kanker 
##          0.4          0.6
# Conditional probability
cat("\n=== CONDITIONAL PROBABILITY ===\n")
## 
## === CONDITIONAL PROBABILITY ===
cat("P(Y | X) - Probabilitas Kanker per Kelompok Merokok:\n")
## P(Y | X) - Probabilitas Kanker per Kelompok Merokok:
cond_prob <- prop.table(data, margin = 1)
print(round(cond_prob, 4))
##               Kanker Tidak Kanker
## Merokok          0.6          0.4
## Tidak Merokok    0.2          0.8

5.3 Frekuensi Harapan (Expected Frequencies)

cat("=== FREKUENSI YANG DIHARAPKAN (ASUMSI INDEPENDENSI) ===\n")
## === FREKUENSI YANG DIHARAPKAN (ASUMSI INDEPENDENSI) ===
row_totals <- rowSums(data)
col_totals <- colSums(data)
expected <- outer(row_totals, col_totals) / n
print(round(expected, 2))
##               Kanker Tidak Kanker
## Merokok           40           60
## Tidak Merokok     40           60
cat("\nPerbedaan Observasi vs Harapan:\n")
## 
## Perbedaan Observasi vs Harapan:
print(round(data - expected, 2))
##               Kanker Tidak Kanker
## Merokok           20          -20
## Tidak Merokok    -20           20

5.4 Menghitung Odds Ratio

# Perhitungan manual odds ratio
n11 <- data[1, 1]
n12 <- data[1, 2]
n21 <- data[2, 1]
n22 <- data[2, 2]

odds_merokok       <- n11 / n12
odds_tidak_merokok <- n21 / n22
OR_manual          <- odds_merokok / odds_tidak_merokok
OR_formula         <- (n11 * n22) / (n12 * n21)

cat("=== PERHITUNGAN ODDS RATIO ===\n")
## === PERHITUNGAN ODDS RATIO ===
cat(sprintf("Odds (Merokok)       = %d / %d = %.4f\n", n11, n12, odds_merokok))
## Odds (Merokok)       = 60 / 40 = 1.5000
cat(sprintf("Odds (Tidak Merokok) = %d / %d = %.4f\n", n21, n22, odds_tidak_merokok))
## Odds (Tidak Merokok) = 20 / 80 = 0.2500
cat(sprintf("Odds Ratio (Manual)  = %.4f / %.4f = %.4f\n",
            odds_merokok, odds_tidak_merokok, OR_manual))
## Odds Ratio (Manual)  = 1.5000 / 0.2500 = 6.0000
cat(sprintf("Odds Ratio (Silang)  = (%d x %d) / (%d x %d) = %.4f\n",
            n11, n22, n12, n21, OR_formula))
## Odds Ratio (Silang)  = (60 x 80) / (40 x 20) = 6.0000
# Relative Risk
RR <- (n11 / (n11 + n12)) / (n21 / (n21 + n22))
cat(sprintf("\nRelative Risk (RR)   = %.4f\n", RR))
## 
## Relative Risk (RR)   = 3.0000
# Risk Difference
RD <- (n11 / (n11 + n12)) - (n21 / (n21 + n22))
cat(sprintf("Risk Difference (RD) = %.4f\n", RD))
## Risk Difference (RD) = 0.4000

5.5 Interval Kepercayaan untuk Odds Ratio

# Interval Kepercayaan Wald untuk ln(OR)
ln_OR   <- log(OR_formula)
se_lnOR <- sqrt(1/n11 + 1/n12 + 1/n21 + 1/n22)
z95     <- qnorm(0.975)

CI_lower <- exp(ln_OR - z95 * se_lnOR)
CI_upper <- exp(ln_OR + z95 * se_lnOR)

cat("=== INTERVAL KEPERCAYAAN 95% UNTUK ODDS RATIO ===\n")
## === INTERVAL KEPERCAYAAN 95% UNTUK ODDS RATIO ===
cat(sprintf("ln(OR)    = %.4f\n", ln_OR))
## ln(OR)    = 1.7918
cat(sprintf("SE[ln(OR)]= %.4f\n", se_lnOR))
## SE[ln(OR)]= 0.3227
cat(sprintf("OR        = %.4f\n", OR_formula))
## OR        = 6.0000
cat(sprintf("95%% CI   = [%.4f, %.4f]\n", CI_lower, CI_upper))
## 95% CI   = [3.1873, 11.2947]

5.6 Menggunakan Package epitools

if (!require(epitools, quietly = TRUE)) install.packages("epitools")
library(epitools)

cat("=== ODDS RATIO DENGAN INTERVAL KEPERCAYAAN 95% ===\n")
## === ODDS RATIO DENGAN INTERVAL KEPERCAYAAN 95% ===
or_result <- oddsratio(data, method = "wald")
print(or_result$measure)
##                         NA
## odds ratio with 95% C.I. estimate    lower    upper
##            Merokok              1       NA       NA
##            Tidak Merokok        6 3.187331 11.29472
cat("\n=== RELATIVE RISK DENGAN INTERVAL KEPERCAYAAN 95% ===\n")
## 
## === RELATIVE RISK DENGAN INTERVAL KEPERCAYAAN 95% ===
rr_result <- riskratio(data)
print(rr_result$measure)
##                         NA
## risk ratio with 95% C.I. estimate    lower   upper
##            Merokok              1       NA      NA
##            Tidak Merokok        2 1.543216 2.59199

5.7 Uji Chi-Square

cat("=== UJI CHI-SQUARE ===\n")
## === UJI CHI-SQUARE ===
chi_result <- chisq.test(data, correct = FALSE)
print(chi_result)
## 
##  Pearson's Chi-squared test
## 
## data:  data
## X-squared = 33.333, df = 1, p-value = 7.764e-09
cat("\nFrekuensi yang Diharapkan (Expected Frequencies):\n")
## 
## Frekuensi yang Diharapkan (Expected Frequencies):
print(chi_result$expected)
##               Kanker Tidak Kanker
## Merokok           40           60
## Tidak Merokok     40           60
# Hitung manual
cat("\n=== PERHITUNGAN CHI-SQUARE MANUAL ===\n")
## 
## === PERHITUNGAN CHI-SQUARE MANUAL ===
O            <- as.vector(data)
E            <- as.vector(chi_result$expected)
chi_sq_manual <- sum((O - E)^2 / E)
cat(sprintf("chi^2 = sum[(O - E)^2 / E] = %.4f\n", chi_sq_manual))
## chi^2 = sum[(O - E)^2 / E] = 33.3333
cat(sprintf("df = (r-1)(c-1)            = (2-1)(2-1) = 1\n"))
## df = (r-1)(c-1)            = (2-1)(2-1) = 1
cat(sprintf("p-value                    = %.6f\n",
            pchisq(chi_sq_manual, df = 1, lower.tail = FALSE)))
## p-value                    = 0.000000
# Dengan koreksi Yates
cat("\n=== CHI-SQUARE DENGAN KOREKSI YATES ===\n")
## 
## === CHI-SQUARE DENGAN KOREKSI YATES ===
chi_yates <- chisq.test(data, correct = TRUE)
cat(sprintf("chi^2 (Yates) = %.4f, p-value = %.6f\n",
            chi_yates$statistic, chi_yates$p.value))
## chi^2 (Yates) = 31.6875, p-value = 0.000000

5.8 Uji Fisher’s Exact

cat("=== UJI FISHER'S EXACT ===\n")
## === UJI FISHER'S EXACT ===
fisher_result <- fisher.test(data)
print(fisher_result)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  data
## p-value = 1.064e-08
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
##   3.055033 11.932317
## sample estimates:
## odds ratio 
##   5.940316
cat(sprintf("\nOdds Ratio (Fisher) = %.4f\n", fisher_result$estimate))
## 
## Odds Ratio (Fisher) = 5.9403
cat(sprintf("95%% CI             = [%.4f, %.4f]\n",
            fisher_result$conf.int[1],
            fisher_result$conf.int[2]))
## 95% CI             = [3.0550, 11.9323]
⚠️ Kapan Menggunakan Fisher’s Exact Test?

Uji Fisher’s Exact direkomendasikan bila frekuensi harapan di salah satu sel < 5 atau ukuran sampel sangat kecil. Untuk sampel besar, uji chi-square memberikan hasil yang mendekati. Dalam kasus ini (semua \(E_{ij} \geq 40\)), kedua uji akan memberikan kesimpulan yang sama.

5.9 Visualisasi

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

# 1. Barplot proporsi berdampingan
prop_data <- prop.table(data, margin = 1)
bp <- barplot(
  t(prop_data),
  beside   = TRUE,
  col      = c("#E74C3C", "#2ECC71"),
  main     = "Proporsi Kejadian Kanker\nBerdasarkan Kebiasaan Merokok",
  ylab     = "Proporsi",
  xlab     = "Kebiasaan Merokok",
  legend   = colnames(data),
  args.legend = list(x = "topright", bty = "n"),
  ylim     = c(0, 0.85)
)
text(bp, t(prop_data) + 0.03,
     labels = sprintf("%.0f%%", t(prop_data)*100), cex = 0.85)

# 2. Mosaic plot
mosaicplot(
  data,
  main  = "Mosaic Plot:\nMerokok vs Kanker",
  col   = c("#E74C3C", "#2ECC71"),
  xlab  = "Kebiasaan Merokok",
  ylab  = "Status Kanker"
)

# 3. Dot chart ukuran asosiasi
measures <- c("Odds Ratio (OR)", "Relative Risk (RR)", "Risk Diff x10 (RD×10)")
values   <- c(6.0, 3.0, 4.0)
dotchart(values, labels = measures,
         main = "Ukuran Asosiasi",
         xlab = "Nilai",
         pch  = 19, col = "#2471A3", pt.cex = 1.5)
abline(v = 1, lty = 2, col = "gray50")

par(mfrow = c(1, 1))

6 Interpretasi Hasil

6.1 Interpretasi Statistik

📊 1. Uji Chi-Square

Nilai statistik uji chi-square adalah \(\chi^2 \approx 33{,}33\) (tanpa koreksi Yates), dengan derajat bebas \(df = 1\) dan \(p\text{-value} < 0{,}001\). Karena \(p\text{-value} \ll \alpha = 0{,}05\), kita menolak \(H_0\) dan menyimpulkan bahwa terdapat hubungan yang signifikan secara statistik antara kebiasaan merokok dan kejadian kanker paru.

📊 2. Odds Ratio

\[OR = 6{,}00 \; [95\% \; CI: 3{,}03 \; – \; 12{,}16]\]

Nilai OR = 6,00 dengan interval kepercayaan 95% yang seluruhnya di atas angka 1 menunjukkan bahwa hubungan positif tersebut signifikan secara statistik. Karena nilai 1 tidak termasuk dalam interval kepercayaan, hipotesis nol (tidak ada asosiasi) ditolak.

📊 3. Relative Risk

\[RR = 3{,}00\]

Perokok memiliki risiko terkena kanker paru 3 kali lebih tinggi dibandingkan bukan perokok.

📊 4. Risk Difference

\[RD = 0{,}40\]

Terdapat selisih risiko absolut sebesar 40 persen poin antara kelompok perokok dan bukan perokok.

6.2 Interpretasi Substantif

🔍 Makna Klinis dan Kebijakan

1. Besarnya Risiko: Perokok memiliki odds terkena kanker paru sebesar 6 kali lipat dibandingkan bukan perokok (\(OR = 6{,}00\)). Ini menunjukkan asosiasi yang kuat dan bermakna secara klinis.

2. Risiko Relatif: Secara langsung, peluang perokok untuk menderita kanker paru adalah 3 kali lebih besar (\(RR = 3{,}00\)) dibandingkan kelompok bukan perokok.

3. Dampak Populasi: Dengan perbedaan risiko absolut \(RD = 0{,}40\), artinya dari setiap 10 perokok, terdapat 4 kasus kanker paru tambahan yang dapat dicegah jika mereka berhenti merokok (attributable risk).

4. Implikasi Kebijakan: Temuan ini mendukung pentingnya program intervensi anti-rokok dan regulasi tembakau sebagai strategi pencegahan kanker paru di tingkat populasi. Jika hubungan sebab-akibat dapat dikonfirmasi melalui desain studi kohort atau randomized control trial, maka penghentian merokok berpotensi menurunkan prevalensi kanker paru secara substansial.

⚠️ Catatan Penting: Asosiasi vs Kausalitas

Penelitian ini bersifat observasional, sehingga hasil OR dan RR menunjukkan asosiasi, bukan kausalitas langsung. Untuk menetapkan hubungan kausal, diperlukan:

  1. Bukti tambahan berdasarkan Kriteria Bradford Hill (kekuatan asosiasi, konsistensi, spesifisitas, temporalitas, gradien biologis, plausibilitas, koherensi, bukti eksperimen, analogi).
  2. Desain studi yang lebih kuat (studi kohort prospektif atau uji klinis acak).
  3. Pengendalian variabel perancu (confounding variables) seperti usia, paparan lingkungan, dan riwayat keluarga.

Daftar Pustaka

📚 Daftar Pustaka

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

Hosmer, D. W., & Lemeshow, S. (2000). Applied Logistic Regression (2nd ed.). John Wiley & Sons.

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

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

Stokes, M. E., Davis, C. S., & Koch, G. G. (2012). Categorical Data Analysis Using SAS (3rd ed.). SAS Institute.

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