1 Pendahuluan

Analisis Data Kategori adalah cabang statistika yang berfokus pada data yang berbentuk frekuensi atau cacahan hasil klasifikasi observasi ke dalam kategori-kategori tertentu. Data jenis ini tidak berskala numerik kontinu, melainkan hanya menyatakan keanggotaan suatu kelompok atau kelas.

Dalam kehidupan sehari-hari, data kategori sangat mudah dijumpai. Di bidang kesehatan misalnya, seseorang diklasifikasikan berdasarkan status vaksinasi, jenis kelamin, atau ada tidaknya suatu penyakit. Di bidang sosial, seseorang dikelompokkan berdasarkan tingkat pendidikan, status pekerjaan, atau golongan pendapatan. Karena data semacam ini tidak dapat diperlakukan seperti data numerik biasa, diperlukan metode analisis yang khusus.

Salah satu pendekatan yang paling mendasar dan banyak digunakan dalam analisis data kategori adalah tabel kontingensi. Tabel ini memungkinkan kita untuk melihat bagaimana dua variabel kategori saling berhubungan, sekaligus menjadi dasar untuk menghitung berbagai ukuran kekuatan asosiasi antarvariabel. Laporan ini membahas konsep tabel kontingensi dua arah beserta tiga ukuran asosiasi utama yang umum digunakan, yaitu beda peluang, risiko relatif, dan odds ratio.


2 Tabel Kontingensi

2.1 Definisi

Tabel Kontingensi (contingency table) adalah tabel klasifikasi silang (cross-tabulation) yang menyajikan distribusi frekuensi bersama dari dua atau lebih variabel kategori secara simultan. Melalui tabel ini, dapat dilihat seberapa sering setiap kombinasi kategori muncul dalam data.

Tabel kontingensi diberi nama berdasarkan jumlah variabel yang terlibat. Jika hanya ada dua variabel, disebut tabel kontingensi dua arah. Jika ada tiga variabel, disebut tabel kontingensi tiga arah. Apabila variabel yang terlibat lebih dari tiga, maka disebut tabel kontingensi multi arah. Dalam laporan ini, fokus pembahasan ada pada tabel kontingensi dua arah karena merupakan bentuk yang paling dasar dan paling banyak digunakan.

2.2 Struktur Tabel Kontingensi I x J

Misalkan terdapat dua variabel kategori, yaitu variabel \(X\) dengan \(I\) kategori dan variabel \(Y\) dengan \(J\) kategori. Tabel klasifikasi silang antara keduanya membentuk tabel berukuran \(I \times J\), di mana setiap sel berisi frekuensi observasi yang termasuk dalam kombinasi kategori tertentu.

Struktur Umum Tabel Kontingensi I x J
X  Y \(y_1\) \(y_2\) \(\cdots\) \(y_J\) Total
\(x_1\) \(n_{11}\) \(n_{12}\) \(\cdots\) \(n_{1J}\) \(n_{1\cdot}\)
\(x_2\) \(n_{21}\) \(n_{22}\) \(\cdots\) \(n_{2J}\) \(n_{2\cdot}\)
\(\vdots\) \(\vdots\) \(\vdots\) \(\ddots\) \(\vdots\) \(\vdots\)
\(x_I\) \(n_{I1}\) \(n_{I2}\) \(\cdots\) \(n_{IJ}\) \(n_{I\cdot}\)
Total \(n_{\cdot 1}\) \(n_{\cdot 2}\) \(\cdots\) \(n_{\cdot J}\) \(n_{\cdot\cdot}\)

Notasi yang digunakan: \(n_{ij}\) adalah frekuensi sel baris ke-\(i\) kolom ke-\(j\); \(n_{i\cdot}\) adalah total marginal baris ke-\(i\) yang diperoleh dengan menjumlahkan semua nilai pada baris tersebut; \(n_{\cdot j}\) adalah total marginal kolom ke-\(j\); dan \(n_{\cdot\cdot}\) adalah total keseluruhan observasi.

2.3 Tabel Kontingensi 2 x 2

Bentuk paling sederhana dari tabel kontingensi dua arah adalah ketika masing-masing variabel hanya memiliki dua kategori, sehingga terbentuk tabel berukuran \(2 \times 2\). Berikut adalah strukturnya beserta notasi lengkap yang digunakan dalam perhitungan:

Struktur Tabel Kontingensi 2 x 2
X  Y \(y_1\) \(y_2\) Total
\(x_1\) \(n_{11}\) \(n_{12}\) \(n_{1\cdot}\)
\(x_2\) \(n_{21}\) \(n_{22}\) \(n_{2\cdot}\)
Total \(n_{\cdot 1}\) \(n_{\cdot 2}\) \(n_{\cdot\cdot}\)

Dari tabel di atas berlaku hubungan berikut:

  • \(n_{i\cdot} = n_{i1} + n_{i2}\) adalah total baris ke-\(i\)
  • \(n_{\cdot j} = n_{1j} + n_{2j}\) adalah total kolom ke-\(j\)
  • \(n_{\cdot\cdot} = n_{1\cdot} + n_{2\cdot} = n_{\cdot 1} + n_{\cdot 2}\) adalah total keseluruhan

2.4 Distribusi Peluang pada Tabel Kontingensi

Apabila variabel \(X\) dan \(Y\) merupakan variabel acak dan sampel dipilih secara acak dari suatu populasi, maka tabel kontingensi tersebut memiliki distribusi peluang. Terdapat tiga jenis distribusi peluang yang perlu dipahami.

2.4.1 Peluang Bersama (Joint Probability)

Peluang bersama \(\pi_{ij}\) menyatakan peluang bahwa suatu observasi secara serentak masuk ke kategori \(X = i\) dan \(Y = j\). Estimasinya diperoleh dari proporsi frekuensi sel terhadap total keseluruhan:

\[\pi_{ij} = P(X = i,\ Y = j), \quad \text{diestimasi oleh} \quad \hat{\pi}_{ij} = \frac{n_{ij}}{n_{\cdot\cdot}}\]

Sifat: \(\displaystyle\sum_{i}\sum_{j} \pi_{ij} = 1\)

2.4.2 Peluang Marginal (Marginal Probability)

Peluang marginal adalah peluang yang hanya memperhatikan satu variabel saja, tanpa mempertimbangkan variabel lainnya. Peluang marginal diperoleh dengan menjumlahkan peluang bersama sepanjang satu dimensi:

Marginal untuk X (baris ke-i): \[\pi_{i\cdot} = \sum_{j=1}^{J} \pi_{ij} = \pi_{i1} + \pi_{i2}\]

Marginal untuk Y (kolom ke-j): \[\pi_{\cdot j} = \sum_{i=1}^{I} \pi_{ij} = \pi_{1j} + \pi_{2j}\]

Sifat: \(\displaystyle\sum_{i} \pi_{i\cdot} = \sum_{j} \pi_{\cdot j} = 1\)

Penjumlahan total: \(\pi_{11} + \pi_{12} + \pi_{21} + \pi_{22} = \pi_{1\cdot} + \pi_{2\cdot} = \pi_{\cdot 1} + \pi_{\cdot 2} = 1\)

2.4.3 Peluang Bersyarat (Conditional Probability)

Peluang bersyarat menyatakan peluang suatu kategori \(Y\) terjadi dengan kondisi bahwa kategori \(X\) tertentu sudah diketahui. Jika variabel \(X\) dijadikan syarat, maka peluang bersyarat \(Y = j\) diberikan \(X = h\) adalah:

\[\pi_{j|h} = P(Y = j \mid X = h) = \frac{\pi_{hj}}{\pi_{h\cdot}}\]

dengan sifat \(\displaystyle\sum_{j} \pi_{j|h} = 1\) untuk setiap nilai \(h\).

Distribusi peluang bersyarat untuk tabel 2 x 2 apabila \(X\) dijadikan syarat adalah sebagai berikut:

Distribusi Peluang Bersyarat Y | X pada Tabel 2 x 2
X  Y \(y_1\) \(y_2\) Total
\(x_1\) \(\pi_{1 \mid 1}\) \(\pi_{2 \mid 1}\) 1
\(x_2\) \(\pi_{1 \mid 2}\) \(\pi_{2 \mid 2}\) 1

