1 Definisi Analisis Data Kategori

1.1 Apa yang Dimaksud dengan Analisis Data Kategori?

Analisis data kategori (categorical data analysis) adalah kumpulan metode statistik yang digunakan untuk menganalisis data yang diukur dalam skala nominal atau ordinal, di mana setiap observasi dikelompokkan ke dalam kategori-kategori yang saling eksklusif (mutually exclusive) dan lengkap (exhaustive).

Berbeda dengan data kontinu, data kategori tidak memiliki nilai numerik yang bermakna secara inheren — data ini merepresentasikan keanggotaan dalam suatu kelompok atau kelas tertentu. Metode analisisnya mencakup berbagai prosedur statistik, mulai dari tabel kontingensi sederhana, uji chi-square, hingga model regresi logistik dan log-linear yang lebih kompleks (Agresti, 2002).

Tujuan utama analisis data kategori meliputi:

  • Memahami pola distribusi frekuensi variabel kategori dalam populasi
  • Mengidentifikasi hubungan atau asosiasi antar variabel kategori
  • Mengukur kekuatan asosiasi dengan ukuran statistik yang tepat
  • Melakukan inferensi statistik terhadap parameter populasi

1.2 Karakteristik Variabel Kategori

Variabel kategori memiliki karakteristik utama yang membedakannya dari variabel kontinu (Agresti, 2013; Hosmer & Lemeshow, 2013):

1.2.1 Skala Pengukuran

Jenis Skala Karakteristik Contoh
Nominal Kategori tanpa urutan yang bermakna Jenis kelamin, golongan darah, agama
Ordinal Kategori berurutan, jarak tidak seragam Tingkat pendidikan, derajat nyeri
Dikotomi/Biner Hanya dua kategori Sakit/sehat, ya/tidak, sukses/gagal

1.2.2 Sifat Data Kategori

  • Data dinyatakan sebagai frekuensi atau proporsi pada setiap kategori
  • Nilai antar kategori tidak dapat dioperasikan secara aritmatika langsung
  • Distribusi data mengikuti distribusi multinomial (umum) atau binomial (dikotomi)
  • Representasi data utama berbentuk tabel frekuensi atau tabel kontingensi

1.2.3 Ukuran Statistik yang Digunakan

Karena sifat datanya yang tidak kontinu, analisis data kategori menggunakan ukuran-ukuran khusus:

  • Beda peluang (difference of proportions): \(\Delta = \pi_{j|h} - \pi_{j|i}\)
  • Risiko relatif (relative risk): \(RR = \pi_{j|h} / \pi_{j|i}\)
  • Rasio odds (odds ratio): \(OR = ad/bc\)
  • Uji chi-square: untuk pengujian independensi antar variabel

1.3 Desain Sampling dalam Penelitian Data Kategori

Berdasarkan ADK Pertemuan 2 (UNPAD, 2021), terdapat tiga desain sampling utama dalam penelitian yang melibatkan variabel kategori:

1. Desain Prospektif (Kohort / Clinical Trial)

Variabel respons \(Y\) diukur setelah perlakuan atau pengelompokan dikerjakan terlebih dulu. Peneliti menetapkan pengelompokan subjek sehingga memiliki kendali penuh. Contoh: clinical trial vaksin; studi kohort perokok vs bukan perokok.

2. Desain Retrospektif (Kasus-Kontrol)

Variabel respons \(Y\) (outcome) ditentukan terlebih dulu, kemudian ditelusuri variabel prediktor \(X\) ke masa lampau. Contoh: pasien kanker (kasus) dan non-kanker (kontrol) ditetapkan dulu, lalu ditanya riwayat merokok.

Perhatian: Desain ini mengakibatkan distribusi \(Y\) bersyarat \(X\) tidak bisa dikerjakan langsung. Ukuran asosiasi yang valid hanya Odds Ratio (OR).

3. Desain Cross Sectional

Tidak membatasi variabel mana yang menjadi prediktor dan respons. Sampel acak diambil dari populasi, lalu setiap unit diklasifikasi menurut \(X\) dan \(Y\) secara bersamaan.

1.4 Contoh Penerapan Analisis Data Kategori dalam Penelitian