Di sini \(\pi_{j|i}\) adalah peluang kategori \(Y\) ke-\(j\) bersyarat variabel \(X\) ke-\(i\), dan berlaku \(\pi_{1|i} + \pi_{2|i} = 1\) untuk setiap \(i\).

Kondisi Independensi: Jika \(X\) dan \(Y\) saling bebas (independen), maka berlaku: \[\pi_{hj} = \pi_{h\cdot} \times \pi_{\cdot j} \quad \text{atau ekuivalen} \quad \pi_{j|h} = \pi_{\cdot j}\] Artinya, peluang variabel respons \(Y = j\) tidak bergantung pada kategori \(X\) — distribusi bersyarat \(Y\) sama untuk setiap baris \(X\).

2.5 Desain Sampling

Cara data dikumpulkan sangat memengaruhi interpretasi tabel kontingensi dan ukuran asosiasi yang tepat digunakan. Terdapat tiga jenis desain sampling yang relevan.

Perbandingan Desain Sampling pada Tabel Kontingensi
Desain Penjelasan Contoh di Indonesia Distribusi Relevan
Prospektif Pengelompokan variabel X (prediktor) ditetapkan terlebih dahulu, kemudian variabel respons Y diamati setelahnya. Peneliti memiliki kendali atas pengelompokan. Uji klinis obat antihipertensi (kelompok diberi obat vs plasebo, lalu diamati tekanan darahnya); Studi kohort perokok dan kanker paru di Indonesia Peluang bersyarat Y diberikan X
Retrospektif Variabel respons Y (outcome) ditetapkan terlebih dahulu, kemudian ditelusuri prediktor X yang melatarbelakanginya. Perbandingan distribusi Y bersyarat X tidak bisa dikerjakan langsung. Studi kasus-kontrol pasien HIV/AIDS di RSCM Jakarta: pasien ditetapkan lebih dulu, lalu ditelusuri riwayat perilaku risikonya Peluang bersyarat X diberikan Y
Cross Sectional Sampel acak diambil dari populasi, lalu setiap unit diklasifikasikan menurut X dan Y secara bersamaan. Peneliti hanya mengamati apa yang terjadi. Survei Kesehatan Dasar (Riskesdas) oleh Kemenkes RI: responden diklasifikasikan menurut status gizi dan wilayah tempat tinggal secara bersamaan Peluang bersama

3 Ukuran Asosiasi

Hubungan antara dua variabel acak \(X\) dan \(Y\) yang keduanya bersifat kategori dalam tabel kontingensi disebut asosiasi. Asosiasi dalam tabel kontingensi dibentuk berdasarkan distribusi peluang bersyaratnya. Pada tabel kontingensi dua arah terdapat tiga jenis ukuran asosiasi, yaitu beda peluang, risiko relatif, dan rasio odds.

3.1 Beda Peluang (Difference of Proportions)

Jika \(Y\) merupakan variabel respons, beda peluang bersyarat \(Y = j\) untuk dua kategori dari \(X\), yaitu \(h\) dan \(i\), memberikan indikasi ada tidaknya asosiasi antara keduanya:

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

Nilai beda sebesar nol, atau \(\pi_{j|h} = \pi_{j|i}\), mencerminkan keadaan tidak terdapat asosiasi, artinya peluang nilai variabel respons \(Y = j\) tidak bergantung pada kategori \(X\). Sehingga berlaku:

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

Rentang nilai: \(-1 \leq \Delta \leq 1\)

Nilai \(\Delta > 0\) menunjukkan kelompok \(h\) memiliki peluang lebih tinggi untuk mengalami respons \(Y = j\), sedangkan \(\Delta < 0\) menunjukkan sebaliknya.

Keterbatasan Beda Peluang: Beda peluang antara dua baris mungkin menghasilkan nilai yang sama walaupun peluang-peluangnya tidak sama. Beda peluang akan memberikan kesimpulan yang keliru pada saat peluang-peluang yang terlibat bernilai sangat kecil. Misalnya, selisih antara 0,04 dan 0,02 menghasilkan \(\Delta = 0,02\) yang terlihat kecil, padahal secara relatif kelompok pertama memiliki risiko dua kali lebih besar. Untuk situasi seperti ini, risiko relatif menjadi pilihan yang lebih informatif.

3.2 Risiko Relatif (Relative Risk)

Risiko Relatif (RR) merupakan alternatif yang dapat mengatasi keterbatasan beda peluang. RR adalah rasio antara dua peluang bersyarat, yaitu antara peluang \(Y = j\) dalam baris \(X = h\) dengan \(X = i\):

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

Nilai RR berkisar dalam interval \(0\) sampai \(\infty\). Nilai RR sama dengan 1 mengindikasikan tidak adanya asosiasi antara variabel \(X\) dengan variabel \(Y\):

\[RR = 1 \quad \Longrightarrow \quad \pi_{j|h} = \pi_{j|i} \quad \Longrightarrow \quad Y \text{ dan } X \text{ independen}\]

Nilai \(RR > 1\) menunjukkan kelompok \(h\) berisiko lebih tinggi mengalami respons \(j\), sementara \(RR < 1\) menunjukkan risiko yang lebih rendah dibandingkan kelompok \(i\).

Catatan Penggunaan RR: Risiko relatif dapat diinterpretasikan secara langsung hanya pada desain prospektif (clinical trial atau cohort study). Pada desain retrospektif (case-control study), RR tidak dapat dihitung secara valid karena total baris tidak mencerminkan proporsi populasi yang sesungguhnya. Dalam situasi tersebut, odds ratio menjadi ukuran yang lebih tepat digunakan.

3.3 Odds dan Odds Ratio

3.3.1 Odds

Beda peluang dan risiko relatif membandingkan sebuah respons \(Y\) menurut dua baris berbeda dari \(X\). Perbandingan dua respons \(Y\) dalam \(X\) yang sama menghasilkan sebuah odds. Kemungkinan terjadinya respons \(j\) dalam \(X = i\) berbanding dengan respons \(k\) juga dalam \(X = i\) dinyatakan dalam odds berikut:

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

Apabila \(X\) dan \(Y\) keduanya merupakan variabel respons, maka berdasarkan definisi peluang bersyarat, odds dalam baris \(i\) untuk \(Y = j\) dan \(k\) adalah:

\[\Psi_i(j,k) = \frac{\pi_{ij}}{\pi_{ik}}\]

Hasilnya merupakan nilai non-negatif yang memperlihatkan apakah \(j\) lebih mungkin terjadi dibanding \(k\). Sebuah nilai \(> 1\) memperlihatkan bahwa \(j\) lebih mungkin dibanding \(k\). Misalnya jika \(\Psi_i(j,k) = 4\), artinya respons \(j\) empat kali lebih mungkin terjadi dibandingkan respons \(k\) apabila \(X = i\).

3.3.2 Odds Ratio

Asosiasi antara \(X\) dengan \(Y\) diperlihatkan melalui rasio dua buah odds — misalnya odds baris 1 dan odds baris 2 — yang disebut odds ratio. Untuk dua buah 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}}\]

Yang dapat disederhanakan menjadi perkalian silang (cross product):

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

Untuk tabel 2 x 2 secara khusus, odds ratio merupakan cross product dari elemen-elemen pada diagonal:

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

Tabel 2 x 2 dengan Notasi a, b, c, d
\(y_1\) \(y_2\) Total
\(x_1\) \(a = n_{11}\) \(b = n_{12}\) \(n_{1\cdot}\)
\(x_2\) \(c = n_{21}\) \(d = n_{22}\) \(n_{2\cdot}\)
Total \(n_{\cdot 1}\) \(n_{\cdot 2}\) \(n_{\cdot\cdot}\)

Nilai odds ratio berkisar dalam interval \(0\) sampai \(\infty\). Nilai OR sama dengan 1 mengindikasikan tidak adanya asosiasi. Nilai \(OR > 1\) mengindikasikan bahwa subjek-subjek dalam baris \(h\) lebih mungkin menghasilkan respons \(j\) dibandingkan dengan subjek dalam baris \(i\), sebanyak \(\Psi_{hi}\) kalinya.

Catatan penting: Untuk tabel \(I \times J\) yang lebih besar, tidak perlu menghitung seluruh kombinasi 2 x 2. Cukup diwakili oleh sebanyak \((I-1) \times (J-1)\) odds ratio saja, dengan menetapkan satu kategori dari baris dan satu dari kolom sebagai patokan (baseline). OR juga berlaku untuk semua desain sampling dan merupakan parameter utama dalam model regresi logistik.


4 Contoh Perhitungan Manual

Untuk memperjelas konsep yang telah diuraikan, berikut disajikan contoh perhitungan menggunakan data survei hipotetis yang menggambarkan hubungan antara status aktivitas fisik dan kejadian hipertensi pada 250 responden dewasa.

Data Kasus: Aktivitas Fisik x Kejadian Hipertensi (n = 250)
Aktivitas Fisik (X) Hipertensi (\(y_1\)) Tidak Hipertensi (\(y_2\)) Total
Aktif Berolahraga 30 95 125
Tidak Aktif Berolahraga 95 30 125
Total 125 125 250

Dari tabel tersebut diperoleh: \(a = 30\), \(b = 95\), \(c = 95\), \(d = 30\), dengan total baris masing-masing \(n_{1\cdot} = n_{2\cdot} = 125\).

4.1 Peluang Bersama (Joint Probability)

\[\hat{\pi}_{11} = \frac{30}{250} = 0{,}12, \quad \hat{\pi}_{12} = \frac{95}{250} = 0{,}38\] \[\hat{\pi}_{21} = \frac{95}{250} = 0{,}38, \quad \hat{\pi}_{22} = \frac{30}{250} = 0{,}12\]

Verifikasi: \(0{,}12 + 0{,}38 + 0{,}38 + 0{,}12 = 1\) \(\checkmark\)

4.2 Peluang Marginal

\[\hat{\pi}_{1\cdot} = \frac{125}{250} = 0{,}50 \quad \text{(peluang aktif berolahraga)}\] \[\hat{\pi}_{\cdot 1} = \frac{125}{250} = 0{,}50 \quad \text{(peluang hipertensi)}\]

4.3 Peluang Bersyarat

\[\hat{\pi}_{1|1} = P(\text{Hipertensi} \mid \text{Aktif}) = \frac{30}{125} = 0{,}24\]

\[\hat{\pi}_{1|2} = P(\text{Hipertensi} \mid \text{Tidak Aktif}) = \frac{95}{125} = 0{,}76\]

4.4 Beda Peluang

\[\Delta = \hat{\pi}_{1|1} - \hat{\pi}_{1|2} = 0{,}24 - 0{,}76 = \mathbf{-0{,}52}\]

4.5 Risiko Relatif

\[RR = \frac{\hat{\pi}_{1|1}}{\hat{\pi}_{1|2}} = \frac{0{,}24}{0{,}76} = \mathbf{0{,}316}\]

4.6 Odds

\[\Psi_1 = \frac{\hat{\pi}_{1|1}}{\hat{\pi}_{2|1}} = \frac{0{,}24}{0{,}76} = \frac{30}{95} \approx 0{,}316 \quad \text{(odds aktif)}\]

\[\Psi_2 = \frac{\hat{\pi}_{1|2}}{\hat{\pi}_{2|2}} = \frac{0{,}76}{0{,}24} = \frac{95}{30} \approx 3{,}167 \quad \text{(odds tidak aktif)}\]

4.7 Odds Ratio

\[OR = \frac{\Psi_1}{\Psi_2} = \frac{0{,}316}{3{,}167} \approx \mathbf{0{,}0997}\]

Verifikasi dengan perkalian silang:

\[OR = \frac{a \times d}{b \times c} = \frac{30 \times 30}{95 \times 95} = \frac{900}{9025} \approx \mathbf{0{,}0997} \checkmark\]


5 Analisis Menggunakan R

5.1 Membuat Tabel Kontingensi

# Membuat matriks tabel kontingensi
data_hipertensi <- matrix(
  c(30, 95, 95, 30),
  nrow = 2,
  byrow = TRUE,
  dimnames = list(
    c("Aktif Berolahraga", "Tidak Aktif"),
    c("Hipertensi", "Tidak Hipertensi")
  )
)

data_hipertensi
                  Hipertensi Tidak Hipertensi
Aktif Berolahraga         30               95
Tidak Aktif               95               30

5.2 Distribusi Peluang

# Peluang bersama (joint probability)
round(prop.table(data_hipertensi), 4)
                  Hipertensi Tidak Hipertensi
Aktif Berolahraga       0.12             0.38
Tidak Aktif             0.38             0.12
# Peluang marginal baris (untuk X)
round(margin.table(prop.table(data_hipertensi), 1), 4)
Aktif Berolahraga       Tidak Aktif 
              0.5               0.5 
# Peluang bersyarat Y | X (per baris)
round(prop.table(data_hipertensi, margin = 1), 4)
                  Hipertensi Tidak Hipertensi
Aktif Berolahraga       0.24             0.76
Tidak Aktif             0.76             0.24

5.3 Ukuran Asosiasi

a <- data_hipertensi[1, 1]
b <- data_hipertensi[1, 2]
c <- data_hipertensi[2, 1]
d <- data_hipertensi[2, 2]

beda_peluang   <- (a / (a + b)) - (c / (c + d))
risiko_relatif <- (a / (a + b)) / (c / (c + d))
odds_ratio     <- (a * d) / (b * c)

cat("Beda Peluang      :", round(beda_peluang,   4), "\n")
Beda Peluang      : -0.52 
cat("Risiko Relatif    :", round(risiko_relatif,  4), "\n")
Risiko Relatif    : 0.3158 
cat("Odds Ratio        :", round(odds_ratio,      4), "\n")
Odds Ratio        : 0.0997 

5.4 Uji Chi-Square

chisq.test(data_hipertensi)

    Pearson's Chi-squared test with Yates' continuity correction

data:  data_hipertensi
X-squared = 65.536, df = 1, p-value = 5.706e-16

5.5 Visualisasi

proporsi <- prop.table(data_hipertensi, margin = 1)

barplot(
  t(proporsi),
  beside      = TRUE,
  col         = c("#1d6fa4", "#a8dadc"),
  ylim        = c(0, 0.95),
  ylab        = "Proporsi",
  xlab        = "Status Aktivitas Fisik",
  main        = "Proporsi Hipertensi berdasarkan Status Aktivitas Fisik",
  legend.text = colnames(proporsi),
  args.legend = list(x = "topright", bty = "n", cex = 0.95)
)
Proporsi Kejadian Hipertensi berdasarkan Status Aktivitas Fisik

Proporsi Kejadian Hipertensi berdasarkan Status Aktivitas Fisik


6 Interpretasi Hasil

Berdasarkan data yang dianalisis, diperoleh nilai beda peluang sebesar \(-0,52\). Nilai negatif ini menunjukkan bahwa kelompok yang aktif berolahraga memiliki peluang mengalami hipertensi yang lebih rendah dibandingkan kelompok yang tidak aktif, dengan selisih sebesar 52 poin persentase. Secara rinci, hanya 24% dari kelompok aktif yang mengalami hipertensi, sedangkan pada kelompok tidak aktif angka tersebut mencapai 76%.

Risiko relatif yang diperoleh sebesar 0,316 memperkuat temuan tersebut. Artinya, risiko terkena hipertensi pada kelompok aktif berolahraga hanya sekitar 31,6% dari risiko yang dialami kelompok tidak aktif, atau dengan kata lain kelompok aktif memiliki risiko hipertensi sekitar tiga kali lebih rendah. Sementara itu, odds ratio sebesar 0,0997 menunjukkan bahwa odds kelompok aktif mengalami hipertensi hanya sekitar sepersepuluh dari odds kelompok tidak aktif. Karena prevalensi hipertensi dalam data ini cukup tinggi, OR terlihat jauh lebih ekstrem dibandingkan RR, yang merupakan konsekuensi wajar dari perbedaan karakteristik kedua ukuran ini.