Bidang Variabel X (Prediktor) Variabel Y (Respons) Ukuran Asosiasi
Epidemiologi Status merokok Kanker paru OR, RR
Kesehatan Masyarakat Vaksinasi Kejadian infeksi RR
Kedokteran Jenis terapi Respons pasien OR
Sosial Tingkat pendidikan Status pekerjaan Cramér’s V
Pemasaran Kelompok usia Preferensi produk Log-linear model

1.5 Referensi (Bagian 1)

  • Agresti, A. (2002). Categorical Data Analysis (2nd ed.). John Wiley & Sons.
  • Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.
  • Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley.
  • ADK Pertemuan 2. (2021). Tabel Kontingensi Dua Arah. Universitas Padjadjaran.

2 Tabel Kontingensi

2.1 Definisi Tabel Kontingensi

Tabel kontingensi (contingency table atau cross-tabulation) adalah tabel klasifikasi silang dari variabel-variabel yang bersifat kategori (ADK Pertemuan 2, UNPAD 2021). Tabel ini dapat menggambarkan hubungan di antara variabel-variabel kategori tersebut.

Berdasarkan jumlah variabel yang terlibat:

  • Tabel kontingensi dua arah (\(I \times J\)): dua variabel kategori
  • Tabel kontingensi tiga arah: tiga variabel kategori
  • Tabel kontingensi multi arah: lebih dari tiga variabel kategori

2.2 Struktur Tabel Kontingensi

Misalkan terdapat dua variabel \(X\) dan \(Y\) yang masing-masing bersifat kategori. Variabel \(X\) terdiri dari \(I\) kategori dan variabel \(Y\) terdiri dari \(J\) kategori. Tabel klasifikasi silang antara \(X\) dengan \(Y\) adalah tabel kontingensi \(I \times J\).

Tabel kontingensi yang paling sederhana adalah ketika variabel \(X\) memiliki 2 kategori dan \(Y\) memiliki 2 kategori, disebut tabel kontingensi \(2 \times 2\).

Struktur tabel kontingensi \(2 \times 2\):

\(X\) \(Y = y_1\) \(Y = y_2\) Total Baris
\(x_1\) \(n_{11}\) \(n_{12}\) \(n_{1.}\)
\(x_2\) \(n_{21}\) \(n_{22}\) \(n_{2.}\)
Total Kolom \(n_{.1}\) \(n_{.2}\) \(n_{..}\)

Keterangan notasi (ADK Pertemuan 2, UNPAD):

  • \(x_i\) : kategori ke-\(i\) variabel \(X\)
  • \(y_j\) : kategori ke-\(j\) variabel \(Y\)
  • \(n_{ij}\) : frekuensi sel baris ke-\(i\) kolom ke-\(j\)
  • \(n_{i.} = n_{i1} + n_{i2}\) : total baris ke-\(i\)
  • \(n_{.j} = n_{1j} + n_{2j}\) : total kolom ke-\(j\)
  • \(n_{..} = n_{1.} + n_{2.} = n_{.1} + n_{.2}\) : total keseluruhan

2.3 Distribusi Peluang Tabel Kontingensi

Untuk setiap tabel kontingensi dua arah, apabila variabel \(X\) dan \(Y\) merupakan variabel acak dan pemilihan sampel dilakukan secara acak, maka tabel kontingensi tersebut memiliki distribusi peluang (ADK Pertemuan 2, UNPAD 2021).

Distribusi peluang dari tabel kontingensi terdiri atas:

  1. Distribusi peluang bersama (Joint probability)
  2. Distribusi peluang marginal (Marginal probability)
  3. Distribusi peluang bersyarat (Conditional probability)

2.3.1 Distribusi Peluang Bersama (Joint Probability)

\(\pi_{ij}\) adalah peluang bersama untuk kategori \(X\) ke-\(i\) dan kategori \(Y\) ke-\(j\):

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

Tabel distribusi peluang bersama \(2 \times 2\):

\(X\) \(Y = 1\) \(Y = 2\) Total
\(1\) \(\pi_{11}\) \(\pi_{12}\) \(\pi_{1.}\)
\(2\) \(\pi_{21}\) \(\pi_{22}\) \(\pi_{2.}\)
Total \(\pi_{.1}\) \(\pi_{.2}\) \(1\)