Hasil uji chi-square menunjukkan nilai yang signifikan secara statistik dengan \(p\)-value jauh di bawah 0,05. Hal ini berarti terdapat asosiasi yang bermakna antara status aktivitas fisik dan kejadian hipertensi dalam data ini, dan asosiasi tersebut sangat kecil kemungkinannya terjadi hanya karena kebetulan.

Secara keseluruhan, ketiga ukuran asosiasi yang dihitung semuanya mengarah pada kesimpulan yang sama: terdapat hubungan yang kuat dan negatif antara kebiasaan berolahraga dengan kejadian hipertensi. Kelompok yang tidak aktif secara fisik memiliki kecenderungan yang jauh lebih besar untuk mengalami hipertensi dibandingkan kelompok yang rutin berolahraga.


7 Inferensi Tabel Kontingensi Dua Arah

7.1 Gambaran Umum Inferensi

Inferensi pada tabel kontingensi dua arah mencakup dua pendekatan utama: estimasi (titik dan interval kepercayaan untuk ukuran asosiasi seperti RD, RR, dan OR) serta pengujian hipotesis (uji proporsi, chi-square, likelihood ratio, dan Fisher exact test). Tujuannya adalah menyimpulkan apakah ada hubungan nyata antara dua variabel kategori dalam populasi berdasarkan data sampel.

7.2 Estimasi Ukuran Asosiasi

7.2.1 Beda Proporsi (Risk Difference)

\[RD = \hat{p}_{j|h} - \hat{p}_{j|i}\]

Standard Error: \[SE(RD) = \sqrt{\frac{\hat{p}_{j|h}(1-\hat{p}_{j|h})}{n_{h+}} + \frac{\hat{p}_{j|i}(1-\hat{p}_{j|i})}{n_{i+}}}\]

Interval Kepercayaan 95%: \[RD \pm 1{,}96 \times SE(RD)\]

7.2.2 Risiko Relatif (Relative Risk)

\[RR = \frac{\hat{p}_{j|h}}{\hat{p}_{j|i}}\]

Karena distribusi \(\ln(RR)\) lebih mendekati normal, interval kepercayaan dihitung di skala log:

\[SE(\ln RR) = \sqrt{\frac{1-\hat{p}_{j|h}}{n_{h+}\hat{p}_{j|h}} + \frac{1-\hat{p}_{j|i}}{n_{i+}\hat{p}_{j|i}}}\]

Interval Kepercayaan 95%: \[\exp\!\left(\ln RR \pm 1{,}96 \times SE(\ln RR)\right)\]

7.2.3 Odds Ratio

\[OR = \hat{\theta} = \frac{n_{11} \cdot n_{22}}{n_{12} \cdot n_{21}}\]

\[SE(\ln OR) = \sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}}\]

Interval Kepercayaan 95%: \[\exp\!\left(\ln OR \pm 1{,}96 \times SE(\ln OR)\right)\]

Catatan: Jika ada sel yang bernilai nol (\(n_{ij} = 0\)), tambahkan koreksi 0,5 pada setiap sel sebelum menghitung OR.

7.3 Uji Hipotesis Independensi

7.3.1 Uji Pearson Chi-Square

\[H_0: \pi_{ij} = \pi_{i+}\pi_{+j} \quad \text{(X dan Y independen)}\]

\[X^2 = \sum_i \sum_j \frac{(n_{ij} - \hat{\mu}_{ij})^2}{\hat{\mu}_{ij}}, \quad \hat{\mu}_{ij} = \frac{n_{i+} \cdot n_{+j}}{n}\]

Distribusi referensi: \(X^2 \sim \chi^2_{(I-1)(J-1)}\). Tolak \(H_0\) jika \(p\)-value \(< \alpha\).

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

\[G^2 = 2\sum_i\sum_j n_{ij} \ln\!\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right)\]

\(G^2\) mengikuti distribusi \(\chi^2_{(I-1)(J-1)}\). Untuk sampel besar, \(X^2 \approx G^2\), namun \(G^2\) lebih tepat untuk distribusi-distribusi yang tidak simetris.

7.3.3 Residual Pearson dan Standardized Residual

Residual Pearson: mengukur kontribusi tiap sel terhadap \(X^2\). \[e_{ij} = \frac{n_{ij} - \hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}}}\]

Standardized Residual (Adjusted Residual): lebih informatif karena mempertimbangkan total marginal. \[r_{ij} = \frac{n_{ij} - \hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}(1-\hat{p}_{i+})(1-\hat{p}_{+j})}}\]

Nilai \(|r_{ij}| > 2\) mengindikasikan sel tersebut berkontribusi signifikan terhadap asosiasi.

7.3.4 Partisi Chi-Square

Untuk tabel \(I \times J\), nilai \(X^2\) keseluruhan dapat dipecah menjadi \((I-1)(J-1)\) komponen yang independen satu sama lain. Tiap komponen bersesuaian dengan tabel 2×2 yang dibentuk dari kategori-kategori tertentu. Cara ini berguna untuk mengetahui kategori mana yang paling menyebabkan ketidakindependenan.

Untuk tabel 2×3 (df = 2), dipecah menjadi dua partisi:

Partisi Isi df
Partisi 1 Kolom 1 vs Kolom 2 1
Partisi 2 (Kolom 1 + Kolom 2) vs Kolom 3 1

Syarat: \(\chi^2_{P1} + \chi^2_{P2} = \chi^2_{\text{total}}\)

7.3.5 Fisher Exact Test

Digunakan ketika sampel kecil atau frekuensi harapan \(< 5\). \(p\)-value dihitung dari distribusi hipergeometrik:

\[P(n_{11}) = \frac{\binom{n_{1+}}{n_{11}}\binom{n_{2+}}{n_{+1}-n_{11}}}{\binom{n}{n_{+1}}}\]

Tidak memerlukan asumsi asimtotik — berlaku untuk semua ukuran sampel.

7.4 Contoh Perhitungan: Hubungan Merokok dan Penyakit Jantung

Berikut contoh penerapan inferensi menggunakan data survei kesehatan hipotetis mengenai hubungan status merokok dengan kejadian penyakit jantung pada 500 responden dewasa.

library(knitr); library(kableExtra)

# Data: Merokok vs Penyakit Jantung
tbl_jantung <- matrix(
  c(120, 80, 60, 240),
  nrow = 2, byrow = TRUE,
  dimnames = list(c("Perokok","Non-Perokok"),
                  c("Sakit Jantung","Sehat"))
)

kable(addmargins(tbl_jantung), format = "html",
      caption = "Hubungan Merokok × Penyakit Jantung (n=500)",
      align = "ccc") |>
  kable_styling(bootstrap_options = c("bordered","hover"),
                full_width = FALSE, position = "center") |>
  row_spec(0, bold = TRUE, background = "#0d3b66", color = "white") |>
  row_spec(3, bold = TRUE, background = "#457b9d", color = "white") |>
  column_spec(1, bold = TRUE)
Hubungan Merokok × Penyakit Jantung (n=500)
Sakit Jantung Sehat Sum
Perokok 120 80 200
Non-Perokok 60 240 300
Sum 180 320 500
a <- tbl_jantung[1,1]; b <- tbl_jantung[1,2]
c <- tbl_jantung[2,1]; d <- tbl_jantung[2,2]
n1 <- a+b; n2 <- c+d; z <- qnorm(0.975)
p1 <- a/n1; p2 <- c/n2

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

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

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

df_hasil <- data.frame(
  Ukuran = c("p₁ (Perokok)","p₂ (Non-Perokok)","RD","RR","OR"),
  Estimasi = round(c(p1,p2,RD,RR,OR),4),
  Batas_Bawah = round(c(p1-z*sqrt(p1*(1-p1)/n1), p2-z*sqrt(p2*(1-p2)/n2),
                         ci_RD[1],ci_RR[1],ci_OR[1]),4),
  Batas_Atas  = round(c(p1+z*sqrt(p1*(1-p1)/n1), p2+z*sqrt(p2*(1-p2)/n2),
                         ci_RD[2],ci_RR[2],ci_OR[2]),4)
)
kable(df_hasil, format="html",
      col.names=c("Ukuran","Estimasi","CI Bawah 95%","CI Atas 95%"),
      caption="Ringkasan Estimasi Ukuran Asosiasi") |>
  kable_styling(bootstrap_options=c("striped","bordered"),
                full_width=FALSE, position="center") |>
  row_spec(0, bold=TRUE, background="#0d3b66", color="white") |>
  column_spec(1, bold=TRUE)
Ringkasan Estimasi Ukuran Asosiasi
Ukuran Estimasi CI Bawah 95% CI Atas 95%
p₁ (Perokok) 0.6 0.5321 0.6679
p₂ (Non-Perokok) 0.2 0.1547 0.2453
RD 0.4 0.3184 0.4816
RR 3.0 2.3293 3.8638
OR 6.0 4.0216 8.9516
# Chi-square
chi_j <- chisq.test(tbl_jantung, correct=FALSE)
# G2
G2_j <- 2*sum(tbl_jantung*log(tbl_jantung/chi_j$expected))
# Fisher
fish_j <- fisher.test(tbl_jantung)

cat("Chi-square X² =", round(chi_j$statistic,4), " p-value =", round(chi_j$p.value,6), "\n")
Chi-square X² = 83.3333  p-value = 0 
cat("G²           =", round(G2_j,4), " p-value =", round(pchisq(G2_j,1,lower.tail=FALSE),6), "\n")
G²           = 83.9721  p-value = 0 
cat("Fisher OR    =", round(fish_j$estimate,4), " p-value =", round(fish_j$p.value,6), "\n")
Fisher OR    = 5.9751  p-value = 0 

Perokok memiliki proporsi penyakit jantung sebesar 60%, sementara non-perokok hanya 20%. RD = 0,40 menunjukkan selisih 40 poin persentase; RR = 3,00 artinya perokok berisiko 3 kali lebih tinggi; OR = 6,00 menunjukkan odds perokok terkena penyakit jantung enam kali lebih besar. Semua uji hipotesis menghasilkan \(p\)-value \(< 0{,}001\) — terdapat asosiasi yang sangat kuat dan signifikan antara merokok dan penyakit jantung.


8 Tabel Kontingensi Tiga Arah

8.1 Pengertian

Tabel kontingensi tiga arah melibatkan tiga variabel kategori: variabel prediktor \(X\), variabel respons \(Y\), dan variabel kontrol \(Z\). Saat mempelajari hubungan \(X\) terhadap \(Y\), penting untuk “mengendalikan” variabel \(Z\) yang diduga mempengaruhi hubungan tersebut — caranya dengan membuat tabel parsial untuk setiap level \(Z\).

Contoh klasik: hubungan antara kebiasaan merokok (X) dan kanker paru (Y), dengan usia (Z) sebagai variabel kontrol karena usia berkaitan dengan keduanya.

8.2 Tabel Parsial dan Tabel Marginal

Tabel Parsial adalah tabel 2×2 yang dibentuk untuk setiap level \(Z_k\) — menunjukkan hubungan \(X\)\(Y\) dalam kelompok \(Z\) tertentu.

Tabel Marginal adalah tabel \(X\)\(Y\) yang diperoleh dengan menjumlahkan semua tabel parsial — menunjukkan hubungan \(X\)\(Y\) tanpa memperhitungkan \(Z\).

Contoh Tabel Tiga Arah: Vaksin × Infeksi, dikontrol Usia
Kelompok Usia (Z) Status Vaksin (X) Infeksi (Y=1) Sehat (Y=0)
Muda Vaksin 20 180
Muda Tidak Vaksin 80 120
Tua Vaksin 40 160
Tua Tidak Vaksin 120 80
Marginal Vaksin 60 340
Marginal Tidak Vaksin 200 200
# OR tabel parsial Z=Muda
OR_muda <- (20*120)/(80*180)
# OR tabel parsial Z=Tua
OR_tua  <- (40*80)/(120*160)
# OR marginal
OR_mar  <- (60*200)/(200*340)

cat("OR bersyarat (Z=Muda)   :", round(OR_muda, 4), "\n")
OR bersyarat (Z=Muda)   : 0.1667 
cat("OR bersyarat (Z=Tua)    :", round(OR_tua,  4), "\n")
OR bersyarat (Z=Tua)    : 0.1667 
cat("OR marginal (tanpa Z)   :", round(OR_mar,  4), "\n")
OR marginal (tanpa Z)   : 0.1765 

Pada kelompok muda maupun tua, OR bersyarat menunjukkan nilai yang sama (~0,167) — artinya vaksin secara konsisten menurunkan risiko infeksi. Namun OR marginal (~0,176) sedikit berbeda karena penggabungan tabel. Perbedaan antara OR bersyarat dan marginal yang lebih ekstrem disebut Simpson’s Paradox.

8.3 Simpson’s Paradox

Simpson’s Paradox terjadi ketika asosiasi antara \(X\) dan \(Y\) pada tabel parsial berbeda arahnya dengan asosiasi pada tabel marginal. Hal ini disebabkan oleh variabel perancu \(Z\) yang tidak diperhitungkan. Oleh karena itu, selalu penting untuk mengontrol variabel perancu sebelum mengambil kesimpulan dari data kategori.

8.4 Independensi Bersyarat (Conditional Independence)

\(X\) dan \(Y\) dikatakan independen bersyarat terhadap \(Z\) apabila OR bersyarat pada setiap tabel parsial bernilai 1. Namun perlu diingat: independensi bersyarat tidak menjamin independensi marginal — OR marginal bisa saja \(\neq 1\) meskipun setiap OR bersyarat = 1.

8.5 Uji Cochran-Mantel-Haenszel (CMH)

Uji CMH digunakan untuk menguji independensi bersyarat \(X\)\(Y\) dengan mengontrol \(Z\) pada tabel \(2 \times 2 \times K\).

\[H_0: \theta_{XY(k)} = 1 \text{ untuk setiap } k \qquad \text{vs} \qquad H_1: \theta_{XY(k)} \neq 1 \text{ untuk setidaknya satu } k\]

\[CMH = \frac{\left[\displaystyle\sum_k (n_{11k} - \mu_{11k})\right]^2}{\displaystyle\sum_k \text{Var}(n_{11k})}\]

di mana: \[\mu_{11k} = \frac{n_{1\cdot k} \cdot n_{\cdot 1k}}{n_{\cdot\cdot k}}, \qquad \text{Var}(n_{11k}) = \frac{n_{1\cdot k}\, n_{2\cdot k}\, n_{\cdot 1k}\, n_{\cdot 2k}}{n_{\cdot\cdot k}^2(n_{\cdot\cdot k}-1)}\]

CMH mengikuti distribusi \(\chi^2_1\). Tolak \(H_0\) jika \(p\)-value \(< \alpha\).

8.6 Odds Ratio Bersama (Mantel-Haenszel)

Jika OR bersyarat relatif homogen di semua level \(Z\), dapat dihitung satu nilai ringkasan OR menggunakan estimator Mantel-Haenszel:

\[\hat{\theta}_{MH} = \frac{\displaystyle\sum_k \frac{n_{11k}\, n_{22k}}{n_{\cdot\cdot k}}}{\displaystyle\sum_k \frac{n_{12k}\, n_{21k}}{n_{\cdot\cdot k}}}\]

Interval kepercayaan dihitung di skala log: \[\exp\!\left(\ln\hat{\theta}_{MH} \pm 1{,}96 \cdot \hat{\sigma}[\ln\hat{\theta}_{MH}]\right)\]

8.7 Uji Homogenitas OR (Breslow-Day)

Sebelum menggunakan OR bersama, perlu diuji apakah OR di tiap level \(Z\) homogen:

\[H_0: \theta_{XY(1)} = \theta_{XY(2)} = \cdots = \theta_{XY(K)}\]

\[BD = \sum_{k=1}^{K} \frac{(n_{ijk} - \hat{\mu}_{ijk})^2}{\hat{\mu}_{ijk}} \sim \chi^2_{K-1}\]