Sifat: \(\pi_{11} + \pi_{12} + \pi_{21} + \pi_{22} = \pi_{1.} + \pi_{2.} = \pi_{.1} + \pi_{.2} = 1\)


2.3.2 Distribusi Peluang Marginal (Marginal Probability)

Peluang marginal diperoleh dengan menjumlahkan peluang bersama sepanjang baris atau kolom:

Peluang marginal baris (\(\pi_{i.}\)):

\[\pi_{i.} = P(X = i) = \sum_{j} \pi_{ij} = \pi_{i1} + \pi_{i2}, \qquad \hat{\pi}_{i.} = \frac{n_{i.}}{n_{..}}\]

Peluang marginal kolom (\(\pi_{.j}\)):

\[\pi_{.j} = P(Y = j) = \sum_{i} \pi_{ij} = \pi_{1j} + \pi_{2j}, \qquad \hat{\pi}_{.j} = \frac{n_{.j}}{n_{..}}\]

Kondisi independensi: \(X\) dan \(Y\) dikatakan saling bebas apabila:

\[\pi_{ij} = \pi_{i.} \times \pi_{.j} \qquad \text{untuk semua } i, j\]


2.3.3 Distribusi Peluang Bersyarat (Conditional Probability)

Untuk menentukan distribusi peluang bersyarat, harus ditetapkan terlebih dahulu variabel yang dijadikan syarat (ADK Pertemuan 2, UNPAD 2021).

Apabila variabel \(X\) yang menjadi syarat, maka distribusi peluang \(Y\) bersyarat \(X\) dinyatakan sebagai:

\[\pi_{j|i} = P(Y = j \mid X = i) = \frac{\pi_{ij}}{\pi_{i.}}, \qquad \hat{\pi}_{j|i} = \frac{n_{ij}}{n_{i.}}\]

Untuk tiap \(i\) berlaku:

\[\sum_j \pi_{j|i} = 1 \quad \Rightarrow \quad \pi_{1|i} + \pi_{2|i} = 1\]

Tabel peluang bersyarat \(2 \times 2\) (syarat \(X\)):

\(X\) \(Y = 1\) \(Y = 2\) Total
\(1\) \(\pi_{1|1}\) \(\pi_{2|1}\) \(1\)
\(2\) \(\pi_{1|2}\) \(\pi_{2|2}\) \(1\)

Jika \(X\) dan \(Y\) saling bebas, maka:

\[\pi_{j|h} = \pi_{j|i} = \pi_{.j}\]


2.4 Contoh Tabel Kontingensi \(2 \times 2\): Merokok vs. Kanker Paru

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

Peluang bersama:

\[\hat{\pi}_{11} = \tfrac{60}{200} = 0.30,\quad \hat{\pi}_{12} = \tfrac{40}{200} = 0.20,\quad \hat{\pi}_{21} = \tfrac{20}{200} = 0.10,\quad \hat{\pi}_{22} = \tfrac{80}{200} = 0.40\]

Peluang marginal baris: \(\hat{\pi}_{1.} = 0.50\), \(\hat{\pi}_{2.} = 0.50\)

Peluang marginal kolom: \(\hat{\pi}_{.1} = 0.40\), \(\hat{\pi}_{.2} = 0.60\)

Peluang bersyarat:

\[\hat{\pi}_{1|1} = P(\text{Kanker} \mid \text{Merokok}) = \tfrac{60}{100} = 0.60\] \[\hat{\pi}_{1|2} = P(\text{Kanker} \mid \text{Tidak Merokok}) = \tfrac{20}{100} = 0.20\]

Karena \(\hat{\pi}_{1|1} = 0.60 \neq \hat{\pi}_{1|2} = 0.20\), terdapat indikasi asosiasi antara merokok dan kanker paru.


3 Ukuran Asosiasi

Hubungan antar variabel acak \(X\) dan \(Y\) yang keduanya bersifat kategori dalam tabel kontingensi dinamakan asosiasi. Asosiasi dalam tabel kontingensi dibentuk berdasarkan distribusi peluang bersyaratnya (ADK Pertemuan 2, UNPAD 2021).

Ada tiga ukuran asosiasi yang dapat digunakan untuk tabel kontingensi dua arah:

3.1 Beda Peluang (Difference of Probabilities)

Beda peluang adalah selisih peluang bersyarat \(Y = j\) untuk dua kategori \(X\), yaitu \(h\) dan \(i\):

\[\Delta = \pi_{j|h} - \pi_{j|i}\]

Nilai beda sebesar nol (\(\Delta = 0\), atau \(\pi_{j|h} = \pi_{j|i}\)) mencerminkan tidak terdapat asosiasi:

\[\pi_{j|h} = \pi_{j|i} = \pi_{.j} \quad \Rightarrow \quad X \text{ dan } Y \text{ independen}\]

Keterbatasan: Beda peluang dapat memberikan kesimpulan keliru saat peluang yang terlibat bernilai sangat kecil.

3.2 Odds

Odds adalah perbandingan kemungkinan terjadinya respons \(j\) berbanding dengan respons \(k\) dalam kelompok \(X = i\) yang sama (ADK Pertemuan 2, UNPAD 2021):

\[\Psi_i(j,k) = \frac{\pi_{j|i}}{\pi_{k|i}} = \frac{\pi_{ij}}{\pi_{ik}}, \qquad j \neq k = 1,\ldots,J,\quad i = 1,\ldots,I\]

Untuk tabel \(2 \times 2\) menggunakan notasi \(a, b, c, d\):

\[\text{Odds}_{\text{baris 1}} = \frac{n_{11}}{n_{12}} = \frac{a}{b}, \qquad \text{Odds}_{\text{baris 2}} = \frac{n_{21}}{n_{22}} = \frac{c}{d}\]

Interpretasi: Nilai odds non-negatif. Jika \(\Psi_i(j,k) = 4\), artinya respons \(j\) empat kali lebih mungkin terjadi dibandingkan respons \(k\) pada kelompok \(X = i\).

3.3 Odds Ratio (Rasio Odds)

Odds Ratio (OR) adalah rasio dua buah odds dari dua baris berbeda. Asosiasi antara \(X\) dengan \(Y\) diperlihatkan melalui ratio dua buah odds (baris 1 dan baris 2) tersebut (ADK Pertemuan 2, UNPAD 2021).

Untuk dua level \(X\), yaitu \(h\) dan \(i\), odds ratio respons \(j\) dan \(k\) adalah:

\[\Psi_{hi}(j,k) = \frac{\Psi_h(j,k)}{\Psi_i(j,k)} = \frac{\pi_{j|h}/\pi_{k|h}}{\pi_{j|i}/\pi_{k|i}} = \frac{\pi_{hj} \times \pi_{ik}}{\pi_{ij} \times \pi_{hk}}\]

Untuk tabel \(2 \times 2\), OR merupakan cross product dari elemen-elemen diagonal:

\[\boxed{OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} = \frac{ad}{bc}}\]

Interval Kepercayaan 95% untuk OR (metode Woolf):

\[CI_{95\%} = \exp\!\left(\ln(\widehat{OR}) \pm 1.96 \sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}}\right)\]

Interpretasi Odds Ratio:

Nilai OR Interpretasi
\(OR = 1\) Tidak ada asosiasi; \(X\) dan \(Y\) independen
\(OR > 1\) Baris \(h\) menghasilkan respons \(j\) sebesar \(\Psi_{hi}\) kali lebih mungkin dibanding baris \(i\)
\(OR < 1\) Baris \(h\) menghasilkan respons \(j\) lebih rendah dibanding baris \(i\) (faktor protektif)

3.4 Relative Risk (Risiko Relatif)

Risiko Relatif (RR) adalah rasio antara dua peluang bersyarat — peluang \(Y = j\) dalam baris \(X = h\) dengan baris \(X = i\) (ADK Pertemuan 2, UNPAD 2021):

\[RR = \frac{\pi_{j|h}}{\pi_{j|i}}\]

Estimasi dari data:

\[\boxed{\widehat{RR} = \frac{n_{11}/n_{1.}}{n_{21}/n_{2.}} = \frac{n_{11} \times n_{2.}}{n_{21} \times n_{1.}}}\]

Interpretasi Relative Risk:

Nilai RR Interpretasi
\(RR = 1\) \(\pi_{j|h} = \pi_{j|i}\); tidak ada asosiasi; \(X\) dan \(Y\) independen
\(RR > 1\) Kelompok \(h\) berisiko \(RR\) kali lebih tinggi dari kelompok \(i\)
\(RR < 1\) Kelompok \(h\) berisiko lebih rendah (faktor protektif)

Catatan: RR tepat untuk desain prospektif (kohort). Untuk desain retrospektif (kasus-kontrol), hanya OR yang valid karena distribusi \(Y\) bersyarat \(X\) tidak bisa dikerjakan langsung. OR \(\approx\) RR ketika prevalensi outcome rendah (\(< 10\%\)).


4 Contoh Perhitungan Manual

4.1 Kasus: Hubungan Merokok dengan Kanker Paru

Sebuah studi kasus-kontrol dilakukan untuk menyelidiki hubungan antara kebiasaan merokok dan kejadian kanker paru pada 200 subjek.

4.2 Langkah 1: Membuat Tabel Kontingensi

Kanker Paru (\(Y=1\)) Tidak Kanker (\(Y=2\)) Total Baris
Merokok (\(X=1\)) \(a = 60\) \(b = 40\) \(n_{1.} = 100\)
Tidak Merokok (\(X=2\)) \(c = 20\) \(d = 80\) \(n_{2.} = 100\)
Total Kolom \(n_{.1} = 80\) \(n_{.2} = 120\) \(n_{..} = 200\)

4.3 Langkah 2: Menghitung Peluang Bersyarat

Peluang kanker paru pada perokok: \[\hat{\pi}_{1|1} = P(Y=1 \mid X=1) = \frac{n_{11}}{n_{1.}} = \frac{60}{100} = \mathbf{0.60}\]

Peluang kanker paru pada bukan perokok: \[\hat{\pi}_{1|2} = P(Y=1 \mid X=2) = \frac{n_{21}}{n_{2.}} = \frac{20}{100} = \mathbf{0.20}\]

Peluang tidak kanker pada perokok: \[\hat{\pi}_{2|1} = P(Y=2 \mid X=1) = \frac{n_{12}}{n_{1.}} = \frac{40}{100} = \mathbf{0.40}\]

Peluang tidak kanker pada bukan perokok: \[\hat{\pi}_{2|2} = P(Y=2 \mid X=2) = \frac{n_{22}}{n_{2.}} = \frac{80}{100} = \mathbf{0.80}\]

Beda peluang: \[\Delta = \hat{\pi}_{1|1} - \hat{\pi}_{1|2} = 0.60 - 0.20 = \mathbf{0.40} \neq 0 \quad \Rightarrow \text{ Ada indikasi asosiasi}\]

4.4 Langkah 3: Menghitung Odds

Odds kanker pada perokok: \[\Psi_1(1,2) = \frac{\hat{\pi}_{1|1}}{\hat{\pi}_{2|1}} = \frac{0.60}{0.40} = \frac{a}{b} = \frac{60}{40} = \mathbf{1.50}\]

Odds kanker pada bukan perokok: \[\Psi_2(1,2) = \frac{\hat{\pi}_{1|2}}{\hat{\pi}_{2|2}} = \frac{0.20}{0.80} = \frac{c}{d} = \frac{20}{80} = \mathbf{0.25}\]

Pada perokok, kejadian kanker paru 1.5 kali lebih mungkin dibandingkan tidak kanker.

4.5 Langkah 4: Menghitung Odds Ratio

\[\widehat{OR} = \frac{\Psi_1(1,2)}{\Psi_2(1,2)} = \frac{1.50}{0.25} = 6.00\]

Verifikasi dengan rumus cross product:

\[\widehat{OR} = \frac{ad}{bc} = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = \mathbf{6.00}\]

Interval Kepercayaan 95%:

\[\ln(\widehat{OR}) = \ln(6) = 1.7918\]

\[SE_{\ln(OR)} = \sqrt{\frac{1}{60} + \frac{1}{40} + \frac{1}{20} + \frac{1}{80}} = \sqrt{0.01\overline{6} + 0.025 + 0.05 + 0.0125} = \sqrt{0.1042} = 0.3228\]

\[CI_{95\%} = e^{1.7918 \pm 1.96 \times 0.3228} = e^{1.7918 \pm 0.6327} = \left(\mathbf{3.19},\ \mathbf{11.30}\right)\]