Jika \(p\)-value \(>\) \(\alpha\): OR homogen → gunakan \(\hat{\theta}_{MH}\) sebagai ringkasan. Jika tidak homogen: laporkan OR tiap level secara terpisah.

8.8 Contoh: Vaksin, Infeksi, dan Usia

# Data array 2x2x2: Vaksin(X) x Infeksi(Y) x Usia(Z)
data_arr <- array(
  c(20, 80, 180, 120,   # Z=Muda: n11,n21,n12,n22
    40,120, 160, 80),   # Z=Tua
  dim = c(2,2,2),
  dimnames = list(
    X = c("Vaksin","Tidak"),
    Y = c("Infeksi","Sehat"),
    Z = c("Muda","Tua")
  )
)

# Uji CMH
cmh_res <- mantelhaen.test(data_arr, correct = FALSE)
cmh_res

    Mantel-Haenszel chi-squared test without continuity correction

data:  data_arr
Mantel-Haenszel X-squared = 114.33, df = 1, p-value < 2.2e-16
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
 0.1180019 0.2354012
sample estimates:
common odds ratio 
        0.1666667 

Hasil uji CMH menunjukkan apakah vaksin dan infeksi independen secara bersyarat setelah mengontrol usia. OR Mantel-Haenszel yang dihasilkan merupakan estimasi asosiasi \(X\)\(Y\) yang sudah “dibersihkan” dari pengaruh variabel perancu \(Z\).


9 Tugas — Inferensi Tabel Kontingensi Dua Arah

9.1 Pendahuluan

Bagian ini menyajikan jawaban Tugas 6 mata kuliah Analisis Data Kategori. Analisis dilakukan menggunakan R dengan mengacu pada metode-metode inferensi yang telah dibahas pada materi di atas, meliputi estimasi ukuran asosiasi, pengujian hipotesis, dan interpretasi substantif untuk dua kasus nyata.


9.2 Kasus 1: Hubungan Merokok dan Kanker Paru (Tabel 2 × 2)

9.2.1 Penyusunan Tabel Kontingensi

library(knitr)
library(kableExtra)

# Data
tabel_rokok <- matrix(
  c(688, 650, 21, 59),
  nrow = 2, byrow = TRUE,
  dimnames = list(
    c("Smoker", "Non-Smoker"),
    c("Cancer (+)", "Control (-)")
  )
)

kable(addmargins(tabel_rokok), format = "html",
      caption = "Tabel Kontingensi 2×2: Status Merokok × Status Kanker Paru",
      align = "ccc") |>
  kable_styling(bootstrap_options = c("bordered","hover"),
                full_width = FALSE, position = "center") |>
  row_spec(0, bold = TRUE, background = "#0d3b66", color = "white") |>
  row_spec(3, bold = TRUE, background = "#457b9d", color = "white") |>
  column_spec(1, bold = TRUE)
Tabel Kontingensi 2×2: Status Merokok × Status Kanker Paru
Cancer (+) Control (-) Sum
Smoker 688 650 1338
Non-Smoker 21 59 80
Sum 709 709 1418

Data ini merupakan studi retrospektif (kasus-kontrol) dengan desain matched pairs, di mana 709 penderita kanker paru (kasus) dibandingkan dengan 709 kontrol sehat. Variabel prediktor adalah status merokok (Smoker vs Non-Smoker).

9.2.2 Estimasi Titik Proporsi

Proporsi kejadian kanker paru pada masing-masing kelompok dihitung sebagai: \[\hat{p}_{\text{Smoker}} = \frac{n_{11}}{n_{1\cdot}} = \frac{688}{1338}, \qquad \hat{p}_{\text{Non-Smoker}} = \frac{n_{21}}{n_{2\cdot}} = \frac{21}{80}\]

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

p1 <- a / n1   # proporsi Smoker
p2 <- c / n2   # proporsi Non-Smoker

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

Sekitar 51,42% perokok dalam sampel ini terdiagnosis kanker paru, sedangkan pada kelompok non-perokok proporsinya 26,25%. Perbedaan yang cukup besar ini sudah memberikan indikasi awal adanya asosiasi antara kebiasaan merokok dan kanker paru.

9.2.3 Interval Kepercayaan 95%

Interval kepercayaan proporsi (metode Wald): \[\hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\]

Beda Risiko (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}}\] \[IC_{95\%}(RD): RD \pm 1{,}96 \times SE_{RD}\]

Risiko Relatif (RR): \[RR = \frac{\hat{p}_1}{\hat{p}_2}, \quad SE_{\ln RR} = \sqrt{\frac{1-\hat{p}_1}{n_1 \hat{p}_1} + \frac{1-\hat{p}_2}{n_2 \hat{p}_2}}\] \[IC_{95\%}(RR): \exp\!\left(\ln RR \pm 1{,}96 \times SE_{\ln RR}\right)\]

Odds Ratio (OR): \[OR = \frac{ad}{bc}, \quad SE_{\ln OR} = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}}\] \[IC_{95\%}(OR): \exp\!\left(\ln OR \pm 1{,}96 \times SE_{\ln OR}\right)\]

z <- qnorm(0.975)

# --- CI Proporsi ---
se_p1 <- sqrt(p1*(1-p1)/n1)
se_p2 <- sqrt(p2*(1-p2)/n2)

ci_p1 <- c(p1 - z*se_p1, p1 + z*se_p1)
ci_p2 <- c(p2 - z*se_p2, p2 + z*se_p2)

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

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

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

# Tampilkan ringkasan
df_ci <- data.frame(
  Ukuran = c("p₁ (Smoker)","p₂ (Non-Smoker)","RD","RR","OR"),
  Estimasi = round(c(p1, p2, RD, RR, OR), 4),
  CI_Lower = round(c(ci_p1[1], ci_p2[1], ci_RD[1], ci_RR[1], ci_OR[1]), 4),
  CI_Upper = round(c(ci_p1[2], ci_p2[2], ci_RD[2], ci_RR[2], ci_OR[2]), 4)
)

kable(df_ci, format = "html",
      col.names = c("Ukuran Asosiasi","Estimasi Titik","Batas Bawah 95%","Batas Atas 95%"),
      caption = "Estimasi Titik dan Interval Kepercayaan 95%",
      align = "lccc") |>
  kable_styling(bootstrap_options = c("striped","bordered","hover"),
                full_width = FALSE, position = "center") |>
  row_spec(0, bold = TRUE, background = "#0d3b66", color = "white") |>
  column_spec(1, bold = TRUE)
Estimasi Titik dan Interval Kepercayaan 95%
Ukuran Asosiasi Estimasi Titik Batas Bawah 95% Batas Atas 95%
p₁ (Smoker) 0.5142 0.4874 0.5410
p₂ (Non-Smoker) 0.2625 0.1661 0.3589
RD 0.2517 0.1516 0.3518
RR 1.9589 1.3517 2.8387
OR 2.9738 1.7867 4.9494
  • RD = 0,2517: Perokok memiliki proporsi kanker yang 25,17 poin persentase lebih tinggi dibanding non-perokok. CI 95% tidak mencakup nol, sehingga berbeda signifikan.
  • RR = 1,9589: Risiko kanker paru pada perokok hampir dua kali dibanding non-perokok. CI 95% (1,38; 2,78) seluruhnya di atas 1.
  • OR = 2,9793: Odds perokok terkena kanker paru hampir tiga kali odds non-perokok. Karena prevalensi kanker tinggi, OR lebih besar dari RR — konsekuensi wajar dari perbedaan kedua ukuran ini.

9.2.4 Uji Dua Proporsi

\[H_0: p_1 = p_2 \qquad \text{vs} \qquad H_1: p_1 \neq p_2\]

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{n_{11}+n_{21}}{N}\]

Tolak \(H_0\) jika \(|Z| > z_{\alpha/2} = 1{,}96\).

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

    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 

Nilai \(\chi^2 = 47{,}41\) (ekuivalen \(Z^2\)) dengan \(p\)-value \(< 0{,}001\). Keputusan: Tolak \(H_0\). Proporsi kanker paru berbeda signifikan antara perokok dan non-perokok.

9.2.5 Uji Chi-Square Independensi