Relative Risk (sebagai perbandingan):

\[\widehat{RR} = \frac{n_{11}/n_{1.}}{n_{21}/n_{2.}} = \frac{60/100}{20/100} = \frac{0.60}{0.20} = \mathbf{3.00}\]

Ringkasan hasil perhitungan manual:

Ukuran Asosiasi Nilai Keterangan
Beda Peluang \((\Delta)\) \(0.40\) \(\neq 0\) → ada asosiasi
Odds (Perokok) \(1.50\) Kanker 1.5× lebih mungkin dari tidak kanker
Odds (Tdk Merokok) \(0.25\) Kanker 0.25× lebih mungkin dari tidak kanker
Odds Ratio (OR) \(\mathbf{6.00}\) Perokok 6× lebih berisiko
95% CI untuk OR \((3.19;\ 11.30)\) Signifikan (tidak mencakup 1)
Relative Risk (RR) \(\mathbf{3.00}\) Peluang kanker perokok 3× lebih besar

5 Analisis Menggunakan R

5.1 Membuat Tabel Kontingensi

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

rownames(data) <- c("Merokok", "Tidak Merokok")
colnames(data) <- c("Kanker", "Tidak Kanker")

cat("=== TABEL KONTINGENSI ===\n")
#> === TABEL KONTINGENSI ===
print(data)
#>               Kanker Tidak Kanker
#> Merokok           60           40
#> Tidak Merokok     20           80
cat("\n=== TABEL DENGAN TOTAL MARGINAL ===\n")
#> 
#> === TABEL DENGAN TOTAL MARGINAL ===
print(addmargins(data))
#>               Kanker Tidak Kanker Sum
#> Merokok           60           40 100
#> Tidak Merokok     20           80 100
#> Sum               80          120 200

5.2 Distribusi Peluang

n_total <- sum(data)

# Joint distribution
cat("=== JOINT DISTRIBUTION (pi_ij = n_ij / n..) ===\n")
#> === JOINT DISTRIBUTION (pi_ij = n_ij / n..) ===
joint <- data / n_total
print(round(joint, 4))
#>               Kanker Tidak Kanker
#> Merokok          0.3          0.2
#> Tidak Merokok    0.1          0.4
cat("  Verifikasi total:", sum(joint), "\n")
#>   Verifikasi total: 1
# Marginal distribution
cat("\n=== MARGINAL DISTRIBUTION BARIS (pi_i.) ===\n")
#> 
#> === MARGINAL DISTRIBUTION BARIS (pi_i.) ===
print(round(rowSums(joint), 4))
#>       Merokok Tidak Merokok 
#>           0.5           0.5
cat("\n=== MARGINAL DISTRIBUTION KOLOM (pi_.j) ===\n")
#> 
#> === MARGINAL DISTRIBUTION KOLOM (pi_.j) ===
print(round(colSums(joint), 4))
#>       Kanker Tidak Kanker 
#>          0.4          0.6
# Conditional probability bersyarat baris
cat("\n=== CONDITIONAL PROBABILITY P(Y | X) ===\n")
#> 
#> === CONDITIONAL PROBABILITY P(Y | X) ===
cond_baris <- prop.table(data, margin = 1)
print(round(cond_baris, 4))
#>               Kanker Tidak Kanker
#> Merokok          0.6          0.4
#> Tidak Merokok    0.2          0.8

5.3 Menghitung Odds Ratio

a <- data[1, 1]; b <- data[1, 2]
c <- data[2, 1]; d <- data[2, 2]

# Beda peluang
p1 <- a / (a + b)
p2 <- c / (c + d)
cat("=== BEDA PELUANG ===\n")
#> === BEDA PELUANG ===
cat(sprintf("P(Kanker | Merokok)      = %.4f\n", p1))
#> P(Kanker | Merokok)      = 0.6000
cat(sprintf("P(Kanker | Tdk Merokok)  = %.4f\n", p2))
#> P(Kanker | Tdk Merokok)  = 0.2000
cat(sprintf("Delta                    = %.4f\n", p1 - p2))
#> Delta                    = 0.4000
# Odds
cat("\n=== ODDS ===\n")
#> 
#> === ODDS ===
cat(sprintf("Odds (Merokok)           = %.4f\n", a/b))
#> Odds (Merokok)           = 1.5000
cat(sprintf("Odds (Tidak Merokok)     = %.4f\n", c/d))
#> Odds (Tidak Merokok)     = 0.2500
# Odds Ratio
OR_manual <- (a * d) / (b * c)
ln_OR     <- log(OR_manual)
SE_OR     <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_low    <- exp(ln_OR - 1.96 * SE_OR)
CI_up     <- exp(ln_OR + 1.96 * SE_OR)

cat("\n=== ODDS RATIO ===\n")
#> 
#> === ODDS RATIO ===
cat(sprintf("OR = ad/bc = (%d x %d) / (%d x %d) = %d / %d\n",
            a, d, b, c, a*d, b*c))
#> OR = ad/bc = (60 x 80) / (40 x 20) = 4800 / 800
cat(sprintf("OR = %.4f\n", OR_manual))
#> OR = 6.0000
cat(sprintf("95%% CI : (%.4f , %.4f)\n", CI_low, CI_up))
#> 95% CI : (3.1873 , 11.2948)
# Relative Risk
RR <- (a / (a + b)) / (c / (c + d))
cat("\n=== RELATIVE RISK ===\n")
#> 
#> === RELATIVE RISK ===
cat(sprintf("RR = (%.0f/%.0f) / (%.0f/%.0f) = %.4f\n",
            a, a+b, c, c+d, RR))
#> RR = (60/100) / (20/100) = 3.0000

5.4 Uji Chi-Square

cat("=== UJI CHI-SQUARE ===\n")
#> === UJI CHI-SQUARE ===
hasil_chisq <- chisq.test(data, correct = FALSE)
print(hasil_chisq)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data
#> X-squared = 33.333, df = 1, p-value = 7.764e-09
cat("--- Komponen Uji ---\n")
#> --- Komponen Uji ---
cat(sprintf("Statistik X2  : %.4f\n", hasil_chisq$statistic))
#> Statistik X2  : 33.3333
cat(sprintf("Derajat bebas : %d\n",   hasil_chisq$parameter))
#> Derajat bebas : 1
cat(sprintf("P-value       : %.6f\n",  hasil_chisq$p.value))
#> P-value       : 0.000000
if (hasil_chisq$p.value < 0.05) {
  cat("\n=> Tolak H0: Terdapat hubungan signifikan antara merokok dan kanker paru.\n")
} else {
  cat("\n=> Gagal tolak H0.\n")
}
#> 
#> => Tolak H0: Terdapat hubungan signifikan antara merokok dan kanker paru.
cat("\n--- Frekuensi Harapan (Expected) ---\n")
#> 
#> --- Frekuensi Harapan (Expected) ---
print(round(hasil_chisq$expected, 2))
#>               Kanker Tidak Kanker
#> Merokok           40           60
#> Tidak Merokok     40           60

5.5 Visualisasi

library(ggplot2)
library(gridExtra)

# ---- Plot 1: Grouped bar (proporsi bersyarat) ----
df_prop <- data.frame(
  Status   = rep(rownames(data), 2),
  Outcome  = rep(colnames(data), each = 2),
  Proporsi = c(cond_baris[, 1], cond_baris[, 2])
)
df_prop$Status <- factor(df_prop$Status, levels = c("Merokok","Tidak Merokok"))

p1 <- ggplot(df_prop, aes(x = Status, y = Proporsi, fill = Outcome)) +
  geom_bar(stat = "identity", position = "dodge",
           color = "white", width = 0.6) +
  geom_text(aes(label = scales::percent(Proporsi, accuracy = 1)),
            position = position_dodge(width = 0.6),
            vjust = -0.4, size = 4, fontface = "bold") +
  scale_fill_manual(values = c("#E74C3C","#2ECC71")) +
  scale_y_continuous(labels = scales::percent_format(), limits = c(0, 0.75)) +
  labs(title    = "P(Y | X): Distribusi Peluang Bersyarat",
       subtitle = "Proporsi Kanker Paru per Kelompok Status Merokok",
       x = "Status Merokok", y = "Proporsi (%)", fill = "Outcome") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
        legend.position = "top")