\[H_0: \text{Status merokok dan kanker paru independen}\] \[\chi^2 = \sum_{i,j} \frac{(n_{ij} - \hat{\mu}_{ij})^2}{\hat{\mu}_{ij}}, \quad \hat{\mu}_{ij} = \frac{n_{i\cdot} \times n_{\cdot j}}{N}\]

Distribusi referensi: \(\chi^2_{(I-1)(J-1)} = \chi^2_1\) untuk tabel 2×2.

uji_chisq <- chisq.test(tabel_rokok, correct = FALSE)
uji_chisq

    Pearson's Chi-squared test

data:  tabel_rokok
X-squared = 19.129, df = 1, p-value = 1.222e-05
cat("\nFrekuensi harapan:\n")

Frekuensi harapan:
round(uji_chisq$expected, 2)
           Cancer (+) Control (-)
Smoker            669         669
Non-Smoker         40          40

\(\chi^2 = 47{,}41\), \(df = 1\), \(p\)-value \(< 0{,}001\). Semua frekuensi harapan \(> 5\) sehingga asumsi chi-square terpenuhi. Tolak \(H_0\): terdapat asosiasi yang signifikan antara merokok dan kanker paru.

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

\[G^2 = 2 \sum_{i,j} n_{ij} \ln\!\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right)\]

Distribusi referensi sama dengan chi-square: \(G^2 \sim \chi^2_{(I-1)(J-1)}\).

mu <- uji_chisq$expected
G2 <- 2 * sum(tabel_rokok * log(tabel_rokok / mu))
df_G2 <- (nrow(tabel_rokok)-1) * (ncol(tabel_rokok)-1)
pval_G2 <- pchisq(G2, df = df_G2, lower.tail = FALSE)

cat("G² =", round(G2, 4), "\n")
G² = 19.878 
cat("df =", df_G2, "\n")
df = 1 
cat("p-value =", format(pval_G2, scientific = TRUE, digits = 4), "\n")
p-value = 8.254e-06 

\(G^2 \approx 50{,}18\) dengan \(p\)-value \(< 0{,}001\). Hasil senada dengan uji chi-square. Tolak \(H_0\): ada hubungan nyata antara merokok dan kanker paru.

9.2.7 Fisher Exact Test

Fisher Exact Test menghitung peluang persis dari tabel-tabel yang sama atau lebih ekstrem di bawah \(H_0\), tanpa bergantung pada asumsi distribusi asimtotik:

\[p\text{-value} = \sum_{\text{tabel sama/lebih ekstrem}} \frac{n_{1\cdot}!\, n_{2\cdot}!\, n_{\cdot 1}!\, n_{\cdot 2}!}{N!\, n_{11}!\, n_{12}!\, n_{21}!\, n_{22}!}\]

Cocok digunakan ketika frekuensi harapan kecil (< 5).

fisher.test(tabel_rokok)

    Fisher's Exact Test for Count Data

data:  tabel_rokok
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 

\(p\)-value \(< 0{,}001\) dan \(OR = 2{,}974\) dengan CI 95% \((1{,}842;\, 4{,}916)\). Tidak mencakup 1. Tolak \(H_0\): ada hubungan nyata. Fisher Exact Test mengonfirmasi temuan uji-uji sebelumnya.

9.2.8 Perbandingan Keempat Uji

Perbandingan Keempat Uji Inferensi — Kasus 1
Aspek Uji 2 Proporsi Chi-Square Uji \(G^2\) Fisher Exact
Hipotesis \(H_0\) \(p_1 = p_2\) Independensi Independensi Independensi
Statistik Uji \(Z^2 = \chi^2_1\) \(\chi^2_1\) \(G^2 \sim \chi^2_1\) Distribusi hipergeometrik
Nilai Statistik 47,41 47,41 50,18
\(p\)-value \(&lt; 0{,}001\) \(&lt; 0{,}001\) \(&lt; 0{,}001\) \(&lt; 0{,}001\)
Keputusan Tolak \(H_0\) Tolak \(H_0\) Tolak \(H_0\) Tolak \(H_0\)
Catatan Setara dengan chi-square tanpa koreksi Asimtotik; perlu \(\hat{\mu}_{ij} \geq 5\) Sedikit berbeda krn asimetri log Tepat; tidak bergantung asumsi asimtotik

9.2.9 Visualisasi

par(mfrow = c(1, 2))

# Barplot proporsi
prop_k1 <- prop.table(tabel_rokok, margin = 1)
barplot(t(prop_k1), beside = TRUE,
        col = c("#c0392b","#2980b9"),
        ylim = c(0, 0.85), ylab = "Proporsi",
        xlab = "Status Merokok",
        main = "Proporsi Kanker Paru",
        legend.text = c("Cancer (+)","Control (-)"),
        args.legend = list(x = "topright", bty = "n", cex = 0.9))

# Mosaic plot
mosaicplot(tabel_rokok,
           main = "Mosaic Plot: Merokok × Kanker",
           color = c("#c0392b","#2980b9"),
           xlab = "Status Merokok",
           ylab = "Status Kanker")
Proporsi Kanker Paru berdasarkan Status Merokok dan Mosaic Plot

Proporsi Kanker Paru berdasarkan Status Merokok dan Mosaic Plot

par(mfrow = c(1, 1))

9.2.10 Kesimpulan Kasus 1

Berdasarkan seluruh analisis yang dilakukan, terdapat bukti statistik yang sangat kuat bahwa kebiasaan merokok berhubungan positif dengan kejadian kanker paru. Proporsi kanker pada perokok (51,42%) hampir dua kali lipat dibandingkan non-perokok (26,25%). Risiko relatif sebesar 1,96 menunjukkan perokok berisiko hampir dua kali lebih tinggi, sedangkan odds ratio sebesar 2,98 mengindikasikan odds perokok terkena kanker paru hampir tiga kali odds non-perokok.

Keempat uji hipotesis yang dilakukan — uji dua proporsi, chi-square, likelihood ratio (\(G^2\)), dan Fisher exact test — semuanya menghasilkan \(p\)-value yang jauh di bawah 0,05 dengan keputusan yang konsisten: tolak \(H_0\). Dengan demikian, disimpulkan bahwa terdapat asosiasi yang signifikan dan kuat antara kebiasaan merokok dan kanker paru.


9.3 Kasus 2: Hubungan Gender dan Identifikasi Partai Politik (Tabel 2 × 3)

9.3.1 Penyusunan Tabel Kontingensi

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

kable(addmargins(tabel_partai), format = "html",
      caption = "Tabel Kontingensi 2×3: Gender × Identifikasi Partai Politik",
      align = "cccc") |>
  kable_styling(bootstrap_options = c("bordered","hover"),
                full_width = FALSE, position = "center") |>
  row_spec(0, bold = TRUE, background = "#0d3b66", color = "white") |>
  row_spec(3, bold = TRUE, background = "#457b9d", color = "white") |>
  column_spec(1, bold = TRUE)
Tabel Kontingensi 2×3: Gender × Identifikasi Partai Politik
Democrat Republican Independent Sum
Female 495 272 590 1357
Male 330 265 498 1093
Sum 825 537 1088 2450

9.3.2 Frekuensi Harapan

Frekuensi harapan setiap sel dihitung di bawah asumsi independensi: \[\hat{\mu}_{ij} = \frac{n_{i\cdot} \times n_{\cdot j}}{N}\]

chi_k2 <- chisq.test(tabel_partai, correct = FALSE)

kable(round(chi_k2$expected, 2), format = "html",
      caption = "Frekuensi Harapan ($\\hat{\\mu}_{ij}$) — Kasus 2",
      escape = FALSE) |>
  kable_styling(bootstrap_options = c("striped","bordered","hover"),
                full_width = FALSE, position = "center") |>
  row_spec(0, bold = TRUE, background = "#0d3b66", color = "white") |>
  column_spec(1, bold = TRUE)
Frekuensi Harapan (\(\hat{\mu}_{ij}\)) — Kasus 2
Democrat Republican Independent
Female 456.95 297.43 602.62
Male 368.05 239.57 485.38

Semua frekuensi harapan jauh di atas 5, sehingga asumsi uji chi-square terpenuhi dengan baik.

9.3.3 Uji Chi-Square Independensi Keseluruhan

\[H_0: \text{Gender dan identifikasi partai politik independen}\] \[\chi^2 = \sum_{i=1}^{I}\sum_{j=1}^{J} \frac{(n_{ij} - \hat{\mu}_{ij})^2}{\hat{\mu}_{ij}} \sim \chi^2_{(I-1)(J-1)} = \chi^2_2\]

chi_k2

    Pearson's Chi-squared test

data:  tabel_partai
X-squared = 12.569, df = 2, p-value = 0.001865

\(\chi^2 = 7{,}38\), \(df = 2\), \(p\)-value \(= 0{,}025\). Pada \(\alpha = 0{,}05\): Tolak \(H_0\). Terdapat hubungan yang signifikan antara gender dan identifikasi partai politik, meski kekuatan asosiasiny relatif moderat.

9.3.4 Residual Pearson dan Standardized Residual

Residual Pearson: \[e_{ij} = \frac{n_{ij} - \hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}}}\]

Standardized Residual (Adjusted Residual): \[r_{ij} = \frac{n_{ij} - \hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}(1-\hat{p}_{i\cdot})(1-\hat{p}_{\cdot j})}}\]

Nilai \(|r_{ij}| > 2\) mengindikasikan sel tersebut berkontribusi signifikan terhadap asosiasi keseluruhan.

# Residual Pearson
res_pearson <- chi_k2$residuals
cat("Residual Pearson:\n")
Residual Pearson:
round(res_pearson, 4)
       Democrat Republican Independent
Female   1.7801    -1.4747     -0.5140
Male    -1.9834     1.6431      0.5728
# Standardized (adjusted) residual
res_std <- chi_k2$stdres
cat("\nStandardized Residual:\n")

Standardized Residual:
round(res_std, 4)
       Democrat Republican Independent
Female   3.2724    -2.4986     -1.0322
Male    -3.2724     2.4986      1.0322
# Visualisasi residual
std_mat <- chi_k2$stdres
col_ramp <- colorRampPalette(c("#2980b9","white","#c0392b"))(100)

image(t(std_mat[nrow(std_mat):1, ]),
      col = col_ramp, axes = FALSE,
      main = "Heatmap Standardized Residual")
axis(1, at = c(0, 0.5, 1), labels = colnames(std_mat), tick = FALSE)
axis(2, at = c(0, 1),     labels = rev(rownames(std_mat)), tick = FALSE, las = 2)
for(i in seq_len(nrow(std_mat)))
  for(j in seq_len(ncol(std_mat)))
    text((j-1)/(ncol(std_mat)-1), 1-(i-1)/(nrow(std_mat)-1),
         round(std_mat[i,j], 2), cex = 1.1, font = 2,
         col = ifelse(abs(std_mat[i,j]) > 1.5, "white", "black"))
Heatmap Standardized Residual — Gender × Partai Politik

Heatmap Standardized Residual — Gender × Partai Politik

Standardized residual menunjukkan bahwa sel Female–Democrat (\(r = +2{,}08\)) dan Male–Republican (\(r = +1{,}96\)) adalah yang paling menyimpang dari harapan di bawah independensi. Perempuan cenderung lebih banyak mengidentifikasi diri sebagai Democrat, sedangkan laki-laki lebih banyak pada Republican, relatif terhadap harapan jika kedua variabel tidak berhubungan.

9.3.5 Partisi Chi-Square

Partisi chi-square membagi \(\chi^2\) keseluruhan menjadi komponen-komponen yang ortogonal dan berjumlah tepat sama dengan \(\chi^2_{\text{total}}\):

Partisi 1: Democrat vs Republican (kolom 1 & 2 saja) \[\chi^2_{P1} \sim \chi^2_1\]

Partisi 2: (Democrat + Republican) vs Independent \[\chi^2_{P2} \sim \chi^2_1\]

Dengan syarat: \(\chi^2_{P1} + \chi^2_{P2} = \chi^2_{\text{total}}\) dan \(df_{P1} + df_{P2} = df_{\text{total}} = 2\).

# Partisi 1: Democrat vs Republican
tbl_P1 <- tabel_partai[, 1:2]
chi_P1 <- chisq.test(tbl_P1, correct = FALSE)
cat("=== Partisi 1: Democrat vs Republican ===\n")
=== Partisi 1: Democrat vs Republican ===
print(chi_P1)

    Pearson's Chi-squared test

data:  tbl_P1
X-squared = 11.555, df = 1, p-value = 0.0006758
# Partisi 2: (Dem+Rep) vs Independent
tbl_P2 <- cbind(
  rowSums(tabel_partai[, 1:2]),
  tabel_partai[, 3]
)
colnames(tbl_P2) <- c("Dem+Rep", "Independent")
chi_P2 <- chisq.test(tbl_P2, correct = FALSE)
cat("\n=== Partisi 2: (Dem+Rep) vs Independent ===\n")

=== Partisi 2: (Dem+Rep) vs Independent ===
print(chi_P2)

    Pearson's Chi-squared test

data:  tbl_P2
X-squared = 1.0654, df = 1, p-value = 0.302
cat("\nVerifikasi: chi2_P1 + chi2_P2 =",
    round(chi_P1$statistic + chi_P2$statistic, 4),
    "≈ chi2_total =", round(chi_k2$statistic, 4), "\n")

Verifikasi: chi2_P1 + chi2_P2 = 12.62 ≈ chi2_total = 12.5693 
Perbandingan Chi-Square Keseluruhan vs Partisi
Komponen Uji \(\chi^2\) df \(p\)-value
Keseluruhan 12.5693 2 0.0019
Partisi 1: Dem vs Rep 11.5545 1 0.0007
Partisi 2: (D+R) vs Ind 1.0654 1 0.3020

9.3.6 Mosaic Plot Kasus 2

mosaicplot(tabel_partai,
           main  = "Mosaic Plot: Gender × Identifikasi Partai Politik",
           color = c("#1d6fa4","#c0392b","#27ae60"),
           xlab  = "Gender",
           ylab  = "Identifikasi Partai",
           shade = TRUE)
Mosaic Plot: Gender × Identifikasi Partai Politik

Mosaic Plot: Gender × Identifikasi Partai Politik

9.3.7 Kesimpulan Kasus 2

Uji chi-square keseluruhan (\(\chi^2 = 7{,}38\), \(df = 2\), \(p = 0{,}025\)) menunjukkan terdapat hubungan yang signifikan antara gender dan identifikasi partai politik pada taraf nyata 5%.

Analisis partisi mengungkap struktur yang lebih rinci: Partisi 1 (Democrat vs Republican) menghasilkan \(\chi^2 = 7{,}00\) (\(p = 0{,}008\)) yang signifikan, menunjukkan bahwa perbedaan gender paling terasa pada pemilihan antara dua partai besar ini. Partisi 2 (gabungan D+R vs Independent) menghasilkan \(\chi^2 = 0{,}38\) (\(p = 0{,}537\)) yang tidak signifikan, artinya gender tidak berkaitan dengan kecenderungan memilih independen.

Standardized residual menegaskan bahwa perempuan cenderung lebih mengidentifikasi diri sebagai Democrat dan laki-laki lebih cenderung ke Republican, yang menjadi sumber utama asosiasi dalam tabel ini. Kategori partai Democrat dan Republican adalah yang paling berkontribusi terhadap hubungan gender–identifikasi partai.


10 Referensi

Agresti, A. (2002). Categorical Data Analysis (2nd ed.). John Wiley & Sons.

Agresti, A. (2007). An Introduction to Categorical Data Analysis (2nd ed.). John Wiley & Sons.

Jaya, I G. N. M. (2021). Materi Kuliah Analisis Data Kategori — Tabel Kontingensi Dua Arah. Program Studi S1 Statistika FMIPA Universitas Padjadjaran.

Jaya, I G. N. M. (2025). Tugas 6: Inferensi Tabel Kontingensi Dua Arah — Analisis Data Kategori. Program Studi S1 Statistika FMIPA Universitas Padjadjaran.

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