# ---- Plot 2: Stacked bar ----
p2 <- ggplot(df_prop, aes(x = Status, y = Proporsi, fill = Outcome)) +
  geom_bar(stat = "identity", position = "stack",
           color = "white", width = 0.5) +
  geom_text(aes(label = scales::percent(Proporsi, accuracy = 1)),
            position = position_stack(vjust = 0.5),
            color = "white", size = 4.5, fontface = "bold") +
  scale_fill_manual(values = c("#E74C3C","#2ECC71")) +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(title = "Stacked Bar: Perbandingan Proporsi",
       x = "Status Merokok", y = "Proporsi (%)", fill = "Outcome") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", hjust = 0.5),
        legend.position = "top")

grid.arrange(p1, p2, ncol = 2)


6 Bagian 6: Interpretasi Hasil

6.1 Interpretasi Statistik

Berdasarkan hasil analisis diperoleh:

1. Uji Chi-Square

\[\chi^2 = 33.33, \quad df = 1, \quad p\text{-value} < 0.001\]

Karena \(p\text{-value} < \alpha = 0.05\), maka \(H_0\) ditolak. Terdapat bukti statistik yang sangat kuat bahwa kebiasaan merokok dan kejadian kanker paru tidak independen — ada asosiasi yang signifikan secara statistik.

2. Beda Peluang

\[\Delta = 0.60 - 0.20 = 0.40 \neq 0\]

Terdapat perbedaan peluang sebesar 40 poin persentase antara kelompok perokok dan bukan perokok.

3. Odds Ratio

\[\widehat{OR} = 6.00 \quad \left(95\%\ CI:\ 3.19\ \text{–}\ 11.30\right)\]

Karena interval kepercayaan tidak mencakup nilai 1, OR ini signifikan secara statistik. Baris perokok menghasilkan respons “kanker paru” 6 kali lebih mungkin dibandingkan baris bukan perokok.

4. Relative Risk

\[\widehat{RR} = 3.00\]

Proporsi kejadian kanker paru pada perokok 3 kali lebih besar dibandingkan bukan perokok.


6.2 Interpretasi Substantif dalam Konteks Kasus

Secara substantif, hasil analisis ini memiliki makna kesehatan masyarakat yang penting:

Perokok memiliki odds 6 kali lebih besar untuk menderita kanker paru dibandingkan dengan bukan perokok (\(\widehat{OR} = 6.00\); \(95\%\ CI: 3.19\text{–}11.30\); \(p < 0.001\)).

Poin-poin interpretasi substantif:

  • Kekuatan asosiasi tinggi: Nilai \(OR = 6\) termasuk asosiasi yang kuat secara epidemiologi
  • Konsistensi arah: Ketiga ukuran (\(\Delta = 0.40\), \(OR = 6\), \(RR = 3\)) secara konsisten menunjukkan merokok meningkatkan risiko kanker paru
  • Relevansi kebijakan: Temuan ini mendukung pentingnya program pengendalian tembakau

Catatan metodologis:

Karena data berasal dari desain kasus-kontrol (retrospektif):

  • OR adalah ukuran asosiasi yang paling tepat dan valid untuk diinterpretasikan
  • Interpretasi RR = 3.00 harus dilakukan hati-hati; secara teknis RR tidak dapat dihitung langsung dari studi kasus-kontrol
  • Dalam studi ini, karena prevalensi outcome tidak terlalu rendah (40% pada perokok), OR dan RR memberikan nilai yang berbeda (\(OR = 6\) vs \(RR = 3\)), sehingga penggunaan OR lebih disarankan

Referensi

  • Agresti, A. (2002). Categorical Data Analysis (2nd ed.). John Wiley & Sons.
  • Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.
  • Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). John Wiley & Sons.
  • Szklo, M., & Nieto, F. J. (2014). Epidemiology: Beyond the Basics (3rd ed.). Jones & Bartlett Learning.
  • Stokes, M. E., Davis, C. S., & Koch, G. G. (2012). Categorical Data Analysis Using SAS (3rd ed.). SAS Institute.
  • ADK Pertemuan 2. (2021). Tabel Kontingensi Dua Arah: Distribusi Peluang dan Asosiasi. Universitas Padjadjaran (UNPAD).