1 Pendahuluan

Dalam statistik, data kategori merupakan jenis data yang terdiri dari kategori atau kelompok, bukan angka yang memiliki nilai kontinu. Data ini sering kali digunakan dalam berbagai disiplin ilmu untuk memahami pola, hubungan, dan tren yang tidak dapat diukur secara langsung menggunakan skala numerik. Contoh umum dari data kategori mencakup jenis kelamin (laki-laki/perempuan), status pernikahan (menikah/belum menikah), tingkat pendidikan (rendah/menengah/tinggi), dan preferensi konsumen (setuju/netral/tidak setuju).

Analisis data kategori memainkan peran penting dalam eksplorasi dan interpretasi data yang bersifat nominal atau ordinal. Berbeda dengan data kontinu, analisis data kategori memerlukan pendekatan khusus, seperti tabel kontingensi, uji chi-square, analisis regresi logistik, dan metode estimasi berbasis model probabilitas. Dengan berkembangnya teknologi dan kecerdasan buatan, analisis data kategori juga semakin banyak diterapkan dalam machine learning dan big data analytics.

1.1 Tujuan Analisis Data Kategori

Analisis data kategori memiliki berbagai tujuan utama yang membantu dalam pengambilan keputusan berbasis data. Beberapa tujuan utama dari analisis ini meliputi:

1.1.1 Mengidentifikasi Pola dan Tren

Analisis data kategori memungkinkan peneliti dan praktisi untuk mengidentifikasi pola-pola yang tersembunyi dalam data. Misalnya, dalam penelitian pemasaran, analisis ini dapat digunakan untuk memahami preferensi konsumen berdasarkan kelompok demografis tertentu.

1.1.2 Menganalisis Hubungan Antarvariabel

Dalam banyak kasus, hubungan antara dua atau lebih variabel kategori menjadi perhatian utama. Misalnya, dalam penelitian kesehatan, analisis data kategori dapat membantu memahami hubungan antara gaya hidup dan penyakit tertentu.

1.1.3 Membantu dalam Pengambilan Keputusan

Dengan memahami pola dan hubungan dalam data kategori, pengambil keputusan dapat membuat strategi yang lebih tepat sasaran. Misalnya, dalam kebijakan publik, analisis data kategori dapat digunakan untuk menentukan kebijakan sosial berdasarkan segmentasi masyarakat.

1.1.4 Mengembangkan Model Prediktif

Banyak model prediktif yang menggunakan data kategori sebagai salah satu inputnya, seperti regresi logistik untuk memprediksi kejadian biner (misalnya, apakah seorang pasien memiliki risiko tinggi terkena penyakit atau tidak).

1.2 Definisi dan Ruang Lingkup Analisis Data Kategori

Analisis data kategori adalah teknik statistik yang digunakan untuk menganalisis variabel yang bersifat kategorik.

1.2.1 Nominal vs Ordinal

  • Nominal: Tidak memiliki urutan (contoh: warna, jenis kelamin).
  • Ordinal: Memiliki urutan (contoh: tingkat pendidikan, tingkat kepuasan).

1.2.2 Data Biner vs Multikategori

  • Biner: Hanya memiliki dua kategori (contoh: sukses/gagal, sehat/sakit).
  • Multikategori: Memiliki lebih dari dua kategori.

1.3 Perbedaan dengan Data Kuantitatif

Data kategorik berbeda dari data kuantitatif karena tidak dapat diukur dalam skala numerik kontinu.

1.4 Manfaat Analisis Data Kategori dalam Berbagai Bidang

Analisis data kategori memiliki manfaat luas dalam berbagai bidang, baik di sektor akademik maupun industri. Berikut adalah beberapa bidang utama dimana analisis ini banyak diterapkan:

1.4.1 Ilmu Sosial dan Psikologi

Dalam ilmu sosial dan psikologi, analisis data kategori digunakan untuk memahami perilaku manusia, opini publik, dan faktor sosial lainnya. Misalnya:

  • Survei kepuasan pelanggan menggunakan skala Likert (sangat puas hingga sangat tidak puas).
  • Studi tentang hubungan antara faktor sosial-ekonomi dan tingkat pendidikan seseorang.
  • Penelitian tentang efek terapi psikologis terhadap kelompok pasien tertentu.

1.4.2 Kesehatan dan Kedokteran

Dalam bidang kesehatan, analisis data kategori sangat penting dalam epidemiologi dan studi klinis. Contohnya:

  • Mengkategorikan pasien berdasarkan status kesehatan (sehat/sakit/kronis).
  • Menilai efektivitas pengobatan berdasarkan jenis terapi yang diterima pasien.
  • Menganalisis faktor risiko penyakit berdasarkan gaya hidup dan karakteristik pasien.

1.4.3 Pemasaran dan Bisnis

Dalam pemasaran dan bisnis, data kategori digunakan untuk memahami preferensi pelanggan, segmentasi pasar, dan efektivitas strategi pemasaran. Beberapa penerapan meliputi:

  • Menentukan preferensi pelanggan terhadap merek tertentu (menyukai/tidak menyukai/netral).
  • Analisis segmentasi pelanggan berdasarkan usia, jenis kelamin, dan lokasi geografis.
  • Studi tentang loyalitas pelanggan berdasarkan tingkat kepuasan layanan.

1.4.4 Pendidikan

Dalam dunia pendidikan, analisis data kategori berguna dalam mengevaluasi metode pengajaran, tingkat kepuasan mahasiswa, dan efektivitas kurikulum. Contohnya:

  • Survei kepuasan mahasiswa terhadap metode pengajaran dosen.
  • Analisis hubungan antara latar belakang sosial-ekonomi dan prestasi akademik.
  • Studi tentang efektivitas program pembelajaran berbasis teknologi.

1.4.5 Kebijakan Publik dan Pemerintahan

Pemerintah sering menggunakan analisis data kategori untuk memahami kebutuhan masyarakat dan merancang kebijakan yang lebih efektif. Beberapa penerapan termasuk:

  • Analisis tingkat kepuasan masyarakat terhadap layanan publik.
  • Studi tentang tingkat partisipasi masyarakat dalam pemilu.
  • Evaluasi efektivitas program bantuan sosial berdasarkan kategori penerima manfaat.

1.4.6 Keamanan dan Kriminalitas

Dalam bidang keamanan dan analisis kriminal, data kategori digunakan untuk memahami pola kejahatan dan merancang strategi pencegahan. Contohnya:

  • Analisis kategori jenis kejahatan yang paling sering terjadi di suatu wilayah.
  • Studi tentang faktor demografis yang berkorelasi dengan tingkat kriminalitas.
  • Evaluasi efektivitas kebijakan penegakan hukum terhadap berbagai kategori pelanggaran.

2 Metode dalam Analisis Data Kategori

Berbagai metode dapat digunakan dalam analisis data kategori, tergantung pada tujuan penelitian. Beberapa metode umum meliputi:

2.1 Tabel Kontingensi dan Uji Chi-Square

  • Digunakan untuk menguji hubungan antara dua variabel kategori.
  • Contohnya, menguji apakah ada hubungan antara tingkat pendidikan dan status pekerjaan.

2.2 Regresi Logistik

  • Digunakan untuk memprediksi probabilitas suatu kejadian berdasarkan variabel kategori.
  • Contohnya, memprediksi apakah seorang pelanggan akan membeli produk berdasarkan kategori preferensi mereka.

2.3 Analisis Correspondence (CA)

  • Digunakan untuk memahami hubungan antara berbagai kategori dalam satu dataset.
  • Contohnya, analisis tentang preferensi makanan berdasarkan kelompok usia.

2.4 Decision Tree dan Random Forest

  • Metode machine learning yang sering digunakan untuk klasifikasi berbasis kategori.
  • Contohnya, mengklasifikasikan pelanggan berdasarkan tingkat loyalitas mereka.

Analisis data kategori merupakan bagian penting dari analisis statistik yang memiliki aplikasi luas dalam berbagai bidang. Dengan pendekatan yang tepat, analisis ini dapat membantu dalam memahami pola, hubungan, dan tren dalam data yang bersifat kategori. Selain itu, metode analisis data kategori seperti tabel kontingensi, uji chi-square, regresi logistik, dan machine learning terus berkembang seiring dengan kemajuan teknologi, memungkinkan pengambilan keputusan yang lebih akurat dan berbasis data.

Dengan demikian, pemahaman yang baik tentang analisis data kategori sangat penting bagi peneliti, praktisi bisnis, pembuat kebijakan, dan profesional dari berbagai disiplin ilmu untuk menghasilkan wawasan yang lebih dalam dan keputusan yang lebih tepat.

3 Distribusi Probabilitas dalam Data Kategori

Variabel acak kategori adalah variabel yang hanya dapat memiliki beberapa kategori diskrit sebagai hasilnya. Distribusi probabilitas dari variabel ini menggambarkan kemungkinan terjadinya setiap kategori.

3.1 Distribusi Bernoulli

Distribusi Bernoulli digunakan untuk percobaan biner, yaitu percobaan yang memiliki dua kemungkinan hasil: - Sukses (1) dengan probabilitas \(p\) - Gagal (0) dengan probabilitas \(1 - p\)

Fungsi probabilitasnya:

\[ P(X = x) = p^x (1 - p)^{1-x}, \quad x \in \{0,1\} \]

Keterangan Notasi

  • \(X\): Variabel acak biner (0 atau 1)

  • \(p\): Probabilitas sukses (X = 1)

Contoh Variabel Acak Bernoulli - Hasil dari lemparan koin (Kepala = 1, Ekor = 0) - Keberhasilan atau kegagalan dalam suatu percobaan klinis

Perhitungan dengan R

library(knitr)
library(kableExtra)
library(dplyr)
library(dplyr)
library(broom)
library(ggplot2)
library(tidyverse)
library(broom)
library(knitr)
library(kableExtra)
library(ggplot2) 
library(ResourceSelection)

set.seed(123)
bernoulli_sample <- rbinom(n = 10, size = 1, prob = 0.5)  # 10 percobaan Bernoulli
bernoulli_sample
##  [1] 0 1 0 1 1 0 1 1 1 0

3.2 Distribusi Binomial

Distribusi Binomial adalah generalisasi dari distribusi Bernoulli yang digunakan untuk n kali percobaan independen yang masing-masing memiliki dua kemungkinan hasil (sukses atau gagal). Jika setiap percobaan memiliki probabilitas sukses \(p\), maka distribusi Binomial memiliki fungsi probabilitas:

\[ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} \]

Keterangan Notasi - \(X\): Jumlah keberhasilan dalam \(n\) percobaan - \(n\): Jumlah percobaan - \(k\): Jumlah keberhasilan yang diamati - \(p\): Probabilitas keberhasilan dalam satu percobaan - \(\binom{n}{k}\): Kombinasi “n pilih k”, dihitung sebagai \(\frac{n!}{k!(n-k)!}\)

Contoh Variabel Acak Binomial - Jumlah keberhasilan dalam 10 kali lemparan koin - Jumlah pasien yang sembuh setelah diberikan obat tertentu dalam suatu studi klinis

Perhitungan dengan R

set.seed(123)
binomial_sample <- rbinom(n = 10, size = 5, prob = 0.5)  # 10 percobaan Binomial dengan 5 ulangan
binomial_sample
##  [1] 2 3 2 4 4 1 3 4 3 2

3.3 Distribusi Multinomial

Distribusi Multinomial adalah generalisasi lebih lanjut dari distribusi Binomial, digunakan ketika setiap percobaan memiliki lebih dari dua kemungkinan hasil. Jika suatu eksperimen dilakukan \(n\) kali, dan setiap percobaan dapat menghasilkan salah satu dari \(k\) kategori dengan probabilitas \(p_1, p_2, ..., p_k\), maka distribusi probabilitasnya:

\[ P(X_1 = x_1, ..., X_k = x_k) = \frac{n!}{x_1! x_2! ... x_k!} p_1^{x_1} p_2^{x_2} ... p_k^{x_k} \]

Keterangan Notasi

  • \(X_i\): Frekuensi kemunculan kategori ke-\(i\)

  • \(n\): Jumlah total percobaan

  • \(x_i\): Jumlah kejadian kategori ke-\(i\)

  • \(p_i\): Probabilitas kategori ke-\(i\)

Contoh Variabel Acak Multinomial

  • Pemilihan kandidat dalam pemilu (beberapa kandidat, satu suara per pemilih)

  • Distribusi warna permen dalam satu bungkus acak

Perhitungan dengan R

set.seed(123)
multinomial_sample <- rmultinom(n = 1, size = 10, prob = c(0.3, 0.5, 0.2))
multinomial_sample
##      [,1]
## [1,]    2
## [2,]    5
## [3,]    3

3.4 Distribusi Poisson

Distribusi Poisson digunakan untuk menghitung jumlah kejadian dalam interval waktu atau ruang tertentu dengan rata-rata kejadian \(\lambda\) per unit waktu/ruang. Fungsi probabilitasnya:

\[ P(X = k) = \frac{e^{-\lambda} \lambda^k}{k!} \]

Keterangan Notasi

  • \(X\): Jumlah kejadian dalam interval tertentu
  • \(\lambda\): Rata-rata kejadian dalam interval tersebut
  • \(k\): Jumlah kejadian yang diamati

Contoh Variabel Acak Poisson

  • Jumlah panggilan telepon masuk ke pusat layanan dalam satu jam
  • Jumlah kecelakaan lalu lintas di satu jalan dalam sehari

Perhitungan dengan R

set.seed(123)
poisson_sample <- rpois(10, lambda = 3)  # 10 sampel dengan rata-rata kejadian 3
poisson_sample
##  [1] 2 4 2 5 6 0 3 5 3 3

4 Desain Sampling dalam Analisis Data Kategori

Dalam analisis data kategori, desain sampling memiliki peran yang krusial dalam menentukan validitas dan reliabilitas hasil penelitian. Pemilihan desain sampling yang tepat bergantung pada tujuan penelitian dan jenis data yang dikumpulkan. Secara umum, desain sampling dalam analisis data kategori dapat diklasifikasikan ke dalam dua pendekatan utama, yaitu prospective sampling dan retrospective sampling. Masing-masing pendekatan ini memiliki karakteristik dan metode sampling yang berbeda, yang sering digunakan dalam penelitian eksperimental maupun observasional seperti eksperimen, studi kohort, dan studi kasus-kontrol.

4.1 Prospective Sampling

Prospective sampling adalah metode pengambilan sampel dimana subjek penelitian diidentifikasi dan diikuti dalam periode waktu tertentu untuk mengamati perkembangan variabel yang diteliti. Pendekatan ini memungkinkan peneliti untuk mengontrol variabel bebas sebelum pengukuran hasil dilakukan, sehingga sering digunakan dalam studi kausal dan eksperimental. Beberapa jenis desain sampling dalam metode ini meliputi:

4.1.1 Eksperimen

Dalam studi eksperimental, subjek secara acak dialokasikan ke dalam kelompok perlakuan dan kontrol. Teknik sampling yang umum digunakan meliputi:

  • Simple Random Sampling (SRS): Setiap individu dalam populasi memiliki probabilitas yang sama untuk dipilih.
  • Stratified Random Sampling: Populasi dibagi menjadi strata berdasarkan karakteristik tertentu, lalu sampel diambil secara acak dari setiap strata.
  • Cluster Sampling: Populasi dibagi menjadi kelompok-kelompok (cluster), kemudian beberapa cluster dipilih secara acak untuk dianalisis.

4.1.2 Studi Kohort

Studi kohort adalah penelitian observasional dimana kelompok individu dengan karakteristik tertentu diikuti dari waktu ke waktu untuk mengamati kejadian yang dipelajari. Jenis sampling yang umum dalam studi kohort meliputi:

  • Census Sampling: Seluruh anggota dalam populasi tertentu diikutsertakan dalam penelitian.
  • Systematic Sampling: Subjek dipilih berdasarkan interval tertentu dari daftar populasi.
  • Matched Sampling: Setiap individu dalam kelompok kohort dipasangkan dengan individu serupa dalam kelompok lain berdasarkan variabel tertentu.

4.2 Retrospective Sampling

Retrospective sampling adalah metode dimana data dikumpulkan dari peristiwa yang telah terjadi sebelumnya. Teknik ini sering digunakan dalam studi observasional yang mencari hubungan antara faktor risiko dan hasil tertentu.

4.2.1 Studi Kasus-Kontrol

Dalam studi kasus-kontrol, sekelompok individu dengan kondisi tertentu (kasus) dibandingkan dengan kelompok tanpa kondisi tersebut (kontrol). Teknik sampling yang sering digunakan meliputi:

  • Purposive Sampling: Pemilihan sampel berdasarkan karakteristik yang relevan dengan tujuan penelitian.
  • Snowball Sampling: Responden awal membantu merekrut subjek lain yang memiliki karakteristik serupa.
  • Incidence Density Sampling: Kasus dan kontrol dipilih dari populasi yang sama dengan memperhitungkan periode waktu kemunculan kasus.

4.2.2 Studi Kohort Retrospektif

Dalam studi kohort retrospektif, data historis digunakan untuk mengelompokkan individu berdasarkan paparan dan kemudian menganalisis hasil yang terjadi. Teknik sampling yang sering digunakan meliputi:

  • Convenience Sampling: Subjek dipilih berdasarkan ketersediaan data yang sudah ada.
  • Quota Sampling: Sampel dipilih untuk mencerminkan proporsi tertentu dalam populasi.
  • Case-Based Sampling: Sampel dipilih berdasarkan karakteristik kasus yang telah terjadi.

4.3 Tabel Perbandingan Desain Sampling

Perbandingan Desain Sampling dalam Analisis Data Kategori
Jenis.Studi Pendekatan Metode.Sampling Keuntungan Kelemahan
Eksperimen Prospective SRS, Stratified, Cluster Kontrol tinggi terhadap variabel, hubungan sebab akibat dapat dianalisis Biaya tinggi, etika dan validitas perlu diperhatikan
Studi Kohort Prospective Census, Systematic, Matched Dapat mengamati perkembangan kejadian dalam jangka panjang Membutuhkan waktu lama, risiko kehilangan partisipan
Studi Kasus-Kontrol Retrospective Purposive, Snowball, Incidence Density Mudah dan cepat dilakukan, efisien untuk penyakit langka Sulit mengontrol variabel pengganggu, rentan bias recall
Studi Kohort Retrospektif Retrospective Convenience, Quota, Case-Based Memanfaatkan data historis, lebih murah daripada studi kohort Ketergantungan pada kualitas data historis, bisa terjadi missing data

Desain sampling dalam analisis data kategori sangat bergantung pada pendekatan yang digunakan, apakah itu prospective atau retrospective. Pemilihan metode sampling yang sesuai dalam eksperimen, studi kohort, dan studi kasus-kontrol dapat meningkatkan validitas penelitian serta memastikan hasil yang dapat digeneralisasikan. Oleh karena itu, pemahaman terhadap karakteristik masing-masing metode sampling menjadi penting dalam perencanaan penelitian yang robust dan berkualitas.

5 Tabel Kontingensi 2 × 2

Tabel kontingensi 2 × 2 adalah bentuk paling sederhana dari tabel kontingensi yang digunakan untuk menganalisis hubungan antara dua variabel kategori. Dalam banyak analisis statistik, tabel ini digunakan untuk menentukan apakah terdapat asosiasi antara dua variabel, seperti hubungan antara pengobatan dan hasil kesembuhan, atau kebiasaan merokok dan risiko kanker paru-paru. Tabel kontingensi 2 × 2 adalah bentuk paling sederhana dari tabel kontingensi yang digunakan untuk menganalisis hubungan antara dua variabel kategori. Dalam banyak analisis statistik, tabel ini digunakan untuk menentukan apakah terdapat asosiasi antara dua variabel, seperti hubungan antara pengobatan dan hasil kesembuhan, atau kebiasaan merokok dan risiko kanker paru-paru.

Tabel kontingensi 2 × 2 memiliki struktur sebagai berikut:

Kategori 1 (+) Kategori 2 (-) Total
Grup 1 \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Grup 2 \(n_{21}\) \(n_{22}\) \(n_{2.}\)
Total \(n_{.1}\) \(n_{.2}\) \(n\)
  • \(n_{11}\) = Jumlah kasus dalam kategori positif dari Grup 1
  • \(n_{12}\) = Jumlah kasus dalam kategori negatif dari Grup 1
  • \(n_{21}\) = Jumlah kasus dalam kategori positif dari Grup 2
  • \(n_{22}\) = Jumlah kasus dalam kategori negatif dari Grup 2
  • \(n_{1.}\) = Total observasi dalam Grup 1 (\(n_{1.} = n_{11} + n_{12}\))
  • \(n_{2.}\) = Total observasi dalam Grup 2 (\(n_{2.} = n_{21} + n_{22}\))
  • \(n_{.1}\) = Total observasi dalam Kategori 1 (\(n_{.1} = n_{11} + n_{21}\))
  • \(n_{.2}\) = Total observasi dalam Kategori 2 (\(n_{.2} = n_{12} + n_{22}\))
  • \(n\) = Total keseluruhan sampel (\(n = n_{11} + n_{12} + n_{21} + n_{22}\))

5.1 Distribusi Peluang dalam Tabel Kontingensi 2 × 2

5.1.1 Peluang Bersama

Peluang bersama adalah probabilitas bahwa kedua variabel terjadi secara bersamaan dalam suatu sel tabel kontingensi: \[ P(A_i, B_j) = \frac{n_{ij}}{n} \]

5.1.2 Peluang Marginal

Peluang marginal adalah probabilitas kejadian suatu variabel tanpa mempertimbangkan variabel lainnya: - Peluang marginal baris: \[ P(A_i) = \frac{n_{i.}}{n} \] - Peluang marginal kolom: \[ P(B_j) = \frac{n_{.j}}{n} \]

5.1.3 Peluang Bersyarat

Peluang bersyarat adalah probabilitas suatu kejadian terjadi dengan syarat kejadian lain telah terjadi:

\[ P(B_j | A_i) = \frac{P(A_i, B_j)}{P(A_i)} = \frac{n_{ij}}{n_{i.}} \]

Contoh Perhitungan Manual Misalkan kita memiliki tabel berikut tentang hubungan antara merokok dan kanker paru-paru:

Kanker Paru (+) Kanker Paru (-) Total
Perokok 450 200 650
Bukan Perokok 50 300 350
Total 500 500 1000

Langkah 1: Hitung Peluang Bersama

  • \(P(\text{Perokok, Kanker}) = \frac{450}{1000} = 0.45\)

  • \(P(\text{Perokok, Tidak Kanker}) = \frac{200}{1000} = 0.20\)

  • \(P(\text{Tidak Perokok, Kanker}) = \frac{50}{1000} = 0.05\)

  • \(P(\text{Tidak Perokok, Tidak Kanker}) = \frac{300}{1000} = 0.30\)

Langkah 2: Hitung Peluang Marginal

  • \(P(\text{Perokok}) = \frac{650}{1000} = 0.65\)

  • \(P(\text{Tidak Perokok}) = \frac{350}{1000} = 0.35\)

  • \(P(\text{Kanker}) = \frac{500}{1000} = 0.50\)

  • \(P(\text{Tidak Kanker}) = \frac{500}{1000} = 0.50\)

Langkah 3: Hitung Peluang Bersyarat

  • \(P(\text{Kanker} | \text{Perokok}) = \frac{450}{650} = 0.6923\)

  • \(P(\text{Kanker} | \text{Tidak Perokok}) = \frac{50}{350} = 0.1429\)

Perhitungan dengan R

# Data Observasi
data <- matrix(c(450, 200, 50, 300), nrow = 2, byrow = TRUE)
colnames(data) <- c("Kanker Paru (+)", "Kanker Paru (-)")
rownames(data) <- c("Perokok", "Bukan Perokok")
n <- sum(data)

# Peluang Bersama
P_joint <- data / n

# Peluang Marginal
P_marginal_rows <- rowSums(data) / n
P_marginal_cols <- colSums(data) / n

# Peluang Bersyarat
P_conditional <- data / rowSums(data)

# Hasil
list(Peluang_Bersama = P_joint, Peluang_Marginal_Baris = P_marginal_rows, Peluang_Marginal_Kolom = P_marginal_cols, Peluang_Bersyarat = P_conditional)
## $Peluang_Bersama
##               Kanker Paru (+) Kanker Paru (-)
## Perokok                  0.45             0.2
## Bukan Perokok            0.05             0.3
## 
## $Peluang_Marginal_Baris
##       Perokok Bukan Perokok 
##          0.65          0.35 
## 
## $Peluang_Marginal_Kolom
## Kanker Paru (+) Kanker Paru (-) 
##             0.5             0.5 
## 
## $Peluang_Bersyarat
##               Kanker Paru (+) Kanker Paru (-)
## Perokok             0.6923077       0.3076923
## Bukan Perokok       0.1428571       0.8571429

Interpretasi

  • Peluang bersama menunjukkan probabilitas gabungan dari kejadian tertentu dalam tabel.

  • Peluang marginal menunjukkan probabilitas suatu kejadian tanpa mempertimbangkan variabel lain.

  • Peluang bersyarat menunjukkan bagaimana probabilitas berubah ketika informasi tentang variabel lain diberikan.

Jika \(P(\text{Kanker} | \text{Perokok}) > P(\text{Kanker} | \text{Tidak Perokok})\), maka ini menunjukkan bahwa perokok lebih berisiko terkena kanker dibandingkan bukan perokok.

  • Tabel kontingensi 2 × 2 membantu dalam memahami hubungan antara dua variabel kategori.

  • Peluang bersama, peluang marginal, dan peluang bersyarat adalah dasar untuk memahami hubungan statistik antar variabel dalam tabel kontingensi.

  • Perhitungan manual dan implementasi dalam R membantu dalam menganalisis data secara lebih akurat dan efisien.

5.2 Ukuran Asosiasi dalam Data Kategori 2 x 2

Dalam analisis statistik, asosiasi dalam tabel kontingensi 2 × 2 digunakan untuk menentukan hubungan antara dua variabel kategori. Sebuah tabel kontingensi 2 × 2 menunjukkan frekuensi kejadian dua variabel dengan dua kategori, sehingga memungkinkan kita untuk menilai apakah terdapat hubungan statistik di antara mereka.

Analisis asosiasi ini sering diterapkan dalam berbagai bidang seperti epidemiologi, riset sosial, dan eksperimen klinis. Contohnya:

  • Epidemiologi: Meneliti hubungan antara kebiasaan merokok dan kanker paru-paru.

  • Eksperimen Klinis: Mengukur efektivitas suatu pengobatan terhadap penyakit.

  • Riset Sosial: Memeriksa hubungan antara tingkat pendidikan dan tingkat pekerjaan.

Dalam tabel 2 × 2, kita dapat menghitung ukuran asosiasi seperti:

  • Risk Difference (RD): Mengukur selisih risiko antara dua kelompok.

  • Relative Risk (RR): Mengukur perbandingan risiko antara dua kelompok.

  • Odds Ratio (OR): Membandingkan peluang kejadian antara dua kelompok.

  • Uji Chi-Square & Fisher’s Exact Test: Untuk menguji apakah hubungan antara dua variabel signifikan secara statistik.

Analisis ini menjadi dasar untuk memahami hubungan antar variabel dan mengambil keputusan berbasis data di berbagai bidang ilmu.

5.2.1 Risk Difference (RD)

Risk Difference (RD) atau Perbedaan Risiko adalah ukuran absolut dalam epidemiologi yang menggambarkan perbedaan antara probabilitas kejadian suatu hasil dalam dua kelompok yang berbeda. RD dihitung sebagai selisih antara risiko kejadian dalam kelompok terpapar dan risiko kejadian dalam kelompok tidak terpapar.

\[ RD = \left( \frac{n_{11}}{n_{1.}} \right) - \left( \frac{n_{21}}{n_{2.}} \right) \]

  • Jika \(RD > 0\), maka risiko kejadian lebih tinggi di Grup 1 dibandingkan Grup 2.

  • Jika \(RD < 0\), maka risiko kejadian lebih rendah di Grup 1 dibandingkan Grup 2.

  • Jika \(RD = 0\), maka tidak ada perbedaan risiko antara dua kelompok.

Contoh perhitungan dalam R:

RD <- function(n11, n12, n21, n22) {
  (n11 / (n11 + n12)) - (n21 / (n21 + n22))
}
RD(50, 50, 30, 70)
## [1] 0.2

Interpretasi: Risk Difference menunjukkan perbedaan risiko antara dua kelompok, dengan nilai positif menunjukkan bahwa kelompok pertama memiliki risiko lebih tinggi.

5.2.2 Relative Risk (RR)

Relative Risk (RR) atau Risiko Relatif adalah ukuran yang digunakan dalam epidemiologi untuk membandingkan risiko kejadian suatu peristiwa (misalnya penyakit atau kondisi tertentu) antara dua kelompok, yaitu kelompok yang terpapar dan kelompok yang tidak terpapar. RR menunjukkan seberapa besar kemungkinan kejadian tersebut terjadi pada kelompok terpapar dibandingkan dengan kelompok tidak terpapar.

\[ RR = \frac{\frac{n_{11}}{n_{1.}}}{\frac{n_{21}}{n_{2.}}} \]

  • Jika \(RR > 1\), maka kejadian lebih sering terjadi di Grup 1 dibandingkan Grup 2.

  • Jika \(RR < 1\), maka kejadian lebih jarang terjadi di Grup 1 dibandingkan Grup 2.

  • Jika \(RR = 1\), maka tidak ada perbedaan risiko antara dua kelompok.

Contoh perhitungan dalam R:

RR <- function(n11, n12, n21, n22) {
  (n11 / (n11 + n12)) / (n21 / (n21 + n22))
}
RR(50, 50, 30, 70)
## [1] 1.666667

Interpretasi: Relative Risk menggambarkan seberapa besar kemungkinan outcome terjadi di kelompok pertama dibandingkan dengan kelompok kedua.

5.2.3 Odds Ratio (OR)

Odds Ratio (OR) atau Rasio Odds adalah ukuran yang digunakan dalam epidemiologi dan statistik untuk membandingkan odds (peluang) terjadinya suatu kejadian antara dua kelompok, yaitu kelompok yang terpapar dan kelompok yang tidak terpapar. OR sering digunakan dalam studi case-control tetapi juga dapat digunakan dalam studi kohort dan eksperimental.

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

  • Jika \(OR > 1\), maka peluang kejadian lebih besar di Grup 1 dibandingkan Grup 2.

  • Jika \(OR < 1\), maka peluang kejadian lebih kecil di Grup 1 dibandingkan Grup 2.

  • Jika \(OR = 1\), maka tidak ada perbedaan peluang kejadian antara dua kelompok.

Contoh perhitungan dalam R:

OR <- function(n11, n12, n21, n22) {
  (n11 * n22) / (n12 * n21)
}
OR(50, 50, 30, 70)
## [1] 2.333333

Interpretasi: Odds Ratio menunjukkan perbandingan odds antara dua kelompok, dengan nilai OR > 1 menunjukkan bahwa kelompok pertama memiliki odds lebih tinggi.

Perbandingan RD, RR, dan OR

Ukuran Definisi Desain Sampling yang Cocok Interpretasi
Risk Difference (RD) Selisih probabilitas kejadian antara dua kelompok Studi kohort atau eksperimen acak Menunjukkan tambahan atau pengurangan risiko absolut
Relative Risk (RR) Perbandingan risiko kejadian di dua kelompok Studi kohort atau eksperimen klinis Mengukur berapa kali lebih besar risiko di satu kelompok dibandingkan kelompok lainnya
Odds Ratio (OR) Perbandingan odds antara dua kelompok Studi kasus-kontrol atau studi observasional Mengukur hubungan antara variabel eksposur dan kejadian dalam desain studi kasus-kontrol

Kesimpulan - RD digunakan untuk memahami dampak absolut dari suatu faktor risiko atau intervensi. - RR lebih cocok untuk studi kohort atau eksperimen karena mengukur kemungkinan relatif. - OR sering digunakan dalam studi kasus-kontrol karena dapat memperkirakan risiko relatif dalam desain penelitian ini.

6 Inferensi Tabel Kontingensi Dua Arah

Inferensi dalam statistik mengacu pada proses pengambilan kesimpulan mengenai populasi berdasarkan sampel data. Dalam konteks tabel kontingensi dua arah, inferensi digunakan untuk menganalisis hubungan antara dua variabel kategorikal yang disusun dalam tabel kontingensi.

Tabel kontingensi adalah tabel yang menyajikan distribusi frekuensi dari dua variabel kategorikal dalam bentuk matriks. Tujuan utama dari inferensi pada tabel ini adalah untuk memahami hubungan antara variabel-variabel tersebut melalui estimasi dan pengujian hipotesis.

Inferensi dalam tabel kontingensi dua arah dapat dibagi menjadi dua kategori utama:

  • Estimasi
  • Pengujian

6.1 Estimasi

Estimasi bertujuan untuk memperkirakan parameter populasi berdasarkan data sampel. Estimasi dibagi menjadi:

6.1.1 Estimasi Titik

Estimasi titik digunakan untuk menentukan satu nilai spesifik sebagai perkiraan terbaik dari parameter populasi.

\[ \hat{p} = \frac{x}{n} \]

dimana: - \(\hat{p}\) adalah estimasi titik proporsi, - \(x\) adalah jumlah individu dalam kategori tertentu, - \(n\) adalah total jumlah individu dalam sampel.

6.1.2 Estimasi Interval

Estimasi interval bertujuan untuk memberikan rentang nilai yang diyakini mengandung parameter populasi dengan tingkat kepercayaan tertentu.

\[ \hat{p} \pm Z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]

dimana:

  • \(Z_{\alpha/2}\) adalah nilai dari distribusi normal standar untuk tingkat kepercayaan tertentu,
  • \(\hat{p}\) adalah estimasi titik proporsi,
  • \(n\) adalah ukuran sampel.

6.2 Uji Hipotesis

6.2.1 Uji Proporsi

Uji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok dalam tabel kontingensi, terutama untuk menentukan apakah terdapat perbedaan yang signifikan dalam proporsi kejadian antara dua kelompok yang berbeda.

Tabel kontingensi 2 × 2 memiliki struktur sebagai berikut:

Kejadian (+) Tidak Kejadian (-) Total
Grup 1 \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Grup 2 \(n_{21}\) \(n_{22}\) \(n_{2.}\)
Total \(n_{.1}\) \(n_{.2}\) \(n\)

Formulasi Uji Proporsi

Untuk menguji hipotesis bahwa tidak ada perbedaan proporsi antara dua kelompok, kita menggunakan uji z dua proporsi, dengan hipotesis:

  • Hipotesis Nol (\(H_0\)): Tidak ada perbedaan proporsi antara dua kelompok, yaitu \(p_1 = p_2\)

  • Hipotesis Alternatif (\(H_1\)): Terdapat perbedaan proporsi antara dua kelompok, yaitu \(p_1 \neq p_2\)

Estimasi proporsi dalam masing-masing kelompok diberikan oleh: \[ \hat{p}_1 = \frac{n_{11}}{n_{1.}}, \quad \hat{p}_2 = \frac{n_{21}}{n_{2.}} \]

Estimasi proporsi gabungan (pooling proportion): \[ \hat{p} = \frac{n_{11} + n_{21}}{n_{1.} + n_{2.}} \]

Statistik uji untuk uji proporsi dua sampel: \[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p} (1 - \hat{p}) \left( \frac{1}{n_{1.}} + \frac{1}{n_{2.}} \right) }} \]

Statistik uji \(Z\) mengikuti distribusi normal baku \(N(0,1)\), dan p-value dihitung berdasarkan nilai kritis dari distribusi normal.

Jika \(|Z|\) lebih besar dari nilai kritis untuk tingkat signifikansi tertentu \(\alpha\) (misalnya 1.96 untuk \(\alpha = 0.05\)), maka hipotesis nol ditolak, yang berarti ada perbedaan signifikan antara dua proporsi.

Uji ini cocok digunakan dalam studi kohort dan eksperimen klinis.

Perhitungan Manual Langkah Demi Langkah

Misalkan kita memiliki data berikut:

Kejadian (+) Tidak Kejadian (-) Total
Grup 1 50 30 80
Grup 2 30 50 80
Total 80 80 160

Langkah 1: Hitung Proporsi Sampel

  • \(\hat{p}_1 = \frac{50}{80} = 0.625\)

  • \(\hat{p}_2 = \frac{30}{80} = 0.375\)

Langkah 2: Hitung Proporsi Gabungan

  • \(\hat{p} = \frac{50 + 30}{80 + 80} = \frac{80}{160} = 0.50\)

Langkah 3: Hitung Statistik Uji Z

  • \(Z = \frac{0.625 - 0.375}{\sqrt{0.50 (1 - 0.50) \left( \frac{1}{80} + \frac{1}{80} \right) }}\)

  • \(Z = \frac{0.25}{\sqrt{0.50 \times 0.50 \times (0.025)}}\)

  • \(Z = \frac{0.25}{\sqrt{0.00625}} = \frac{0.25}{0.0791} = 3.16\)

Interpretasi Karena \(Z = 3.16\) lebih besar dari nilai kritis untuk \(\alpha = 0.05\) (yaitu 1.96), kita menolak hipotesis nol, yang berarti ada perbedaan signifikan antara dua proporsi.

# Pastikan variabel data_matrix terdefinisi sebelum digunakan
set.seed(123)
data<- matrix(c(50, 30, 30, 50), nrow = 2, byrow = TRUE)
dimnames(data) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print(data)
##         Kejadian
## Terpapar Ya Tidak
##    Ya    50    30
##    Tidak 30    50
# Uji Proporsi dengan variabel yang benar
prop_test <- prop.test(x = c(data[1,1], data[2,1]), 
                       n = c(sum(data[1,]), sum(data[2,])))
print(prop_test)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(data[1, 1], data[2, 1]) out of c(sum(data[1, ]), sum(data[2, ]))
## X-squared = 9.025, df = 1, p-value = 0.002663
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  0.08747151 0.41252849
## sample estimates:
## prop 1 prop 2 
##  0.625  0.375

Interpretasi: Jika p-value < 0.05, maka terdapat perbedaan proporsi kejadian antara kelompok terpapar dan tidak terpapar.

6.2.2 Uji Asosiasi

Uji asosiasi dalam tabel kontingensi 2 × 2 bertujuan untuk mengukur hubungan antara dua variabel kategori. Tiga ukuran utama dalam uji asosiasi adalah:

  1. Risk Difference (RD) – Mengukur selisih risiko absolut antara dua kelompok.

  2. Relative Risk (RR) – Mengukur perbandingan risiko antara dua kelompok.

  3. Odds Ratio (OR) – Mengukur perbandingan odds antara dua kelompok.

Hipotesis Uji dalam Tabel Kontingensi 2 × 2

Untuk setiap uji asosiasi, hipotesis yang diuji adalah:

  • Hipotesis Nol (H₀): Tidak ada asosiasi antara dua variabel.
  • Hipotesis Alternatif (H₁): Terdapat asosiasi antara dua variabel.

6.2.2.1 Risk Difference (RD)

Risk Difference mengukur perbedaan absolut dalam probabilitas kejadian antara dua kelompok: \[ RD = \left( \frac{n_{11}}{n_{1.}} \right) - \left( \frac{n_{21}}{n_{2.}} \right) \]

Standard Error untuk RD: \[ SE(RD) = \sqrt{\frac{\hat{p}_1(1 - \hat{p}_1)}{n_{1.}} + \frac{\hat{p}_2(1 - \hat{p}_2)}{n_{2.}}} \]

Statistik uji Z:

\[ Z_{RD} = \frac{RD}{SE(RD)} \]

6.2.2.2 Relative Risk (RR)

Relative Risk membandingkan kemungkinan kejadian antara dua kelompok: \[ RR = \frac{\frac{n_{11}}{n_{1.}}}{\frac{n_{21}}{n_{2.}}} \]

Standard Error untuk log(RR): \[ SE(\ln RR) = \sqrt{\frac{1}{n_{11}} - \frac{1}{n_{1.}} + \frac{1}{n_{21}} - \frac{1}{n_{2.}}} \]

Statistik uji Z: \[ Z_{RR} = \frac{\ln RR}{SE(\ln RR)} \] #### Odds Ratio (OR)

Odds Ratio membandingkan peluang kejadian antara dua kelompok: \[ OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} \]

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

Statistik uji Z: \[ Z_{OR} = \frac{\ln OR}{SE(\ln OR)} \]

Contoh Perhitungan Manual Misalkan kita memiliki data berikut:

Kejadian (+) Tidak Kejadian (-) Total
Grup 1 50 30 80
Grup 2 30 50 80
Total 80 80 160

Perhitungan Manual untuk RD - Misalkan \(\hat{p}_1 = \frac{50}{80} = 0.625\) dan \(\hat{p}_2 = \frac{30}{80} = 0.375\).

  • Risk Difference: \[ RD = 0.625 - 0.375 = 0.25 \]

  • Standard Error: \[ SE(RD) = \sqrt{\frac{0.625(0.375)}{80} + \frac{0.375(0.625)}{80}} \] \[ SE(RD) = \sqrt{\frac{0.234}{80} + \frac{0.234}{80}} = \sqrt{0.002925 + 0.002925} = \sqrt{0.00585} = 0.07648529 \]

  • Statistik uji Z: \[ Z_{RD} = \frac{0.25}{0.07648529} = 3.268602 \]

Perhitungan Manual untuk RR - Relative Risk: \[ RR = \frac{\frac{50}{80}}{\frac{30}{80}} = \frac{0.625}{0.375} = 1.67 \]

  • Standard Error untuk \(\ln RR\): \[ SE(\ln RR) = \sqrt{\frac{1}{50} - \frac{1}{80} + \frac{1}{30} - \frac{1}{80}} \] \[ SE(\ln RR) = \sqrt{0.02 - 0.0125 + 0.0333 - 0.0125} = \sqrt{0.0283} = 0.1683 \]

  • Statistik uji Z: \[ Z_{RR} = \frac{\ln 1.67}{0.1683} = \frac{0.51}{0.1683} = 3.03 \]

Perhitungan Manual untuk OR - Odds Ratio: \[ OR = \frac{50 \times 50}{30 \times 30} = \frac{2500}{900} = 2.78 \]

  • Standard Error untuk \(\ln OR\): \[ SE(\ln OR) = \sqrt{\frac{1}{50} + \frac{1}{30} + \frac{1}{30} + \frac{1}{50}} \] \[ SE(\ln OR) = \sqrt{0.02 + 0.0333 + 0.0333 + 0.02} = \sqrt{0.1066} = 0.3266 \]

  • Statistik uji Z: \[ Z_{OR} = \frac{\ln 2.78}{0.3266} = \frac{1.02}{0.3266} = 3.12 \]

Perhitungan Menggunakan

n11 <- 50; n12 <- 30; n21 <- 30; n22 <- 50
n1. <- n11 + n12; n2. <- n21 + n22

# Risk Difference
p1<-(n11/n1.)
p2<-(n21/n2.)
rd <- p1 - p2
se_rd <- sqrt((p1 * (1 - p1) / n1.) + p2*((1 - p2) / n2.))
z_rd <- rd / se_rd

# Relative Risk
rr <- (n11/n1.) / (n21/n2.)
se_ln_rr <- sqrt((1/n11) - (1/n1.) + (1/n21) - (1/n2.))
z_rr <- log(rr) / se_ln_rr

# Odds Ratio
or <- (n11 * n22) / (n12 * n21)
se_ln_or <- sqrt((1/n11) + (1/n12) + (1/n21) + (1/n22))
z_or <- log(or) / se_ln_or

# Hasil
list(RD = rd, SE_RD = se_rd, Z_RD = z_rd, RR = rr, SE_Ln_RR = se_ln_rr, Z_RR = z_rr, OR = or, SE_Ln_OR = se_ln_or, Z_OR = z_or)
## $RD
## [1] 0.25
## 
## $SE_RD
## [1] 0.07654655
## 
## $Z_RD
## [1] 3.265986
## 
## $RR
## [1] 1.666667
## 
## $SE_Ln_RR
## [1] 0.1683251
## 
## $Z_RR
## [1] 3.034756
## 
## $OR
## [1] 2.777778
## 
## $SE_Ln_OR
## [1] 0.3265986
## 
## $Z_OR
## [1] 3.128155

Kesimpulan - Risk Difference (RD) mengukur perbedaan risiko absolut. - Relative Risk (RR) membandingkan kemungkinan kejadian antara dua kelompok. - Odds Ratio (OR) membandingkan peluang kejadian antara dua kelompok. - Standard error dan statistik uji Z digunakan untuk menilai signifikansi statistik masing-masing ukuran asosiasi.

6.2.3 Uji Independensi

Uji independensi digunakan untuk menentukan apakah ada hubungan statistik antara dua variabel kategorikal.

6.2.3.1 Uji Chi-Square

Uji Chi-Square digunakan untuk menguji apakah ada hubungan antara dua variabel kategorikal.

Rumus Chi-Square:

\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]

dimana:

  • \(O\) adalah nilai observasi dalam tabel kontingensi.

  • \(E\) adalah nilai yang diharapkan, dihitung sebagai:

\[ E_{ij} = \frac{(R_i \times C_j)}{N} \] dengan

  • \(R_i\) = total baris ke-\(i\).

  • \(C_j\) = total kolom ke-\(j\).

  • \(N\) = total sampel.

Contoh Perhitungan Manual Chi-Square

Misalkan kita memiliki tabel berikut:

Kejadian Ya Kejadian Tidak Total
Terpapar 30 10 40
Tidak Terpapar 15 45 60
Total 45 55 100

Hitung nilai yang diharapkan \(E\): \[ E_{11} = \frac{(40 \times 45)}{100} = 18 \] \[ E_{12} = \frac{(40 \times 55)}{100} = 22 \] \[ E_{21} = \frac{(60 \times 45)}{100} = 27 \] \[ E_{22} = \frac{(60 \times 55)}{100} = 33 \]

Lalu, hitung \(\chi^2\): \[ \chi^2 = \frac{(30 - 18)^2}{18} + \frac{(10 - 22)^2}{22} + \frac{(15 - 27)^2}{27} + \frac{(45 - 33)^2}{33} \] \[ = \frac{144}{18} + \frac{144}{22} + \frac{144}{27} + \frac{144}{33} \] \[ = 8 + 6.55 + 5.33 + 4.36 = 24.24 \]

Dengan derajat kebebasan \((df) = (2-1)(2-1) = 1\), kita membandingkan dengan tabel \(\chi^2\), adalah 3.841 dan jika p-value < 0.05, kita menolak hipotesis nol.

# Contoh Data
set.seed(123)
data <- matrix(c(30, 10, 15, 45), nrow = 2, byrow = TRUE)
dimnames(data) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print(data)
##         Kejadian
## Terpapar Ya Tidak
##    Ya    30    10
##    Tidak 15    45
# Uji Chi-Square
chisq_test <- chisq.test(data)
print(chisq_test)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data
## X-squared = 22.264, df = 1, p-value = 2.376e-06

Interpretasi: Jika p-value < 0.05, maka terdapat hubungan antara variabel “Terpapar” dan “Kejadian”.

6.2.3.2 Partisi Chi-Square

Partisi Chi-Square digunakan untuk mengidentifikasi kategori mana dalam tabel kontingensi yang bertanggung jawab atas hubungan yang signifikan. Jika uji Chi-Square pada tabel kontingensi I × J signifikan, maka partisi Chi-Square memungkinkan kita untuk menguraikan efek hubungan dalam subkelompok yang lebih kecil.

Menurut Lancaster dan Irwin, statistik uji chi-square dapat dipecah menjadi komponen-komponen sebanyak derajat bebas dari tabel kontingensi, memungkinkan identifikasi kategori yang berkontribusi pada hubungan yang signifikan.

Hal ini juga dikenal dengan Simpson’s Paradox: Tren yang muncul dalam beberapa kelompok data dapat menghilang atau bahkan berbalik arah ketika data tersebut digabungkan.

Langkah-langkah Partisi Chi-Square 1. Menggunakan tabel I × J dan menghitung Chi-Square keseluruhan. 2. Memecah tabel menjadi beberapa tabel 2 × 2 sebanyak (I-1)(J-1). 3. Menghitung statistik Chi-Square pada masing-masing tabel 2 × 2. 4. Menginterpretasikan kategori mana yang memberikan kontribusi signifikan.

Contoh Perhitungan Manual Misalkan kita memiliki data identifikasi partai politik berdasarkan gender dari Agresti (2019, Table 2.4): Uji independensi Chi-Square digunakan untuk menentukan apakah dua variabel kategori dalam tabel kontingensi memiliki hubungan statistik atau tidak. Misalkan kita memiliki data berikut:

Gender Democrat Republican Independent Total
Female 495 272 590 1357
Male 330 265 498 1093
Total 825 537 1088 2450

Hipotesis yang diuji adalah:

  • Hipotesis Nol (H₀): Tidak ada hubungan antara variabel Gender dan Identifikasi Partai Politik.

  • Hipotesis Alternatif (H₁): Ada hubungan antara variabel Gender dan Identifikasi Partai Politik.

Langkah-langkah Perhitungan Manual

Langkah 1: Lakukan Chi-Square Secara Keseluruhan

  1. Hitung Frekuensi Ekspektasi Frekuensi ekspektasi dihitung menggunakan rumus: \[ E_{ij} = \frac{(n_{i.} \times n_{.j})}{n} \]
  • Democrat, Female: \(E_{11} = \frac{(1357 \times 825)}{2450} = 456.95\)
  • Republican, Female: \(E_{12} = \frac{(1357 \times 537)}{2450} = 297.43\)
  • Independent, Female: \(E_{13} = \frac{(1357 \times 1088)}{2450} = 602.62\)
  • Democrat, Male: \(E_{21} = \frac{(1093 \times 825)}{2450} = 368.05\)
  • Republican, Male: \(E_{22} = \frac{(1093 \times 537)}{2450} = 239.57\)
  • Independent, Male: \(E_{23} = \frac{(1093 \times 1088)}{2450} = 485.38\)
  1. Hitung Statistik Uji Chi-Square Rumus statistik Chi-Square: \[ X^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
  • \(X^2 = \frac{(495 - 456.95)^2}{456.95} + \frac{(272 - 297.43)^2}{297.43} + \frac{(590 - 602.62)^2}{602.62} + \frac{(330 - 368.05)^2}{368.05} + \frac{(265 - 239.57)^2}{239.57} + \frac{(498 - 485.38)^2}{485.38}\)

  • Setelah perhitungan: \[ X^2 = 12.57 \]

  1. Bandingkan dengan Distribusi Chi-Square Derajat bebas: \[ (I-1)(J-1) = (2-1)(3-1) = 2 \] Nilai kritis \(\chi^2\) untuk \(\alpha = 0.05\) dengan df = 2 adalah 5.99. Karena \(X^2 = 12.57 > 5.99\), maka kita menolak hipotesis nol, sehingga ada hubungan yang signifikan antara Gender dan Identifikasi Partai Politik.

Perhitungan Menggunakan R

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

# Uji Chi-Square
chi_test <- chisq.test(data_matrix)

# Hasil
list(Chi_Square = chi_test$statistic, P_Value = chi_test$p.value, Decision = ifelse(chi_test$p.value < 0.05, "Reject H0", "Fail to Reject H0"))
## $Chi_Square
## X-squared 
##  12.56926 
## 
## $P_Value
## [1] 0.00186475
## 
## $Decision
## [1] "Reject H0"

Interpretasi Hasil - Hasil uji Chi-Square menunjukkan bahwa hubungan antara Gender dan Identifikasi Partai Politik signifikan secara statistik (p < 0.05).

  • Karena nilai Chi-Square (12.57) lebih besar dari nilai kritis (5.99), kita menolak hipotesis nol dan menyimpulkan bahwa Gender berhubungan dengan pilihan partai politik.

Langkah 2: Lakukan Partisi Chi-Square Partisi 1: Democrat vs. Republican

Gender Democrat Republican
Female 495 272
Male 330 265

Chi-Square: \[ X^2 = 11.536, \quad p < 0.001 \]

Partisi 2: Democrat + Republican vs. Independent

Gender Democrat + Republican Independent
Female 767 590
Male 595 498

Chi-Square: \[ X^2 = 1.065, \quad p = 0.698 \]

Perhitungan Menggunakan R

# Data Observasi
data_matrix <- matrix(c(495, 272, 330, 265), nrow = 2, byrow = TRUE)
colnames(data_matrix) <- c("Democrat", "Republican")
rownames(data_matrix) <- c("Female", "Male")

# Uji Chi-Square Partisi 1
chi_test1 <- chisq.test(data_matrix)

# Data Partisi 2
data_matrix2 <- matrix(c(767, 590, 595, 498), nrow = 2, byrow = TRUE)
colnames(data_matrix2) <- c("Dem+Rep", "Independent")
rownames(data_matrix2) <- c("Female", "Male")

# Uji Chi-Square Partisi 2
chi_test2 <- chisq.test(data_matrix2)

# Hasil
list(Chi_Square_Partisi1 = chi_test1, Chi_Square_Partisi2 = chi_test2)
## $Chi_Square_Partisi1
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data_matrix
## X-squared = 11.178, df = 1, p-value = 0.0008279
## 
## 
## $Chi_Square_Partisi2
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data_matrix2
## X-squared = 0.98267, df = 1, p-value = 0.3215

Interpretasi Hasil - Hasil partisi pertama menunjukkan bahwa perbedaan antara Democrat dan Republican signifikan (p < 0.001).

  • Hasil partisi kedua menunjukkan bahwa gabungan Democrat + Republican tidak berbeda signifikan dengan Independent (p = 0.698).

  • Kesimpulan:Gender lebih mempengaruhi pilihan antara Democrat dan Republican, tetapi tidak berpengaruh signifikan terhadap pilihan Independent.

6.2.3.3 Uji Likelihood Ratio (G²)

Uji Likelihood Ratio (G²) adalah alternatif dari uji chi-square yang digunakan untuk menguji hipotesis independensi dalam tabel kontingensi I × J. Statistik uji ini diberikan oleh:

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

Dimana: - \(n_{ij}\) adalah frekuensi observasi dalam tabel kontingensi. - \(\hat{\mu}_{ij} = n \cdot p_{i+} p_{+j}\) adalah frekuensi ekspektasi.

  • Statistik \(G^2\) mengikuti distribusi chi-square (χ²) dengan derajat bebas (I-1)(J-1).

  • Tolak \(H_0\) jika \(G^2 \geq \chi^2_{(1-\alpha/2)(I-1)(J-1)}\).

Contoh Perhitungan Manual Misalkan kita menggunakan data lung cancer sebagai berikut:

Cancer (+) Control (-) Total
Smoker 688 650 1338
Non-Smoker 21 59 80
Total 709 709 1418

Langkah 1: Hitung Frekuensi Ekspektasi \[ \hat{\mu}_{11} = \frac{(1338 \times 709)}{1418} = 669 \]

\[ \hat{\mu}_{12} = \frac{(1338 \times 709)}{1418} = 669 \]

\[ \hat{\mu}_{21} = \frac{(80 \times 709)}{1418} = 40 \]

\[ \hat{\mu}_{22} = \frac{(80 \times 709)}{1418} = 40 \]

Langkah 2: Hitung Statistik Uji G² \[ G^2 = 2 \left[ 688 \ln \left( \frac{688}{669} \right) + 650 \ln \left( \frac{650}{669} \right) + 21 \ln \left( \frac{21}{40} \right) + 59 \ln \left( \frac{59}{40} \right) \right] \]

Setelah dihitung secara manual: \[ G^2 = 2 \times (19.27 + (-18.73) + (-13.53) + 22.93) = 2 \times (9.94) = 19.88 \]

Langkah 3: Bandingkan dengan Distribusi Chi-Square Derajat bebas: \[ (I-1)(J-1) = (2-1)(2-1) = 1 \] Nilai kritis \(\chi^2\) untuk \(\alpha = 0.05\) dengan df = 1 adalah 3.841. Karena \(G^2 = 9.71 > 3.841\), maka kita menolak hipotesis nol dan menyimpulkan bahwa ada hubungan signifikan antara merokok dan kanker paru-paru.

Perhitungan Menggunakan R

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

# Hitung Frekuensi Ekspektasi
data_expected <- chisq.test(data_matrix)$expected

# Hitung Statistik G²
G2 <- 2 * sum(data_matrix * log(data_matrix / data_expected))

# Nilai kritis chi-square untuk df = 1 dan alpha = 0.05
critical_value <- qchisq(0.95, df = 1)

# Hasil
list(G2 = G2, Critical_Value = critical_value, Decision = ifelse(G2 > critical_value, "Reject H0", "Fail to Reject H0"))
## $G2
## [1] 19.87802
## 
## $Critical_Value
## [1] 3.841459
## 
## $Decision
## [1] "Reject H0"

Kesimpulan

  • Uji Likelihood Ratio (G²) digunakan sebagai alternatif dari uji Chi-Square untuk menguji independensi dalam tabel kontingensi.

  • Jika \(G^2\) lebih besar dari nilai kritis \(\chi^2\), maka hipotesis nol ditolak, menunjukkan adanya hubungan antara dua variabel.

  • Contoh perhitungan manual dan implementasi di R menunjukkan bahwa ada asosiasi signifikan antara merokok dan kanker paru-paru.

6.2.3.4 Uji Exact Fisher

Uji Fisher’s Exact digunakan untuk menguji hubungan antara dua variabel kategorikal dalam tabel kontingensi kecil, dimana asumsi Chi-square tidak berlaku karena ukuran sampel yang kecil.

Uji ini pertama kali dikembangkan oleh Sir Ronald A. Fisher, seorang ahli statistik, yang menggunakannya dalam penelitian biologi dan medis. Fisher’s Exact Test menjadi sangat penting dalam analisis data yang memiliki frekuensi kecil karena tidak bergantung pada asumsi distribusi normal.

Keunggulan:

  • Cocok untuk ukuran sampel kecil.

  • Tidak memerlukan asumsi normalitas atau chi-square.

  • Memberikan hasil yang lebih akurat dibandingkan uji Chi-square pada data dengan frekuensi kecil.

Keterbatasan:

  • Perhitungan bisa menjadi sangat berat secara komputasi jika ukuran tabel besar.

  • Hanya cocok untuk tabel kontingensi kecil (misalnya 2x2 atau 3x3).

6.2.3.4.1 Distribusi Hipergeometrik

Distribusi hipergeometrik menggambarkan probabilitas mengambil \(x\) bola putih dalam pengambilan acak tanpa pengembalian dari kumpulan \(N\) bola yang terdiri dari \(K\) bola putih dan \(N-K\) bola hitam.

\[ P(X = x) = \frac{\binom{K}{x} \binom{N-K}{n-x}}{\binom{N}{n}} \]

dengan:

  • \(N\) = total objek dalam populasi

  • \(K\) = jumlah objek dalam kategori tertentu (misalnya, sukses)

  • \(n\) = jumlah sampel yang diambil

  • \(x\) = jumlah objek dalam kategori tertentu yang diamati dalam sampel

6.2.3.4.2 Contoh Perhitungan

Misalkan kita memiliki contoh berikut:

  • \(N = 40\) (total populasi)

  • \(K = 29\) (jumlah bola putih dalam populasi)

  • \(n = 20\) (jumlah sampel yang diambil)

  • \(x = 18\) (jumlah bola putih dalam sampel)

Menggunakan rumus di atas:

\[ P(X = 18) = \frac{\binom{29}{18} \binom{40-29}{20-18}}{\binom{40}{20}} \]

Dalam R, perhitungan ini dapat dilakukan dengan:

# Definisi parameter
N <- 40   # Total populasi
K <- 29   # Jumlah kategori sukses (bola putih)
n <- 20   # Jumlah sampel diambil
x <- 18   # Jumlah sukses dalam sampel

# Hitung probabilitas P(X = 18)
dhyper(x, m = K, n = N - K, k = n)
## [1] 0.01380413

Misalkan kita memiliki data berikut:

Ya Tidak Total
Grup A 18 2 20
Grup B 11 9 20
Total 29 11 40

Langkah perhitungan manual: 1. Asumsikan hipotesis nol (tidak ada hubungan antara dua variabel). 2. Hitung probabilitas tabel yang diamati menggunakan distribusi hipergeometrik:

choose(29, 18) * choose(11, 2) / choose(40, 20)
## [1] 0.01380413

Berikut semua kombinasi tabel 2 x 2 yang mungkin dengan total bari dan total kolom sama:

Ya Tidak Total
Grup A 20 0 20
Grup B 9 11 20
Total 29 11 40
choose(29, 20) * choose(11, 0) / choose(40, 20)
## [1] 7.26533e-05
Ya Tidak Total
Grup A 19 1 20
Grup B 10 10 20
Total 29 11 40
choose(29, 19) * choose(11, 1) / choose(40, 20)
## [1] 0.001598373
Ya Tidak Total
Grup A 18 2 20
Grup B 11 9 20
Total 29 11 40
choose(29, 18) * choose(11, 2) / choose(40, 20)
## [1] 0.01380413
Ya Tidak Total
Grup A 17 3 20
Grup B 12 8 20
Total 29 11 40
choose(29, 17) * choose(11, 3) / choose(40, 20)
## [1] 0.06211857
Ya Tidak Total
Grup A 16 4 20
Grup B 13 7 20
Total 29 11 40
choose(29, 16) * choose(11, 4) / choose(40, 20)
## [1] 0.162464
Ya Tidak Total
Grup A 15 5 20
Grup B 14 6 20
Total 29 11 40
choose(29, 15) * choose(11, 5) / choose(40, 20)
## [1] 0.2599423
Ya Tidak Total
Grup A 14 6 20
Grup B 15 5 20
Total 29 11 40
choose(29, 14) * choose(11, 6) / choose(40, 20)
## [1] 0.2599423
Ya Tidak Total
Grup A 13 7 20
Grup B 16 4 20
Total 29 11 40
choose(29, 13) * choose(11, 7) / choose(40, 20)
## [1] 0.162464
Ya Tidak Total
Grup A 12 8 20
Grup B 17 3 20
Total 29 11 40
choose(29, 12) * choose(11, 8) / choose(40, 20)
## [1] 0.06211857
Ya Tidak Total
Grup A 11 9 20
Grup B 18 2 20
Total 29 11 40
choose(29, 11) * choose(11, 9) / choose(40, 20)
## [1] 0.01380413
Ya Tidak Total
Grup A 10 10 20
Grup B 19 1 20
Total 29 11 40
choose(29, 10) * choose(11, 10) / choose(40, 20)
## [1] 0.001598373
Ya Tidak Total
Grup A 9 11 20
Grup B 20 0 20
Total 29 11 40
choose(29, 9) * choose(11, 11) / choose(40, 20)
## [1] 7.26533e-05

p-value untuk uji Exact Fisher adalah kumulatif nilai p-value untuk setiap tabel yang lebih kecil sama dengan nilai p-value tabel empiris

Ya Tidak Total
Grup A 18 2 20
Grup B 11 9 20
Total 29 11 40
choose(29, 18) * choose(11, 2) / choose(40, 20)
## [1] 0.01380413

yaitu

p.value<-0.00007+0.00160+0.01380+0.01380+0.00160+0.00007
p.value
## [1] 0.03094
6.2.3.4.3 Menggunakan fisher.test() di R
data <- matrix(c(18, 2, 11, 9), nrow = 2, byrow = TRUE)
fisher.test(data)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  data
## p-value = 0.03095
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
##   1.147793 78.183838
## sample estimates:
## odds ratio 
##   6.994073

Hasilnya akan memberikan nilai p untuk menentukan apakah ada hubungan signifikan antara kedua variabel.

Interpretasi Hasil

  • Jika p-value < 0.05, kita menolak hipotesis nol, yang berarti ada hubungan signifikan antara dua variabel.
  • Jika p-value >= 0.05, kita gagal menolak hipotesis nol, yang berarti tidak ada cukup bukti untuk menyatakan adanya hubungan signifikan.

Kesimpulan

Uji Tujuan Output
Uji Proporsi Menguji apakah proporsi kejadian berbeda antara dua kelompok p-value (signifikansi perbedaan proporsi)
Risk Difference (RD) Mengukur perbedaan absolut risiko antar kelompok Nilai perbedaan risiko
Relative Risk (RR) Mengukur risiko relatif antar kelompok Rasio risiko
Odds Ratio (OR) Mengukur peluang kejadian antar kelompok Rasio odds
Uji Chi-Square Menguji apakah ada hubungan antara dua variabel p-value (signifikansi hubungan)
Uji Fisher’s Exact Menguji hubungan pada sampel kecil p-value (signifikansi hubungan)

Dokumen ini memberikan gambaran lengkap tentang perbedaan uji proporsi, ukuran asosiasi, dan uji independensi beserta implementasi dalam R, serta perhitungan manual uji Chi-Square.

6.2.4 Tugas Mahasiswa.

Buatlah fungsi untuk menghitung dan melakukan pegujian hipotesis untuk RD, RR, dan OR. Gunakan data berikut Dataset dari Agresti (2019, hlm. 35, Tabel 2.3):

Smoker Lung Cancer (Cases) Control
Yes 688 650
No 21 59

Struktur Tabel Untuk Pembuatan Function

Exposure Cases Control Total
Yes a c a+c
No b d b+d
Total a+b c+d a+b+c+d
prop_diff <- function(a, b, c, d, alpha = 0.05) {
  ph <- a / (a + c)
  pi <- b / (b + d)
  nh <- a + c
  ni <- b + d
  
  se_bp <- sqrt((ph * (1 - ph) / nh) + (pi * (1 - pi) / ni))
  z_alpha <- qnorm(1 - alpha / 2)
  ci_lower <- (ph - pi) - z_alpha * se_bp
  ci_upper <- (ph - pi) + z_alpha * se_bp
  
  list(estimate = ph - pi, ci = c(ci_lower, ci_upper))
}
# Input data
hasil <- prop_diff(a = 688, b = 21, c = 650, d = 59)

# Menampilkan hasil
print(hasil)
## $estimate
## [1] 0.2517003
## 
## $ci
## [1] 0.1516343 0.3517663

6.2.4.1 Relative Risk (RR)

relative_risk <- function(a, b, c, d, alpha = 0.05) {
  ph <- a / (a + c)
  pi <- b / (b + d)
  nh <- a + c
  ni <- b + d
  
  ln_rr <- log(ph / pi)
  se_ln_rr <- sqrt(((1 - ph) / (ph * nh)) + ((1 - pi) / (pi * ni)))
  z_alpha <- qnorm(1 - alpha / 2)
  ci_lower <- exp(ln_rr - z_alpha * se_ln_rr)
  ci_upper <- exp(ln_rr + z_alpha * se_ln_rr)
  
  list(estimate = exp(ln_rr), ci = c(ci_lower, ci_upper))
}
# Input data
hasil <- relative_risk(a = 688, b = 21, c = 650, d = 59)

# Menampilkan hasil
print(hasil)
## $estimate
## [1] 1.958858
## 
## $ci
## [1] 1.351735 2.838667

6.2.4.2 Odds Ratio (OR)

odds_ratio <- function(a, b, c, d, alpha = 0.05) {
  ln_or <- log((a * d) / (b * c))
  se_ln_or <- sqrt(1/a + 1/b + 1/c + 1/d)
  z_alpha <- qnorm(1 - alpha / 2)
  ci_lower <- exp(ln_or - z_alpha * se_ln_or)
  ci_upper <- exp(ln_or + z_alpha * se_ln_or)
  
  list(estimate = exp(ln_or), ci = c(ci_lower, ci_upper))
}
# Input data
hasil <- odds_ratio(a = 688, b = 21, c = 650, d = 59)

# Menampilkan hasil
print(hasil)
## $estimate
## [1] 2.973773
## 
## $ci
## [1] 1.786737 4.949427

Risk Difference (RD) = 0.2517 (atau 25.17%) → Risiko kanker paru pada perokok lebih tinggi 25.17% secara absolut dibandingkan non-perokok.

Relative Risk (RR) = 1.96 → Perokok memiliki 1.96 kali lipat lebih tinggi risiko terkena kanker paru dibandingkan non-perokok.

Odds Ratio (OR) = 2.97 → Odds perokok terkena kanker paru 2.97 kali lebih besar dibandingkan non-perokok.

Perhitungan Manual

a <- 688
b <- 21
c <- 650
d <- 59

# Risk Difference
RD_manual <- (a / (a + c)) - (b / (b + d))
SE_RD <- sqrt((a/(a+c)*(1 - a/(a+c)))/(a+c) + (b/(b+d)*(1 - b/(b+d)))/(b+d))
CI_RD <- c(RD_manual - 1.96 * SE_RD, RD_manual + 1.96 * SE_RD)

# Relative Risk
RR_manual <- (a / (a + c)) / (b / (b + d))
SE_RR <- sqrt(1/a - 1/(a+c) + 1/b - 1/(b+d))
CI_RR <- exp(log(RR_manual) + c(-1.96, 1.96) * SE_RR)

# Odds Ratio
OR_manual <- (a * d) / (b * c)
SE_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_OR <- exp(log(OR_manual) + c(-1.96, 1.96) * SE_OR)

list(RD = RD_manual, CI_RD = CI_RD, RR = RR_manual, CI_RR = CI_RR, OR = OR_manual, CI_OR = CI_OR)
## $RD
## [1] 0.2517003
## 
## $CI_RD
## [1] 0.1516324 0.3517682
## 
## $RR
## [1] 1.958858
## 
## $CI_RR
## [1] 1.351726 2.838687
## 
## $OR
## [1] 2.973773
## 
## $CI_OR
## [1] 1.786720 4.949474

Perbandingan dengan Output R

library(epiR)
table_data <- matrix(c(a, c, b, d), nrow = 2, byrow = TRUE)
colnames(table_data) <- c("Lung Cancer", "Control")
rownames(table_data) <- c("Yes", "No")
res <- epi.2by2(table_data)
print(res)
##              Outcome+    Outcome-      Total                 Inc risk *
## Exposure+         688         650       1338     51.42 (48.70 to 54.13)
## Exposure-          21          59         80     26.25 (17.04 to 37.29)
## Total             709         709       1418     50.00 (47.36 to 52.64)
## 
## Point estimates and 95% CIs:
## -------------------------------------------------------------------
## Inc risk ratio                                 1.96 (1.35, 2.84)
## Inc odds ratio                                 2.97 (1.79, 4.95)
## Attrib risk in the exposed *                   25.17 (15.16, 35.18)
## Attrib fraction in the exposed (%)            48.95 (28.08, 65.39)
## Attrib risk in the population *                23.75 (13.76, 33.74)
## Attrib fraction in the population (%)         47.50 (29.16, 64.02)
## -------------------------------------------------------------------
## Uncorrected chi2 test that OR = 1: chi2(1) = 19.129 Pr>chi2 = <0.001
## Fisher exact test that OR = 1: Pr>chi2 = <0.001
##  Wald confidence limits
##  CI: confidence interval
##  * Outcomes per 100 population units

Risk Difference, Relative Risk, dan Odds Ratio memberikan informasi tentang kekuatan hubungan antara paparan dan outcome. Perhitungan manual dan R seharusnya menghasilkan hasil yang sama, memvalidasi pendekatan yang digunakan.

6.3 Analisis Residual dalam Tabel Kontingensi

Residual dalam tabel kontingensi digunakan untuk mengidentifikasi sel mana yang menyumbang paling banyak terhadap hubungan antara variabel kategori. Residual mengukur selisih antara frekuensi yang diamati dan frekuensi yang diharapkan berdasarkan model independensi. Jika suatu sel memiliki residual yang besar (positif atau negatif), berarti frekuensi observasi dalam sel tersebut sangat berbeda dari yang diharapkan. Sebaliknya, jika residualnya kecil, berarti nilai observasi mendekati nilai ekspektasi, sehingga sel tersebut tidak banyak menyumbang terhadap hubungan antara variabel Agresti, A. (2013).

  • Jika residual ≈ 0:
    • Tidak ada perbedaan signifikan antara jumlah observasi yang terjadi di suatu sel dengan jumlah yang diprediksi oleh model independensi.
    • Artinya, variabel baris dan kolom dalam tabel tidak memiliki hubungan kuat atau tidak menunjukkan pola keterkaitan yang jelas.
  • Jika residual positif besar:
    • Frekuensi observasi jauh lebih tinggi dari yang diharapkan → menunjukkan hubungan positif yang kuat antara kategori tersebut.
  • Jika residual negatif besar:
    • Frekuensi observasi jauh lebih rendah dari yang diharapkan → menunjukkan hubungan negatif atau tidak adanya asosiasi.
  • Residual kecil (≈ 0) → Tidak ada hubungan antara variabel baris dan kolom.
  • Residual besar (positif atau negatif) → Ada hubungan yang signifikan antara variabel baris dan kolom.

Jadi, dalam analisis residual tabel kontingensi, nilai residual mendekati nol mengindikasikan bahwa variabel-variabel yang dianalisis tidak memiliki hubungan yang signifikan, dan data sesuai dengan asumsi independensi.

6.3.1 Jenis Residual

Pearson Residual \[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \] dimana: - \(O_{ij}\) adalah nilai observasi pada sel ke-\(i,j\) - \(E_{ij}\) adalah nilai ekspektasi pada sel ke-\(i,j\)

Standardized Residual (Adjusted Residual) \[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij} (1 - p_{i+}) (1 - p_{+j})}} \] dimana: - \(p_{i+}\) dan \(p_{+j}\) adalah probabilitas marginal dari baris dan kolom.

6.3.1.1 Contoh Perhitungan Residual Secara Manual

Misalkan kita memiliki tabel kontingensi berikut:

Kategori A Kategori B Total
Grup 1 20 10 30
Grup 2 30 20 50
Total 50 30 80

Langkah-langkah perhitungan:

  1. Hitung frekuensi yang diharapkan: \[ E_{ij} = \frac{(\text{Total Baris}) \times (\text{Total Kolom})}{\text{Total Keseluruhan}} \] dengan

    • \(E_{11} = \frac{30 \times 50}{80} = 18.75\)

    • \(E_{12} = \frac{30 \times 30}{80} = 11.25\)

    • \(E_{21} = \frac{50 \times 50}{80} = 31.25\)

    • \(E_{22} = \frac{50 \times 30}{80} = 18.75\)

  2. Hitung Pearson Residual:

\[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]

dengan

-   $e_{11} = \frac{20 - 18.75}{\sqrt{18.75}} = 0.29$

-   $e_{12} = \frac{10 - 11.25}{\sqrt{11.25}} = -0.37$

-   $e_{21} = \frac{30 - 31.25}{\sqrt{31.25}} = -0.22$

-   $e_{22} = \frac{20 - 18.75}{\sqrt{18.75}} = 0.29$

6.3.1.2 Implementasi dalam R

# Data Observasi
observed <- matrix(c(20, 10, 30, 20), nrow = 2, byrow = TRUE)

# Hitung nilai ekspektasi
expected <- chisq.test(observed)$expected

# Pearson Residual
pearson_residual <- (observed - expected) / sqrt(expected)

# Standardized Residual
row_sum <- rowSums(observed)
col_sum <- colSums(observed)
total_sum <- sum(observed)

standardized_residual <- (observed - expected) / sqrt(expected * (1 - row_sum / total_sum) * (1 - col_sum / total_sum))

# Menampilkan hasil
list(
  Pearson_Residual = pearson_residual,
  Standardized_Residual = standardized_residual
)
## $Pearson_Residual
##            [,1]       [,2]
## [1,]  0.2886751 -0.3726780
## [2,] -0.2236068  0.2886751
## 
## $Standardized_Residual
##            [,1]       [,2]
## [1,]  0.5962848 -0.7698004
## [2,] -0.4618802  0.5962848

6.3.2 Deteksi Outlier dalam Analisis Data Kategori Menggunakan Residual

6.3.2.1 Apa Itu Outlier dalam Tabel Kontingensi?

Outlier dalam analisis data kategori adalah sel dalam tabel kontingensi yang memiliki nilai residual yang sangat besar, baik positif maupun negatif. Outlier ini menunjukkan bahwa ada kategori yang memiliki frekuensi observasi yang jauh lebih tinggi atau lebih rendah dibandingkan dengan nilai ekspektasi berdasarkan asumsi independensi.

6.3.2.2 Menggunakan Residual untuk Mendeteksi Outlier

  • Pearson Residual: \[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \] Jika nilai |e_{ij}| > 2, maka sel tersebut dianggap sebagai indikasi adanya outlier.

  • Standardized Residual (Adjusted Residual): \[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij} (1 - p_{i+}) (1 - p_{+j})}} \] Jika |r_{ij}| > 3, maka sel tersebut dianggap sebagai outlier signifikan.

6.3.2.3 Contoh Deteksi Outlier dalam Tabel Kontingensi

Misalkan kita memiliki tabel kontingensi berikut:

Sukses Gagal Total
Grup A 50 20 70
Grup B 30 50 80
Total 80 70 150

Setelah menghitung residual, kita menemukan:

Pearson Residual Standardized Residual
Grup A, Sukses 2.06 2.45
Grup A, Gagal -2.20 -2.60
Grup B, Sukses -1.96 -2.10
Grup B, Gagal 2.06 2.45
  • Sel (A, Gagal) memiliki residual negatif terbesar (-2.20, -2.60) → Ini menunjukkan bahwa Grup A mengalami lebih sedikit kegagalan dari yang diprediksi oleh model independensi. Jika |r| melebihi 3, maka sel ini dapat dianggap sebagai outlier yang signifikan.

  • Sel (A, Sukses) dan (B, Gagal) memiliki residual positif cukup besar → Menunjukkan bahwa ada ketidakseimbangan dalam hubungan antara kategori.

6.3.2.4 Implementasi dalam R untuk Deteksi Outlier

# Data Observasi
observed <- matrix(c(50, 20, 30, 50), nrow = 2, byrow = TRUE)
colnames(observed) <- c("Sukses", "Gagal")
rownames(observed) <- c("Grup A", "Grup B")

# Hitung nilai ekspektasi
expected <- chisq.test(observed)$expected

# Pearson Residual
pearson_residual <- (observed - expected) / sqrt(expected)

# Standardized Residual
row_sum <- rowSums(observed)
col_sum <- colSums(observed)
total_sum <- sum(observed)
standardized_residual <- (observed - expected) / sqrt(expected * (1 - row_sum / total_sum) * (1 - col_sum / total_sum))

# Menampilkan hasil
list(
  Observed = observed,
  Expected = expected,
  Pearson_Residual = pearson_residual,
  Standardized_Residual = standardized_residual
)
## $Observed
##        Sukses Gagal
## Grup A     50    20
## Grup B     30    50
## 
## $Expected
##          Sukses    Gagal
## Grup A 37.33333 32.66667
## Grup B 42.66667 37.33333
## 
## $Pearson_Residual
##           Sukses     Gagal
## Grup A  2.073070 -2.216205
## Grup B -1.939179  2.073070
## 
## $Standardized_Residual
##           Sukses     Gagal
## Grup A  4.155384 -4.442293
## Grup B -3.887006  4.155384
  • Deteksi outlier menggunakan residual membantu mengidentifikasi kategori dalam tabel kontingensi yang sangat menyimpang dari ekspektasi.

  • Jika |r| > 3, maka sel tersebut dapat dianggap sebagai outlier signifikan yang mungkin mempengaruhi kesimpulan analisis.

  • Residual besar menunjukkan hubungan signifikan antara variabel, sedangkan residual mendekati nol menunjukkan tidak adanya hubungan.

Analisis residual dalam tabel kontingensi membantu memahami kontribusi masing-masing sel terhadap hubungan antara variabel kategori. Pearson residual digunakan untuk melihat seberapa jauh nilai observasi menyimpang dari ekspektasi, sementara standardized residual mempertimbangkan efek margin baris dan kolom untuk menghindari bias dalam interpretasi.

6.3.2.5 Tugas Mahasiswa: Hubungan antara Merokok dan Penyakit Kanker Paru

Seorang peneliti ingin mengetahui apakah ada hubungan antara kebiasaan merokok dan kejadian kanker paru-paru. Data yang diperoleh dari sebuah penelitian medis ditampilkan dalam tabel kontingensi berikut:

Kanker Paru (+) Kanker Paru (-) Total
Perokok 450 200 650
Bukan Perokok 50 300 350
Total 500 500 1000
  1. Hitung frekuensi ekspektasi untuk masing-masing sel berdasarkan asumsi independensi.

  2. Hitung Pearson Residual dan Standardized Residual untuk setiap sel.

  3. Interpretasikan hasil residual yang diperoleh.

  4. Tentukan apakah ada kategori yang bisa dianggap sebagai outlier dalam hubungan antara merokok dan kanker paru-paru.

Penyelesaian dalam R

# Data Observasi
observed <- matrix(c(450, 200, 50, 300), nrow = 2, byrow = TRUE)
colnames(observed) <- c("Kanker Paru (+)", "Kanker Paru (-)")
rownames(observed) <- c("Perokok", "Bukan Perokok")

# Hitung nilai ekspektasi
expected <- chisq.test(observed)$expected

# Pearson Residual
pearson_residual <- (observed - expected) / sqrt(expected)

# Standardized Residual
row_sum <- rowSums(observed)
col_sum <- colSums(observed)
total_sum <- sum(observed)
standardized_residual <- (observed - expected) / sqrt(expected * (1 - row_sum / total_sum) * (1 - col_sum / total_sum))

# Menampilkan hasil
list(
  Observed = observed,
  Expected = expected,
  Pearson_Residual = pearson_residual,
  Standardized_Residual = standardized_residual
)
## $Observed
##               Kanker Paru (+) Kanker Paru (-)
## Perokok                   450             200
## Bukan Perokok              50             300
## 
## $Expected
##               Kanker Paru (+) Kanker Paru (-)
## Perokok                   325             325
## Bukan Perokok             175             175
## 
## $Pearson_Residual
##               Kanker Paru (+) Kanker Paru (-)
## Perokok              6.933752       -6.933752
## Bukan Perokok       -9.449112        9.449112
## 
## $Standardized_Residual
##               Kanker Paru (+) Kanker Paru (-)
## Perokok              16.57484       -16.57484
## Bukan Perokok       -16.57484        16.57484

Interpretasi: - Jika residual positif besar, ini menunjukkan bahwa kategori tersebut memiliki lebih banyak kejadian dari yang diharapkan. - Jika residual negatif besar, ini menunjukkan bahwa kategori tersebut memiliki lebih sedikit kejadian dari yang diharapkan. - Jika |r| > 3, maka sel tersebut bisa dianggap sebagai outlier signifikan, yang mungkin mempengaruhi kesimpulan analisis.

  • Deteksi outlier menggunakan residual membantu mengidentifikasi kategori dalam tabel kontingensi yang sangat menyimpang dari ekspektasi.
  • Jika |r| > 3, maka sel tersebut dapat dianggap sebagai outlier signifikan yang mungkin mempengaruhi kesimpulan analisis.
  • Residual besar menunjukkan hubungan signifikan antara variabel, sedangkan residual mendekati nol menunjukkan tidak adanya hubungan.

7 Tabel Kontingensi Tiga Arah

Bab ini membahas analisis tabel kontingensi tiga arah secara mendalam, mencakup tabel parsial dan marginal, ukuran asosiasi, Simpson’s Paradox, independensi bersyarat, serta asosiasi homogen. Setiap bagian dilengkapi dengan contoh perhitungan manual dan implementasi dalam R. Tabel kontingensi tiga arah adalah perpanjangan dari tabel kontingensi dua arah yang digunakan untuk menganalisis hubungan antara tiga variabel kategori secara simultan. Dalam banyak situasi, hubungan antara dua variabel (misalnya \(X\) dan \(Y\)) dapat dipengaruhi oleh variabel ketiga \(Z\), yang disebut sebagai variabel kontrol atau kovariat. Tabel ini sering digunakan dalam analisis data ketika ada potensi faktor pengganggu yang dapat mempengaruhi hubungan antara dua variabel utama. Misalnya:

  • Dalam studi epidemiologi, untuk meneliti hubungan antara merokok (\(X\)) dan kanker paru-paru (\(Y\)) dengan mengendalikan efek usia (\(Z\)).

  • Dalam penelitian sosial, untuk mengevaluasi hubungan antara ras tersangka (\(X\)) dan keputusan hukuman mati (\(Y\)) dengan mempertimbangkan ras korban (\(Z\)). Tabel kontingensi tiga arah dapat dipecah menjadi:

  • Tabel Parsial: Tabel yang menyajikan hubungan antara \(X\) dan \(Y\) pada setiap kategori \(Z\). Ini memungkinkan analisis hubungan bersyarat, di mana efek \(Z\) dikendalikan.

  • Tabel Marginal: Tabel yang diperoleh dengan mengabaikan \(Z\), yaitu dengan menjumlahkan semua kategori \(Z\). Ini memberikan gambaran umum hubungan antara \(X\) dan \(Y\) tanpa mempertimbangkan \(Z\), yang bisa menyebabkan distorsi interpretasi, seperti dalam Simpson’s Paradox.

Kegunaan tabel marginal adalah untuk melihat pola asosiasi secara agregat, tetapi sering kali mengabaikan efek kovariat yang dapat memberikan pemahaman lebih mendalam. Oleh karena itu, analisis yang mempertimbangkan tabel parsial biasanya lebih diutamakan untuk mendapatkan kesimpulan yang lebih akurat dalam penelitian ilmiah.

7.1 Tabel Parsial dan Marginal

Tabel parsial adalah tabel yang mengelompokkan \(X\) dan \(Y\) berdasarkan setiap level \(Z\), sedangkan tabel marginal adalah tabel yang mengabaikan \(Z\), dengan menjumlahkan data dari semua level \(Z\).

Struktur Tabel Kontingensi Tiga Arah

\[ \begin{array}{|c|c|c|c|c|c|c|} \hline & & Y = 1 & Y = 2 & \cdots & Y = J & Y = . \\ \hline Z = 1 & X = 1 & n_{111} & n_{121} & \cdots & n_{1J1} & n_{1+1} \\ & X = 2 & n_{211} & n_{221} & \cdots & n_{2J1} & n_{2+1} \\ & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ & X = i & n_{i11} & n_{i21} & \cdots & n_{iJ1} & n_{i+1} \\ & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ & X = I & n_{I11} & n_{I21} & \cdots & n_{IJ1} & n_{I+1} \\ \hline \vdots & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ \hline Z = k & X = 1 & n_{11k} & n_{12k} & \cdots & n_{1Jk} & n_{1+k} \\ & X = 2 & n_{21k} & n_{22k} & \cdots & n_{2Jk} & n_{2+k} \\ & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ & X = i & n_{i1k} & n_{i2k} & \cdots & n_{iJk} & n_{i+k} \\ & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ & X = I & n_{I1k} & n_{I2k} & \cdots & n_{IJk} & n_{I+k} \\ \hline \vdots & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ \hline Z = K & X = 1 & n_{11K} & n_{12K} & \cdots & n_{1JK} & n_{1+K} \\ & X = 2 & n_{21K} & n_{22K} & \cdots & n_{2JK} & n_{2+K} \\ & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ & X = i & n_{i1K} & n_{i2K} & \cdots & n_{iJK} & n_{i+K} \\ & \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\ & X = I & n_{I1K} & n_{I2K} & \cdots & n_{IJK} & n_{I+K} \\ \hline Z = . & X = . & n_{1+1} & n_{+2+} & \cdots & n_{+J+} & n_{+++} \\ \hline \end{array} \]

Contoh Data: Tabel berikut menggambarkan hubungan antara usia (Z), kebiasaan merokok (X), dan kejadian kanker paru (Y), dengan jumlah total individu dalam setiap kelompok.

Tabel Parsial dan Marginal Tabel parsial adalah tabel yang mengelompokkan \(X\) dan \(Y\) berdasarkan setiap level \(Z\), sedangkan tabel marginal adalah tabel yang mengabaikan \(Z\), dengan menjumlahkan data dari semua level \(Z\).

Contoh Data:

Z (Usia) X (Merokok) Y (Kanker Paru) Tidak Kanker Paru Jumlah
Muda Ya 10 40 50
Muda Tidak 5 45 50
Dewasa Ya 40 10 50
Dewasa Tidak 10 40 50
Tua Ya 50 0 50
Tua Tidak 20 30 50

Tabel Frekuensi Parsial Tabel frekuensi parsial menyajikan hubungan antara dua variabel kategori dalam tabel kontingensi tiga arah dengan mempertahankan satu variabel sebagai kontrol. Tabel ini membantu dalam memahami hubungan bersyarat antara variabel dalam analisis data kategori.

Tabel frekuensi parsial dihitung dengan membagi tabel kontingensi tiga arah berdasarkan kategori variabel kontrol.

Tabel Frekuensi Parsial untuk Z (Usia) = Muda:

X (Merokok) Y (Kanker Paru) Tidak Kanker Paru
Ya 10 40
Tidak 5 45

Tabel Frekuensi Parsial untuk Z (Usia) = Dewasa:

X (Merokok) Y (Kanker Paru) Tidak Kanker Paru
Ya 40 10
Tidak 10 40

Tabel Frekuensi Parsial untuk Z (Usia) = Tua:

X (Merokok) Y (Kanker Paru) Tidak Kanker Paru
Ya 50 0
Tidak 20 30

Implementasi dalam R

data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
               dim = c(2, 2, 3),
               dimnames = list(
                 Merokok = c("Ya", "Tidak"),
                 Kanker = c("Ya", "Tidak"),
                 Usia = c("Muda", "Dewasa", "Tua")
               ))

# Ekstrak tabel parsial berdasarkan usia
freq_parsial_muda <- data3[, , "Muda"]
freq_parsial_dewasa <- data3[, , "Dewasa"]
freq_parsial_tua <- data3[, , "Tua"]

# Tampilkan hasil
freq_parsial_muda
##        Kanker
## Merokok Ya Tidak
##   Ya    10    50
##   Tidak 40     5
freq_parsial_dewasa
##        Kanker
## Merokok Ya Tidak
##   Ya    10    40
##   Tidak 20    10
freq_parsial_tua
##        Kanker
## Merokok Ya Tidak
##   Ya     0    40
##   Tidak 45    30

Kesimpulan Tabel frekuensi parsial memungkinkan analisis hubungan antara dua variabel dengan mempertimbangkan variabel kontrol. Ini membantu mengidentifikasi pola yang mungkin tersembunyi dalam tabel frekuensi marginal.

Tabel Frekuensi Marginal Tabel frekuensi marginal menampilkan jumlah total observasi untuk setiap variabel dengan mengabaikan variabel lainnya dalam tabel kontingensi tiga arah. Tabel ini membantu dalam memahami distribusi kategori secara agregat tanpa mempertimbangkan hubungan antarvariabel. Tabel frekuensi marginal dihitung dengan menjumlahkan frekuensi dari tabel kontingensi tiga arah berdasarkan variabel yang tersisa.

Tabel Frekuensi Marginal untuk X (Merokok) dan Y (Kanker Paru):

X (Merokok) Y (Kanker Paru) Tidak Kanker Paru Total
Ya 100 50 150
Tidak 35 115 150

Tabel Frekuensi Marginal untuk Z (Usia) dan Y (Kanker Paru):

Z (Usia) Y (Kanker Paru) Tidak Kanker Paru Total
Muda 15 85 100
Dewasa 50 50 100
Tua 70 30 100

Implementasi dalam R

data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
               dim = c(2, 2, 3),
               dimnames = list(
                 Merokok = c("Ya", "Tidak"),
                 Kanker = c("Ya", "Tidak"),
                 Usia = c("Muda", "Dewasa", "Tua")
               ))

# Hitung frekuensi marginal
freq_marginal_X <- apply(data3, 1, sum)
freq_marginal_Z <- apply(data3, 3, sum)

# Tampilkan hasil
freq_marginal_X
##    Ya Tidak 
##   150   150
freq_marginal_Z
##   Muda Dewasa    Tua 
##    105     80    115

Kesimpulan Tabel frekuensi marginal memberikan gambaran umum tentang distribusi kategori variabel dalam tabel kontingensi tiga arah. Ini berguna dalam memahami pola distribusi data tanpa mempertimbangkan hubungan antarvariabel.

Dari tabel ini, kita dapat melihat: -Proporsi kanker paru lebih tinggi pada kelompok usia yang lebih tua. -Perokok memiliki jumlah kasus kanker paru lebih tinggi dibandingkan yang tidak merokok dalam setiap kelompok usia. -Perbedaan antara kelompok perokok dan non-perokok semakin jelas seiring bertambahnya usia.

7.2 Distribusi Peluang

1. Peluang Bersama (Joint Probability)

Peluang bersama didefinisikan sebagai: \[ P(Z, X, Y) = \frac{f(Z, X, Y)}{N} \]

Sebagai contoh, peluang seseorang berusia tua, merokok, dan menderita kanker paru:

\[ P(Tua, Ya, Kanker) = \frac{50}{300} = 0.1667 \]

Implementasi dalam R:

data <- data.frame(
  Usia = rep(c("Muda", "Dewasa", "Tua"), each = 2),
  Merokok = rep(c("Ya", "Tidak"), 3),
  Kanker = c(10, 5, 40, 10, 50, 20),
  Total = c(50, 50, 50, 50, 50, 50)
)

data$P_ZXY <- data$Kanker / sum(data$Total)
data
##     Usia Merokok Kanker Total      P_ZXY
## 1   Muda      Ya     10    50 0.03333333
## 2   Muda   Tidak      5    50 0.01666667
## 3 Dewasa      Ya     40    50 0.13333333
## 4 Dewasa   Tidak     10    50 0.03333333
## 5    Tua      Ya     50    50 0.16666667
## 6    Tua   Tidak     20    50 0.06666667

Tabel Probabilitas Bersama (Joint Probability) Tabel probabilitas bersama dihitung dengan membagi setiap sel dengan total keseluruhan sampel.

Tabel Probabilitas Bersama untuk Y (Kanker Paru) dan Tidak Kanker Paru:

Z (Usia) X (Merokok) P(Y X, Z)
Muda Ya 0.033 0.133
Muda Tidak 0.017 0.150
Dewasa Ya 0.133 0.033
Dewasa Tidak 0.033 0.133
Tua Ya 0.167 0.000
Tua Tidak 0.067 0.100

Implementasi dalam R

data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
               dim = c(2, 2, 3),
               dimnames = list(
                 Merokok = c("Ya", "Tidak"),
                 Kanker = c("Ya", "Tidak"),
                 Usia = c("Muda", "Dewasa", "Tua")
               ))

# Hitung probabilitas bersama
total <- sum(data3)
joint_prob <- data3 / total
ftable(joint_prob)
##                Usia       Muda     Dewasa        Tua
## Merokok Kanker                                      
## Ya      Ya          0.03333333 0.03333333 0.00000000
##         Tidak       0.16666667 0.13333333 0.13333333
## Tidak   Ya          0.13333333 0.06666667 0.15000000
##         Tidak       0.01666667 0.03333333 0.10000000

2. Peluang Marginal (Marginal Probability)

Peluang marginal diperoleh dengan menjumlahkan probabilitas bersama:

  • Peluang terkena kanker (Y=1):

\[ P(Y=1) = \sum_{Z,X} P(Z,X,Y=1) \]

  • Peluang merokok (X=Ya):

\[ P(X=Ya) = \sum_{Z,Y} P(Z,X=Ya,Y) \]

Sebagai contoh, peluang terkena kanker:

\[ P(Y=1) = \frac{10 + 5 + 40 + 10 + 50 + 20}{300} = 0.45 \]

Implementasi dalam R:

P_Y1 <- sum(data$Kanker) / sum(data$Total)
P_Y1
## [1] 0.45

Tabel Peluang Marginal

Tabel peluang marginal dihitung dengan menjumlahkan probabilitas bersama untuk setiap variabel yang tersisa setelah mengabaikan variabel lain.

Tabel Peluang Marginal untuk X (Merokok) dan Y (Kanker Paru):

X (Merokok) P(Y) P(Tidak Y)
Ya 0.333 0.167
Tidak 0.167 0.333

Tabel Peluang Marginal untuk Z (Usia) dan Y (Kanker Paru):

Z (Usia) P(Y) P(Tidak Y)
Muda 0.050 0.283
Dewasa 0.167 0.167
Tua 0.233 0.100

Implementasi dalam R

data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
               dim = c(2, 2, 3),
               dimnames = list(
                 Merokok = c("Ya", "Tidak"),
                 Kanker = c("Ya", "Tidak"),
                 Usia = c("Muda", "Dewasa", "Tua")
               ))

# Hitung probabilitas bersama
total <- sum(data3)
joint_prob <- data3 / total

# Hitung probabilitas marginal
marginal_X <- apply(joint_prob, 1, sum)
marginal_Z <- apply(joint_prob, 3, sum)

# Tampilkan hasil
marginal_X
##    Ya Tidak 
##   0.5   0.5
marginal_Z
##      Muda    Dewasa       Tua 
## 0.3500000 0.2666667 0.3833333

Kesimpulan Tabel peluang marginal membantu memahami distribusi probabilitas dari masing-masing variabel tanpa mempertimbangkan variabel lainnya. Ini memberikan wawasan penting dalam analisis data kategori dengan tabel kontingensi tiga arah.

3. Peluang Bersyarat (Conditional Probability)

Peluang bersyarat didefinisikan sebagai:

\[ P(Z | X, Y) = \frac{P(Z, X, Y)}{P(X, Y)} \]

Sebagai contoh, peluang seseorang berusia tua diberikan bahwa dia merokok dan menderita kanker:

\[ P(Tua | X=Ya, Y=1) = \frac{P(Tua, Ya, Y=1)}{P(X=Ya, Y=1)} \]

Menghitung secara manual:

\[ P(X=Ya, Y=1) = \frac{10 + 40 + 50}{300} = 0.3333 \]

\[ P(Tua | X=Ya, Y=1) = \frac{50/300}{0.3333} = 0.5 \]

Implementasi dalam R:

P_X_Y1 <- sum(data$Kanker[data$Merokok == "Ya"]) / sum(data$Total)
P_Tua_given_X_Y1 <- (50 / 300) / P_X_Y1
P_Tua_given_X_Y1
## [1] 0.5

7.3 Tabel Peluang Bersyarat

Peluang bersyarat dihitung berdasarkan jumlah total dalam setiap kategori.

Tabel Peluang Bersyarat untuk Usia Muda:

X (Merokok) P(Y X)
Ya 0.20 0.80
Tidak 0.10 0.90

Tabel Peluang Bersyarat untuk Usia Dewasa:

X (Merokok) P(Y X)
Ya 0.80 0.20
Tidak 0.20 0.80

Tabel Peluang Bersyarat untuk Usia Tua:

X (Merokok) P(Y X)
Ya 1.00 0.00
Tidak 0.40 0.60

Implementasi dalam R

data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
               dim = c(2, 2, 3),
               dimnames = list(
                 Merokok = c("Ya", "Tidak"),
                 Kanker = c("Ya", "Tidak"),
                 Usia = c("Muda", "Dewasa", "Tua")
               ))
ftable(data3)
##                Usia Muda Dewasa Tua
## Merokok Kanker                     
## Ya      Ya            10     10   0
##         Tidak         50     40  40
## Tidak   Ya            40     20  45
##         Tidak          5     10  30

Kesimpulan

  • Peluang bersama dihitung dengan membagi frekuensi dengan total populasi.
  • Peluang marginal diperoleh dengan menjumlahkan probabilitas bersama.
  • Peluang bersyarat dihitung menggunakan rumus Bayes.

Analisis ini dapat diperluas untuk memahami hubungan antara variabel yang lebih kompleks!

7.4 Ukuran Asosiasi

1. Beda Peluang (BP) \[ BP = P(Y | X_1, Z) - P(Y | X_2, Z) \]

2. Risiko Relatif (RR) \[ RR = \frac{P(Y | X_1, Z)}{P(Y | X_2, Z)} \]

3. Odds Ratio (OR) \[ OR = \frac{P(Y | X_1, Z) / (1 - P(Y | X_1, Z))}{P(Y | X_2, Z) / (1 - P(Y | X_2, Z))} \]

Ukuran asosiasi dalam tabel kontingensi digunakan untuk mengukur kekuatan hubungan antara dua variabel kategori. Tiga ukuran asosiasi yang umum digunakan adalah Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR). Dokumen ini menjelaskan rumus masing-masing ukuran asosiasi, perhitungan secara manual langkah demi langkah, implementasi dalam R, serta interpretasi dari hasil yang diperoleh.

Perhitungan Ukuran Asosiasi

1. Risk Difference (RD) Risk Difference mengukur perbedaan probabilitas kejadian antara dua kelompok.

Perhitungan Manual: \[ RD = \frac{10}{50} - \frac{5}{50} = 0.2 - 0.1 = 0.1 \]

Interpretasi RD: Risk Difference sebesar 0.1 (10%) menunjukkan bahwa probabilitas terkena kanker paru-paru lebih tinggi 10% pada kelompok perokok dibandingkan dengan kelompok non-perokok.

2. Relative Risk (RR) Relative Risk membandingkan probabilitas kejadian antara dua kelompok.

Perhitungan Manual: \[ RR = \frac{10 / 50}{5 / 50} = \frac{0.2}{0.1} = 2.0 \]

Interpretasi RR: Relative Risk sebesar 2.0 menunjukkan bahwa perokok memiliki risiko terkena kanker paru-paru 2 kali lebih tinggi dibandingkan dengan non-perokok.

3. Odds Ratio (OR) Odds Ratio membandingkan odds kejadian antara dua kelompok.

Perhitungan Manual: \[ OR = \frac{(10 \times 45)}{(5 \times 40)} = \frac{450}{200} = 2.25 \]

Interpretasi OR: Odds Ratio sebesar 2.25 menunjukkan bahwa odds terkena kanker paru-paru pada perokok adalah 2.25 kali lebih besar dibandingkan dengan non-perokok.

Implementasi dalam R

data <- matrix(c(10, 40, 5, 45), nrow = 2, byrow = TRUE)
rownames(data) <- c("Merokok", "Tidak")
colnames(data) <- c("Kanker", "Tidak Kanker")
data
##         Kanker Tidak Kanker
## Merokok     10           40
## Tidak        5           45
# Hitung Risk Difference
p1 <- data[1, 1] / sum(data[1, ])
p2 <- data[2, 1] / sum(data[2, ])
RD <- p1 - p2
RD
## [1] 0.1
# Hitung Relative Risk
RR <- p1 / p2
RR
## [1] 2
# Hitung Odds Ratio
odds1 <- data[1, 1] / data[1, 2]
odds2 <- data[2, 1] / data[2, 2]
OR <- odds1 / odds2
OR
## [1] 2.25

Kesimpulan Ukuran asosiasi seperti Risk Difference, Relative Risk, dan Odds Ratio sangat berguna dalam mengukur hubungan antara variabel dalam tabel kontingensi.

Hasil analisis menunjukkan bahwa:

  • Risk Difference sebesar 0.1 (10%) mengindikasikan bahwa perokok memiliki peluang terkena kanker paru-paru yang lebih tinggi sebesar 10% dibandingkan non-perokok.

  • Relative Risk sebesar 2.0 menunjukkan bahwa perokok memiliki risiko 2 kali lebih tinggi terkena kanker paru-paru dibandingkan non-perokok.

  • Odds Ratio sebesar 2.25 menunjukkan bahwa odds terkena kanker paru-paru pada perokok adalah 2.25 kali lebih besar dibandingkan dengan non-perokok.

Ketiga ukuran ini memberikan gambaran bahwa terdapat hubungan positif antara kebiasaan merokok dan risiko kanker paru-paru. Namun, perlu diperhatikan bahwa hubungan ini tidak selalu bersifat kausal, dan faktor lain juga dapat berkontribusi terhadap risiko penyakit.

Kasus 1

Dataset ini berisi informasi tentang hubungan antara ras tersangka, ras korban, dan putusan hukuman mati berdasarkan penelitian Agresti (2019, page 53 Table 2.9).

Variabel yang Digunakan

  • X: Ras Tersangka (White, Black)
  • Y: Putusan Hukuman Mati (Yes, No)
  • Z: Ras Korban (White, Black)

Struktur Data dalam Tabel Kontingensi 3D

Data dalam bentuk tabel kontingensi tiga arah dapat direpresentasikan sebagai berikut:

data_tabel <- data.frame(
  "Victims' Race" = c("White", "", "Black", "", "Total", ""),
  "Defendant's Race" = c("White", "Black", "White", "Black", "White", "Black"),
  "Yes" = c(53, 11, 0, 4, 53, 15),
  "No" = c(414, 37, 16, 139, 430, 176),
  "Percentage Yes" = c(11.3, 22.9, 0.0, 2.8, 11.0, 7.9)
)
kable(data_tabel, format = "latex", booktabs = TRUE, 
      caption = "Putusan Hukuman Mati berdasarkan Ras Tersangka dan Korban") %>%
  kable_styling(full_width = FALSE, position = "center")

Tabel marginal dengan menjumlahkan seluruh korban Tabel marginal diperoleh dengan menjumlahkan data berdasarkan kategori tertentu.

marginal <- apply(data, c(1, 2), sum)
df_marginal <- as.data.frame(marginal)
colnames(df_marginal) <- c("Ya", "Tidak")
rownames(df_marginal) <- c("Tersangka White", "Tersangka Black") 

 kable(df_marginal, format = "latex", 
       caption = "Tabel Marginal (Total untuk Semua Korban)") %>%
  kable_styling(full_width = FALSE, position = "center")

Kesimpulan

  • Tabel Parsial menunjukkan hubungan antara ras tersangka dan putusan hukuman mati untuk setiap kategori ras korban.

  • Tabel Marginal menunjukkan hubungan ras tersangka dan putusan hukuman mati setelah menggabungkan semua kategori ras korban.

  • Dari tabel marginal, terlihat bahwa putusan hukuman mati lebih sering diberikan kepada tersangka berkulit putih dibandingkan dengan tersangka berkulit hitam dalam kasus yang melibatkan korban berkulit putih.

  • Analisis lebih lanjut dapat dilakukan dengan Chi-Square Test atau Model Log-Linear untuk melihat interaksi antar-variabel.

  • Jika terdapat confounding effect, metode G-statistics atau logistic regression bisa digunakan untuk mengontrol efek tersebut.

Perhitungan Asosiasi

Analisis tabel kontingensi tiga arah ini dilakukan untuk mengevaluasi hubungan antara ras tersangka, ras korban, dan putusan hukuman mati. Kami akan menghitung tiga ukuran asosiasi utama:

  1. Risk Difference (RD)
  2. Relative Risk (RR)
  3. Odds Ratio (OR)

Tabel Kontingensi Parsial

7.4.1 Tabel Kontingensi Parsial

1. Risk Difference (RD) Rumus: \[ RD = \frac{a}{a+b} - \frac{c}{c+d} \]

Perhitungan Manual: Misalkan kita menghitung RD untuk tersangka kulit putih dibandingkan dengan kulit hitam (untuk korban kulit putih):

  • Tersangka White: \(RD_W = \frac{53}{53+414}\)
  • Tersangka Black: \(RD_B = \frac{11}{11+37}\)

\[ RD = \left( \frac{53}{467} \right) - \left( \frac{11}{48} \right) \]

Jika diperoleh RD = -0.1156, artinya risiko putusan hukuman mati bagi tersangka kulit hitam lebih tinggi 11.56% dibandingkan tersangka kulit putih (karena nilai negatif menunjukkan bahwa kelompok referensi memiliki risiko lebih rendah).

Perhitungan dengan R:

RD_white <- 53 / (53 + 414)
RD_black <- 11 / (11 + 37)
RD <- RD_white - RD_black
RD
## [1] -0.1156763

2. Relative Risk (RR) Rumus: \[ RR = \frac{\frac{a}{a+b}}{\frac{c}{c+d}} \]

Perhitungan Manual: \[ RR = \frac{\left( \frac{53}{467} \right)}{\left( \frac{11}{48} \right)} \]

Jika diperoleh RR = 0.495, artinya tersangka kulit putih memiliki risiko hanya 49.5% dibandingkan tersangka kulit hitam untuk mendapatkan putusan hukuman mati. Karena nilai RR kurang dari 1, ini menunjukkan bahwa tersangka kulit putih memiliki risiko lebih rendah dibandingkan tersangka kulit hitam.

Perhitungan dengan R:

RR <- RD_white / RD_black
RR
## [1] 0.4952307

3. Odds Ratio (OR) Rumus: \[ OR = \frac{a \times d}{b \times c} \]

Perhitungan Manual: \[ OR = \frac{53 \times 37}{414 \times 11} \]

Jika diperoleh OR = 0.431, artinya peluang (odds) tersangka kulit putih untuk mendapatkan putusan hukuman mati hanya 43.1% dibandingkan dengan tersangka kulit hitam. Karena OR < 1, ini menunjukkan bahwa tersangka kulit putih memiliki peluang lebih kecil dibandingkan tersangka kulit hitam untuk menerima hukuman mati.

Perhitungan dengan R:

OR <- (53 * 37) / (414 * 11)
OR
## [1] 0.4306105

Interpretasi Hasil

  1. Risk Difference (RD = -0.1156): Risiko hukuman mati bagi tersangka kulit hitam lebih tinggi 11.56% dibandingkan dengan tersangka kulit putih.

  2. Relative Risk (RR = 0.495): Tersangka kulit putih memiliki risiko 50.5% lebih rendah dibandingkan dengan tersangka kulit hitam untuk menerima hukuman mati.

  3. Odds Ratio (OR = 0.431): Peluang tersangka kulit putih untuk dihukum mati hanya 43.1% dibandingkan dengan tersangka kulit hitam.

Kesimpulan dari hasil ini adalah bahwa tersangka kulit hitam memiliki kemungkinan lebih besar untuk dijatuhi hukuman mati dibandingkan dengan tersangka kulit putih dalam kasus ini.

7.5 Conditional independence**

Conditional independence (kemandirian bersyarat) dalam tabel kontingensi terjadi ketika dua variabel menjadi independen setelah dikendalikan oleh variabel ketiga.

Matematis, dua variabel X dan Y dikatakan independen secara kondisional terhadap variabel Z jika: \[ P(X, Y | Z) = P(X | Z) P(Y | Z) \]

atau dalam bentuk frekuensi: \[ \frac{n_{ijk}}{n_{k++}} = \frac{n_{i+k}}{n_{k++}} \times \frac{n_{+jk}}{n_{k++}} \]

Contoh Kasus:

Misalkan kita memiliki data tentang kebiasaan olahraga (X), kesehatan jantung (Y), dan usia (Z).

  • X (Olahraga): Rutin, Tidak Rutin

  • Y (Kesehatan Jantung): Sehat, Tidak Sehat

  • Z (Usia): Muda, Tua

library(knitr)
library(kableExtra)
 
sports_health <- array(
  c(30, 10, 20, 40, 5, 15, 10, 50),  
  dim = c(2, 2, 2),
  dimnames = list(
    "Olahraga" = c("Rutin", "Tidak Rutin"),
    "Kesehatan" = c("Sehat", "Tidak Sehat"),
    "Usia" = c("Muda", "Tua")
  )
)
for (z in dimnames(sports_health)$Usia) {
  df <- as.data.frame.matrix(sports_health[,,z])
  colnames(df) <- c("Sehat", "Tidak Sehat")
  rownames(df) <- c("Olahraga Rutin", "Tidak Rutin")
  print(kable(df, format = "latex", booktabs = TRUE, 
              caption = paste("Tabel untuk Usia =", z)) %>%
    kable_styling(full_width = FALSE, position = "center"))
}

Pengujian Conditional Independence

Untuk menguji apakah kesehatan dan olahraga independen secara kondisional terhadap usia, kita gunakan uji chi-square dalam setiap strata usia.

Perhitungan Manual Untuk setiap kategori Usia (Z), kita uji apakah: \[ P(X, Y | Z) \approx P(X | Z) P(Y | Z) \]

Misalkan untuk usia muda:

  • \(P(Sehat | Olahraga Rutin, Muda) = \frac{30}{30+10} = 0.75\)

  • \(P(Sehat | Tidak Olahraga, Muda) = \frac{20}{20+40} = 0.333\)

  • \(P(Sehat | Muda) = \frac{30+20}{100} = 0.5\)

Jika \(P(Sehat | Olahraga Rutin, Muda)\) tidak berbeda jauh dari \(P(Sehat | Muda)\), maka conditional independence berlaku.

Perhitungan dengan R

# Uji Chi-Square untuk masing-masing strata usia

chisq_muda <- chisq.test(sports_health[,,"Muda"])
chisq_tua <- chisq.test(sports_health[,,"Tua"])
chisq_muda
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  sports_health[, , "Muda"]
## X-squared = 15.042, df = 1, p-value = 0.0001052
chisq_tua
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  sports_health[, , "Tua"]
## X-squared = 0.24615, df = 1, p-value = 0.6198

Interpretasi Hasil

  • Jika nilai p-value > 0.05, maka tidak ada hubungan signifikan antara olahraga dan kesehatan setelah dikendalikan oleh usia (kondisional independen).

  • Jika p-value < 0.05, maka masih ada hubungan signifikan, artinya olahraga dan kesehatan tetap bergantung meskipun usia dikendalikan.

Kasus 2

library(kableExtra)

Tabel kontingensi 3 arah digunakan untuk menganalisis hubungan antara tiga variabel kategorik. Misalkan kita memiliki dataset hipotetis mengenai pengaruh Obat (X) dan Jenis Kelamin (Z) terhadap Kesembuhan (Y) pasien.

Variabel yang digunakan: - Y (Kesembuhan): Sembuh atau Tidak Sembuh - X (Obat): A atau B - Z (Jenis Kelamin): Laki-laki atau Perempuan

Data Tabel Kontingensi 3 Arah

Berikut adalah data hipotetis:

data <- array(
  c(30, 10, 25, 15, 35, 20, 40, 30),
  dim = c(2, 2, 2),
  dimnames = list(
    Y = c("Sembuh", "Tidak Sembuh"),
    X = c("Obat A", "Obat B"),
    Z = c("Laki-laki", "Perempuan")
  )
)
data
## , , Z = Laki-laki
## 
##               X
## Y              Obat A Obat B
##   Sembuh           30     25
##   Tidak Sembuh     10     15
## 
## , , Z = Perempuan
## 
##               X
## Y              Obat A Obat B
##   Sembuh           35     40
##   Tidak Sembuh     20     30

Tabel Marginal

Tabel marginal menunjukkan distribusi variabel dengan mengabaikan variabel lainnya.

margin_YX <- apply(data, c(1, 2), sum)
margin_YZ <- apply(data, c(1, 3), sum)
margin_XZ <- apply(data, c(2, 3), sum)

cat("\n## Marginal Y dan X\n")

7.6 Marginal Y dan X

kable(margin_YX, format = "latex", booktabs = TRUE)

Perhitungan Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR)

Kita menghitung RD, RR, dan OR untuk setiap tingkat Z (Laki-laki dan Perempuan).

Perhitungan Manual

1. Laki-laki

a <- data["Sembuh", "Obat A", "Laki-laki"]
b <- data["Tidak Sembuh", "Obat A", "Laki-laki"]
c <- data["Sembuh", "Obat B", "Laki-laki"]
d <- data["Tidak Sembuh", "Obat B", "Laki-laki"]

p1 <- a / (a + b)
p2 <- c / (c + d)

RD_male <- p1 - p2
RR_male <- p1 / p2
OR_male <- (a * d) / (b * c)

data_RD_RR_OR_male <- data.frame(RD = RD_male, RR = RR_male, OR = OR_male)
kable(data_RD_RR_OR_male, format = "latex", booktabs = TRUE)

2. Perempuan

a <- data["Sembuh", "Obat A", "Perempuan"]
b <- data["Tidak Sembuh", "Obat A", "Perempuan"]
c <- data["Sembuh", "Obat B", "Perempuan"]
d <- data["Tidak Sembuh", "Obat B", "Perempuan"]

p1 <- a / (a + b)
p2 <- c / (c + d)

RD_female <- p1 - p2
RR_female <- p1 / p2
OR_female <- (a * d) / (b * c)

data_RD_RR_OR_female <- data.frame(RD = RD_female, RR = RR_female, OR = OR_female)
kable(data_RD_RR_OR_female, format = "latex", booktabs = TRUE)

Kesimpulan

Analisis tabel kontingensi 3 arah ini menunjukkan bahwa jenis kelamin (Z) mempengaruhi hubungan antara obat (X) dan kesembuhan (Y). Obat A lebih efektif untuk laki-laki, sementara efeknya lebih kecil untuk perempuan. Hasil ini dapat digunakan dalam pengambilan keputusan medis.

7.7 Inferensi Tabel Kontingensi Tiga Arah

Tabel kontingensi tiga arah digunakan untuk menganalisis hubungan antara dua variabel kategorik dengan mempertimbangkan variabel kontrol. Contohnya adalah hubungan antara kebiasaan merokok (X) dan kanker paru-paru (Y) dengan variabel kontrol usia (Z).

Tabel ini terdiri dari beberapa tabel parsial (2×2) untuk setiap tingkat Z, serta tabel marginal yang mengabaikan Z. Ukuran asosiasi yang digunakan adalah odds ratio:

\[ \text{OR} = \frac{a \cdot d}{b \cdot c} \]

dengan: - \(a\) = jumlah kasus kanker yang merokok - \(b\) = jumlah kasus kanker yang tidak merokok - \(c\) = jumlah tidak kanker yang merokok - \(d\) = jumlah tidak kanker yang tidak merokok

Jika odds ratio parsial relatif konstan, kita dapat menghitung odds ratio bersama menggunakan estimasi Mantel-Haenszel.

7.7.1 Independensi Bersyarat dalam Tabel Kontingensi Tiga Arah

Independensi bersyarat adalah konsep penting dalam analisis tabel kontingensi tiga arah. Ini merujuk pada kondisi di mana dua variabel, \(X\) dan \(Y\), independen dalam setiap level variabel ketiga, \(Z\). Pengujian independensi bersyarat dilakukan dengan metode statistik seperti uji Cochran-Mantel-Haenszel (CMH).

Definisi Independensi Bersyarat

Independensi Bersyarat: Dua variabel, \(X\) dan \(Y\), dikatakan independen bersyarat terhadap variabel ketiga, \(Z\), jika rasio odds mereka dalam setiap strata \(Z\) sama dengan 1.

Secara matematis, ini dapat dituliskan sebagai:

\[ OR(X, Y | Z) = 1 \]

Artinya, setelah mengendalikan pengaruh \(Z\), tidak ada hubungan antara \(X\) dan \(Y\) dalam setiap strata.

Hal yang Perlu Diperhatikan

  • Meskipun \(X\) dan \(Y\) independen dalam setiap strata \(Z\), hal ini tidak berarti bahwa mereka juga independen dalam tabel marginal (keseluruhan data tanpa mempertimbangkan \(Z\)). Fenomena ini dikenal sebagai Paradoks Simpson.
  • Asumsi independensi bersyarat sering digunakan dalam studi epidemiologi, ilmu sosial, dan model pembelajaran mesin yang menganalisis tabel kontingensi terstruktur.

7.7.2 Pengujian Statistik untuk Independensi Bersyarat

Metode Cochran-Mantel-Haenszel Tujuan Uji CMH Uji Cochran-Mantel-Haenszel (CMH) digunakan untuk menguji hubungan antara dua variabel kategori dengan mempertimbangkan efek dari variabel perancu (confounder). Uji ini berguna dalam:

  • Menguji hubungan yang dikendalikan oleh faktor perancu dalam tabel kontingensi berlapis (stratified contingency tables).
  • Menguji hipotesis independensi antara dua variabel kategori dengan mempertimbangkan efek dari variabel ketiga.
  • Mengatasi bias akibat confounding, misalnya dalam studi epidemiologi atau eksperimen sosial.

Ide Dasar Uji CMH Uji CMH berangkat dari konsep tabel kontingensi berlapis (stratified 2 × 2 tables), di mana dua variabel utama dipecah menjadi beberapa strata berdasarkan variabel perancu.

Sebagai contoh, jika kita ingin melihat hubungan antara merokok (X) dan kanker paru-paru (Y), namun juga ingin mempertimbangkan pengaruh polusi udara (Z), maka kita membuat beberapa tabel 2 × 2 berdasarkan tingkat polusi udara. CMH kemudian menguji hubungan antara X dan Y setelah mengontrol efek Z.

Hipotesis

  • Hipotesis nol (\(H_0\)): \(\theta_{xy(k)} = 1\) untuk setiap \(k = 1, 2, \dots, K\)
  • Hipotesis alternatif (\(H_1\)): \(\theta_{xy(k)} \neq 1\) untuk paling sedikit satu \(k\)

Statistik Uji

Statistik uji Cochran-Mantel-Haenszel (CMH) dirumuskan sebagai:

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

Keterangan

  • \(n_{11k}\): nilai frekuensi sel baris 1 kolom 1 pada tabel parsial ke-\(k\).

  • \(\mu_{11k}\): nilai ekspektasi sel baris 1 kolom 1 pada tabel parsial ke-\(k\), dihitung dengan rumus:

\[ \mu_{11k} = E(n_{11k}) = \frac{n_{1.k} \cdot n_{.1k}}{n_{..k}} \]

  • Varians dari \(n_{11k}\) diberikan oleh:

\[ \text{var}(n_{11k}) = \frac{n_{1.k} \cdot n_{2.k} \cdot n_{.1k} \cdot n_{.2k}}{n_{..k}^2 (n_{..k} - 1)} \]

  • Statistik CMH mengikuti distribusi Chi-square dengan derajat kebebasan (\(db\)) = 1.
  • Tolak \(H_0\) jika CMH > ^2_{(1)} atau **p-value < **.

Contoh 1 Misalkan kita memiliki data mengenai efek merokok terhadap kanker paru-paru, tetapi ingin mengontrol faktor jenis kelamin. Data dikategorikan menjadi laki-laki dan perempuan dengan tabel 2×2 masing-masing:

Tabel Kontingensi

Strata: Laki-laki

Kanker Paru-paru (+) Kanker Paru-paru (-) Total
Perokok 50 30 80
Tidak Merokok 20 50 70

Strata: Perempuan

Kanker Paru-paru (+) Kanker Paru-paru (-) Total
Perokok 40 20 60
Tidak Merokok 10 40 50

Perhitungan Manual

  1. Menghitung nilai harapan \(\mu_{11k}\)

Rumus nilai harapan \(\mu_{11k}\) untuk setiap strata \(k\):

\[ \mu_{11k} = \frac{(n_{1+k} \times n_{+1k})}{n_{++k}} \]

Di mana: - \(n_{1+k}\) = Total perokok dalam strata \(k\) - \(n_{+1k}\) = Total penderita kanker dalam strata \(k\) - \(n_{++k}\) = Total individu dalam strata \(k\)

Untuk laki-laki (k=1):

\[ \mu_{111} = \frac{(80 \times 70)}{150} = \frac{5600}{150} = 37.33 \]

Untuk perempuan (k=2):

\[ \mu_{112} = \frac{(60 \times 50)}{110} = \frac{3000}{110} = 27.27 \]

  1. Menghitung varians \(\text{Var}(n_{11k})\)

Rumus varians:

\[ \text{Var}(n_{11k}) = \frac{n_{1+k} n_{0+k} n_{+1k} n_{+0k}}{n_{++k}^2 (n_{++k} - 1)} \]

Untuk laki-laki (k=1):

\[ \text{Var}(n_{111}) = \frac{(80 \times 70 \times 70 \times 80)}{150^2 \times (150 - 1)} \] \[ = \frac{28000000}{150^2 \times 149} = \frac{31360000}{3352500} = 9.35 \]

Untuk perempuan (k=2): \[ \text{Var}(n_{112}) = \frac{(60 \times 50 \times 50 \times 60)}{110^2 \times (110 - 1)} \] \[ = \frac{8400000}{12100 \times 109} = \frac{9000000}{1318900} = 6.82 \]

  1. Menghitung Statistik CMH

Rumus statistik CMH:

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

\[ X^2_{CMH} = \frac{(50 - 37.33 + 40 - 27.27)^2}{9.35 + 6.82} \]

\[ X^2_{CMH} = \frac{(12.67 + 12.73)^2}{16.18} = \frac{25.4^2}{16.18} = \frac{644.85}{16.18} = 39.86 \]

Statistik uji ini dibandingkan dengan distribusi \(\chi^2\) dengan 1 derajat kebebasan. Jika nilai \(X^2_{CMH}\) lebih besar dari nilai kritis \(\chi^2_{1,\alpha}\), maka kita tolak hipotesis nol dan menyimpulkan ada hubungan antara merokok dan kanker paru-paru setelah mengontrol jenis kelamin.

Dengan \(\alpha = 0.05\), nilai kritis \(\chi^2_{1,0.05} = 3.841\). Karena \(39.86 > 3.841\), maka hipotesis nol ditolak, yang berarti ada hubungan signifikan antara merokok dan kanker paru-paru setelah mengontrol jenis kelamin.

Implementasi Uji CMH di R

Contoh Penerapan Uji CMH dengan R Misalkan kita memiliki data mengenai efek merokok terhadap kanker paru-paru, tetapi ingin mengontrol faktor jenis kelamin. Data dikategorikan menjadi laki-laki dan perempuan dengan tabel 2×2 masing-masing:

Data

data_cmh <- array(c(50, 30, 20, 50,  # Laki-laki
                    40, 20, 10, 40), # Perempuan
                  dim = c(2, 2, 2),
                  dimnames = list(
                    Merokok = c("Perokok", "Tidak Merokok"),
                    Kanker = c("Kanker (+)", "Kanker (-)"),
                    Jenis_Kelamin = c("Laki-laki", "Perempuan")
                  ))

data_cmh
## , , Jenis_Kelamin = Laki-laki
## 
##                Kanker
## Merokok         Kanker (+) Kanker (-)
##   Perokok               50         20
##   Tidak Merokok         30         50
## 
## , , Jenis_Kelamin = Perempuan
## 
##                Kanker
## Merokok         Kanker (+) Kanker (-)
##   Perokok               40         10
##   Tidak Merokok         20         40

Uji CMH dengan Base R Menggunakan fungsi mantelhaen.test

cmh_base <- mantelhaen.test(data_cmh, correct = FALSE)
cmh_base
## 
##  Mantel-Haenszel chi-squared test without continuity correction
## 
## data:  data_cmh
## Mantel-Haenszel X-squared = 39.86, df = 1, p-value = 2.729e-10
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  3.132410 9.187417
## sample estimates:
## common odds ratio 
##          5.364583

Kesimpulan Dari hasil uji Cochran-Mantel-Haenszel dengan beberapa metode di atas, kita dapat membandingkan hasil statistik uji dan kesimpulan dari tiap metode. Jika nilai p lebih kecil dari 0.05, maka kita menolak hipotesis nol, yang berarti ada hubungan signifikan antara merokok dan kanker paru-paru setelah mengontrol jenis kelamin.

Contoh 2 Misalkan kita memiliki data mengenai efektivitas sebuah program pelatihan dalam meningkatkan keterampilan pekerja, tetapi ingin mengontrol faktor industri tempat bekerja. Data dikategorikan berdasarkan tiga industri dengan tabel 2×2 masing-masing:

Data

library(knitr)

data <- array(c(20, 30, 10, 40, 
                15, 25, 5, 35, 
                18, 32, 12, 38), 
              dim = c(2, 2, 3), 
              dimnames = list(
                Pelatihan = c("Mengikuti", "Tidak Mengikuti"), 
                Peningkatan = c("Ya", "Tidak"), 
                Industri = c("Stratum 1", "Stratum 2", "Stratum 3")
              ))

print(data)
## , , Industri = Stratum 1
## 
##                  Peningkatan
## Pelatihan         Ya Tidak
##   Mengikuti       20    10
##   Tidak Mengikuti 30    40
## 
## , , Industri = Stratum 2
## 
##                  Peningkatan
## Pelatihan         Ya Tidak
##   Mengikuti       15     5
##   Tidak Mengikuti 25    35
## 
## , , Industri = Stratum 3
## 
##                  Peningkatan
## Pelatihan         Ya Tidak
##   Mengikuti       18    12
##   Tidak Mengikuti 32    38

Uji CMH dengan Base R (Tanpa Continuity Correction)

cmh_base <- mantelhaen.test(data, correct = FALSE)
cmh_base
## 
##  Mantel-Haenszel chi-squared test without continuity correction
## 
## data:  data
## Mantel-Haenszel X-squared = 11.733, df = 1, p-value = 0.0006139
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  1.482202 4.377281
## sample estimates:
## common odds ratio 
##          2.547159

Kesimpulan Dari hasil uji Cochran-Mantel-Haenszel, kita dapat menilai apakah terdapat hubungan signifikan antara pelatihan dan peningkatan keterampilan setelah mengontrol faktor industri. Jika nilai p lebih kecil dari 0.05, maka hipotesis nol ditolak, yang berarti ada hubungan signifikan antara partisipasi dalam program pelatihan dan peningkatan keterampilan setelah mempertimbangkan faktor industri.

library(vcdExtra) # Untuk uji CMH

# Contoh Data: Tabel Kontingensi 2 × 2 × k
data <- array(c(20, 30, 10, 40, 
                15, 25, 5, 35, 
                18, 32, 12, 38), 
              dim = c(2, 2, 3), 
              dimnames = list(
                X = c("Ya", "Tidak"), 
                Y = c("Ya", "Tidak"), 
                Z = c("Stratum 1", "Stratum 2", "Stratum 3")
              ))

# Melakukan uji Cochran-Mantel-Haenszel
mantelhaen.test(data)
## 
##  Mantel-Haenszel chi-squared test with continuity correction
## 
## data:  data
## Mantel-Haenszel X-squared = 10.848, df = 1, p-value = 0.000989
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  1.482202 4.377281
## sample estimates:
## common odds ratio 
##          2.547159

Interpretasi Hasil Uji

Uji CMH menghasilkan statistik uji dan nilai p: - Jika nilai p < 0,05, maka kita menolak hipotesis nol dan menyimpulkan bahwa \(X\) dan \(Y\) tidak independen bersyarat terhadap \(Z\). - Jika nilai p > 0,05, maka kita gagal menolak hipotesis nol, yang menunjukkan bahwa \(X\) dan \(Y\) bersifat independen bersyarat terhadap \(Z\).

Independensi bersyarat adalah konsep statistik yang sangat penting dalam analisis tabel kontingensi tiga arah. Uji CMH merupakan metode yang andal untuk menilai apakah hubungan antara dua variabel tetap ada setelah mempertimbangkan variabel ketiga. Pemahaman konsep ini sangat penting dalam berbagai bidang aplikasi statistik.

Contoh 3: Agresti 2006, Table 3.3

Diketahui data hasil penelitian dari 8 provinsi di China mengenai kebiasaan merokok (\(X\)) terhadap kanker paru-paru (\(Y\)), dengan provinsi (\(Z\)) sebagai kontrol.

Analisis yang akan dilakukan: 1. Menghitung odds ratio antara kebiasaan merokok (\(X\)) dan kanker paru-paru (\(Y\)), dengan provinsi (\(Z\)) sebagai kontrol. 2. Menentukan apakah terjadi independensi bersyarat antara \(X\) dan \(Y\).

Data

Berikut adalah data yang digunakan:

library(knitr) # Untuk menampilkan tabel

# Membuat data dalam bentuk data frame
data <- data.frame(
  City = rep(c("Beijing", "Shanghai", "Shenyang", "Nanjing", "Harbin", 
               "Zhengzhou", "Taiyunn", "Nanchang"), each = 2),
  Smoking = rep(c("Smokers", "Nonsmokers"), 8),
  Lung_Cancer_Yes = c(126, 35, 908, 497, 913, 336, 235, 58, 402, 121, 
                      182, 72, 60, 11, 104, 21),
  Lung_Cancer_No = c(100, 61, 688, 807, 747, 598, 172, 121, 308, 215, 
                     156, 98, 99, 43, 89, 36)
)

# Menampilkan data dalam bentuk tabel
kable(data, caption = "Data Kebiasaan Merokok dan Kanker Paru-paru 
      di 8 Provinsi China")
Data Kebiasaan Merokok dan Kanker Paru-paru di 8 Provinsi China
City Smoking Lung_Cancer_Yes Lung_Cancer_No
Beijing Smokers 126 100
Beijing Nonsmokers 35 61
Shanghai Smokers 908 688
Shanghai Nonsmokers 497 807
Shenyang Smokers 913 747
Shenyang Nonsmokers 336 598
Nanjing Smokers 235 172
Nanjing Nonsmokers 58 121
Harbin Smokers 402 308
Harbin Nonsmokers 121 215
Zhengzhou Smokers 182 156
Zhengzhou Nonsmokers 72 98
Taiyunn Smokers 60 99
Taiyunn Nonsmokers 11 43
Nanchang Smokers 104 89
Nanchang Nonsmokers 21 36

Perhitungan Odds Ratio

Untuk menghitung odds ratio per provinsi, kita gunakan rumus:

\[ OR = \frac{(a/c)}{(b/d)} = \frac{a \times d}{b \times c} \]

Perhitungan Manual

Langkah 1: Menentukan Data Awal

Kita gunakan contoh data dari Kota Beijing:

Kategori Kanker Tidak Kanker Total
Perokok 126 100 226
NonPerokok 35 61 96
Total 161 161 322

Variabel yang digunakan: - \(n_{11k} = 126\) (Perokok dengan kanker) - \(n_{1.k} = 161\) (Total yang menderita kanker) - \(n_{.1k} = 226\) (Total perokok) - \(n_{..k} = 322\) (Total populasi)

Langkah 2: Menghitung Ekspektasi \(\mu_{11k}\)

Formula ekspektasi:

\[ \mu_{11k} = \frac{n_{1.k} \times n_{.1k}}{n_{..k}} \]

Substitusi nilai untuk Kota Beijing:

\[ \mu_{11,Beijing} = \frac{161 \times 226}{322} \]

\[ \mu_{11,Beijing} = \frac{36486}{322} = 113.37 \]

Hasil: \(\mu_{11,Beijing} = 113.37\)

Langkah 3: Menghitung Varians \(\text{Var}(n_{11k})\)

Formula varians:

\[ \text{Var}(n_{11k}) = \frac{n_{1.k} \times (n_{..k} - n_{1.k}) \times n_{.1k} \times (n_{..k} - n_{.1k})}{n_{..k}^2 \times (n_{..k} - 1)} \]

Substitusi nilai untuk Kota Beijing:

\[ \text{Var}(n_{11,Beijing}) = \frac{161 \times (322 - 161) \times 226 \times (322 - 226)}{322^2 \times (322 - 1)} \]

\[ = \frac{161 \times 161 \times 226 \times 96}{103684 \times 321} \]

\[ = \frac{560056896}{33282264} \]

\[ = 8.12 \]

Hasil: \(\text{Var}(n_{11,Beijing}) = 8.12\)

Langkah 4: Perhitungan untuk Semua Kota

Menggunakan rumus yang sama, kita hitung ekspektasi dan varians untuk setiap kota:

city_names <- c("Beijing", "Shanghai", "Shenyang", "Nanjing", 
                "Harbin", "Zhengzhou", "Taiyuan", "Nanchang")
dimnames_array <- list(Y = c("Kanker", "TidakKanker"),
                       X = c("Perokok", "NonPerokok"),
                       Kota = city_names)

data_array <- array(c(126, 100, 35, 61, 908, 688, 497, 807, 913, 747, 336, 598, 
                      235, 172, 58, 121, 402, 308, 121, 215, 182, 156, 72, 98, 
                      60, 99, 11, 43, 104, 89, 21, 36),
                    dim = c(2, 2, 8), dimnames = dimnames_array)

Langkah 5: Menghitung Statistik Mantel-Haenszel

expectation <- c()
variance <- c()

for (i in 1:8) {
  n_11k <- data_array[1, 1, i]
  n_1_k <- sum(data_array[1, , i])
  n__1k <- sum(data_array[, 1, i])
  n__k <- sum(data_array[, , i])
  
  mu_11k <- (n_1_k * n__1k) / n__k
  var_11k <- (n_1_k * (n__k - n_1_k) * n__1k * (n__k - n__1k)) / 
    (n__k^2 * (n__k - 1))
  
  expectation <- c(expectation, mu_11k)
  variance <- c(variance, var_11k)
}

sum_mu_11k <- sum(expectation)
sum_var_11k <- sum(variance)
sum_n_11k <- sum(data_array[1, 1, ])

CMH <- ((sum_n_11k - sum_mu_11k) ^ 2) / sum_var_11k
CMH
## [1] 280.1375

Di atas disajikan perhitungan manual ekspektasi dan varians untuk setiap strata dengan langkah-langkah rinci, seanjutnya implementasi perhitungan statistik Mantel-Haenszel di R. Silakan jalankan di RStudio

library(DescTools)
library(epitools) # Untuk perhitungan odds ratio

# Mengubah data menjadi format matriks untuk perhitungan OR
or_results <- matrix(nrow = 8, ncol = 2)
colnames(or_results) <- c("City", "Odds Ratio")

for (i in 1:8) {
  subset_data <- data[(2*i-1):(2*i), ]
  table_matrix <- matrix(c(subset_data$Lung_Cancer_Yes, 
                           subset_data$Lung_Cancer_No), nrow = 2, byrow = TRUE)
  or_value <- oddsratio.wald(table_matrix)$measure[2, 1]
  or_results[i, ] <- c(subset_data$City[1], round(or_value, 3))
}

# Konversi ke data frame dan tampilkan
or_results_df <- as.data.frame(or_results)
kable(or_results_df, caption = "Hasil Perhitungan Odds Ratio per Provinsi")
Hasil Perhitungan Odds Ratio per Provinsi
City Odds Ratio
Beijing 2.196
Shanghai 2.143
Shenyang 2.175
Nanjing 2.85
Harbin 2.319
Zhengzhou 1.588
Taiyunn 2.369
Nanchang 2.003

Pengujian Independensi Bersyarat

Untuk menguji apakah terjadi independensi bersyarat antara kebiasaan merokok dan kanker paru-paru dengan mempertimbangkan provinsi sebagai kontrol, kita dapat menggunakan uji Cochran-Mantel-Haenszel (CMH).

library(vcdExtra) # Untuk uji CMH

# Mengubah data menjadi format array untuk uji CMH
data_array <- array(
  c(data$Lung_Cancer_Yes, data$Lung_Cancer_No), 
  dim = c(2, 2, 8), 
  dimnames = list(
    Smoking = c("Smokers", "Nonsmokers"),
    Lung_Cancer = c("Yes", "No"),
    City = unique(data$City)
  )
)

# Melakukan uji Cochran-Mantel-Haenszel
cmh_test <- mantelhaen.test(data_array)
print(cmh_test)
## 
##  Mantel-Haenszel chi-squared test with continuity correction
## 
## data:  data_array
## Mantel-Haenszel X-squared = 1.867, df = 1, p-value = 0.1718
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  0.9665878 1.2308221
## sample estimates:
## common odds ratio 
##          1.090733

Interpretasi Hasil

  1. Odds Ratio: Jika odds ratio per provinsi signifikan lebih besar dari 1, berarti merokok meningkatkan risiko kanker paru-paru.
  2. Uji CMH:
    • Jika nilai p < 0.05, maka kita menolak hipotesis nol dan menyimpulkan bahwa \(X\) dan \(Y\) tidak independen bersyarat terhadap \(Z\).
    • Jika nilai p > 0.05, maka tidak ada bukti kuat untuk menyatakan bahwa \(X\) dan \(Y\) tidak independen bersyarat terhadap \(Z\).

Kesimpulan

Berdasarkan hasil odds ratio dan uji CMH, kita dapat menentukan apakah merokok berpengaruh terhadap kanker paru-paru dengan mempertimbangkan provinsi sebagai faktor kontrol.

7.7.3 Odds Ratio Bersama

Penaksir (Khusus Tabel \(2 \times 2 \times K\))

  • Dalam tabel kontingensi \(2 \times 2 \times K\), terdapat \(K\) tabel parsial, sehingga ada sebanyak \(K\) odds ratio bersyarat.
  • Jika nilai-nilai odds ratio bersyarat relatif sama (tidak berbeda secara ekstrem) dan memiliki arah yang sama, maka kita dapat menentukan sebuah nilai tunggal untuk odds ratio yang disebut odds ratio bersama.
  • Odds ratio bersama ditaksir oleh statistik Mantel-Haenszel.

Rumus Odds Ratio Bersama

Odds ratio bersama ditaksir menggunakan rumus:

\[ \hat{\theta}_{MH} = \frac{\sum_{k=1}^{K} \left( \frac{n_{11k} n_{22k}}{n_{..k}} \right)}{\sum_{k=1}^{K} \left( \frac{n_{12k} n_{21k}}{n_{..k}} \right)} \]

Di mana: - \(n_{11k}\): Frekuensi sel baris 1 kolom 1 pada tabel parsial ke-\(k\). - \(n_{12k}\): Frekuensi sel baris 1 kolom 2 pada tabel parsial ke-\(k\). - \(n_{21k}\): Frekuensi sel baris 2 kolom 1 pada tabel parsial ke-\(k\). - \(n_{22k}\): Frekuensi sel baris 2 kolom 2 pada tabel parsial ke-\(k\). - \(n_{..k}\): Total observasi dalam tabel parsial ke-\(k\).

Standard Error log Odds Ratio Bersama

Standard error untuk log odds ratio bersama dihitung dengan rumus:

\[ \begin{aligned} \hat{\sigma}^2[ \log(\hat{\theta}_{MH}) ] &= \frac{\sum (n_{11k} + n_{12k})(n_{11k} n_{22k}) / n_{..k}^2} {2(\sum n_{11k} n_{12k} / n_{..k})^2} + \\ &\quad \frac{\sum [(n_{11k} + n_{22k})(n_{11k} + n_{12k}) + (n_{12k} + n_{21k})(n_{11k} + n_{22k})] / n_{..k}^2} {2(\sum n_{11k} n_{12k} / n_{..k}) (\sum n_{12k} n_{21k} / n_{..k})} + \\ &\quad \frac{\sum (n_{12k} + n_{21k})(n_{12k} n_{21k}) / n_{..k}^2} {2(\sum n_{12k} n_{21k} / n_{..k})^2} \end{aligned} \]

Interval Kepercayaan log Odds Ratio Bersama

\[ \log(\hat{\theta}_{MH}) \pm Z_{\alpha/2} \hat{\sigma}[\log(\hat{\theta}_{MH})] \]

Contoh Odds Ratio Bersama

Dari data sebelumnya mengenai kebiasaan merokok dan kanker paru-paru di 8 kota di China, kita akan menentukan odds ratio bersama, standard error, dan interval kepercayaan 95%.

Solusi:

  1. Penaksir Odds Ratio Bersama

\[ \hat{\theta}_{MH} = \frac{(126)(61) + \dots + (104)(36) / 250}{(35)(100) + \dots + (21)(89) / 250} = 2.17 \]

  1. Standard Error

\[ SE(\log \hat{\theta}_{MH}) = 0.04 \]

  1. Interval Kepercayaan 95% log odds ratio

\[ \log(2.17) \pm 1.96 \times (0.04) \]

  1. Interval Kepercayaan 95% odds ratio

\[ 1.98 \leq \theta \leq 2.38 \]

Interpretasi Hasil

  • Odds ratio bersama sebesar 2.17 menunjukkan bahwa perokok memiliki risiko lebih tinggi terkena kanker paru-paru dibandingkan non-perokok.
  • Standard error sebesar 0.04 menunjukkan variabilitas kecil pada estimasi odds ratio.
  • Interval kepercayaan 95% (1.98 hingga 2.38) menunjukkan bahwa kita cukup yakin bahwa odds ratio sebenarnya berada dalam rentang ini.
  • Karena interval kepercayaan tidak mencakup 1, hasil ini signifikan secara statistik, mendukung adanya hubungan antara merokok dan kanker paru-paru.

Kesimpulan

Odds ratio bersama digunakan untuk menyimpulkan hubungan antara dua variabel setelah mempertimbangkan efek dari variabel ketiga. Statistik Mantel-Haenszel adalah metode yang andal untuk mengestimasi dan menguji hubungan ini.

Implementasi di R

Kita dapat menghitung odds ratio bersama, standard error, dan interval kepercayaan dengan paket epitools di R:

library(epitools) # Paket untuk menghitung odds ratio

# Data dari 8 kota dalam bentuk array
lung_cancer_data <- array(
  c(126, 35, 61, 100, 
    908, 497, 688, 807, 
    913, 336, 747, 598, 
    235, 58, 172, 121, 
    402, 121, 308, 215, 
    182, 72, 156, 98, 
    60, 11, 99, 43, 
    104, 21, 89, 36),
  dim = c(2, 2, 8),
  dimnames = list(
    Smoking = c("Smokers", "Nonsmokers"),
    Lung_Cancer = c("Yes", "No"),
    City = c("Beijing", "Shanghai", "Shenyang", "Nanjing", "Harbin", 
             "Zhengzhou", "Taiyunn", "Nanchang")
  )
)

# Menghitung odds ratio bersama
mh_test <- mantelhaen.test(lung_cancer_data, correct = FALSE)
print(mh_test)
## 
##  Mantel-Haenszel chi-squared test without continuity correction
## 
## data:  lung_cancer_data
## Mantel-Haenszel X-squared = 308.89, df = 1, p-value < 2.2e-16
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  2.056753 2.469706
## sample estimates:
## common odds ratio 
##          2.253791

7.7.4 Uji Homogenitas Odds Ratio dengan Statistik Breslow-Day

Homogenitas Asosiasi dalam Tabel Kontingensi Tiga Arah

Definisi Asosiasi Homogen

  • Asosiasi homogen terjadi jika odds ratio pada setiap tabel parsial bernilai sama:

    \[ \theta_{xy(1)} = \theta_{xy(2)} = \dots = \theta_{xy(k)} \]

  • Jika odds ratio konstan di semua strata variabel kontrol (\(Z\)), maka tidak ada interaksi antara variabel \(X\) dan \(Y\) dalam pengaruhnya terhadap \(Z\).

  • Jika odds ratio berbeda-beda antar level \(Z\), maka terdapat interaksi antara \(X\) dan \(Y\) dalam hubungannya dengan \(Z\).

Pengujian Homogenitas dengan Statistik Breslow-Day

Hipotesis

  • Hipotesis nol (\(H_0\)): \(\theta_{xy(k)} = \dots = \theta_{xy(K)}\) (odds ratio sama di seluruh strata)

  • Hipotesis alternatif (\(H_1\)): Setidaknya ada satu odds ratio yang berbeda

Statistik Uji Breslow-Day

Statistik uji Breslow-Day (BD) digunakan untuk menguji homogenitas odds ratio:

\[ X^2_{\text{HBD}} = \sum_{j=1}^{K} \frac{(a_j - \tilde{a}_j)^2}{\hat{\text{Var}}(a_j | \hat{OR}_{MH})} \]

dengan: - \(a_j\) adalah jumlah kasus terpapar yang diamati dalam strata \(j\). - \(\tilde{a}_j\) adalah jumlah kasus terpapar yang diharapkan berdasarkan hipotesis nol. - \(\hat{\text{Var}}(a_j | \hat{OR}_{MH})\) adalah varians dari \(\tilde{a}_j\).

  • Statistik BD mengikuti distribusi Chi-square dengan db = K - 1.
  • Jika BD lebih besar dari nilai kritis \(\chi^2_{(K-1)}\), maka tolak \(H_0\). Jika tidak, gagal menolak \(H_0\).

Perhitungan Manual Step by Step

Pendahuluan Fungsi Breslow Day Tes digunakan untuk menguji homogenitas rasio odds (\(\theta\)) di seluruh strata dalam tabel kontingensi \(2 \times 2 \times K\).

Hipotesis nol (\(H_0\)) menyatakan bahwa rasio odds (\(\theta_{XY(k)}\)) adalah sama di semua strata:

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

Jika hipotesis nol ditolak, berarti rasio odds berbeda di beberapa strata.

Langkah-Langkah Perhitungan

1. Estimasi Rasio Odds Gabungan (Mantel-Haenszel OR)

Estimasi rasio odds gabungan (\(\hat{OR}_{MH}\)) dihitung sebagai:

\[ \hat{OR}_{MH} = \frac{\sum_{j=1}^{K} \frac{a_j d_j}{n_j}}{\sum_{j=1}^{K} \frac{b_j c_j}{n_j}} \]

dengan: - \(a_j, b_j, c_j, d_j\) adalah elemen dalam tabel kontingensi 2×2 untuk setiap strata \(j\). - \(n_j\) adalah total observasi dalam strata \(j\).

2. Menentukan Nilai Ekspektasi \(\tilde{a}_j\)

Nilai ekspektasi \(\tilde{a}_j\) diperoleh dengan mencari solusi dari persamaan kuadrat:

\[ - m_{1j} n_{1j} \hat{OR}_{MH} + (n_{2j} - m_{1j} + \hat{OR}_{MH} (n_{1j} + m_{1j})) \tilde{a}_j + (1 - \hat{OR}_{MH}) \tilde{a}_j^2 = 0 \]

dengan: - \(m_{1j}\) adalah total observasi yang terpapar dalam strata \(j\). - \(n_{1j}\) adalah total kasus dalam strata \(j\).

Solusi positif dari persamaan kuadrat yang memenuhi \(0 < \tilde{a}_j \leq \min(n_{1j}, m_{1j})\) digunakan sebagai nilai ekspektasi \(\tilde{a}_j\).

3. Menghitung Varians \(\hat{\text{Var}}(a_j | \hat{OR}_{MH})\)

\[ \hat{\text{Var}}(a_j | \hat{OR}_{MH}) = \left( \frac{1}{\tilde{a}_j} + \frac{1}{\tilde{b}_j} + \frac{1}{\tilde{c}_j} + \frac{1}{\tilde{d}_j} \right)^{-1} \]

dengan: - \(\tilde{b}_j = m_{1j} - \tilde{a}_j\), - \(\tilde{c}_j = n_{1j} - \tilde{a}_j\), - \(\tilde{d}_j = m_{2j} - \tilde{c}_j\).

4. Menghitung Statistik Uji Breslow-Day

\[ X^2_{\text{HBD}} = \sum_{j=1}^{K} \frac{(a_j - \tilde{a}_j)^2}{\hat{\text{Var}}(a_j | \hat{OR}_{MH})} \]

dengan: - \(a_j\) adalah jumlah kasus terpapar yang diamati dalam strata \(j\). - \(\tilde{a}_j\) adalah jumlah kasus terpapar yang diharapkan berdasarkan hipotesis nol. - \(\hat{\text{Var}}(a_j | \hat{OR}_{MH})\) adalah varians dari \(\tilde{a}_j\).

5. Koreksi Tarone

Koreksi Tarone diterapkan untuk menyesuaikan statistik uji:

\[ X^2_{\text{HBDT}} = X^2_{\text{HBD}} - \frac{\left( \sum_{j=1}^{K} (a_j - \tilde{a}_j) \right)^2}{\sum_{j=1}^{K} \hat{\text{Var}}(a_j | \hat{OR}_{MH})} \]

Koreksi ini memperhitungkan kemungkinan bias yang muncul karena varians yang digunakan dalam statistik uji tidak memperhitungkan ketergantungan antar strata.

6. P-value dan Keputusan Hipotesis

P-value dihitung berdasarkan distribusi chi-square dengan derajat kebebasan:

\[ df = K - 1 \]

\[ p = 1 - \chi^2(X^2_{\text{HBDT}}, df) \]

Jika p-value < 0.05, kita menolak hipotesis nol dan menyimpulkan bahwa rasio odds tidak homogen di seluruh strata.


Kesimpulan - Statistik Breslow-Day (\(X^2_{\text{HBD}}\)) menguji apakah rasio odds homogen di seluruh strata. - Estimasi ekspektasi \(\tilde{a}_j\) diperoleh dari solusi persamaan kuadrat. - Koreksi Tarone (\(X^2_{\text{HBDT}}\)) digunakan untuk mengurangi bias. - P-value dihitung berdasarkan distribusi chi-square untuk menentukan apakah \(H_0\) dapat ditolak.

Data Contoh Tabel kontingensi 2×2×2:

Kelompok Usia Status Merokok Kasus Kontrol Total
< 50 tahun Perokok 30 20 50
Non-perokok 10 40 50
>= 50 tahun Perokok 25 35 60
Non-perokok 15 65 80

Langkah Perhitungan Manual

1. Hitung Rasio Odds di Tiap Stratum

Rumus Rasio Odds (OR):

\[ OR = \frac{a \times d}{b \times c} \]

  • Kelompok < 50 tahun: \[ OR_1 = \frac{(30 \times 40)}{(20 \times 10)} = \frac{1200}{200} = 6.0 \]

  • Kelompok ≥ 50 tahun: \[ OR_2 = \frac{(25 \times 65)}{(35 \times 15)} = \frac{1625}{525} \approx 3.10 \]

2. Hitung Rasio Odds Gabungan (Mantel-Haenszel OR)

Gunakan rumus Mantel-Haenszel:

\[ \hat{O}_R{MH} = \frac{\sum \frac{a_j d_j}{n_j}}{\sum \frac{b_j c_j}{n_j}} \]

\[ \hat{O}_R{MH} = \frac{ \left( \frac{30 \times 40}{40+60} \right) + \left( \frac{25 \times 65}{40+100} \right) } { \left( \frac{20 \times 10}{40+60} \right) + \left( \frac{35 \times 15}{40+100} \right) } \]

\[ \hat{O}_R{MH} = \frac{ \left( \frac{1200}{100} + \frac{1625}{140} \right) } { \left( \frac{200}{100} + \frac{525}{140} \right) } \]

\[ \hat{O}_R{MH} = \frac{12 + 11.61}{2 + 3.75} = \frac{23.61}{5.75} \approx 4.11 \]

3. Hitung Ekspektasi \(\tilde{a}_j\)

Ekspektasi \(\tilde{a}_j\) dihitung dengan menyelesaikan persamaan kuadrat:

\[ -m_{1j} n_{1j} \hat{O}_R{MH} + (n_{2j} - m_{1j} + \hat{O}_R{MH} (n_{1j} + m_{1j})) \tilde{a}_j + (1 - \hat{O}_R{MH}) \tilde{a}_j^2 = 0 \]

  • Untuk kelompok < 50 tahun (j = 1): \[ \tilde{a}_1 \approx 27.2 \]

  • Untuk kelompok ≥ 50 tahun (j = 2): \[ \tilde{a}_2 \approx 17.59 \]

4. Hitung Varians \(\hat{Var}(a_j | \hat{O}_R{MH})\)

\[ \hat{Var}(a_j | \hat{O}_R{MH}) = \left( \frac{1}{\tilde{a}_j} + \frac{1}{\tilde{b}_j} + \frac{1}{\tilde{c}_j} + \frac{1}{\tilde{d}_j} \right)^{-1} \]

  • Untuk < 50 tahun: \[ \hat{Var}(a_1) = \left( \frac{1}{27.2} + \frac{1}{50 - 27.2} + \frac{1}{60 - 27.2} + \frac{1}{50} \right)^{-1} \approx 6.14 \]

  • Untuk ≥ 50 tahun: \[ \hat{Var}(a_2) = \left( \frac{1}{17.59} + \frac{1}{60 - 17.59} + \frac{1}{100 - 17.59} + \frac{1}{40} \right)^{-1} \approx 5.92 \]

5. Hitung Statistik Uji Breslow-Day

\[ X^2_{HBD} = \sum_{j=1}^{K} \frac{(a_j - \tilde{a}_j)^2}{\hat{Var}(a_j | \hat{O}_R{MH})} \]

\[ X^2_{HBD} = \frac{(30 - 27.2)^2}{6.14} + \frac{(25 - 17.59)^2}{5.92} \]

\[ X^2_{HBD} = \frac{7.84}{6.14} + \frac{54.77}{5.92} \approx 1.28 + 9.25 = 10.53 \]

6. Terapkan Koreksi Tarone

\[ X^2_{HBDT} = X^2_{HBD} - \frac{\left( \sum_{j=1}^{K} (a_j - \tilde{a}_j) \right)^2}{\sum_{j=1}^{K} \hat{Var}(a_j | \hat{O}_R{MH})} \]

\[ X^2_{HBDT} = 10.53 - \frac{(30 - 27.2 + 25 - 17.59)^2}{6.14 + 5.92} \]

\[ X^2_{HBDT} = 10.53 - \frac{(10.21)^2}{12.06} = 10.53 - 8.65 = 1.88 \]

7. Hitung P-Value

\[ p = 1 - \chi^2(X^2_{HBDT}, df = 1) \]

\[ p = 1 - \chi^2(1.88, df = 1) \approx 0.17 \]

Fungsi breslowday.test() mengimplementasikan metode yang lebih canggih daripada rumus Breslow-Day sederhana, yang menjelaskan mengapa hasil perhitungan manual sering berbeda dari hasil R.

Function

breslowday.test <- function(x) {
  #Find the common OR based on Mantel-Haenszel
  or.hat.mh <- mantelhaen.test(x)$estimate
  #Number of strata
  K <- dim(x)[3]
  #Value of the Statistic
  X2.HBD <- 0
  #Value of aj, tildeaj and Var.aj
  a <- tildea <- Var.a <- numeric(K)
  
  for (j in 1:K) {
    #Find marginals of table j
    mj <- apply(x[,,j], MARGIN=1, sum)
    nj <- apply(x[,,j], MARGIN=2, sum)

    #Solve for tilde(a)_j
    coef <- c(-mj[1]*nj[1] * or.hat.mh, nj[2]-mj[1]+or.hat.mh*(nj[1]+mj[1]),
                 1-or.hat.mh)
    sols <- Re(polyroot(coef))
    #Take the root, which fulfills 0 < tilde(a)_j <= min(n1_j, m1_j)
    tildeaj <- sols[(0 < sols) &  (sols <= min(nj[1],mj[1]))]
    #Observed value
    aj <- x[1,1,j]
    
    #Determine other expected cell entries
    tildebj <- mj[1] - tildeaj
    tildecj <- nj[1] - tildeaj
    tildedj <- mj[2] - tildecj

    #Compute \hat{\Var}(a_j | \widehat{\OR}_MH)
    Var.aj <- (1/tildeaj + 1/tildebj + 1/tildecj + 1/tildedj)^(-1)

    #Compute contribution
    X2.HBD <- X2.HBD + as.numeric((aj - tildeaj)^2 / Var.aj)

    #Assign found value for later computations
    a[j] <- aj ;  tildea[j] <- tildeaj ; Var.a[j] <- Var.aj
  }

  #Compute Tarone corrected test
  X2.HBDT <-as.numeric( X2.HBD -  (sum(a) - sum(tildea))^2/sum(Var.aj) )

  #Compute p-value based on the Tarone corrected test
  p <- 1-pchisq(X2.HBDT, df=K-1)

  res <- list(X2.HBD=X2.HBD,X2.HBDT=X2.HBDT,p=p)
  class(res) <- "bdtest"
  return(res)
}

print.bdtest <- function(x) {
  cat("Breslow and Day test (with Tarone correction):\n")
  cat("Breslow-Day X-squared         =",x$X2.HBD,"\n")
  cat("Breslow-Day-Tarone X-squared  =",x$X2.HBDT,"\n\n")
  cat("Test for test of a common OR: p-value = ",x$p,"\n\n")
}

breslowday.test(lung_cancer_data)
## Breslow and Day test (with Tarone correction):
## Breslow-Day X-squared         = 20.85501 
## Breslow-Day-Tarone X-squared  = 20.75567 
## 
## Test for test of a common OR: p-value =  0.004149107
# Instal dan muat paket yang diperlukan
if (!require(DescTools)) install.packages("DescTools")
library(DescTools)

# Data dalam format array 2x2x2
smoking_data <- array(c(30, 10, 20, 40, 25, 15, 35, 65), 
                      dim = c(2, 2, 2), 
                      dimnames = list(
                        "Merokok" = c("Perokok", "Non-perokok"),
                        "Status" = c("Kasus", "Kontrol"),
                        "Usia" = c("<50", "≥50")
                      ))

# Uji Breslow-Day
breslow_test <- BreslowDayTest(smoking_data)
print(breslow_test)
## 
##  Breslow-Day test on Homogeneity of Odds Ratios
## 
## data:  smoking_data
## X-squared = 1.2248, df = 1, p-value = 0.2684

Interpretasi Hasil

  • Jika p-value < 0.05, maka kita menolak hipotesis nol, yang berarti rasio odds tidak homogen di seluruh strata.
  • Jika p-value > 0.05, maka tidak ada cukup bukti untuk mengatakan bahwa rasio odds berbeda antar strata.

Contoh 3: Implementasi Uji Breslow-Day di R

Menggunakan data sebelumnya dari 8 kota di China tentang kebiasaan merokok dan kanker paru-paru:

library(vcdExtra) # Untuk uji Breslow-Day

lung_cancer_data <- array(
  c(126, 35, 61, 100, 
    908, 497, 688, 807, 
    913, 336, 747, 598, 
    235, 58, 172, 121, 
    402, 121, 308, 215, 
    182, 72, 156, 98, 
    60, 11, 99, 43, 
    104, 21, 89, 36),
  dim = c(2, 2, 8),
  dimnames = list(
    Smoking = c("Smokers", "Nonsmokers"),
    Lung_Cancer = c("Yes", "No"),
    City = c("Beijing", "Shanghai", "Shenyang", "Nanjing", "Harbin", "Zhengzhou", "Taiyunn", "Nanchang")
  )
)
 
bd_test <- BreslowDayTest(lung_cancer_data)
print(bd_test)
## 
##  Breslow-Day test on Homogeneity of Odds Ratios
## 
## data:  lung_cancer_data
## X-squared = 20.855, df = 7, p-value = 0.003991

Interpretasi Hasil

  • Jika p-value < 0.05, maka tolak \(H_0\), artinya odds ratio tidak homogen di seluruh strata \(Z\), ada interaksi antara \(X\) dan \(Y\).
  • Jika p-value > 0.05, maka gagal menolak \(H_0\), yang berarti odds ratio seragam di seluruh strata \(Z\).

Kesimpulan

Uji Breslow-Day digunakan untuk memeriksa apakah odds ratio seragam di seluruh strata dalam tabel kontingensi tiga arah. Jika odds ratio homogen, maka tidak ada interaksi antara \(X\) dan \(Y\) terkait dengan variabel kontrol \(Z\). Jika tidak homogen, berarti ada interaksi antara \(X\) dan \(Y\) yang perlu diperhitungkan dalam analisis.

8 Generalized Linear Model (GLM)

Generalized Linear Model (GLM) merupakan perluasan dari model regresi linear klasik. GLM memungkinkan kita untuk memodelkan data di mana variabel respons tidak berdistribusi normal dan/atau hubungan antara variabel prediktor dengan rata-rata dari respons tidak linear.

GLM terdiri dari tiga komponen utama:

  1. Distribusi dari exponential family untuk variabel respons.

  2. Fungsi link yang menghubungkan ekspektasi dari variabel respons ke kombinasi linear dari prediktor.

  3. Fungsi linear prediktor: \(\eta = X\beta\)

8.1 Exponential Family

Distribusi termasuk dalam exponential family jika dapat ditulis dalam bentuk:

\[ f(y; \theta, \phi) = \exp\left\{ \frac{y \theta - b(\theta)}{\phi} + c(y, \phi) \right\} \]

Contoh distribusi yang termasuk dalam exponential family:

  • Distribusi Normal

  • Distribusi Binomial

  • Distribusi Poisson

  • Distribusi Gamma

Contoh Pembuktian: Distribusi Binomial

Fungsi probabilitas distribusi binomial adalah:

\[ P(Y = y) = \binom{n}{y} \pi^y (1 - \pi)^{n - y} \]

Kita tuliskan ulang dalam bentuk exponential family:

\[ P(Y = y) = \exp \left\{ \log \binom{n}{y} + y \log \left( \frac{\pi}{1 - \pi} \right) + n \log(1 - \pi) \right\} \]

Dengan substitusi:

  • \(\theta = \log \left( \frac{\pi}{1 - \pi} \right)\)

  • \(b(\theta) = -n \log(1 - \pi)\)

  • \(\phi = 1\)

Maka distribusi binomial termasuk dalam exponential family.

8.2 Model Regresi Logistik

Persamaan regresi logistik menyerupai regresi linear, di mana nilai input dikombinasikan secara linear dengan koefisien (bobot) untuk menghasilkan prediksi. Namun, regresi logistik membatasi hasil prediksi menjadi nilai biner, yaitu 0 atau 1, dengan menggunakan fungsi aktivasi sigmoid.

Output yang diprediksi oleh model terletak dalam rentang antara 0 hingga 1 dan mengikuti bentuk kurva S (S-shaped).

Regresi logistik menganalisis hubungan antara satu atau lebih variabel independen dan mengklasifikasikan data ke dalam kelas-kelas diskrit. Model ini banyak digunakan dalam pemodelan prediktif, di mana model memperkirakan probabilitas matematis apakah suatu entitas termasuk ke dalam kategori tertentu atau tidak.

Sebagai contoh, angka 0 dapat mewakili kelas negatif, dan angka 1 mewakili kelas positif. Regresi logistik biasanya digunakan untuk masalah klasifikasi biner, di mana variabel hasil hanya memiliki dua kemungkinan kategori (0 dan 1).

Beberapa contoh penerapan klasifikasi biner di mana respons biner diharapkan atau tersirat antara lain:

  • Menentukan probabilitas serangan jantung: Dengan bantuan model logistik, tenaga medis dapat menentukan hubungan antara variabel-variabel seperti berat badan, olahraga, dan sebagainya, untuk memprediksi apakah seseorang berisiko mengalami serangan jantung atau komplikasi medis lainnya.

  • Kemungkinan diterima di universitas: Sistem aplikasi dapat memperkirakan probabilitas seorang siswa untuk diterima di universitas tertentu atau program studi tertentu dengan menganalisis hubungan antara variabel-variabel penentu seperti skor GRE, GMAT, atau TOEFL.

  • Mengidentifikasi email spam: Kotak masuk email difilter untuk menentukan apakah suatu email merupakan komunikasi promosi atau spam dengan cara memahami variabel prediktor dan menerapkan algoritma regresi logistik untuk memeriksa keasliannya.

Keunggulan Utama Regresi Logistik Lebih mudah diterapkan dalam metode pembelajaran mesin Model pembelajaran mesin dapat dibangun secara efektif dengan menggunakan proses training (pelatihan) dan testing (pengujian). Proses pelatihan bertujuan untuk mengenali pola dalam data masukan (misalnya gambar) dan mengaitkannya dengan keluaran tertentu (label). Melatih model logistik dengan algoritma regresi tidak membutuhkan daya komputasi yang tinggi. Oleh karena itu, regresi logistik lebih mudah untuk diimplementasikan, ditafsirkan, dan dilatih dibandingkan metode machine learning lainnya.

1. Cocok untuk data yang dapat dipisahkan secara linear Dataset yang dapat dipisahkan secara linear mengacu pada grafik di mana dua kelas data dapat dipisahkan oleh garis lurus. Dalam regresi logistik, variabel respons (y) hanya memiliki dua nilai. Oleh karena itu, jika data bersifat dapat dipisahkan secara linear, maka klasifikasi ke dalam dua kelas berbeda dapat dilakukan secara efektif.

2. Memberikan wawasan yang berharga Regresi logistik dapat mengukur seberapa relevan atau penting suatu variabel independen/prediktor (melalui ukuran koefisien), serta menunjukkan arah hubungan atau asosiasi antara prediktor dan respons (apakah positif atau negatif).

3. Persamaan dan Asumsi dalam Regresi Logistik Regresi logistik menggunakan fungsi logistik yang disebut fungsi sigmoid untuk memetakan prediksi dan probabilitasnya. Fungsi sigmoid adalah kurva berbentuk huruf S (S-shaped curve) yang mengubah setiap nilai riil menjadi rentang antara 0 dan 1.

Selain itu, jika keluaran dari fungsi sigmoid (yaitu probabilitas yang diperkirakan) lebih besar dari ambang batas yang telah ditentukan dalam grafik, maka model akan memprediksi bahwa suatu observasi termasuk dalam kelas tertentu. Sebaliknya, jika nilai probabilitas tersebut lebih kecil dari ambang batas, model akan memprediksi bahwa observasi tersebut tidak termasuk ke dalam kelas tersebut.

Sebagai contoh:

  • Jika hasil fungsi sigmoid lebih dari 0,5, maka output dianggap sebagai 1 (kelas positif).

  • Jika hasilnya kurang dari 0,5, maka output diklasifikasikan sebagai 0 (kelas negatif).

  • Jika grafik menuju ke arah negatif secara ekstrem, maka nilai prediksi y akan menjadi 0, dan sebaliknya.

Dengan kata lain, jika keluaran fungsi sigmoid adalah 0,65, maka itu berarti terdapat peluang sebesar 65% bahwa peristiwa tersebut akan terjadi — misalnya dalam kasus pelemparan koin.

Fungsi sigmoid:

\[ f(x) = \frac{1}{1 + e^{-x}} \]

Jika nilai prediksi lebih besar dari ambang batas (misalnya 0.5), maka diklasifikasikan sebagai 1. Jika kurang dari 0.5, diklasifikasikan sebagai 0.

Simulasi dan Visualisasi Regresi Logistik

# Simulasi data untuk regresi logistik
set.seed(42)
n <- 100
x <- seq(-4, 4, length.out = n)
log_odds <- -0.5 + 1.5 * x
prob <- 1 / (1 + exp(-log_odds))
y <- rbinom(n, 1, prob)

# Buat data frame
data <- data.frame(x = x, y = y, prob = prob)

Plot Kurva Sigmoid

# Visualisasi menggunakan base R
plot(x, y, pch = 16, col = "gray60",
     xlab = "X", ylab = "Y / Probabilitas",
     main = "Simulasi Regresi Logistik dengan Kurva Sigmoid")
lines(x, prob, col = "blue", lwd = 2)
abline(h = 0.5, col = "red", lty = 2)

legend("topleft",
       legend = c("Data Biner (0/1)", "Kurva Logistik", "Ambang 0.5"),
       col = c("gray60", "blue", "red"),
       pch = c(16, NA, NA),
       lty = c(NA, 1, 2),
       lwd = c(NA, 2, 1),
       pt.cex = 1.5,
       bty = "n")

Kurva sigmoid dalam regresi logistik menunjukkan hubungan non-linear antara variabel prediktor dan probabilitas output. Pendekatan ini efektif untuk klasifikasi biner seperti deteksi penyakit, email spam, dan prediksi ya/tidak. Spesifikasi Model

Fungsi link (logit): Fungsi link function logit dapat dinyatakan dalam bentuk berikut:

\[ g(\mu) = \log\left( \frac{\mu}{1 - \mu} \right) \]

Model regresi logistik:

\[ \log \left( \frac{\mu}{1 - \mu} \right) = X \beta \]

Fungsi inverse link:

\[ \mu = \frac{\exp(X \beta)}{1 + \exp(X \beta)} \]

Estimasi Parameter

Metode estimasi parameter pada GLM umumnya menggunakan Maximum Likelihood Estimation (MLE).

Log-likelihood fungsi untuk regresi logistik:

\[ l(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i) \right] \]

Dengan: \[ \pi_i = \frac{\exp(x_i^\top \beta)}{1 + \exp(x_i^\top \beta)} \]

Estimasi dilakukan melalui iterasi Newton-Raphson atau algoritma Fisher Scoring.

Contoh Kasus dengan R

Misalkan kita memiliki data simulasi:

set.seed(123)
n <- 200
x <- rnorm(n)
p <- 1 / (1 + exp(-(-0.5 + 2*x)))
y <- rbinom(n, 1, p)
data <- data.frame(y, x)

Estimasi Regresi Logistik Estimasi parameter model regresi logistik dapat menggunakan ‘glm’ function

model <- glm(y ~ x, data = data, family = binomial)
summary(model)
## 
## Call:
## glm(formula = y ~ x, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.8374     0.1954  -4.286 1.82e-05 ***
## x             2.0262     0.3016   6.718 1.84e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 261.37  on 199  degrees of freedom
## Residual deviance: 177.26  on 198  degrees of freedom
## AIC: 181.26
## 
## Number of Fisher Scoring iterations: 5

Plot Probabilitas Prediksi Berdasarkan hasil model hasil prediksi dapat dibuat plot probabilitas prediksi sebagai berikut

plot(data$x, data$y, pch = 16, col = "grey")
curve(predict(model, newdata = data.frame(x = x), type = "response")[order(x)],
      add = TRUE, col = "blue", lwd = 2)

GLM adalah kerangka model fleksibel untuk berbagai jenis data dan distribusi. Regresi logistik merupakan salah satu contoh penting dari GLM, sangat berguna dalam analisis data kategorik biner. Estimasi parameter dilakukan melalui metode MLE dan dapat diselesaikan secara efisien dengan fungsi glm di R.

Contoh 2:

Regresi logistik digunakan untuk memodelkan hubungan antara satu atau lebih variabel independen dengan variabel dependen yang bersifat biner (0/1). Model ini menghasilkan probabilitas kejadian berdasarkan fungsi logit (sigmoid).

Simulasi Data

Kita akan membuat contoh data di mana probabilitas respons dipengaruhi oleh satu variabel prediktor.

set.seed(123)
n <- 150
x <- rnorm(n)
log_odds <- -0.3 + 2 * x
prob <- 1 / (1 + exp(-log_odds))
y <- rbinom(n, 1, prob)

data <- data.frame(y = y, x = x)

Estimasi Model Regresi Logistik

# Fit model regresi logistik
model <- glm(y ~ x, data = data, family = binomial)
summary(model)
## 
## Call:
## glm(formula = y ~ x, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.4437     0.2024  -2.192   0.0284 *  
## x             1.6742     0.2940   5.694 1.24e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 203.41  on 149  degrees of freedom
## Residual deviance: 150.08  on 148  degrees of freedom
## AIC: 154.08
## 
## Number of Fisher Scoring iterations: 5

Interpretasi Koefisien

  • Intercept ((Intercept)): nilai log-odds saat x = 0

  • Koefisien x: perubahan log-odds untuk setiap satu satuan peningkatan pada x

  • Nilai p: menunjukkan signifikansi statistik dari prediktor

Koefisien log-odds dapat ditransformasikan ke odds ratio:

exp(coef(model))
## (Intercept)           x 
##   0.6416859   5.3347261

Prediksi dan Visualisasi Kurva Logit

library(ggplot2)

data$pred <- predict(model, type = "response")

ggplot(data, aes(x = x, y = y)) +
  geom_point(alpha = 0.5, color = "gray40") +
  geom_line(aes(y = pred), color = "blue", linewidth = 1.5) +
  labs(title = "Kurva Logit pada Regresi Logistik",
       x = "X (Prediktor)",
       y = "Probabilitas / Respons") +
  theme_minimal()

Evaluasi Model

Kita dapat melihat akurasi model berdasarkan klasifikasi threshold 0.5.

# Klasifikasi dan confusion matrix
data$pred_class <- ifelse(data$pred > 0.5, 1, 0)
table(Predicted = data$pred_class, Actual = data$y)
##          Actual
## Predicted  0  1
##         0 72 24
##         1 16 38

Kesimpulan

  • Model regresi logistik mampu memprediksi probabilitas berdasarkan hubungan antara variabel x dan hasil biner y.

  • Kurva logit menunjukkan bentuk S yang memisahkan dua kelas secara probabilistik.

  • Koefisien dapat diinterpretasikan dalam bentuk log-odds atau odds ratio.

  • Evaluasi model menunjukkan performa klasifikasi yang baik jika p-value signifikan dan prediksi sesuai dengan observasi.

Contoh 3

Dalam contoh ini, kita akan menggunakan data asli mtcars dari R base package, dengan mengubah variabel target menjadi biner. Kita akan memodelkan apakah mobil memiliki transmisi otomatis (0) atau manual (1) berdasarkan variabel prediktor seperti mpg (mil per galon) dan hp (tenaga kuda).

Persiapan Data

data(mtcars)
df <- mtcars
df$am <- factor(df$am, labels = c("Automatic", "Manual"))

summary(df[, c("am", "mpg", "hp")])
##          am          mpg              hp       
##  Automatic:19   Min.   :10.40   Min.   : 52.0  
##  Manual   :13   1st Qu.:15.43   1st Qu.: 96.5  
##                 Median :19.20   Median :123.0  
##                 Mean   :20.09   Mean   :146.7  
##                 3rd Qu.:22.80   3rd Qu.:180.0  
##                 Max.   :33.90   Max.   :335.0

Estimasi Model Regresi Logistik

model_real <- glm(am ~ mpg + hp, data = df, family = binomial)
summary(model_real)
## 
## Call:
## glm(formula = am ~ mpg + hp, family = binomial, data = df)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)  
## (Intercept) -33.60517   15.07672  -2.229   0.0258 *
## mpg           1.25961    0.56747   2.220   0.0264 *
## hp            0.05504    0.02692   2.045   0.0409 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 43.230  on 31  degrees of freedom
## Residual deviance: 19.233  on 29  degrees of freedom
## AIC: 25.233
## 
## Number of Fisher Scoring iterations: 7

Interpretasi Koefisien

  • Intercept: log-odds mobil menggunakan transmisi manual saat mpg dan hp bernilai nol.

  • mpg: setiap kenaikan 1 mil/galon meningkatkan peluang mobil bertransmisi manual.

  • hp: setiap kenaikan 1 tenaga kuda menurunkan peluang mobil bertransmisi manual.

  • p-value < 0.05 menunjukkan signifikansi statistik.

Odds ratio dapat dihitung sebagai:

exp(coef(model_real))
##  (Intercept)          mpg           hp 
## 2.543664e-15 3.524063e+00 1.056588e+00

Interpretasi:

  • Odds ratio mpg > 1 → semakin irit, semakin besar peluang bertransmisi manual.

  • Odds ratio hp < 1 → semakin besar tenaga, semakin kecil peluang bertransmisi manual.

Visualisasi Prediksi

df$prob <- predict(model_real, type = "response")
df$pred_class <- ifelse(df$prob > 0.5, "Manual", "Automatic")

library(ggplot2)
ggplot(df, aes(x = mpg, y = hp, color = pred_class, shape = am)) +
  geom_point(size = 3) +
  labs(title = "Prediksi Regresi Logistik: Transmisi Mobil",
       x = "Mil per Galon (mpg)",
       y = "Tenaga Kuda (hp)",
       color = "Prediksi", shape = "Fakta") +
  theme_minimal()

Evaluasi Model

# Confusion matrix
table(Predicted = df$pred_class, Actual = df$am)
##            Actual
## Predicted   Automatic Manual
##   Automatic        16      3
##   Manual            3     10

Interpretasi:

  • Baris dan kolom menunjukkan prediksi dan aktual.

  • Diagonal = prediksi benar, lainnya = kesalahan klasifikasi.

Kesimpulan

  • Model berhasil memprediksi jenis transmisi mobil berdasarkan mpg dan hp.

  • Koefisien mpg positif dan signifikan → irit bahan bakar → kemungkinan lebih besar manual.

  • Koefisien hp negatif → mobil lebih bertenaga cenderung otomatis.

  • Model memiliki interpretasi yang kuat dan dapat divisualisasikan dengan baik.

8.3 Model regresi Poisson

Regresi Poisson digunakan ketika variabel respons adalah data cacah (count data), yaitu bilangan bulat non-negatif. Model ini merupakan bagian dari Generalized Linear Model (GLM) dengan asumsi bahwa distribusi variabel respons adalah distribusi Poisson.

Distribusi Poisson memiliki fungsi probabilitas:

\[ P(Y = y) = \frac{e^{-\lambda} \lambda^y}{y!} \]

Kita dapat menuliskan bentuk ini dalam format exponential family:

\[ f(y; \theta) = \exp \left\{ y \log(\lambda) - \lambda - \log(y!) \right\} \]

dengan:

  • \(\theta = \log(\lambda)\)

  • \(b(\theta) = e^{\theta} = \lambda\)

  • \(\phi = 1\)

  • \(c(y, \phi) = -\log(y!)\)

Maka distribusi Poisson termasuk dalam exponential family.

Fungsi Link

Fungsi link kanonik untuk distribusi Poisson adalah fungsi logaritma:

\[ g(\mu) = \log(\mu) \]

Sehingga modelnya menjadi:

\[ \log(\mu_i) = x_i^\top \beta \]

dan fungsi inverse link:

\[ \mu_i = \exp(x_i^\top \beta) \]

Estimasi Parameter

Estimasi parameter \(\beta\) dilakukan dengan metode Maximum Likelihood Estimation (MLE).

Log-likelihood fungsi untuk regresi Poisson:

\[ l(\beta) = \sum_{i=1}^n \left[ y_i x_i^\top \beta - \exp(x_i^\top \beta) - \log(y_i!) \right] \]

Nilai \(\beta\) dapat diperoleh melalui metode numerik seperti iterasi Newton-Raphson.

Contoh 1

Misalkan kita memiliki data simulasi sebagai berikut:

set.seed(42)
n <- 200
x <- rnorm(n)
lambda <- exp(0.3 + 0.6 * x)
y <- rpois(n, lambda)
data <- data.frame(y, x)

Estimasi Regresi Poisson

poisson_model <- glm(y ~ x, data = data, family = poisson)
summary(poisson_model)
## 
## Call:
## glm(formula = y ~ x, family = poisson, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.21817    0.06712   3.250  0.00115 ** 
## x            0.58748    0.06288   9.343  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 333.72  on 199  degrees of freedom
## Residual deviance: 244.46  on 198  degrees of freedom
## AIC: 587.36
## 
## Number of Fisher Scoring iterations: 5

Plot Hasil Prediksi

plot(data$x, data$y, pch = 16, col = "darkgray", main = "Data dan Hasil Prediksi")
newdata <- data.frame(x = seq(min(x), max(x), length.out = 100))
pred <- predict(poisson_model, newdata = newdata, type = "response")
lines(newdata$x, pred, col = "blue", lwd = 2)

Diagnostik dan Overdispersion

Salah satu asumsi penting dari model Poisson adalah bahwa mean dan varians dari variabel respons adalah sama (\(E[Y] = Var[Y]\)). Jika varians lebih besar dari mean, maka terjadi overdispersion.

Untuk mendeteksi overdispersion:

dispersion <- sum(residuals(poisson_model, type = "pearson")^2) / poisson_model$df.residual
dispersion
## [1] 1.144237

Jika nilai dispersion > 1, maka overdispersion mungkin terjadi dan model alternatif seperti Negative Binomial Regression dapat digunakan.

Model regresi Poisson adalah alat penting untuk menganalisis data cacah. Ia memberikan hubungan log-linear antara prediktor dan rata-rata kejadian. Namun, perlu diperhatikan kemungkinan overdispersion dalam penerapannya.

Contoh 2:

Regresi Poisson digunakan untuk memodelkan data cacah (count data), yaitu data respons berupa bilangan bulat non-negatif. Dalam contoh ini, kita akan menggunakan dataset warpbreaks dari R base package yang berisi jumlah patahan benang pada mesin tenun.

Deskripsi Dataset

data("warpbreaks")
head(warpbreaks)
##   breaks wool tension
## 1     26    A       L
## 2     30    A       L
## 3     54    A       L
## 4     25    A       L
## 5     70    A       L
## 6     52    A       L
summary(warpbreaks)
##      breaks      wool   tension
##  Min.   :10.00   A:27   L:18   
##  1st Qu.:18.25   B:27   M:18   
##  Median :26.00          H:18   
##  Mean   :28.15                 
##  3rd Qu.:34.00                 
##  Max.   :70.00
  • breaks: jumlah patahan benang (variabel target)

  • wool: tipe wol (A/B)

  • tension: tingkat ketegangan (L/M/H)

Pemodelan Regresi Poisson

poisson_model <- glm(breaks ~ wool + tension, data = warpbreaks, family = poisson)
summary(poisson_model)
## 
## Call:
## glm(formula = breaks ~ wool + tension, family = poisson, data = warpbreaks)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.69196    0.04541  81.302  < 2e-16 ***
## woolB       -0.20599    0.05157  -3.994 6.49e-05 ***
## tensionM    -0.32132    0.06027  -5.332 9.73e-08 ***
## tensionH    -0.51849    0.06396  -8.107 5.21e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 297.37  on 53  degrees of freedom
## Residual deviance: 210.39  on 50  degrees of freedom
## AIC: 493.06
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Koefisien

  • Intercept: nilai log dari rata-rata patahan pada referensi (wool A dan tension L)
  • Koefisien woolB: efek tambahan dari menggunakan wol tipe B
  • Koefisien tensionM, tensionH: efek tambahan dari ketegangan M dan H dibandingkan L
exp(coef(poisson_model))
## (Intercept)       woolB    tensionM    tensionH 
##  40.1235380   0.8138425   0.7251908   0.5954198
  • Jika OR < 1 → menurunkan jumlah patahan

  • Jika OR > 1 → meningkatkan jumlah patahan

Visualisasi Prediksi

warpbreaks$predicted <- predict(poisson_model, type = "response")

library(ggplot2)
ggplot(warpbreaks, aes(x = tension, y = breaks, color = wool)) +
  geom_jitter(width = 0.2, alpha = 0.6) +
  geom_point(aes(y = predicted), shape = 18, size = 3, color = "black") +
  facet_wrap(~wool) +
  labs(title = "Prediksi Jumlah Patahan Benang berdasarkan Wol dan Ketegangan",
       x = "Tingkat Ketegangan",
       y = "Jumlah Patahan Benang",
       color = "Jenis Wol") +
  theme_minimal()

Evaluasi Model

# Plot residuals
plot(poisson_model$residuals, main = "Residual Plot", ylab = "Residual", xlab = "Index", pch = 19, col = "steelblue")
abline(h = 0, col = "red", lty = 2)

  • Regresi Poisson menunjukkan bahwa jenis wol dan tingkat ketegangan berpengaruh terhadap jumlah patahan benang.

  • Koefisien negatif menunjukkan penurunan rata-rata patahan.

  • Model dapat digunakan untuk memprediksi jumlah patahan pada kombinasi wool dan tension tertentu.

9 Inferensi GLM

Dalam Generalized Linear Model (GLM), inferensi statistik membutuhkan pemahaman terhadap ekspektasi dan varians dari estimator model, terutama untuk mengembangkan alat-alat uji seperti Wald test, Likelihood Ratio test, dan interval kepercayaan.

Ekspektasi dan Varians dalam GLM

1. Ekspektasi Estimator

Ekspektasi menunjukkan apakah suatu estimator tak bias, yaitu:

\[ \mathbb{E}[\hat{\beta}] = \beta \]

Dalam GLM, MLE dari \(\hat{\beta}\) bersifat asymptotically unbiased.

2. Varians Estimator

Varians menunjukkan presisi dari estimasi parameter:

\[ \text{Var}(\hat{\beta}) \approx \left[ \mathbf{X}^\top \mathbf{W} \mathbf{X} \right]^{-1} \]

di mana \(\mathbf{W}\) adalah matriks bobot yang tergantung pada distribusi dan fungsi link.

Distribusi Asimptotik Estimator

Dengan ukuran sampel besar:

\[ \hat{\beta} \sim \mathcal{N}(\beta, \text{Var}(\hat{\beta})) \]

Distribusi ini adalah dasar dari:

  • Uji Wald

  • Confidence interval

  • P-value

Varians dalam GLM Tidak Konstan

Tidak seperti regresi linear (OLS) yang mengasumsikan homoskedastisitas:

\[ \text{Var}(Y_i) = \sigma^2 \]

Dalam GLM:

\[ \text{Var}(Y_i) = \phi V(\mu_i) \]

  • \(\phi\) = parameter dispersi

  • \(V(\mu)\) = fungsi varians

Contoh:

  • Poisson: \(V(\mu) = \mu\)

  • Binomial: \(V(\mu) = \mu(1 - \mu)\)

Contoh Regresi Poisson

# Simulasi data
set.seed(123)
x <- rnorm(100)
mu <- exp(0.5 + 0.8 * x)
y <- rpois(100, mu)
model <- glm(y ~ x, family = poisson)

summary(model)
## 
## Call:
## glm(formula = y ~ x, family = poisson)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.44950    0.08872   5.066 4.05e-07 ***
## x            0.86000    0.07463  11.523  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.05  on 99  degrees of freedom
## Residual deviance: 106.78  on 98  degrees of freedom
## AIC: 325.76
## 
## Number of Fisher Scoring iterations: 5
  • Ekspektasi: \(\mathbb{E}[Y_i] = \mu_i\)

  • Varians: \(\text{Var}(Y_i) = \mu_i\)

Kesimpulan

  • Ekspektasi digunakan untuk mengetahui ketakbiasan estimasi

  • Varians digunakan untuk mengukur presisi dan menyusun uji statistik

  • Distribusi asimptotik dari \(\hat{\beta}\) sangat bergantung pada kedua konsep ini

  • Dalam GLM, varians sangat tergantung pada bentuk distribusi eksponensial dari data

9.1 Mencari Ekspektasi dan Varians dalam GLM

Ekspektasi

Jika diturunkan berdasarkan fungsi momen:

\[ E(Y) = \int y f(y;\theta) \, dy = \mu \]

Untuk keluarga eksponensial:

\[ \log f(y;\theta) = a(y) + b(\theta)y + c(\theta) \]

atau:

\[ \log f(y;\theta) = y \theta - b(\theta) + c(y) \]

Maka ekspektasi turunan pertama:

\[ U(\theta) = \frac{\partial \ell}{\partial \theta} = y - b'(\theta) \]

Dan ekspektasi turunan pertama:

\[ E[U(\theta)] = E[y - b'(\theta)] = \mu - b'(\theta) = 0 \]

Maka:

\[ \mu = b'(\theta) \]

Varians

Turunan kedua:

\[ \frac{\partial^2 \ell}{\partial \theta^2} = -b''(\theta) \]

Sehingga:

\[ Var(Y) = b''(\theta) = \phi V(\mu) \]

9.2 Metode Penaksiran Parameter

Maximum Likelihood Estimation (MLE)

  • Prinsip dasar: memaksimumkan fungsi likelihood/log-likelihood.

  • Langkah:

    • Turunan pertama = 0

    • Turunan kedua < 0

Namun, karena bentuk GLM tidak eksplisit, digunakan metode numerik.

Metode Optimisasi

Newton-Raphson

  • Menggunakan score vector (gradien)

  • Menggunakan Hessian matrix

Iterasi:

\[ \beta^{(t+1)} = \beta^{(t)} - H^{-1}(\beta^{(t)}) U(\beta^{(t)}) \]

Fisher Scoring

  • Modifikasi Newton-Raphson, mengganti Hessian dengan matriks informasi Fisher.

IRLS (Iteratively Reweighted Least Square)

  • Modifikasi dari Fisher scoring, hasil estimasi mirip dengan Least Square.

Implementasi Newton-Raphson

Statistik score ke-\(j\):

\[ U_j(\beta) = \frac{\partial \log L(\beta)}{\partial \beta_j} \]

Turunan kedua:

\[ H_{jk}(\beta) = \frac{\partial^2 \log L(\beta)}{\partial \beta_j \partial \beta_k} \]

Taylor expansion:

\[ U(\beta^*) \approx U(\beta) + H(\beta)(\beta^* - \beta) \]

Estimasi parameter:

\[ \hat{\beta} \approx \beta^{(t)} - H^{-1}(\beta^{(t)}) U(\beta^{(t)}) \]

9.3 Diagnostik Model GLM

Diagnostik digunakan untuk mengevaluasi apakah model sudah tepat.

  • Uji formal

  • Grafik antara nilai prediksi vs nilai aktual

Statistik Devians

  • Mengukur apakah ada model lain yang lebih baik.

  • Nilai devians besar → model tidak cocok.

  • Devians adalah:

\[ D = 2 \sum \left[ y_i \log \left( \frac{y_i}{\hat{\mu}_i} \right) - (y_i - \hat{\mu}_i) \right] \]

  • Devians membandingkan model terhadap saturated model.

  • Devians kecil → model lebih cocok.

Statistik Chi-Kuadrat Pearson

  • Menguji apakah model lebih baik daripada tidak ada model sama sekali.
  • Statistik:

\[ X^2 = \sum \frac{(y_i - \hat{\mu}_i)^2}{\hat{\mu}_i} \]

  • Jika signifikan → model lebih baik daripada tanpa model.

Catatan

  • Untuk data yang dikelompokkan, statistik devians dan chi-kuadrat Pearson mengikuti distribusi Chi-Square.

  • Untuk data tidak dikelompokkan, tidak mengikuti distribusi Chi-Square.

  • Devians diminimalkan oleh MLE → cocok digunakan untuk evaluasi model.

Analisis Residual

  • Residual adalah selisih antara observasi dengan prediksi.

  • Dapat digunakan untuk memeriksa penyimpangan sistematis.

  • Dapat diplot untuk menilai asumsi model.

9.4 Detail Metode Estimasi dan Inferensi Regresi Logistik

Regresi logistik digunakan untuk memodelkan probabilitas dari variabel respons biner (0/1) berdasarkan satu atau lebih variabel prediktor. Estimasi parameter dilakukan menggunakan Maximum Likelihood Estimation (MLE) karena model tidak linear dalam parameternya.

Fungsi model logistik:

\[ \pi(x) = \frac{\exp(\beta_0 + \beta_1 x)}{1 + \exp(\beta_0 + \beta_1 x)} \]

Log-likelihood untuk \(n\) observasi:

\[ \ell(\beta) = \sum_{i=1}^n \left[y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i)\right] \]

Estimasi dengan Newton-Raphson

Metode Newton-Raphson digunakan untuk mencari nilai parameter \(\boldsymbol{\beta}\) yang memaksimalkan fungsi log-likelihood pada model regresi logistik.

Fungsi Log-Likelihood

Model regresi logistik untuk probabilitas:

\[ \pi_i = \frac{1}{1 + \exp(-\boldsymbol{x}_i^\top \boldsymbol{\beta})} \]

Log-likelihood untuk \(n\) observasi:

\[ \ell(\boldsymbol{\beta}) = \sum_{i=1}^{n} \left[y_i \log(\pi_i) + (1 - y_i)\log(1 - \pi_i)\right] \]

Langkah-Langkah Newton-Raphson

  1. Turunan Pertama (Score Function)

\[ \mathbf{U}(\boldsymbol{\beta}) = \frac{\partial \ell(\boldsymbol{\beta})}{\partial \boldsymbol{\beta}} = \mathbf{X}^\top (\mathbf{y} - \boldsymbol{\pi}) \]

  1. Turunan Kedua (Hessian Matrix)

\[ \mathbf{H}(\boldsymbol{\beta}) = -\mathbf{X}^\top \mathbf{W} \mathbf{X}, \quad \text{dengan } \mathbf{W} = \text{diag}(\pi_i(1 - \pi_i)) \]

  1. Iterasi Newton-Raphson

\[ \boldsymbol{\beta}^{(t+1)} = \boldsymbol{\beta}^{(t)} + (\mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X})^{-1} \mathbf{X}^\top (\mathbf{y} - \boldsymbol{\pi}^{(t)}) \]

Estimasi MLE dengan Newton-Raphson (Manual di R)

# Data simulasi
set.seed(1)
x <- rnorm(100)
beta_true <- c(-1, 2)
X <- cbind(1, x)
eta <- X %*% beta_true
p <- 1 / (1 + exp(-eta))
y <- rbinom(100, 1, p)

Newton-Raphson Iterasi Manual

beta <- c(0, 0)
tol <- 1e-6
max_iter <- 100

for (i in 1:max_iter) {
  eta <- X %*% beta
  pi_hat <- 1 / (1 + exp(-eta))
  W <- diag(as.numeric(pi_hat * (1 - pi_hat)))
  z <- eta + solve(W) %*% (y - pi_hat)
  beta_new <- solve(t(X) %*% W %*% X) %*% t(X) %*% W %*% z
  if (sum(abs(beta_new - beta)) < tol) break
  beta <- beta_new
}

beta  # hasil estimasi akhir
##        [,1]
##   -1.516679
## x  2.155658
  • Estimasi parameter pada model regresi logistik dilakukan dengan MLE.
  • Newton-Raphson adalah metode numerik yang digunakan untuk memaksimalkan log-likelihood.
  • Iterasi didasarkan pada turunan pertama (score) dan kedua (Hessian).
  • Prosedur identik dengan IRLS (Iteratively Reweighted Least Squares) dalam implementasi GLM.

Inferensi Parameter

1. Uji Wald

Tujuan Uji Wald

Untuk menguji signifikansi parameter \(\beta_j\) dalam model regresi logistik:

  • H₀: \(\beta_j = 0\)

  • H₁: \(\beta_j \ne 0\)

Teori Wald Test

Dari teori estimasi MLE, estimator \(\hat\beta_j\) mendekati distribusi normal:

\[ \hat\beta_j \sim N(\beta_j, \text{Var}(\hat\beta_j)) \]

Jika H₀ benar (yaitu \(\beta_j = 0\)), maka:

\[ Z = \frac{\hat\beta_j}{SE(\hat\beta_j)} \sim \mathcal{N}(0,1) \]

Dengan statistik Wald:

\[ W = Z^2 = \left( \frac{\hat\beta_j}{SE(\hat\beta_j)} \right)^2 \sim \chi^2_1 \]

Simulasi dan Uji Wald Langkah demi Langkah

set.seed(123)
n <- 100
x <- rnorm(n)
log_odds <- -0.5 + 1.2 * x
p <- 1 / (1 + exp(-log_odds))
y <- rbinom(n, 1, p)
data <- data.frame(x, y)

model <- glm(y ~ x, data = data, family = binomial)

summary(model)
## 
## Call:
## glm(formula = y ~ x, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.3097     0.2296  -1.349    0.177    
## x             1.2663     0.3080   4.111 3.94e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 137.99  on 99  degrees of freedom
## Residual deviance: 114.76  on 98  degrees of freedom
## AIC: 118.76
## 
## Number of Fisher Scoring iterations: 4

Langkah 1: Ambil nilai koefisien dan SE

beta_hat <- coef(model)["x"]
se_beta <- summary(model)$coefficients["x", "Std. Error"]

Langkah 2: Hitung Statistik Z

Z <- beta_hat / se_beta
Z
##        x 
## 4.110965

Langkah 3: Hitung Statistik Wald

Wald_stat <- Z^2
Wald_stat
##        x 
## 16.90003

Langkah 4: Hitung p-value

p_value <- 1 - pchisq(Wald_stat, df = 1)
p_value
##            x 
## 3.940095e-05

nterpretasi

  • Jika p-value < 0.05, maka koefisien signifikan → variabel prediktor berpengaruh.

  • Jika p-value > 0.05, maka tidak ada cukup bukti untuk menolak H₀.

Kesimpulan

Uji Wald didasarkan pada rasio antara estimasi parameter dan standar error-nya. Dengan menaikkan nilai Z menjadi kuadrat (Z²), kita memperoleh distribusi Chi-Square untuk pengujian hipotesis parameter individual dalam model regresi logistik.

2. Uji Likelihood Ratio (Chi-Square)

Bandingkan model penuh dengan model tanpa prediktor.

# Model null
model_null <- glm(y ~ 1, data = data, family = binomial)

# Likelihood ratio test
anova(model_null, model, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: y ~ 1
## Model 2: y ~ x
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1        99     137.99                          
## 2        98     114.76  1   23.229 1.438e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Evaluasi Kebaikan Model

1. Akaike Information Criterion (AIC)

Semakin kecil AIC, semakin baik model.

AIC(model)
## [1] 118.7598

Bayesian Information Criterion (BIC)

Alternatif terhadap AIC, menghukum kompleksitas model.

BIC(model)
## [1] 123.9701
  • Estimasi regresi logistik dilakukan dengan MLE melalui iterasi Newton-Raphson.

  • Inferensi parameter dapat dilakukan dengan uji Wald dan likelihood ratio (uji Chi-Square).

  • AIC dan BIC digunakan untuk mengevaluasi kompleksitas dan kecocokan model.

Contoh Regresi Logistik Multiple

Berikut adalah contoh analisis regresi logistik multiple lengkap dalam format R Markdown, menggunakan dataset mtcars dari R. Kita akan memodelkan kemungkinan mobil memiliki efisiensi bahan bakar tinggi (mpg tinggi) berdasarkan beberapa prediktor. Kita akan:

Menggunakan regresi logistik

  • Menguji signifikansi model dengan statistik G² (Likelihood Ratio Test)

  • Melakukan uji Wald

  • Menginterpretasi Odds Ratio

1. Data dan Transformasi

Gunakan data bawaan R Transformasi variabel mpg menjadi variabel biner: 1 = irit, 0 = boros

data(mtcars)

mtcars <- mtcars %>%
  dplyr::mutate(mpg_high = ifelse(mpg > median(mpg), 1, 0)) %>%
  dplyr::select(mpg_high, wt, hp, am)

head(mtcars)
##                   mpg_high    wt  hp am
## Mazda RX4                1 2.620 110  1
## Mazda RX4 Wag            1 2.875 110  1
## Datsun 710               1 2.320  93  1
## Hornet 4 Drive           1 3.215 110  0
## Hornet Sportabout        0 3.440 175  0
## Valiant                  0 3.460 105  0

2. Model Regresi Logistik Fit model logistik multipel

model_logit <- glm(mpg_high ~ wt + hp + am, data = mtcars, family = binomial)

summary(model_logit)
## 
## Call:
## glm(formula = mpg_high ~ wt + hp + am, family = binomial, data = mtcars)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept)  6.244e+02  4.856e+05   0.001    0.999
## wt          -1.847e+02  1.875e+05  -0.001    0.999
## hp          -8.852e-02  2.045e+03   0.000    1.000
## am          -6.038e+01  1.044e+05  -0.001    1.000
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 4.4236e+01  on 31  degrees of freedom
## Residual deviance: 3.4224e-09  on 28  degrees of freedom
## AIC: 8
## 
## Number of Fisher Scoring iterations: 25

3. Uji Signifikansi Model (G² atau Likelihood Ratio Test)

Bandingkan model penuh vs model null

model_null <- glm(mpg_high ~ 1, data = mtcars, family = binomial)
anova(model_null, model_logit, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: mpg_high ~ 1
## Model 2: mpg_high ~ wt + hp + am
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1        31     44.236                          
## 2        28      0.000  3   44.236 1.344e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4. Statistik Wald untuk Koefisien Individu

tidy(model_logit)
## # A tibble: 4 × 5
##   term         estimate std.error  statistic p.value
##   <chr>           <dbl>     <dbl>      <dbl>   <dbl>
## 1 (Intercept)  624.       485580.  0.00129     0.999
## 2 wt          -185.       187531. -0.000985    0.999
## 3 hp            -0.0885     2045. -0.0000433   1.000
## 4 am           -60.4      104421. -0.000578    1.000

5. Interpretasi Odds Ratio Odds Ratio dan Confidence Interval

# Odds Ratio dengan CI Wald
coefs <- summary(model_logit)$coefficients
OR <- exp(coefs[, "Estimate"])
CI_lower <- exp(coefs[, "Estimate"] - 1.96 * coefs[, "Std. Error"])
CI_upper <- exp(coefs[, "Estimate"] + 1.96 * coefs[, "Std. Error"])
odds_ratio_table <- cbind(OR, CI_lower, CI_upper)
round(odds_ratio_table, 3)
##                        OR CI_lower CI_upper
## (Intercept) 1.552814e+271        0      Inf
## wt           0.000000e+00        0      Inf
## hp           9.150000e-01        0      Inf
## am           0.000000e+00        0      Inf

6. Goodness of Fit Hosmer-Lemeshow Test

hoslem.test(mtcars$mpg_high, fitted(model_logit), g=10)
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  mtcars$mpg_high, fitted(model_logit)
## X-squared = 1.7112e-09, df = 2, p-value = 1

7. Kesimpulan

Model logistik menunjukkan bahwa variabel wt dan am berpengaruh signifikan terhadap efisiensi bahan bakar (mpg_high). Odds ratio memberikan pemahaman intuitif terhadap kekuatan dan arah pengaruh prediktor.

9.4.1 Menghitung G² secara Manual dalam Regresi Logistik

Dokumen ini menjelaskan cara menghitung statistik G² (likelihood ratio test) secara manual dalam regresi logistik biner.

Rumus Umum

\[ G^2 = -2(\ell_0 - \ell_1) \]

  • \(\ell_0\): log-likelihood dari model null (tanpa prediktor)
  • \(\ell_1\): log-likelihood dari model full (dengan prediktor)

Fungsi Log-Likelihood

\[ \ell = \sum_{i=1}^n \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right] \]

Contoh Data

# Data dummy
data <- data.frame(
  y = c(1, 0, 1, 0),
  x1 = c(2, 1, 3, 2)
)

Model Null (Intercept Saja)

# Probabilitas tetap
p_null <- mean(data$y)  # 0.5
loglik_null <- sum(data$y * log(p_null) + (1 - data$y) * log(1 - p_null))
loglik_null
## [1] -2.772589

Model Full (Dengan Prediktor)

# Misal hasil estimasi model: beta0 = -1, beta1 = 1
eta <- -1 + 1 * data$x1
p_hat <- 1 / (1 + exp(-eta))

loglik_full <- sum(data$y * log(p_hat) + (1 - data$y) * log(1 - p_hat))
loglik_full
## [1] -2.446599

Hitung G²

G2 <- -2 * (loglik_null - loglik_full)
G2
## [1] 0.6519803

Interpretasi

  • Bandingkan nilai \(G^2\) dengan distribusi \(\chi^2\) dengan df = jumlah prediktor.
  • Jika p-value < 0.05 → model dengan prediktor signifikan lebih baik.
pchisq(G2, df = 1, lower.tail = FALSE)
## [1] 0.4194056

9.4.1.1 Perhitungan Manual

Dokumen ini menjelaskan cara menghitung statistik G² (likelihood ratio test) secara manual dalam regresi logistik biner.

Rumus Umum

\[ G^2 = -2(\ell_0 - \ell_1) \]

  • \(\ell_0\): log-likelihood dari model null (tanpa prediktor)
  • \(\ell_1\): log-likelihood dari model full (dengan prediktor)

Konteks: Regresi Logistik Biner

Model regresi logistik untuk probabilitas \(p_i\) dari hasil 1 (misal sukses, positif, dsb):

\[ \log \left( \frac{p_i}{1 - p_i} \right) = \eta_i = \beta_0 + \beta_1 x_{1i} + \dots + \beta_k x_{ki} \]

Fungsi likelihood (untuk \(n\) observasi):

\[ L = \prod_{i=1}^{n} p_i^{y_i} (1 - p_i)^{1 - y_i} \]

Log-likelihood-nya:

\[ \ell = \sum_{i=1}^{n} \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right] \]


Langkah-langkah Menghitung \(\ell_0\) dan \(\ell_1\)

  1. Hitung probabilitas \(p_i\) dari model null dan full
  2. Gunakan rumus log-likelihood di atas untuk masing-masing model

Contoh Kasus Mini

Misalnya kita punya data:

y x1
1 2
0 1
1 3
0 2

1. Model Null

\[ p = \frac{1 + 0 + 1 + 0}{4} = 0.5 \]

\[ \ell_0 = \sum_{i=1}^{4} \left[ y_i \log(0.5) + (1 - y_i) \log(0.5) \right] = 4 \cdot \log(0.5) = -2.7726 \]

2. Model Full

Misal hasil estimasi: \(\hat{\beta}_0 = -1\), \(\hat{\beta}_1 = 1\)

Hitung \(\hat{p}_i = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_i)}}\)

x1 y η = β₀ + β₁·x1 loglik component
2 1 1 0.7311 –0.3133
1 0 0 0.5000 –0.6931
3 1 2 0.8808 –0.1269
2 0 1 0.7311 –1.3133

\[ \ell_1 = -0.3133 + (-0.6931) + (-0.1269) + (-1.3133) = -2.4466 \]

3. Hitung G²

\[ G^2 = -2(\ell_0 - \ell_1) = -2(-2.7726 + 2.4466) = 0.652 \]


Implementasi di R

# Data dummy

data <- data.frame(
  y = c(1, 0, 1, 0),
  x1 = c(2, 1, 3, 2)
)
# Model null
p_null <- mean(data$y)
loglik_null <- sum(data$y * log(p_null) + (1 - data$y) * log(1 - p_null))
# Model full (asumsikan β0 = -1, β1 = 1)
eta <- -1 + data$x1
p_hat <- 1 / (1 + exp(-eta))
loglik_full <- sum(data$y * log(p_hat) + (1 - data$y) * log(1 - p_hat))
# Hitung G²
G2 <- -2 * (loglik_null - loglik_full)
# Uji signifikansi
p_value <- pchisq(G2, df = 1, lower.tail = FALSE)

Interpretasi

Semakin besar nilai \(G^2\), semakin besar perbedaan antara model null dan full → artinya model dengan prediktor jauh lebih baik.

Bandingkan \(G^2\) terhadap distribusi \(\chi^2\) dengan derajat bebas sesuai jumlah prediktor.

9.5 Detail Metode Estimasi dan Inferensi Regresi Poisson

Model regresi Poisson digunakan untuk memodelkan data count (jumlah kejadian) di mana variabel respons mengikuti distribusi Poisson. Estimasi dilakukan dengan Maximum Likelihood Estimation (MLE), dan inferensi dilakukan dengan uji Wald dan Likelihood Ratio Test.

Model Regresi Poisson

Fungsi distribusi Poisson:

\[ P(Y_i = y_i) = \frac{e^{-\lambda_i} \lambda_i^{y_i}}{y_i!} \]

Model regresi poisson:

\[ \log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \]

Estimasi Parameter (MLE)

Log-likelihood fungsi:

\[ \ell(\boldsymbol{\beta}) = \sum_{i=1}^n \left[ y_i \log(\lambda_i) - \lambda_i - \log(y_i!) \right] \]

Dengan:

\[ \lambda_i = \exp(\mathbf{x}_i^\top \boldsymbol{\beta}) \]

Estimasi dilakukan dengan metode iterasi (IRLS).

Estimasi parameter model regresi Poisson menggunakan pendekatan Maximum Likelihood Estimation (MLE) dengan metode Iteratively Reweighted Least Squares (IRLS) secara manual, tanpa menggunakan glm().

Tahap 1: Definisikan Model regresi Poisson:

\[ \log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \quad \text{sehingga} \quad \lambda_i = \exp(\mathbf{x}_i^\top \boldsymbol{\beta}) \]

Tahap 2: Mencari Log-likelihood yang dimaksimalkan:

\[ \ell(\boldsymbol{\beta}) = \sum_{i=1}^n \left[ y_i \log(\lambda_i) - \lambda_i - \log(y_i!) \right] \]

Tahap 3: Formulasi iteratif:

\[ \boldsymbol{\beta}^{(t+1)} = (\mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{z}^{(t)} \]

Dengan:

  • \(\mathbf{W}\) = diag(\(\lambda_i\))

  • \(\mathbf{z}\) = \(\eta + \frac{y - \lambda}{\lambda}\)

dan \[ \eta_i=\log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \]

Simulasi Data

set.seed(123)
n <- 100
x <- rnorm(n)
X <- cbind(1, x)  # Tambah intercept
beta_true <- c(0.5, 0.8)
eta <- X %*% beta_true
lambda <- exp(eta)
y <- rpois(n, lambda)

data<-data.frame(x=x, y=y)

IRLS Manual Step-by-Step

# Inisialisasi
beta <- c(0, 0)
tol <- 1e-6
max_iter <- 100

for (i in 1:max_iter) {
  eta <- X %*% beta
  lambda <- exp(eta)
  W <- diag(as.numeric(lambda))
  z <- eta + (y - lambda) / lambda
  
  beta_new <- solve(t(X) %*% W %*% X) %*% t(X) %*% W %*% z
  
  if (sum(abs(beta_new - beta)) < tol) {
    cat("Konvergen pada iterasi ke-", i, "\n")
    break
  }
  beta <- beta_new
}
## Konvergen pada iterasi ke- 8
beta  # hasil estimasi
##        [,1]
##   0.4494951
## x 0.8600048

Perbandingan dengan glm()

model_glm <- glm(y ~ x, family = poisson)
summary(model_glm)
## 
## Call:
## glm(formula = y ~ x, family = poisson)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.44950    0.08872   5.066 4.05e-07 ***
## x            0.86000    0.07463  11.523  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.05  on 99  degrees of freedom
## Residual deviance: 106.78  on 98  degrees of freedom
## AIC: 325.76
## 
## Number of Fisher Scoring iterations: 5
  • IRLS memberikan cara iteratif untuk menghitung estimasi MLE dalam regresi Poisson.

  • Hasil manual IRLS sangat mendekati hasil glm() dari R.

  • Metode ini memberikan pemahaman mendalam atas mekanisme di balik fungsi glm().

Pengujian hipotesis Uji Wald

Untuk menguji H0: β = 0

# Koefisien dan standar error
coef_val <- coef(model)[2]
se_val <- summary(model)$coefficients[2, 2]

wald_z <- coef_val / se_val
wald_chisq <- wald_z^2
p_value <- 1 - pchisq(wald_chisq, df = 1)

cat("Z:", wald_z, "\nChi-Square:", wald_chisq, "\np-value:", p_value)
## Z: 4.110965 
## Chi-Square: 16.90003 
## p-value: 3.940095e-05

Uji Likelihood Ratio (Chi-Square)

model_null <- glm(y ~ 1, family = poisson, data = data)
anova(model_null, model, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: y ~ 1
## Model 2: y ~ x
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1        99     245.05                          
## 2        98     114.76  1   130.29 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Evaluasi Model (AIC & BIC)

AIC(model)
## [1] 118.7598
BIC(model)
## [1] 123.9701
  • Estimasi parameter regresi Poisson dilakukan menggunakan MLE

  • Uji Wald dan Likelihood Ratio digunakan untuk pengujian hipotesis

  • AIC dan BIC digunakan untuk evaluasi dan pemilihan model terbaik

10 Regresi Logistik dengan Prediktor Nominal, Ordinal, dan Rasio

Regresi logistik merupakan salah satu metode analisis statistik yang digunakan untuk memodelkan hubungan antara satu variabel respons biner (dua kategori) dengan satu atau lebih variabel prediktor. Dalam penerapannya, prediktor yang digunakan dapat memiliki skala pengukuran berbeda, yaitu:

  • Nominal: Variabel yang tidak memiliki urutan logis antar kategorinya, hanya sebagai pembeda. Contoh: jenis kelamin (laki-laki, perempuan). Dalam analisis regresi logistik, data nominal diubah menjadi variabel dummy (misal: Female = 1, Male = 0).

  • Ordinal: Variabel yang memiliki urutan logis antar kategori, tetapi jarak antar kategori belum tentu sama. Contoh: tingkat pendidikan (SMA < Sarjana < Master < Doktor). Dalam analisis, variabel ordinal bisa diperlakukan:

    • Sebagai nominal dengan membuat dummy untuk setiap kategori.
    • Atau diperlakukan seperti rasio dengan memberi nilai tertentu (misalnya SMA = 1, Sarjana = 2, Master = 3, Doktor = 4) untuk mencerminkan urutan dan jarak antar tingkatannya.
  • Rasio: Variabel numerik kontinu yang memiliki nol absolut dan rasio bermakna. Contoh: pendapatan (dalam juta rupiah per bulan). Data ini dapat langsung digunakan dalam model tanpa transformasi khusus.

10.1 Simulasi Data

Kita membuat dataset simulasi dengan 500 observasi.

# Simulasi variabel
n <- 500

gender <- sample(c("Male", "Female"), n, replace = TRUE)
education <- sample(c("HighSchool", "Bachelor", "Master", "PhD"), n, replace = TRUE, prob = c(0.4, 0.3, 0.2, 0.1))
income <- rnorm(n, mean = 50, sd = 15)

logit_p <- -2 + 0.5 * (gender == "Female") + 0.8 * as.numeric(factor(education, ordered=TRUE)) + 0.03 * income
p <- 1 / (1 + exp(-logit_p))

set.seed(123)
success <- rbinom(n, 1, p)

sim_data <- tibble(success, gender, education, income)

head(sim_data)
## # A tibble: 6 × 4
##   success gender education  income
##     <int> <chr>  <chr>       <dbl>
## 1       0 Female Bachelor     20.9
## 2       1 Female HighSchool   51.6
## 3       1 Male   HighSchool   59.1
## 4       0 Female HighSchool   28.2
## 5       0 Male   HighSchool   57.2
## 6       1 Male   PhD          37.6

Interpretasi: Dataset berisi 500 observasi dengan variabel gender, pendidikan, income, dan status keberhasilan.

10.2 Eksplorasi Data

sim_data %>%
  dplyr::group_by(success) %>%
  dplyr::summarise(
    Jumlah = dplyr::n(),
    Rata2_Income = mean(income)
  )
## # A tibble: 2 × 3
##   success Jumlah Rata2_Income
##     <int>  <int>        <dbl>
## 1       0    114         45.0
## 2       1    386         52.4

Interpretasi: Distribusi jumlah sukses dan tidak sukses, serta rata-rata pendapatan pada masing-masing grup.

10.3 Perlakuan Variabel Ordinal

10.3.1 1. Treat sebagai Nominal (Dummy)

sim_data_nominal <- sim_data %>%
  mutate(
    education = factor(education, levels = c("HighSchool", "Bachelor", "Master", "PhD"))
  )

model_nominal <- glm(success ~ gender + education + income, data = sim_data_nominal, family = binomial)
summary(model_nominal)
## 
## Call:
## glm(formula = success ~ gender + education + income, family = binomial, 
##     data = sim_data_nominal)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -0.594172   0.425706  -1.396 0.162794    
## genderMale        -0.048817   0.229659  -0.213 0.831669    
## educationBachelor -0.896055   0.248818  -3.601 0.000317 ***
## educationMaster    1.334624   0.413217   3.230 0.001239 ** 
## educationPhD       1.266342   0.633203   2.000 0.045511 *  
## income             0.039382   0.008029   4.905 9.35e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 536.85  on 499  degrees of freedom
## Residual deviance: 467.28  on 494  degrees of freedom
## AIC: 479.28
## 
## Number of Fisher Scoring iterations: 5

Keterangan: Model menggunakan education sebagai variabel dummy, baseline “HighSchool”. Setiap koefisien membandingkan kategori terhadap baseline.

Interpretasi Koefisien

Intercept (+0.165503)

  • Ini adalah log-odds dasar untuk individu berjenis kelamin Female, berpendidikan HighSchool, dan memiliki income = 0.

  • Tidak signifikan (p = 0.707085), artinya baseline ini tidak berbeda secara signifikan dari probabilitas 50%.

  • Odds Ratio = 1.18: Peluang sukses sedikit lebih besar daripada baseline, namun tidak signifikan.

genderMale (-0.524415)

  • Individu Male memiliki log-odds sukses yang lebih rendah sebesar 0.5 dibandingkan Female (referensi).

  • p = 0.027035 (signifikan di level 5%), menunjukkan bahwa ada indikasi laki-laki memiliki peluang sukses yang lebih rendah dibandingkan perempuan.

  • Odds Ratio = 0.59: Peluang sukses laki-laki sekitar 59% dari peluang sukses perempuan.

educationBachelor (-1.022694)

  • Individu dengan pendidikan Bachelor memiliki log-odds sukses yang lebih rendah sebesar -1.023 dibandingkan dengan HighSchool.

  • p = 0.0000 (sangat signifikan), berarti pendidikan Bachelor justru dikaitkan dengan probabilitas sukses yang lebih rendah dibanding HighSchool.

  • Odds Ratio = 0.36: Peluang sukses individu Bachelor hanya 36% dari peluang individu HighSchool.

educationMaster (+2.087935)

  • Individu dengan pendidikan Master memiliki log-odds sukses lebih tinggi sebesar 2.087935 dibanding HighSchool.

  • p = 0.0007 (signifikan), menunjukkan pendidikan Master meningkatkan peluang sukses dibanding HighSchool.

  • Odds Ratio = 8.07: Peluang sukses individu Master sekitar 8 kali lebih besar dibanding individu HighSchool.

educationPhD (+1.155966)

  • Individu dengan pendidikan PhD memiliki log-odds sukses lebih tinggi sebesar 1.16 dibanding HighSchool.

  • p = 0.021804 (signifikan), menunjukkan pendidikan PhD meningkatkan peluang sukses secara signifikan dibanding HighSchool.

  • Odds Ratio = 3.18: Peluang sukses individu PhD sekitar 3 kali lebih besar dibanding individu HighSchool.

income (+0.0307)

  • Setiap kenaikan 1 unit income (misal, 1 juta), meningkatkan log-odds sukses sebesar 0.0307.

  • p = 0.000115 (sangat signifikan), artinya pendapatan berhubungan positif dengan peluang sukses.

  • Odds Ratio = 1.031: Setiap tambahan 1 juta meningkatkan peluang sukses sekitar 3.1%.

Interpretasi Goodness-of-Fit

  • Null deviance (551.08): Deviance model tanpa prediktor.

  • Residual deviance (502.90): Deviance model dengan prediktor.

    • Penurunan dari null deviance ke residual deviance menunjukkan model membawa informasi yang cukup baik.
  • AIC (459.21):

    • Digunakan untuk membandingkan model: semakin kecil AIC, semakin baik model dalam menyeimbangkan goodness-of-fit dan kompleksitas.

Signifikansi Model

  • Variabel income dan education (Master dan PhD) signifikan meningkatkan peluang sukses.

  • Variabel gender menunjukkan tren, dan signifikan pada taraf 5%.

  • Pendidikan Bachelor justru diasosiasikan dengan penurunan peluang sukses dibandingkan HighSchool dalam data ini, yang mungkin terjadi akibat struktur data simulasi.

Kesimpulan Praktis

  • Income dan tingkat pendidikan yang lebih tinggi (Master dan PhD) merupakan prediktor kuat untuk peluang sukses.

  • Gender berpotensi berpengaruh tetapi perlu data tambahan untuk konfirmasi.

  • Model cukup baik dalam memprediksi dibandingkan model null, namun ada ruang untuk peningkatan dengan mungkin menambahkan variabel lain.

10.3.2 2. Treat sebagai Rasio (Numeric Rank)

sim_data_numeric <- sim_data %>%
  mutate(
    education_numeric = case_when(
      education == "HighSchool" ~ 1,
      education == "Bachelor" ~ 2,
      education == "Master" ~ 3,
      education == "PhD" ~ 4
    )
  )

model_numeric <- glm(success ~ gender + education_numeric + income, data = sim_data_numeric, family = binomial)
summary(model_numeric)
## 
## Call:
## glm(formula = success ~ gender + education_numeric + income, 
##     family = binomial, data = sim_data_numeric)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -1.099086   0.457804  -2.401  0.01636 *  
## genderMale        -0.052597   0.220118  -0.239  0.81115    
## education_numeric  0.372889   0.122763   3.037  0.00239 ** 
## income             0.033720   0.007569   4.455 8.39e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 536.85  on 499  degrees of freedom
## Residual deviance: 506.19  on 496  degrees of freedom
## AIC: 514.19
## 
## Number of Fisher Scoring iterations: 4

Interpretasi: Model menggunakan education sebagai angka bertingkat 1–4. Koefisien education_numeric mengukur efek kenaikan satu tingkat pendidikan terhadap peluang sukses.

Perbandingan Model

list(
  AIC_Nominal = AIC(model_nominal),
  AIC_Numeric = AIC(model_numeric)
)
## $AIC_Nominal
## [1] 479.2832
## 
## $AIC_Numeric
## [1] 514.1855

Keterangan: Model dengan nilai AIC lebih kecil lebih disukai. Membandingkan mana yang lebih baik: treat education sebagai nominal atau numeric.

Interpretasi Koefisien

Intercept (-0.658626) - Ini adalah log-odds dasar untuk individu Female, berpendidikan HighSchool (education_numeric = 1), dan income = 0. - Tidak signifikan (p = 0.153931), artinya baseline ini tidak berbeda secara signifikan dari probabilitas 50%. - Odds Ratio = 0.518: Peluang sukses dasar lebih kecil dari baseline, namun tidak signifikan.

genderMale (-0.565786) - Individu Male memiliki log-odds sukses yang lebih rendah sebesar 0.566 dibandingkan Female (referensi). - p = 0.011737 (signifikan pada taraf 5%), menunjukkan bahwa laki-laki memiliki peluang sukses lebih rendah dibandingkan perempuan. - Odds Ratio = 0.568: Peluang sukses laki-laki sekitar 57% dari peluang sukses perempuan.

education_numeric (+0.399473) - Setiap kenaikan satu tingkat pendidikan (HighSchool -> Bachelor -> Master -> PhD) meningkatkan log-odds sukses sebesar 0.399. - p = 0.000706 (sangat signifikan), menunjukkan bahwa semakin tinggi tingkat pendidikan, semakin besar peluang sukses. - Odds Ratio = 1.491: Setiap kenaikan satu tingkat pendidikan meningkatkan peluang sukses sekitar 49%.

income (+0.030055) - Setiap kenaikan 1 unit income (misal, 1 juta), meningkatkan log-odds sukses sebesar 0.030. - p = 0.000182 (sangat signifikan), artinya pendapatan berhubungan positif dengan peluang sukses. - Odds Ratio = 1.030: Setiap tambahan 1 juta meningkatkan peluang sukses sekitar 3.0%.

Interpretasi Goodness-of-Fit

  • Null deviance (531.92): Deviance model tanpa prediktor.
  • Residual deviance (500.24): Deviance model dengan prediktor.
    • Penurunan dari null deviance ke residual deviance menunjukkan bahwa prediktor memberikan tambahan informasi yang berarti.
  • AIC (508.24):
    • Digunakan untuk membandingkan model: semakin kecil AIC, semakin baik keseimbangan antara goodness-of-fit dan kompleksitas model.

Signifikansi Model

  • Variabel income dan education_numeric sangat signifikan dalam meningkatkan peluang sukses.
  • Gender juga berpengaruh secara signifikan, di mana laki-laki memiliki odds lebih rendah.

Kesimpulan Praktis

  • Semakin tinggi tingkat pendidikan, semakin besar peluang untuk sukses.
  • Pendapatan yang lebih tinggi secara konsisten meningkatkan peluang sukses.
  • Gender memiliki efek: perempuan memiliki peluang sukses lebih besar dibanding laki-laki.
  • Model memiliki performa yang cukup baik, namun seperti biasa, bisa ditingkatkan lagi dengan mempertimbangkan tambahan variabel lain.

Goodness-of-Fit Model

nullmod <- glm(success ~ 1, data = sim_data, family = binomial)
r2_nominal <- 1 - (logLik(model_nominal)/logLik(nullmod))
r2_numeric <- 1 - (logLik(model_numeric)/logLik(nullmod))

list(
  McFadden_R2_Nominal = r2_nominal,
  McFadden_R2_Numeric = r2_numeric
)
## $McFadden_R2_Nominal
## 'log Lik.' 0.1295807 (df=6)
## 
## $McFadden_R2_Numeric
## 'log Lik.' 0.05711641 (df=4)

Interpretasi: McFadden’s R² mengukur goodness-of-fit. Semakin besar nilainya, semakin baik model memprediksi dibandingkan model null.

Visualisasi Prediksi

sim_data_nominal <- sim_data_nominal %>% mutate(predicted = predict(model_nominal, type = "response"))
sim_data_numeric <- sim_data_numeric %>% mutate(predicted = predict(model_numeric, type = "response"))

# Plot untuk model nominal
sim_data_nominal %>%
  ggplot(aes(x = income, y = predicted, color = education)) +
  geom_point(alpha = 0.6) +
  labs(title = "Prediksi Probabilitas (Ordinal sebagai Nominal)", x = "Income", y = "Prediksi Probabilitas") +
  theme_minimal()

# Plot untuk model numeric
sim_data_numeric %>%
  ggplot(aes(x = income, y = predicted, color = as.factor(education_numeric))) +
  geom_point(alpha = 0.6) +
  labs(title = "Prediksi Probabilitas (Ordinal sebagai Numeric)", x = "Income", y = "Prediksi Probabilitas") +
  theme_minimal()

Interpretasi: Visualisasi hubungan antara pendapatan dan probabilitas sukses berdasarkan tingkat pendidikan, dengan dua pendekatan perlakuan ordinal.

Ringkasan Koefisien Model

library(knitr)
library(kableExtra)

# Ringkasan model nominal
tidy(model_nominal) %>%
  kable(format = "latex", booktabs = TRUE, caption = "Ringkasan Koefisien Model dengan Ordinal sebagai Nominal") %>%
  kable_styling(latex_options = c("hold_position", "striped"))
# Ringkasan model numeric
tidy(model_numeric) %>%
  kable(format = "latex", booktabs = TRUE, caption = "Ringkasan Koefisien Model dengan Ordinal sebagai Numeric") %>%
  kable_styling(latex_options = c("hold_position", "striped"))

Interpretasi: Tabel memperlihatkan estimasi koefisien, standar error, nilai z, dan p-value. Koefisien positif meningkatkan log-odds keberhasilan, koefisien negatif menurunkan.

Kesimpulan

  • Gender: Perempuan memiliki peluang sukses lebih tinggi dibanding laki-laki.
  • Education:
    • Jika dianggap dummy: tiap jenjang dibandingkan langsung dengan HighSchool.
    • Jika dianggap numeric: tiap kenaikan satu tingkat pendidikan meningkatkan peluang sukses.
  • Income: Pendapatan yang lebih tinggi meningkatkan peluang sukses.

Model dengan perlakuan ordinal sebagai numeric memiliki interpretasi lebih sederhana jika asumsi jarak antar tingkatannya konsisten.


Catatan: Semua hasil berbasis data simulasi, sehingga hasil bisa berbeda jika menggunakan data nyata.

11 Pemilihan Model Regresi Logistik dan Evaluasi

11.1 Membangun Model Regresi Logistik: Pendekatan Confirmatory dan Exploratory

Dalam analisis regresi logistik, pemilihan model sangat krusial untuk mendapatkan model yang baik dalam memprediksi probabilitas kejadian suatu peristiwa (respon biner). Dua pendekatan utama dalam membangun model adalah pendekatan Confirmatory dan Exploratory.

  1. Confirmatory (Pendekatan Konfirmatori)

Pendekatan ini digunakan ketika peneliti telah memiliki teori atau hipotesis yang jelas mengenai efek atau hubungan antara variabel prediktor dan respon.

Ciri-ciri:

  • Model dibangun berdasarkan teori atau hasil penelitian sebelumnya.

  • Tujuan utamanya adalah menguji apakah efek tersebut benar-benar signifikan, bukan sekadar mencari model terbaik.

  • Peneliti biasanya menyusun model penuh terlebih dahulu, lalu menguji apakah penambahan atau pengurangan suatu efek (misalnya, interaksi) memberikan peningkatan model secara signifikan.

  • Uji signifikansi dilakukan dengan membandingkan model dengan efek tertentu dan model tanpa efek tersebut, misalnya dengan Likelihood Ratio Test.

Contoh penggunaan:

Misalnya, teori menyatakan bahwa faktor x1 dan x2 mempengaruhi probabilitas seseorang membeli produk. Maka model logistik dibangun langsung dengan x1 dan x2, lalu diuji apakah kontribusi x2 benar-benar signifikan.

  1. Exploratory (Pendekatan Eksploratori)

Pendekatan ini digunakan ketika peneliti belum memiliki teori yang pasti atau ingin mengeksplorasi hubungan potensial antar variabel.

Ciri-ciri:

  • Model dibangun secara bertahap dengan tujuan menemukan kombinasi prediktor terbaik.

  • Pemilihan variabel dilakukan berdasarkan kriteria statistik, seperti AIC, deviance, atau log-likelihood.

Proses seleksi dilakukan melalui:

  • Forward Selection: Mulai dari model kosong, satu per satu variabel dimasukkan jika signifikan.

  • Backward Elimination: Mulai dari model penuh, variabel yang tidak signifikan dikeluarkan.

  • Stepwise Selection: Gabungan dari keduanya, variabel dapat masuk dan keluar secara dinamis.

Tujuan:

Menemukan model yang parsimonious, yaitu cukup sederhana namun memiliki performa prediksi yang baik.

Pemilihan antara pendekatan Confirmatory dan Exploratory bergantung pada tujuan penelitian. Jika ingin menguji hipotesis tertentu, gunakan pendekatan Confirmatory. Jika ingin menemukan model terbaik berdasarkan data, gunakan pendekatan Exploratory. Dalam praktiknya, kedua pendekatan ini sering digunakan secara komplementer: teori digunakan sebagai dasar, dan seleksi eksploratori dilakukan untuk menyempurnakan model.

Simulasi Data

library(knitr)
library(dplyr)
library(ggplot2)
library(MASS)
library(caret)
library(pROC)
library(DescTools)
set.seed(123)
n <- 200
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -0.5 + 1.2 * x1 - 0.8 * x2 + 0.5 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
df <- data.frame(y = as.factor(y), x1, x2, x3)
head(df)
##   y          x1 x2         x3
## 1 0 -0.56047565  1 -0.7152422
## 2 0 -0.23017749  0 -0.7526890
## 3 1  1.55870831  1 -0.9385387
## 4 1  0.07050839  1 -1.0525133
## 5 1  0.12928774  0 -0.4371595
## 6 1  1.71506499  0  0.3311792

Pemilihan Model

Model Full

model_full <- glm(y ~ x1 + x2 + x3, data = df, family = binomial)
summary(model_full)
## 
## Call:
## glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.7148     0.2470  -2.894  0.00381 ** 
## x1            1.4029     0.2315   6.061 1.35e-09 ***
## x2           -0.2507     0.3463  -0.724  0.46903    
## x3            0.3567     0.1704   2.094  0.03630 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 257.72  on 199  degrees of freedom
## Residual deviance: 202.67  on 196  degrees of freedom
## AIC: 210.67
## 
## Number of Fisher Scoring iterations: 4

11.2 Metode Stepwise: Forward, Backward, dan Kedua Arah

null_model <- glm(y ~ 1, data = df, family = binomial)
step_forward <- step(null_model, direction = "forward", scope = formula(model_full), trace = FALSE)
step_backward <- step(model_full, direction = "backward", trace = FALSE)
step_both <- step(null_model, direction = "both", scope = formula(model_full), trace = FALSE)
AIC(model_full, step_forward, step_backward, step_both)
##               df      AIC
## model_full     4 210.6739
## step_forward   3 209.1998
## step_backward  3 209.1998
## step_both      3 209.1998

11.3 Evaluasi Model: ROC dan AUC

pred_prob <- predict(step_both, type = "response")
roc_obj <- roc(df$y, pred_prob)
plot(roc_obj, main = "Kurva ROC", col = "blue")

auc(roc_obj)
## Area under the curve: 0.7964

11.4 Pseudo R-Squared

PseudoR2(step_both, which = c("CoxSnell", "Nagelkerke", "McFadden"))
##   CoxSnell Nagelkerke   McFadden 
##  0.2385981  0.3294000  0.2115439

11.5 Tabel Klasifikasi dan Evaluasi

pred_class <- ifelse(pred_prob >= 0.5, 1, 0)
conf_matrix <- confusionMatrix(factor(pred_class), df$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 116  32
##          1  15  37
##                                        
##                Accuracy : 0.765        
##                  95% CI : (0.7, 0.8219)
##     No Information Rate : 0.655        
##     P-Value [Acc > NIR] : 0.0005028    
##                                        
##                   Kappa : 0.4478       
##                                        
##  Mcnemar's Test P-Value : 0.0196041    
##                                        
##             Sensitivity : 0.5362       
##             Specificity : 0.8855       
##          Pos Pred Value : 0.7115       
##          Neg Pred Value : 0.7838       
##              Prevalence : 0.3450       
##          Detection Rate : 0.1850       
##    Detection Prevalence : 0.2600       
##       Balanced Accuracy : 0.7109       
##                                        
##        'Positive' Class : 1            
## 
conf_matrix$byClass[c("Sensitivity", "Specificity")]
## Sensitivity Specificity 
##   0.5362319   0.8854962

Model terbaik berdasarkan AIC adalah model r names(which.min(c(AIC(model_full), AIC(step_forward), AIC(step_backward), AIC(step_both))). ROC menunjukkan r round(auc(roc_obj), 2) yang cukup baik. Pseudo-R² dan hasil klasifikasi juga menunjukkan model cukup akurat.

11.6 Metode Perbandingan Model dalam Regresi Logistik”

Tujuan

Dokumen ini menyajikan cara membandingkan model regresi logistik menggunakan ukuran: - Deviance - AIC (Akaike Information Criterion) - Likelihood-Ratio

serta menjelaskan prinsip Parsimony dalam pemilihan model.

library(MASS)
library(broom)
library(DescTools)
set.seed(123)

Simulasi Data

n <- 300
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -1 + 1.2 * x1 - 0.6 * x2 + 0.8 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)

Pembuatan Model

model1 <- glm(y ~ x1, data = data, family = binomial)
model2 <- glm(y ~ x1 + x2, data = data, family = binomial)
model3 <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)

Perbandingan AIC dan Deviance

model_comp <- data.frame(
  Model = c("Model 1", "Model 2", "Model 3"),
  AIC = c(AIC(model1), AIC(model2), AIC(model3)),
  Deviance = c(deviance(model1), deviance(model2), deviance(model3))
)
model_comp
##     Model      AIC Deviance
## 1 Model 1 306.2741 302.2741
## 2 Model 2 305.8225 299.8225
## 3 Model 3 278.4581 270.4581

11.7 Likelihood-Ratio Test

anova(model1, model2, test = "LRT")
## Analysis of Deviance Table
## 
## Model 1: y ~ x1
## Model 2: y ~ x1 + x2
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       298     302.27                     
## 2       297     299.82  1   2.4516   0.1174
anova(model2, model3, test = "LRT")
## Analysis of Deviance Table
## 
## Model 1: y ~ x1 + x2
## Model 2: y ~ x1 + x2 + x3
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       297     299.82                          
## 2       296     270.46  1   29.364 5.997e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

11.8 Prinsip Parsimony

Model yang kompleks sering memiliki AIC dan deviance yang lebih kecil. Namun: - Model sederhana lebih mudah diinterpretasikan. - Jika penurunan AIC tidak signifikan, pilih model lebih sederhana. - Parsimony mencegah overfitting.

Rumus dan Penjelasan

Rumus AIC

\[ \text{AIC} = -2(\log L - k) = -2 \log L + 2k \]

Penjelasan: AIC adalah ukuran untuk menilai model berdasarkan kombinasi antara goodness-of-fit (melalui log-likelihood) dan kompleksitas (melalui jumlah parameter \(k\)). Semakin kecil AIC, semakin baik model tersebut secara keseluruhan karena AIC menghukum model yang terlalu kompleks meskipun memiliki likelihood tinggi.

Rumus Deviance

\[ D = -2 \left[ \log L(\text{model}) - \log L(\text{model saturasi}) \right] \]

Penjelasan: Deviance mengukur seberapa jauh model saat ini dibandingkan dengan model sempurna (model saturasi). Nilai deviance yang kecil menunjukkan model memberikan prediksi yang mendekati data aktual.

Rumus Likelihood-Ratio

\[ G^2 = -2 (\log L_0 - \log L_1) \]

Penjelasan: Statistik Likelihood Ratio digunakan untuk menguji apakah penambahan variabel dalam model secara signifikan meningkatkan kecocokan model. Jika \(G^2\) besar dan p-value kecil, maka model kompleks lebih baik dari model sederhana secara statistik.

11.9 Evaluasi Tabel Klasifikasi dan Akurasi Model

pred_prob <- predict(model3, type = "response")
pred_class <- factor(ifelse(pred_prob >= 0.5, 1, 0))
conf_matrix <- confusionMatrix(pred_class, data$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 193  48
##          1  18  41
##                                           
##                Accuracy : 0.78            
##                  95% CI : (0.7288, 0.8256)
##     No Information Rate : 0.7033          
##     P-Value [Acc > NIR] : 0.0017748       
##                                           
##                   Kappa : 0.4159          
##                                           
##  Mcnemar's Test P-Value : 0.0003575       
##                                           
##             Sensitivity : 0.4607          
##             Specificity : 0.9147          
##          Pos Pred Value : 0.6949          
##          Neg Pred Value : 0.8008          
##              Prevalence : 0.2967          
##          Detection Rate : 0.1367          
##    Detection Prevalence : 0.1967          
##       Balanced Accuracy : 0.6877          
##                                           
##        'Positive' Class : 1               
## 

11.9.1 Sensitivitas dan Spesifisitas

  • Sensitivitas: Kemampuan model mendeteksi kelas positif secara benar (True Positive Rate)

\[ \text{Sensitivity} = \frac{\text{TP}}{\text{TP + FN}} \]

  • Spesifisitas: Kemampuan model mendeteksi kelas negatif secara benar (True Negative Rate)

\[ \text{Specificity} = \frac{\text{TN}}{\text{TN + FP}} \]

conf_matrix$byClass[c("Sensitivity", "Specificity")]
## Sensitivity Specificity 
##   0.4606742   0.9146919

Kesimpulan

  • Deviance yang kecil menunjukkan kecocokan model yang lebih baik.
  • AIC yang rendah menunjukkan keseimbangan antara kecocokan dan kompleksitas.
  • Likelihood Ratio Test mengevaluasi apakah model kompleks secara signifikan lebih baik.
  • Tabel klasifikasi membantu menilai kinerja prediksi aktual vs prediksi model.
  • Prinsip Parsimony mengutamakan model sederhana jika performanya mirip.

11.10 Detail ROCPenjelasan Kurva ROC (Receiver Operating Characteristic)

Kurva ROC adalah alat visual yang digunakan untuk mengevaluasi performa model klasifikasi biner. Kurva ini menunjukkan trade-off antara True Positive Rate (Sensitivity) dan False Positive Rate (1 - Specificity) pada berbagai threshold klasifikasi.

  1. Definisi
  • Sumbu Y: Sensitivity = True Positive Rate = TP / (TP + FN)

  • Sumbu X: 1 - Specificity = False Positive Rate = FP / (FP + TN)

  • Garis diagonal (dari kiri bawah ke kanan atas) menunjukkan performa acak (random guess).

  • Kurva yang mendekati pojok kiri atas menunjukkan performa klasifikasi yang lebih baik.

  1. Cut-off dan Pergerakan Kurva

Saat cut-off menurun, model mengklasifikasikan lebih banyak pengamatan sebagai positif:

  • Sensitivitas naik

  • Spesifisitas turun

Saat cut-off naik, model menjadi lebih konservatif:

  • Sensitivitas turun

  • Spesifisitas naik

  1. Kurva ROC Ideal

Kurva ideal memiliki bentuk:

  • Naik tajam secara vertikal hingga mencapai sensitivitas = 1

  • Lalu bergerak secara horizontal menuju 1 - specificity = 1

  • Area under the curve (AUC) mendekati 1

  1. Interpretasi Luas Area (AUC)
  • AUC = 0.5: model tidak lebih baik dari tebak acak

  • AUC > 0.7: model cukup baik

  • AUC > 0.9: model sangat baik

  • AUC dikenal juga sebagai concordance index, yaitu probabilitas bahwa model memberikan nilai skor probabilitas yang lebih tinggi untuk kasus positif daripada kasus negatif.

  1. Kegunaan Kurva ROC
  • Untuk membandingkan performa beberapa model klasifikasi

  • Untuk memilih threshold (cut-off) optimal berdasarkan kebutuhan aplikasi (misalnya: lebih penting menghindari false negative atau false positive?)

  1. Visualisasi dalam R

Kurva ROC dapat dibuat menggunakan package pROC:

library(pROC)
set.seed(123)
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
x3 <- rnorm(200)
lin_pred <- -1 + 1.5 * x1 - 0.7 * x2 + 0.6 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(200, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
pred <- predict(model, type = "response")
roc_obj <- roc(data$y, pred)
plot(roc_obj)

auc(roc_obj)
## Area under the curve: 0.8686
  1. Simulasi Pemilihan Threshold Optimal

Untuk memilih threshold terbaik, kita bisa mengevaluasi sensitivitas dan spesifisitas pada berbagai cut-off.

thresholds <- seq(0.1, 0.9, by = 0.05)
results <- data.frame(Threshold = thresholds)

results$Sensitivity <- sapply(thresholds, function(t) {
  pred_class <- ifelse(pred >= t, 1, 0)
  cm <- table(Pred = pred_class, Obs = data$y)
  TP <- cm["1", "1"]
  FN <- cm["0", "1"]
  TP / (TP + FN)
})

results$Specificity <- sapply(thresholds, function(t) {
  pred_class <- ifelse(pred >= t, 1, 0)
  cm <- table(Pred = pred_class, Obs = data$y)
  TN <- cm["0", "0"]
  FP <- cm["1", "0"]
  TN / (TN + FP)
})

print(results)
##    Threshold Sensitivity Specificity
## 1       0.10  0.91489362   0.5947712
## 2       0.15  0.85106383   0.6862745
## 3       0.20  0.80851064   0.7320261
## 4       0.25  0.76595745   0.7712418
## 5       0.30  0.72340426   0.8104575
## 6       0.35  0.68085106   0.8366013
## 7       0.40  0.61702128   0.8954248
## 8       0.45  0.59574468   0.9150327
## 9       0.50  0.51063830   0.9281046
## 10      0.55  0.51063830   0.9477124
## 11      0.60  0.42553191   0.9607843
## 12      0.65  0.36170213   0.9738562
## 13      0.70  0.29787234   0.9803922
## 14      0.75  0.19148936   0.9869281
## 15      0.80  0.12765957   0.9869281
## 16      0.85  0.06382979   1.0000000
## 17      0.90  0.02127660   1.0000000

Cut-off optimal bisa dipilih berdasarkan:

Maksimum dari Sensitivity + Specificity

Atau mempertimbangkan trade-off sesuai tujuan aplikasi (misalnya: jika False Negative harus dihindari, maka prioritaskan sensitivitas tinggi)

  1. Catatan

ROC cocok saat proporsi kelas seimbang

Untuk data dengan kelas tidak seimbang, precision-recall curve bisa lebih informatif

11.11 Precision-Recall Curve (PR Curve)

Penjelasan Precision-Recall Curve

Kurva Precision-Recall (PR) adalah alat evaluasi performa model klasifikasi, khususnya sangat berguna saat bekerja dengan data yang tidak seimbang (class imbalance).

1. Definisi

  • Precision (Presisi): Proporsi prediksi positif yang benar-benar positif

\[ \text{Precision} = \frac{TP}{TP + FP} \]

  • Recall (Sensitivitas): Proporsi kasus positif yang berhasil diprediksi positif

\[ \text{Recall} = \frac{TP}{TP + FN} \]

2. Interpretasi

  • PR Curve menunjukkan bagaimana presisi berubah saat recall meningkat.

  • Idealnya, kita ingin nilai presisi dan recall keduanya tinggi, tetapi biasanya ada trade-off.

  • Model dengan performa baik memiliki PR Curve yang melengkung ke pojok kanan atas.

3. Area Under PR Curve

  • Luas kurva (AUPRC) mendekati 1 berarti model sangat baik.

  • Baseline AUPRC = prevalensi kelas positif dalam data.

4. PR Curve vs ROC Curve

Aspek ROC Curve Precision-Recall Curve
Fokus Semua kelas Kelas positif saja
Kuat di Data seimbang Data tidak seimbang
Sumbu Y Sensitivitas (Recall) Precision
Sumbu X 1 - Spesifisitas Recall

5. Visualisasi PR Curve di R

library(PRROC)
set.seed(123)
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
x3 <- rnorm(200)
lin_pred <- -1 + 1.5 * x1 - 0.7 * x2 + 0.6 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(200, 1, p)
data <- data.frame(y = y, x1, x2, x3)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
prob <- predict(model, type = "response")

pr <- pr.curve(scores.class0 = prob[data$y == 1],
               scores.class1 = prob[data$y == 0],
               curve = TRUE)
plot(pr)

6. Catatan

  • PR Curve sangat informatif untuk aplikasi seperti deteksi penipuan atau diagnosis penyakit langka.
  • Gunakan PR Curve saat:
    • Kelas positif jauh lebih jarang daripada kelas negatif
    • Tujuan aplikasi lebih mementingkan presisi terhadap kelas minoritas

11.12 Pseudo R-squared pada Regresi Logistik

Tujuan

Dokumen ini menjelaskan dan menghitung pseudo R-squared dalam regresi logistik:

  • \(R^2_{\text{Cox\\ and\\ Snell}}\)

  • \(R^2_{\text{McFadden}}\)

Simulasi Data

set.seed(123)
n <- 300
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -1 + 1.2 * x1 - 0.6 * x2 + 0.8 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)

Model Logistik dan Null Model

model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
model_null <- glm(y ~ 1, data = data, family = binomial)

Likelihood dan Rumus

\[ R^2_{\mathrm{Cox\ and\ Snell}} = 1 - \left(\frac{L_0}{L_M}\right)^{2/n} \]

\[ R^2_{\mathrm{McFadden}} = 1 - \frac{\log L_M}{\log L_0} \]

Dengan:

  • \(L_0\): likelihood model null (tanpa prediktor)

  • \(L_M\): likelihood model penuh

Perhitungan Manual R-squared

logL0 <- logLik(model_null)
logLM <- logLik(model)
L0 <- exp(logL0)
LM <- exp(logLM)

n <- nobs(model)

cox_snell <- 1 - (L0 / LM)^(2 / n)
mcfadden <- 1 - (as.numeric(logLM) / as.numeric(logL0))

r2 <- data.frame(
  R2_Cox_Snell = cox_snell,
  R2_McFadden = mcfadden
)
r2
##   R2_Cox_Snell R2_McFadden
## 1    0.2698462   0.2586292

Perhitungan Otomatis dengan Package Tambahan

Menggunakan pscl

if (!require(pscl)) install.packages("pscl"); library(pscl)
pR2(model)
## fitting null model for pseudo-r2
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
## -135.2290328 -182.4040393   94.3500130    0.2586292    0.2698462    0.3835251

Menggunakan rcompanion

if (!require(rcompanion)) install.packages("rcompanion"); library(rcompanion)
nagelkerke(model)
## $Models
##                                               
## Model: "glm, y ~ x1 + x2 + x3, binomial, data"
## Null:  "glm, y ~ 1, binomial, data"           
## 
## $Pseudo.R.squared.for.model.vs.null
##                              Pseudo.R.squared
## McFadden                             0.258629
## Cox and Snell (ML)                   0.269846
## Nagelkerke (Cragg and Uhler)         0.383525
## 
## $Likelihood.ratio.test
##  Df.diff LogLik.diff Chisq    p.value
##       -3     -47.175 94.35 2.5468e-20
## 
## $Number.of.observations
##           
## Model: 300
## Null:  300
## 
## $Messages
## [1] "Note: For models fit with REML, these statistics are based on refitting with ML"
## 
## $Warnings
## [1] "None"

Menggunakan DescTools

if (!require(DescTools)) install.packages("DescTools"); library(DescTools)
PseudoR2(model, which = "all")
##        McFadden     McFaddenAdj        CoxSnell      Nagelkerke   AldrichNelson 
##       0.2586292       0.2366998       0.2698462       0.3835251       0.2392545 
## VeallZimmermann           Efron McKelveyZavoina            Tjur             AIC 
##       0.4360055       0.2893849       0.4315315       0.2936202     278.4580657 
##             BIC          logLik         logLik0              G2 
##     293.2731956    -135.2290328    -182.4040393      94.3500130

Interpretasi

  • Nilai \(R^2\) mendekati 1 berarti model memiliki kekuatan prediktif yang baik.

  • McFadden R² > 0.2 sering dianggap sebagai model dengan kecocokan yang baik.

  • Cox & Snell R² lebih konservatif dan tidak pernah mencapai 1 penuh.

Gunakan beberapa pendekatan ini sebagai pelengkap untuk menilai performa model logistik secara lebih menyeluruh.

12 Apa itu Distribusi Multinomial

Distribusi multinomial adalah perluasan dari distribusi binomial untuk lebih dari dua kategori.

Jika \(X_1, X_2, \dots, X_k\) menyatakan banyaknya kejadian dalam masing-masing dari \(k\) kategori, maka:

\[ P(X_1 = x_1, \dots, X_k = x_k) = \frac{n!}{x_1! x_2! \dots x_k!} p_1^{x_1} p_2^{x_2} \dots p_k^{x_k} \]

dengan \(\sum_{i=1}^k x_i = n\) dan \(\sum_{i=1}^k p_i = 1\).

12.1 Studi Kasus

Sebuah survei dilakukan terhadap 10 orang yang diminta memilih satu dari tiga jenis buah favorit: Apel (A), Jeruk (J), dan Pisang (P).

Hasil survei:

  • Apel: 4 orang

  • Jeruk: 3 orang

  • Pisang: 3 orang

Probabilitas teoretik preferensi:

  • \(p_A = 0.3\),

  • \(p_J = 0.4\),

  • \(p_P = 0.3\)

Pertanyaannya: > Berapa peluang bahwa dalam 10 orang akan ada 4 yang memilih Apel, 3 memilih Jeruk, dan 3 memilih Pisang?

Rumus Distribusi Multinomial Distribusi peluang multinomial:

\[ P(X_1 = x_1, \dots, X_k = x_k) = \frac{n!}{x_1! x_2! \dots x_k!} p_1^{x_1} p_2^{x_2} \dots p_k^{x_k} \]

dengan:

  • \(n = 10\), \(x_1 = 4\), \(x_2 = 3\), \(x_3 = 3\)

  • \(p_1 = 0.3\), \(p_2 = 0.4\), \(p_3 = 0.3\)

Perhitungan Manual di R

n <- 10
x <- c(4, 3, 3)
p <- c(0.3, 0.4, 0.3)

# Hitung komponen-koefisien
faktorial_total <- factorial(n)
faktorial_x <- prod(factorial(x))
koefisien <- faktorial_total / faktorial_x

# Hitung peluang
peluang <- koefisien * prod(p^x)
peluang
## [1] 0.05878656

Probabilitas bahwa 4 orang memilih Apel, 3 Jeruk, dan 3 Pisang (dengan proporsi preferensi 0.3, 0.4, dan 0.3) adalah 0.058787. Distribusi multinomial digunakan untuk menghitung peluang dalam percobaan dengan beberapa kategori hasil. Rumus dasarnya merupakan generalisasi dari binomial untuk lebih dari dua kategori.

12.2 Multinomial Logistic Regression

Model ini digunakan untuk memodelkan hubungan antara satu variabel respon kategorik (>2 kategori) dan satu atau lebih variabel prediktor.

Misalkan \(Y\) memiliki \(K\) kategori, dan kita pilih referensi (baseline) kategori \(K\), maka model logit untuk kategori \(j\) adalah:

\[ \log\left(\frac{P(Y = j)}{P(Y = K)}\right) = \beta_{j0} + \beta_{j1}x_1 + \cdots + \beta_{jp}x_p \]

untuk \(j = 1, 2, ..., K-1\).

12.2.1 Baseline-category logit model

Baseline-category logit model adalah model regresi logistik untuk variabel respon kategorik dengan lebih dari dua kategori (nominal). Model ini menggunakan satu kategori sebagai acuan (baseline) dan membandingkan kategori lainnya terhadap baseline tersebut dalam bentuk logit.

\[ \log\left(\frac{\pi_j}{\pi_c}\right), \quad j = 1, \ldots, c - 1 \]

dengan:

  • \(\pi_j\) adalah probabilitas respon berada di kategori \(j\)

  • \(\pi_c\) adalah probabilitas respon berada di kategori acuan (baseline)

Maka, terdapat sebanyak \((c - 1)\) fungsi logit.

Catatan: Kategori baseline bisa ditentukan secara eksplisit, tetapi default di R adalah kategori terakhir.

Model Regresi Jika terdapat satu prediktor \(x\), maka bentuk umum model logit-nya adalah:

\[ \log\left(\frac{\pi_j}{\pi_c}\right) = \alpha_j + \beta_j x, \quad j = 1, \ldots, c - 1 \]

Contoh Kasus: 3 Kategori Respon Misalkan respon \(Y\) memiliki tiga kategori: \(Y \in \{1, 2, 3\}\), dan kita gunakan kategori ke-3 sebagai baseline. Maka:

\[ \log\left(\frac{\pi_1}{\pi_3}\right) = \alpha_1 + \beta_1 x \] \[ \log\left(\frac{\pi_2}{\pi_3}\right) = \alpha_2 + \beta_2 x \]

Terdapat dua model logit, satu untuk perbandingan kategori 1 dengan 3, dan satu lagi untuk kategori 2 dengan 3.

Relasi Antar Kategori Jika ingin menghitung logit antara kategori 1 dan 2:

\[ \log\left(\frac{\pi_1}{\pi_2}\right) = \log\left(\frac{\pi_1 / \pi_3}{\pi_2 / \pi_3}\right) = \log\left(\frac{\pi_1}{\pi_3}\right) - \log\left(\frac{\pi_2}{\pi_3}\right) \]

\[ = (\alpha_1 + \beta_1 x) - (\alpha_2 + \beta_2 x) = (\alpha_1 - \alpha_2) + (\beta_1 - \beta_2)x \]

Model baseline-category logit:

  • Digunakan untuk respon dengan kategori > 2

  • Menghasilkan \((c - 1)\) fungsi logit terhadap satu baseline

  • Logit antara kategori selain baseline dapat dihitung dari selisih dua logit terhadap baseline

Implementasi di R menggunakan fungsi multinom() dari package nnet, dan kategori baseline bisa diatur dengan relevel().

12.2.2 Estimasi Parameter

Estimasi dilakukan menggunakan metode maximum likelihood dengan algoritma iteratif seperti Newton-Raphson.

Log-likelihood: \[ \ell(\beta) = \sum_{i=1}^n \sum_{j=1}^{K} y_{ij} \log(\pi_{ij}) \] dengan \(\pi_{ij} = P(Y_i = j | x_i)\) dan \(y_{ij} = 1\) jika \(Y_i = j\).

12.3 Contoh Kasus

Sebuah perusahaan teknologi ingin memahami faktor-faktor yang mempengaruhi preferensi karyawan terhadap jenis perangkat kerja yang diberikan: Laptop, Desktop, atau Tablet.

Perusahaan melakukan survei terhadap 150 karyawan dan mengumpulkan data berikut:

  • Device: Jenis perangkat yang dipilih (Laptop, Desktop, Tablet)

  • Age: Usia karyawan

  • Department: Divisi tempat bekerja (IT, Marketing, HR)

  • Experience: Tahun pengalaman kerja

Tujuannya adalah:

Mengetahui bagaimana usia, divisi, dan pengalaman kerja memengaruhi pilihan perangkat kerja.

12.4 Simulasi Data

set.seed(123)
n <- 150

Department <- sample(c("IT", "Marketing", "HR"), n, replace = TRUE)
Age <- round(rnorm(n, mean = 35, sd = 7))
Experience <- round(pmax(rnorm(n, mean = 7, sd = 3), 0))

# Simulasikan Device berdasarkan probabilitas berbeda per Department
Device <- sapply(Department, function(dep) {
  if (dep == "IT") {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.6, 0.2, 0.2))
  } else if (dep == "Marketing") {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.3, 0.3, 0.4))
  } else {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.4, 0.4, 0.2))
  }
})

df <- data.frame(Device = factor(Device), Age, Department = factor(Department), Experience)
df$Device <- relevel(df$Device, ref = "Laptop")  # baseline
head(df)
##    Device Age Department Experience
## 1 Desktop  36         HR          8
## 2 Desktop  44         HR         10
## 3  Tablet  32         HR          3
## 4  Laptop  37  Marketing          9
## 5  Laptop  34         HR         14
## 6  Tablet  38  Marketing          2

12.5 Estimasi Model

model_mnlogit <- multinom(Device ~ Age + Department + Experience, data = df)
## # weights:  18 (10 variable)
## initial  value 164.791843 
## iter  10 value 153.109490
## final  value 153.057472 
## converged
summary(model_mnlogit)
## Call:
## multinom(formula = Device ~ Age + Department + Experience, data = df)
## 
## Coefficients:
##         (Intercept)         Age DepartmentIT DepartmentMarketing  Experience
## Desktop  -0.1947009  0.00396078  -1.04132876           0.2153637 -0.03133456
## Tablet   -0.2612636 -0.02768129   0.03737652           1.2451673  0.04419583
## 
## Std. Errors:
##         (Intercept)        Age DepartmentIT DepartmentMarketing Experience
## Desktop    1.139007 0.02802812    0.5359687           0.4742033 0.06782814
## Tablet     1.168694 0.02813761    0.5419639           0.4997768 0.06972093
## 
## Residual Deviance: 306.1149 
## AIC: 326.1149

12.6 Nilai P-Value dan Interpretasi

z <- summary(model_mnlogit)$coefficients / summary(model_mnlogit)$standard.errors
pval <- 2 * (1 - pnorm(abs(z)))
round(pval, 4)
##         (Intercept)    Age DepartmentIT DepartmentMarketing Experience
## Desktop      0.8643 0.8876        0.052              0.6497     0.6441
## Tablet       0.8231 0.3252        0.945              0.0127     0.5261

Interpretasi:

  • Koefisien untuk kategori “Desktop” dan “Tablet” dibandingkan dengan baseline “Laptop”

  • Nilai p-value kecil (<0.05) menunjukkan variabel tersebut signifikan memengaruhi preferensi perangkat.

12.7 Prediksi dan Validasi

df$Predicted <- predict(model_mnlogit)
table(Predicted = df$Predicted, Actual = df$Device)
##          Actual
## Predicted Laptop Desktop Tablet
##   Laptop      50      26     21
##   Desktop      3       0      1
##   Tablet      13      15     21

12.8 Kesimpulan

Model regresi logistik multinomial berhasil digunakan untuk:

  • Menganalisis hubungan antara atribut karyawan dan preferensi perangkat kerja

  • Mengetahui faktor signifikan yang memengaruhi pilihan

  • Memungkinkan prediksi jenis perangkat yang dipilih oleh karyawan baru berdasarkan karakteristiknya

12.8.1 Contoh Kasus 2 di R

Kita gunakan dataset iris untuk memodelkan jenis spesies bunga berdasarkan lebar dan panjang kelopak.

data(iris)
iris <- iris %>% mutate(Species = relevel(Species, ref = "setosa"))
model <- multinom(Species ~ Petal.Length + Petal.Width, data = iris)
## # weights:  12 (6 variable)
## initial  value 164.791843 
## iter  10 value 12.657828
## iter  20 value 10.374056
## iter  30 value 10.330881
## iter  40 value 10.306926
## iter  50 value 10.300057
## iter  60 value 10.296452
## iter  70 value 10.294046
## iter  80 value 10.292029
## iter  90 value 10.291154
## iter 100 value 10.289505
## final  value 10.289505 
## stopped after 100 iterations
summary(model)
## Call:
## multinom(formula = Species ~ Petal.Length + Petal.Width, data = iris)
## 
## Coefficients:
##            (Intercept) Petal.Length Petal.Width
## versicolor   -22.79944      6.92122    7.878496
## virginica    -67.82521     12.64721   18.261016
## 
## Std. Errors:
##            (Intercept) Petal.Length Petal.Width
## versicolor     44.3859     37.58715    81.00888
## virginica      46.3939     37.65702    81.09482
## 
## Residual Deviance: 20.57901 
## AIC: 32.57901

Interpretasi Koefisien

z <- summary(model)$coefficients / summary(model)$standard.errors
p_values <- 2 * (1 - pnorm(abs(z)))
round(p_values, 4)
##            (Intercept) Petal.Length Petal.Width
## versicolor      0.6075       0.8539      0.9225
## virginica       0.1438       0.7370      0.8218

Nilai p-value menunjukkan apakah variabel prediktor berpengaruh signifikan terhadap log odds dibanding baseline category.

Prediksi dan Visualisasi

iris$predicted <- predict(model, newdata = iris)
table(Predicted = iris$predicted, Actual = iris$Species)
##             Actual
## Predicted    setosa versicolor virginica
##   setosa         50          0         0
##   versicolor      0         47         3
##   virginica       0          3        47
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = predicted)) +
  geom_point(size = 2) +
  labs(title = "Multinomial Logistic Regression Predictions",
       x = "Petal Length", y = "Petal Width") +
  theme_minimal()

Kesimpulan Multinomial logistic regression efektif digunakan untuk klasifikasi kategori nominal. Model ini memberikan estimasi log-odds terhadap baseline dan prediksi kategori baru berdasarkan kombinasi prediktor.

13 Regresi logistik ordinal

Regresi logistik ordinal digunakan ketika variabel respon \(Y\) bersifat ordinal (memiliki urutan), misalnya tingkat kepuasan: Rendah, Sedang, Tinggi.

Model ini berbeda dengan:

  • Regresi logistik biner: hanya 2 kategori

  • Regresi logistik multinomial: kategori > 2 tetapi tidak berurutan

13.1 Konsep Cumulative Logit Model

Model yang digunakan adalah Cumulative Logit Model dengan asumsi proportional odds:

\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]

  • \(\alpha_j\): intercept khusus untuk kategori ke-\(j\)
  • \(\beta\): koefisien regresi (sama untuk semua kategori kumulatif)

Untuk \(c\) kategori, terdapat \((c - 1)\) model logit kumulatif.

13.2 Interpretasi Koefisien

Koefisien \(\beta\) menjelaskan efek \(x\) terhadap kemungkinan berada pada kategori yang lebih rendah atau sama.

Jika \(\beta > 0\): semakin besar \(x\), semakin tinggi peluang berada di kategori rendah.

Jika \(\beta < 0\): semakin besar \(x\), semakin besar peluang berada di kategori tinggi.

Odds ratio: \[\text{OR} = e^{\beta}\]

13.3 Contoh Data: Kepuasan Pelanggan

Misal kita memiliki data fiktif tingkat kepuasan pelanggan (1: Tidak Puas, 2: Cukup, 3: Puas) terhadap kecepatan layanan:

set.seed(123)
n <- 200
speed <- round(runif(n, 1, 10))
satisfaction <- cut(5 + 0.5*speed + rnorm(n),
                    breaks = c(-Inf, 5.5, 7.5, Inf),
                    labels = c("Tidak Puas", "Cukup", "Puas"),
                    ordered_result = TRUE)
df <- data.frame(satisfaction, speed)
head(df)
##   satisfaction speed
## 1        Cukup     4
## 2         Puas     8
## 3        Cukup     5
## 4         Puas     9
## 5         Puas     9
## 6   Tidak Puas     1

13.4 Estimasi Model Ordinal

model_ord <- polr(satisfaction ~ speed, data = df, Hess = TRUE)
summary(model_ord)
## Call:
## polr(formula = satisfaction ~ speed, data = df, Hess = TRUE)
## 
## Coefficients:
##        Value Std. Error t value
## speed 0.9096     0.1094   8.315
## 
## Intercepts:
##                  Value  Std. Error t value
## Tidak Puas|Cukup 1.3015 0.4377     2.9738 
## Cukup|Puas       4.4734 0.5718     7.8232 
## 
## Residual Deviance: 237.2312 
## AIC: 243.2312

13.5 Nilai P-Value

(ctable <- coef(summary(model_ord)))
##                      Value Std. Error  t value
## speed            0.9095585  0.1093925 8.314630
## Tidak Puas|Cukup 1.3015075  0.4376597 2.973789
## Cukup|Puas       4.4733938  0.5718127 7.823180
p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
(ctable <- cbind(ctable, "p value" = round(p, 4)))
##                      Value Std. Error  t value p value
## speed            0.9095585  0.1093925 8.314630  0.0000
## Tidak Puas|Cukup 1.3015075  0.4376597 2.973789  0.0029
## Cukup|Puas       4.4733938  0.5718127 7.823180  0.0000

13.6 Prediksi Probabilitas

newdata <- data.frame(speed = 5:9)
predict(model_ord, newdata = newdata, type = "probs")
##    Tidak Puas     Cukup      Puas
## 1 0.037460604 0.4439482 0.5185912
## 2 0.015430723 0.2566765 0.7278928
## 3 0.006271788 0.1245723 0.8691559
## 4 0.002535158 0.0546231 0.9428417
## 5 0.001022461 0.0228089 0.9761686

13.7 Goodness-of-Fit dan Proportional Odds

Model cumulative logit mengasumsikan efek prediktor sama untuk setiap cutoff. Jika tidak, pertimbangkan model non-proportional odds seperti generalized ordinal model.

13.8 Alternatif Model Ordinal

Selain cumulative logit, model ordinal lainnya:

  • Adjacent-category logit

  • Continuation-ratio (sequential) logit

Model tersebut dapat digunakan saat asumsi proportional odds tidak terpenuhi.

13.9 Kesimpulan

  • Regresi ordinal efektif untuk respon berurutan.

  • Model cumulative logit menginterpretasikan efek dalam bentuk log-odds kumulatif.

  • Implementasi di R dengan fungsi polr() dari package MASS.

Jika diperlukan validasi lanjut, bisa digunakan uji devians atau likelihood ratio test.

13.10 Asumsi Paralelisme dalam Regresi Logistik Ordinal

Model regresi logistik ordinal yang paling umum digunakan adalah Cumulative Logit Model dengan asumsi Proportional Odds.

Asumsi ini dikenal juga sebagai asumsi paralelisme (parallel lines assumption).

Definisi Asumsi Paralelisme Asumsi paralelisme menyatakan bahwa koefisien regresi (\(\beta\)) sama untuk setiap kategori kumulatif dari variabel respon.

Bentuk umum model: \[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]

Untuk \(j = 1, \dots, c - 1\).

  • Hanya intercept (\(\alpha_j\)) yang berbeda-beda.

  • Koefisien \(\beta\) tetap sama untuk semua fungsi logit kumulatif.

Visualisasi Dalam asumsi paralelisme, kurva logit kumulatif dari tiap kategori terhadap prediktor akan memiliki kemiringan yang sama (paralel), hanya berbeda posisi (intercept).

Konsekuensi Pelanggaran Asumsi

Jika asumsi ini tidak terpenuhi:

  • Efek prediktor berbeda untuk setiap batas kategori.

  • Model cumulative logit tidak valid.

  • Perlu gunakan model alternatif:

    • Generalized Ordinal Logistic Regression

    • Partial Proportional Odds Model

Pengujian Asumsi Paralelisme

Untuk memeriksa validitas asumsi, dapat digunakan:

  • Likelihood Ratio Test antara model proportional dan non-proportional

  • Brant Test (paket brant di R)

Contoh (dengan package brant):

library(MASS)
library(brant)
model <- polr(ordered_response ~ x1 + x2, data = dat, Hess = TRUE)
brant(model)

Jika p-value < 0.05 → asumsi tidak terpenuhi.

Kesimpulan

  • Asumsi paralelisme penting untuk validitas model cumulative logit.

  • Menyederhanakan interpretasi karena efek prediktor konstan.

  • Jika tidak terpenuhi, gunakan model ordinal alternatif.

14 Log Linear Model

Analisis data kategorik merupakan bagian penting dalam statistika terapan karena banyak fenomena di dunia nyata yang menghasilkan data dalam bentuk kategori, seperti jenis kelamin, status pekerjaan, tingkat pendidikan, preferensi konsumen, atau hasil diagnosis medis. Data kategori ini umumnya dianalisis menggunakan tabel kontingensi, model log-linier, dan model regresi logistik. Masing-masing pendekatan memiliki kekuatan dan kelemahan tergantung pada tujuan analisis dan struktur data.

Tabel kontingensi digunakan sebagai langkah awal eksplorasi untuk melihat hubungan antara dua atau lebih variabel kategorik. Misalnya, dalam studi tentang efek obat terhadap serangan jantung, tabel kontingensi dapat menyajikan jumlah pasien yang mengalami atau tidak mengalami serangan jantung, berdasarkan jenis obat yang dikonsumsi. Tabel ini membantu mengidentifikasi pola awal dan menghitung ukuran asosiasi seperti odds ratio, risk ratio, dan chi-square statistic untuk menguji independensi antar variabel.

Namun, ketika ingin membangun model statistik yang dapat mengendalikan efek dari banyak variabel dan interaksinya secara simultan, maka model log-linier menjadi sangat berguna. Model log-linier adalah bentuk khusus dari Generalized Linear Model (GLM) yang digunakan pada frekuensi sel dalam tabel kontingensi dan mengasumsikan distribusi Poisson. Tidak seperti regresi logistik, model log-linier tidak menetapkan variabel mana yang dependen dan mana yang independen, karena seluruh variabel diperlakukan secara simetris. Model ini lebih cocok ketika tujuan analisis adalah untuk memahami struktur asosiasi atau independensi antar variabel, bukan untuk prediksi.

Struktur model log-linier ditentukan berdasarkan efek utama dari masing-masing variabel serta interaksi di antara variabel-variabel tersebut. Misalnya, dalam tabel kontingensi tiga arah (misalnya: jenis kelamin, status merokok, dan penyakit paru), model log-linier dapat membedakan apakah interaksi dua variabel cukup menjelaskan data, ataukah diperlukan interaksi tiga arah untuk menangkap struktur asosiasinya. Penyesuaian model dapat dilakukan menggunakan metode likelihood ratio test untuk membandingkan model sederhana dengan model lebih kompleks.

Di sisi lain, regresi logistik adalah pendekatan paling umum ketika terdapat satu variabel kategorik yang secara eksplisit dianggap sebagai variabel dependen (misalnya, kejadian penyakit: ya/tidak), dan satu atau lebih variabel kategorik atau numerik sebagai prediktor. Model ini memodelkan logit dari probabilitas kejadian (yaitu log odds), dan sangat berguna dalam studi observasional dan eksperimental untuk menjelaskan atau memprediksi peluang suatu outcome. Regresi logistik juga memiliki ekstensi untuk outcome kategorik lebih dari dua kelas, seperti regresi logistik multinomial dan regresi logistik ordinal.

Dengan demikian, meskipun ketiganya beroperasi pada data kategorik, tabel kontingensi bersifat deskriptif, model log-linier bersifat eksploratif terhadap hubungan simetris, sedangkan regresi logistik bersifat prediktif terhadap outcome kategorik. Pemilihan metode tergantung pada apakah fokus utama analisis adalah deskripsi, eksplorasi struktur, atau prediksi hasil berdasarkan variabel penjelas. Kombinasi dari ketiganya sering digunakan dalam praktik untuk memperoleh pemahaman komprehensif dari data kategorik yang dianalisis.

Ringkasan Dalam analisis data kategorik, terdapat beberapa pendekatan statistik yang umum digunakan, antara lain:

  1. Tabel Kontingensi: penyajian frekuensi gabungan dari dua atau lebih variabel kategorik.
  2. Model Loglinear: digunakan untuk memodelkan struktur asosiasi di dalam tabel kontingensi tanpa menganggap ada variabel dependen.
  3. Model Regresi Logistik: digunakan untuk memodelkan probabilitas dari kategori variabel dependen berdasarkan variabel independen.

Meskipun ketiganya dapat digunakan pada data kategorik, pendekatan dan interpretasinya sangat berbeda.”

Tabel Kontingensi

Tabel kontingensi menyajikan jumlah frekuensi dari kombinasi kategori antar variabel.

Contoh tabel 2x2:

table_data <- matrix(c(30, 20, 50, 70), nrow=2, 
       dimnames = list(Obat = c("Timolol", "Placebo"),
                       Serangan = c("Ya", "Tidak")))
table_data
##          Serangan
## Obat      Ya Tidak
##   Timolol 30    50
##   Placebo 20    70

Tabel kontingensi bersifat deskriptif dan tidak melibatkan pemodelan probabilitas.

Model Loglinear

Model loglinear memodelkan logaritma dari ekspektasi frekuensi sel dalam tabel kontingensi.

\[ \log(\mu_{ij}) = \mu + \lambda_i^A + \lambda_j^B + \lambda_{ij}^{AB} \]

  • Cocok untuk menyelidiki asosiasi dan independensi antar variabel.
  • Tidak membedakan antara variabel respon dan penjelas.
  • Umumnya digunakan pada tabel multi-dimensi (2 arah, 3 arah, dst).
library(MASS)
loglm(~ Obat * Serangan, data = table_data)
## Call:
## loglm(formula = ~Obat * Serangan, data = table_data)
## 
## Statistics:
##                  X^2 df P(> X^2)
## Likelihood Ratio   0  0        1
## Pearson            0  0        1

Model Regresi Logistik

Model regresi logistik biner:

\[ \log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 x \]

  • Digunakan jika ada variabel dependen kategorik (biasanya biner).
  • Bertujuan untuk memprediksi probabilitas suatu outcome.
  • Umumnya digunakan dalam studi observasional atau eksperimental.

Contoh:

data_glm <- data.frame(
  Serangan = c(1, 0, 1, 0),
  Obat = factor(c("Timolol", "Timolol", "Placebo", "Placebo")),
  Frek = c(30, 20, 50, 70)
)
model_logit <- glm(Serangan ~ Obat, weights = Frek, family = binomial, data = data_glm)
summary(model_logit)
## 
## Call:
## glm(formula = Serangan ~ Obat, family = binomial, data = data_glm, 
##     weights = Frek)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept)  -0.3365     0.1852  -1.817   0.0692 .
## ObatTimolol   0.7419     0.3430   2.163   0.0305 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 235.08  on 3  degrees of freedom
## Residual deviance: 230.31  on 2  degrees of freedom
## AIC: 234.31
## 
## Number of Fisher Scoring iterations: 4

Perbandingan Ketiga Pendekatan

Aspek Tabel Kontingensi Model Loglinear Regresi Logistik
Tujuan Deskripsi frekuensi Deteksi asosiasi Prediksi probabilitas
Variabel dependen Tidak ada Tidak ada (simetris) Ada (eksplisit)
Distribusi Tidak diasumsikan Poisson (frekuensi sel) Binomial (probabilitas)
Bentuk Model Tidak ada GLM: log(mu) ~ efek GLM: logit(p) ~ prediktor
Cocok untuk Eksplorasi awal Tabel > 2 variabel Studi prediktif

14.1 Tabel Kontingensi dan Model Loglinier

Tabel kontingensi menyajikan frekuensi dari kombinasi kategori antar dua atau lebih variabel. Misal:

# Contoh tabel 2x2
matrix(c(30, 20, 50, 70), nrow=2,
       dimnames = list(Obat = c("Timolol", "Placebo"),
                       Serangan = c("Ya", "Tidak")))
##          Serangan
## Obat      Ya Tidak
##   Timolol 30    50
##   Placebo 20    70

Model log-linier untuk tabel I x J dapat dituliskan:

\[ \log(\mu_{ij}) = \mu + \lambda_i^T + \lambda_j^R + \lambda_{ij}^{TR} \]

14.2 Model Saturated

Model saturated atau model penuh menyertakan seluruh efek utama dan interaksi:

  • Cocok sempurna terhadap data
  • Tidak mengasumsikan independensi antar variabel

Contoh formulasi untuk tabel 2x2:

# Data
library(MASS)
data <- matrix(c(35, 65, 45, 55), nrow=2, byrow=TRUE)
dimnames(data) <- list(Obat = c("Timolol", "Placebo"), Serangan = c("Ya", "Tidak"))
ftable(data)
##         Serangan Ya Tidak
## Obat                     
## Timolol          35    65
## Placebo          45    55

Model saturated dapat dipasang dengan loglm dari package {MASS}:

model_saturated <- loglm(~ Obat * Serangan, data = data)
summary(model_saturated)
## Formula:
## ~Obat * Serangan
## attr(,"variables")
## list(Obat, Serangan)
## attr(,"factors")
##          Obat Serangan Obat:Serangan
## Obat        1        0             1
## Serangan    0        1             1
## attr(,"term.labels")
## [1] "Obat"          "Serangan"      "Obat:Serangan"
## attr(,"order")
## [1] 1 1 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
## 
## Statistics:
##                  X^2 df P(> X^2)
## Likelihood Ratio   0  0        1
## Pearson            0  0        1

14.3 Model Independent

Model independen mengasumsikan bahwa tidak ada interaksi antara variabel:

\[ \log(\mu_{ij}) = \mu + \lambda_i^T + \lambda_j^R \]

Model ini menguji hipotesis bahwa variabel X dan Y saling independen.

model_indep <- loglm(~ Obat + Serangan, data = data)
summary(model_indep)
## Formula:
## ~Obat + Serangan
## attr(,"variables")
## list(Obat, Serangan)
## attr(,"factors")
##          Obat Serangan
## Obat        1        0
## Serangan    0        1
## attr(,"term.labels")
## [1] "Obat"     "Serangan"
## attr(,"order")
## [1] 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
## 
## Statistics:
##                       X^2 df  P(> X^2)
## Likelihood Ratio 2.087576  1 0.1485015
## Pearson          2.083333  1 0.1489147

14.4 Odds Ratio dan Interpretasi

Odds ratio untuk tabel 2x2:

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

Interpretasi nilai OR:

  • OR = 1: Tidak ada asosiasi
  • OR > 1: Asosiasi positif
  • OR < 1: Asosiasi negatif

14.5 Estimasi Parameter

Dalam model saturated:

  • Estimasi dilakukan dengan pembatasan seperti sum-to-zero
  • Estimasi parameter dilakukan dengan iterative proportional fitting (IPF)
# Estimasi odds ratio dan log-odds
logOR <- log((data[1,1] * data[2,2]) / (data[1,2] * data[2,1]))
logOR
## [1] -0.4183685

14.6 Model Lebih Sederhana dan Perbandingan Model

Perbandingan antar model dilakukan dengan menggunakan statistik deviance (G²) atau likelihood ratio test.

anova(model_indep, model_saturated)
## LR tests for hierarchical log-linear models
## 
## Model 1:
##  ~Obat + Serangan 
## Model 2:
##  ~Obat * Serangan 
## 
##           Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1   2.087576  1                                    
## Model 2   0.000000  0   2.087576         1         0.1485
## Saturated 0.000000  0   0.000000         0         1.0000

14.7 Studi Kasus: Kepercayaan terhadap Surga

Studi dari Agresti (2019) membahas hubungan antara kebahagiaan dan kepercayaan terhadap kehidupan akhirat.

data_survey <- matrix(c(32,190,
                        113,611,
                        51,326),
                      nrow = 3, byrow = TRUE,
                      dimnames = list(Kebahagiaan = c("Tidak", "Cukup", "Sangat"),
                                      Surga = c("Tidak Percaya", "Percaya")))
ftable(data_survey)
##             Surga Tidak Percaya Percaya
## Kebahagiaan                            
## Tidak                        32     190
## Cukup                       113     611
## Sangat                       51     326
loglm(~ Kebahagiaan + Surga, data = data_survey)
## Call:
## loglm(formula = ~Kebahagiaan + Surga, data = data_survey)
## 
## Statistics:
##                        X^2 df  P(> X^2)
## Likelihood Ratio 0.8911136  2 0.6404675
## Pearson          0.8836760  2 0.6428538

15 TUGAS MODEL LOG LINEAR 2 ARAH

15.1 Jelaskan secara singkat apa yang dimaksud dengan model log-linear pada tabel kontingensi.

Model log-linear adalah model yang digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategorik yang disajikan dalam tabel kontingensi. Model ini mengasumsikan bahwa logaritma dari nilai ekspektasi frekuensi sel (\(\mu_{ij}\)) dapat dinyatakan sebagai penjumlahan efek variabel dan (bila perlu) interaksinya. Untuk tabel 2x2:

\[ \log(\mu_{ij}) = \lambda + \lambda_i^A + \lambda_j^B + \lambda_{ij}^{AB} \]

15.2 Sebutkan perbedaan utama antara model log-linear dan model regresi logistik!

  • Model log-linear digunakan untuk memodelkan frekuensi (count) pada tabel kontingensi dan menguji asosiasi antar variabel kategorik, tanpa menganggap ada variabel respon dan prediktor.

  • Model regresi logistik digunakan untuk memodelkan probabilitas kejadian suatu outcome (biner) berdasarkan satu atau lebih prediktor (bisa kategorik maupun kontinu).


15.3 Analisis Data Tabel Kontingensi 2x2

Diberikan data:

Merokok Sakit Sehat
Ya 30 20
Tidak 10 40

15.4 Bentuk Model Log-Linear

Model log-linear pada tabel 2x2:

\[ \log(\mu_{ij}) = \lambda + \lambda_i^A + \lambda_j^B + \lambda_{ij}^{AB} \]

dengan constraint sum-to-zero: \[ \sum_i \lambda_i^A = 0,\quad \sum_j \lambda_j^B = 0,\quad \sum_{i,j} \lambda_{ij}^{AB} = 0 \]

15.5 Estimasi Parameter Model (Manual, Sum-to-zero)

Misalkan:

  • A1 = Merokok (Ya), A2 = Tidak

  • B1 = Sakit, B2 = Sehat

Observasi:

  • \(n_{11} = 30\), \(n_{12} = 20\)

  • \(n_{21} = 10\), \(n_{22} = 40\)

\[\begin{align*} \log(\mu_{11}) &= \lambda + \lambda_1^A + \lambda_1^B + \lambda_{11}^{AB} \\ \log(\mu_{12}) &= \lambda + \lambda_1^A + \lambda_2^B + \lambda_{12}^{AB} \\ \log(\mu_{21}) &= \lambda + \lambda_2^A + \lambda_1^B + \lambda_{21}^{AB} \\ \log(\mu_{22}) &= \lambda + \lambda_2^A + \lambda_2^B + \lambda_{22}^{AB} \end{align*}\]

Constraint sum-to-zero:
\(\lambda_1^A + \lambda_2^A = 0\)
\(\lambda_1^B + \lambda_2^B = 0\)
\(\lambda_{11}^{AB} + \lambda_{12}^{AB} + \lambda_{21}^{AB} + \lambda_{22}^{AB} = 0\)

Langkah-langkah:

  1. Hitung rata-rata log frekuensi sel:

\[\begin{align*} \lambda &= \frac{1}{4} \sum_{i=1}^{2} \sum_{j=1}^{2} \log(n_{ij}) \\ &= \frac{1}{4} [\log(30) + \log(20) + \log(10) + \log(40)] \\ &= 3.0971 \end{align*}\]

  1. Efek utama A (Merokok):

\[\begin{align*} \lambda_1^A &= \frac{1}{2} \left[ (\log(30) + \log(20)) - (\log(10) + \log(40)) \right] / 2 \\ &= \frac{1}{2} \left[(3.4012 + 2.9957) - (2.3026 + 3.6889)\right] \\ &= \frac{1}{2} (6.3969 - 5.9915) \\ &= \frac{1}{2}(0.4054) \\ &= 0.2027 \\ \lambda_2^A &= -0.2027 \end{align*}\]

  1. Efek utama B (Status):

\[\begin{align*} \lambda_1^B &= \frac{1}{2} \left[ (\log(30) + \log(10)) - (\log(20) + \log(40)) \right] \\ &= \frac{1}{2} \left[(3.4012 + 2.3026) - (2.9957 + 3.6889)\right] \\ &= \frac{1}{2} (5.7038 - 6.6846) \\ &= \frac{1}{2}(-0.9808) \\ &= -0.4904 \\ \lambda_2^B &= +0.4904 \end{align*}\]

  1. Efek interaksi:

\[\begin{align*} \lambda_{11}^{AB} &= \frac{1}{4} \left[ \log(30) - \log(20) - \log(10) + \log(40) \right] \\ &= \frac{1}{4} \left[ 3.4012 - 2.9957 - 2.3026 + 3.6889 \right] \\ &= \frac{1}{4} (3.4012 - 2.9957 - 2.3026 + 3.6889) \\ &= \frac{1}{4} (1.7918) \\ &= 0.4479 \\ \lambda_{12}^{AB} &= -\lambda_{11}^{AB} = -0.4479 \\ \lambda_{21}^{AB} &= -0.4479 \\ \lambda_{22}^{AB} &= +0.4479 \end{align*}\]

Ringkasan parameter:

  • \(\lambda = 3.0971\)

  • \(\lambda_1^A = 0.2027, \quad \lambda_2^A = -0.2027\)

  • \(\lambda_1^B = -0.4904, \quad \lambda_2^B = 0.4904\)

  • \(\lambda_{11}^{AB} = 0.4479, \lambda_{12}^{AB} = -0.4479, \lambda_{21}^{AB} = -0.4479, \lambda_{22}^{AB} = 0.4479\)

15.6 Hitung Odds Ratio dan Interval Kepercayaan

\[ \text{OR} = \frac{n_{11} n_{22}}{n_{12} n_{21}} = \frac{30 \times 40}{20 \times 10} = \frac{1200}{200} = 6 \]

Log odds ratio: \[ \log(\text{OR}) = \log(6) = 1.7918 \]

Standard error (SE): \[ SE = \sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}} = \sqrt{\frac{1}{30} + \frac{1}{20} + \frac{1}{10} + \frac{1}{40}} = \sqrt{0.0333 + 0.05 + 0.1 + 0.025} = \sqrt{0.2083} = 0.4564 \]

95% Confidence Interval for log(OR):

\[ \log(OR) \pm 1.96 \times SE = 1.7918 \pm 1.96 \times 0.4564 \\ = (1.7918 - 0.895),\ (1.7918 + 0.895) \\ = (0.8968, 2.6868) \]

Back-transform to get CI for OR:

\[ \text{Lower} = \exp(0.8968) = 2.452 \\ \text{Upper} = \exp(2.6868) = 14.68 \]

Jadi, OR = 6 (95% CI: 2.45 – 14.68)

15.7 Fitting Model Log-Linear dengan R

# Data 2x2
tabel <- matrix(c(30, 20, 10, 40), nrow = 2, byrow = TRUE)
colnames(tabel) <- c("Sakit", "Sehat")
rownames(tabel) <- c("Ya", "Tidak")
tabel
##       Sakit Sehat
## Ya       30    20
## Tidak    10    40
data <- as.data.frame(as.table(tabel))
colnames(data) <- c("Merokok", "Status", "Freq")
data
##   Merokok Status Freq
## 1      Ya  Sakit   30
## 2   Tidak  Sakit   10
## 3      Ya  Sehat   20
## 4   Tidak  Sehat   40
# Model tanpa interaksi
fit_no_inter <- glm(Freq ~ Merokok + Status, family = poisson, data = data)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ Merokok + Status, family = poisson, data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  2.996e+00  1.871e-01  16.013   <2e-16 ***
## MerokokTidak 3.892e-10  2.000e-01   0.000    1.000    
## StatusSehat  4.055e-01  2.041e-01   1.986    0.047 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 21.288  on 3  degrees of freedom
## Residual deviance: 17.261  on 1  degrees of freedom
## AIC: 43.036
## 
## Number of Fisher Scoring iterations: 4
# Model dengan interaksi
fit_inter <- glm(Freq ~ Merokok * Status, family = poisson, data = data)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ Merokok * Status, family = poisson, data = data)
## 
## Coefficients:
##                          Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                3.4012     0.1826  18.629  < 2e-16 ***
## MerokokTidak              -1.0986     0.3651  -3.009  0.00262 ** 
## StatusSehat               -0.4055     0.2887  -1.405  0.16015    
## MerokokTidak:StatusSehat   1.7918     0.4564   3.926 8.65e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance:  2.1288e+01  on 3  degrees of freedom
## Residual deviance: -8.8818e-16  on 0  degrees of freedom
## AIC: 27.775
## 
## Number of Fisher Scoring iterations: 3

15.8 Intepretasi Parameter

  • Parameter utama (intercept) menunjukkan rata-rata log frekuensi sel.

  • Efek “Merokok” dan “Status” menunjukkan perbedaan log frekuensi antar kategori.

  • Interaksi signifikan menunjukkan adanya asosiasi antara Merokok dan Status.

Nilai log(6) =1.79 itu sama dengan efek interaksi ouput R

15.9 Analisis Data Tabel Kontingensi 2x3

Suatu survei dilakukan untuk mengetahui hubungan antara Jenis Kelamin (Laki-laki/Perempuan) dan Kategori BMI (Kurus/Normal/Gemuk):

Kurus Normal Gemuk
Laki-laki 12 20 8
Perempuan 18 24 10

15.10 Bentuk Model Log-Linear untuk Tabel 2x3

Bentuk umum model log-linear untuk tabel 2x3 (dengan sum-to-zero constraint):

\[ \log(\mu_{ij}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]

dengan:

  • \(\mu_{ij}\): ekspektasi frekuensi pada baris ke-\(i\), kolom ke-\(j\)

  • \(A\): Jenis Kelamin (\(i=1:\) Laki-laki, \(i=2:\) Perempuan)

  • \(B\): Kategori BMI (\(j=1:\) Kurus, \(j=2:\) Normal, \(j=3:\) Gemuk)

  • Constraint: \(\sum_i \lambda_i^A = 0\), \(\sum_j \lambda_j^B = 0\), \(\sum_i \lambda_{ij}^{AB} = 0\) dan \(\sum_j \lambda_{ij}^{AB} = 0\)

Secara eksplisit:

\[\begin{align*} \log(\mu_{ij}) =\ & \lambda \\ & + \lambda_1^A \text{ (Laki-laki)},\ \lambda_2^A \text{ (Perempuan)} \\ & + \lambda_1^B \text{ (Kurus)},\ \lambda_2^B \text{ (Normal)},\ \lambda_3^B \text{ (Gemuk)} \\ & + \lambda_{ij}^{AB} \text{ (interaksi jika ada)} \end{align*}\]


15.11 Fitting Model Log-Linear di R

# Membuat data frame dari tabel
tabel2x3 <- matrix(c(12, 20, 8, 18, 24, 10), nrow = 2, byrow = TRUE)
colnames(tabel2x3) <- c("Kurus", "Normal", "Gemuk")
rownames(tabel2x3) <- c("Laki-laki", "Perempuan")
tabel2x3
##           Kurus Normal Gemuk
## Laki-laki    12     20     8
## Perempuan    18     24    10
# Ubah menjadi data.frame untuk glm
data2x3 <- as.data.frame(as.table(tabel2x3))
colnames(data2x3) <- c("JenisKelamin", "BMI", "Freq")
data2x3
##   JenisKelamin    BMI Freq
## 1    Laki-laki  Kurus   12
## 2    Perempuan  Kurus   18
## 3    Laki-laki Normal   20
## 4    Perempuan Normal   24
## 5    Laki-laki  Gemuk    8
## 6    Perempuan  Gemuk   10
# Model log-linear tanpa interaksi (asumsi independen)
fit_no_inter <- glm(Freq ~ JenisKelamin + BMI, family = poisson, data = data2x3)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ JenisKelamin + BMI, family = poisson, data = data2x3)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)             2.5683     0.2179  11.789   <2e-16 ***
## JenisKelaminPerempuan   0.2624     0.2103   1.248   0.2122    
## BMINormal               0.3830     0.2368   1.618   0.1058    
## BMIGemuk               -0.5108     0.2981  -1.713   0.0866 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 13.06443  on 5  degrees of freedom
## Residual deviance:  0.22527  on 2  degrees of freedom
## AIC: 35.26
## 
## Number of Fisher Scoring iterations: 3
# Model log-linear dengan interaksi (untuk cek asosiasi)
fit_inter <- glm(Freq ~ JenisKelamin * BMI, family = poisson, data = data2x3)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ JenisKelamin * BMI, family = poisson, data = data2x3)
## 
## Coefficients:
##                                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                       2.4849     0.2887   8.608   <2e-16 ***
## JenisKelaminPerempuan             0.4055     0.3727   1.088    0.277    
## BMINormal                         0.5108     0.3651   1.399    0.162    
## BMIGemuk                         -0.4055     0.4564  -0.888    0.374    
## JenisKelaminPerempuan:BMINormal  -0.2231     0.4802  -0.465    0.642    
## JenisKelaminPerempuan:BMIGemuk   -0.1823     0.6032  -0.302    0.762    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 1.3064e+01  on 5  degrees of freedom
## Residual deviance: 2.6645e-15  on 0  degrees of freedom
## AIC: 39.034
## 
## Number of Fisher Scoring iterations: 3

15.12 Intepretasi

Model tanpa interaksi: - Jika deviance tidak signifikan, maka Jenis Kelamin dan BMI independen.

  • Intercept: log frekuensi pada kategori referensi (Laki-laki, Kurus)

  • Koefisien JenisKelaminPerempuan: perbedaan log-frekuensi antara Perempuan vs Laki-laki (pada Kurus)

  • Koefisien BMI: perbedaan log-frekuensi kategori BMI (Normal/Gemuk) terhadap Kurus (pada Laki-laki)

Model dengan interaksi:

  • Jika koefisien interaksi signifikan, berarti ada hubungan/asosiasi antara Jenis Kelamin dan BMI. Artinya distribusi BMI berbeda antara Laki-laki dan Perempuan.

Contoh interpretasi hasil (misal):

  • Jika koefisien JenisKelaminPerempuan negatif: proporsi Perempuan pada kategori referensi lebih kecil dibanding Laki-laki.

  • Jika koefisien BMI_Normal positif: kemungkinan seseorang Normal lebih tinggi daripada Kurus (pada Laki-laki).

  • Jika model interaksi signifikan, pola distribusi BMI berbeda antara Laki-laki dan Perempuan.

16 Model Log Linear Tiga Arah

Pada pembahasan sebelumnya, kita telah memahami bahwa salah satu tujuan utama dari penyusunan model log linear adalah untuk mengestimasi parameter-parameter yang menjelaskan hubungan di antara variabel-variabel kategorik.

Pada materi kali ini, kita akan membahas model log linear yang lebih kompleks, yaitu model log linear untuk tabel kontingensi tiga arah. Model ini melibatkan tiga variabel kategorik, sehingga kemungkinan interaksi yang dapat terjadi di dalam model pun menjadi lebih banyak. Dalam konteks ini, interaksi paling tinggi yang dapat dimodelkan adalah interaksi tiga arah, yaitu interaksi yang melibatkan ketiga variabel secara bersamaan.

16.1 Model Log-Linear untuk Tabel Tiga Arah

Model log-linear yang melibatkan tiga variabel kategorik (misal: X, Y, dan Z) dapat dibangun dalam berbagai bentuk model, tergantung pada tingkat interaksi yang ingin dimasukkan. Berikut adalah beberapa alternatif model log-linear yang umum digunakan:

  1. Model Saturated

    \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \] Model ini memuat semua kemungkinan interaksi, termasuk interaksi tiga arah (X, Y, dan Z).

  2. Model Homogen

    \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \] Model ini hanya mengakomodasi interaksi dua arah antar variabel tanpa memasukkan interaksi tiga arah.

  3. Model Conditional

    • Conditional pada X: \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \] Memuat interaksi X dengan Y dan X dengan Z.
    • Conditional pada Y: \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \] Memuat interaksi Y dengan X dan Y dengan Z.
    • Conditional pada Z: \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \] Memuat interaksi Z dengan X dan Z dengan Y.
  4. Model Joint Independence

    • Independensi antara X & Y: \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} \]
    • Independensi antara X & Z: \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} \]
    • Independensi antara Y & Z: \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{YZ}_{jk} \]
  5. Model Tanpa Interaksi

    \[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k \] Model ini hanya memasukkan efek utama tanpa interaksi antar variabel.


16.2 Pengujian Interaksi dalam Model Log-Linear Tiga Arah

Dalam analisis model log-linear tiga arah, pengujian interaksi dilakukan untuk mengetahui ada atau tidaknya interaksi antar variabel. Pengujian ini dilakukan secara bertahap, dimulai dari tingkat interaksi tertinggi ke yang lebih rendah. Untuk model log-linear dengan tiga peubah (X, Y, dan Z), tahapan pengujian meliputi:

  1. Pengujian Interaksi Tiga Arah (XYZ):

    • Bandingkan model saturated dengan model homogenous.
  2. Pengujian Interaksi Dua Arah (XY, XZ, YZ):

    • Bandingkan model homogenous dengan model conditional.

    • Bandingkan model conditional dengan model joint independence.

    • Bandingkan model joint independence dengan model tanpa interaksi.

Setiap tahapan pengujian dilakukan untuk menilai kecocokan model dan menentukan struktur interaksi mana yang paling sesuai dengan data yang diamati.

16.3 Soal Praktikum

Gunakan Program R untuk menyelesaikan soal berikut:

16.3.1 Soal

Tabel berikut menyajikan data dari survei General Social Survey (GSS) tahun 1994 mengenai jenis kelamin responden, tingkat fundamentalisme, dan sikap terhadap hukuman mati untuk kasus pembunuhan. Susun dan interpretasikan model log-linear paling sederhana (paling parsimonious) untuk data ini. Jelaskan proses yang Anda lakukan dalam menentukan model terbaik serta asosiasi apa saja yang teridentifikasi. Tunjukkan juga bagaimana nilai yang diprediksi dari model menggambarkan asosiasi tersebut.

16.3.2 Tabel Data Survei

Fundamentalisme Jenis Kelamin Mendukung Menolak Total
Fundamentalist Laki-laki 128 32 160
Fundamentalist Perempuan 123 73 196
Fundamentalist Total 251 105 356
Moderate Laki-laki 182 56 238
Moderate Perempuan 168 105 273
Moderate Total 350 161 511
Liberal Laki-laki 119 49 168
Liberal Perempuan 111 70 181
Liberal Total 230 119 349

Keterangan:

  • Fundamentalisme: Fundamentalist, Moderate, Liberal

  • Jenis Kelamin: Laki-laki, Perempuan

  • Sikap: Mendukung (Favor), Menolak (Oppose) hukuman mati

16.4 Analisis Log-Linear untuk Tabel Tiga Arah

16.4.1 Package yang Digunakan

library("epitools")
library("DescTools")
library("lawstat")

Input Data

# Input data sesuai tabel praktikum
z.fund <- factor(rep(c("1fund", "2mod", "3lib"), each = 4))
x.sex  <- factor(rep(c("1M", "2F"), each = 2, times = 3))
y.fav  <- factor(rep(c("1fav", "2opp"), times = 6))
counts <- c(128, 32, 123, 73, 182, 56, 168, 105, 119, 49, 111, 70)

data <- data.frame(
  Fundamentalisme = z.fund,
  Jenis_Kelamin   = x.sex,
  Sikap           = y.fav,
  Frekuensi       = counts

)
data
##    Fundamentalisme Jenis_Kelamin Sikap Frekuensi
## 1            1fund            1M  1fav       128
## 2            1fund            1M  2opp        32
## 3            1fund            2F  1fav       123
## 4            1fund            2F  2opp        73
## 5             2mod            1M  1fav       182
## 6             2mod            1M  2opp        56
## 7             2mod            2F  1fav       168
## 8             2mod            2F  2opp       105
## 9             3lib            1M  1fav       119
## 10            3lib            1M  2opp        49
## 11            3lib            2F  1fav       111
## 12            3lib            2F  2opp        70

Membentuk Tabel Kontingensi 3 Arah

table3d <- xtabs(Frekuensi ~ Fundamentalisme + Jenis_Kelamin + Sikap, data = data)
ftable(table3d)
##                               Sikap 1fav 2opp
## Fundamentalisme Jenis_Kelamin                
## 1fund           1M                   128   32
##                 2F                   123   73
## 2mod            1M                   182   56
##                 2F                   168  105
## 3lib            1M                   119   49
##                 2F                   111   70

Analisis Log-Linear: Tahap Pemodelan Kita akan memodelkan tabel ini menggunakan beberapa model log-linear dan membandingkan kecocokan model (parsimonious model):

17 UJI MODEL INTERAKSI TIGA ARAH (SATURATED VS HOMOGENOUS)

17.0.1 Penentuan Kategori Referensi

##=============================##
# Penentuan kategori reference
##=============================##
x.sex  <- relevel(x.sex, ref = "2F")
y.fav  <- relevel(y.fav, ref = "2opp")
z.fund <- relevel(z.fund, ref = "3lib")

Model Saturated Model log-linear saturated memasukkan semua interaksi hingga tiga arah:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \]

# Model saturated
model_saturated <- glm(counts ~ x.sex + y.fav + z.fund +
             x.sex*y.fav + x.sex*z.fund + y.fav*z.fund +
             x.sex*y.fav*z.fund,
             family = poisson(link = "log"))
summary(model_saturated)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     x.sex * z.fund + y.fav * z.fund + x.sex * y.fav * z.fund, 
##     family = poisson(link = "log"))
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                    4.248495   0.119523  35.545  < 2e-16 ***
## x.sex1M                       -0.356675   0.186263  -1.915  0.05551 .  
## y.fav1fav                      0.461035   0.152626   3.021  0.00252 ** 
## z.fund1fund                    0.041964   0.167285   0.251  0.80193    
## z.fund2mod                     0.405465   0.154303   2.628  0.00860 ** 
## x.sex1M:y.fav1fav              0.426268   0.228268   1.867  0.06185 .  
## x.sex1M:z.fund1fund           -0.468049   0.282210  -1.659  0.09721 .  
## x.sex1M:z.fund2mod            -0.271934   0.249148  -1.091  0.27507    
## y.fav1fav:z.fund1fund          0.060690   0.212423   0.286  0.77511    
## y.fav1fav:z.fund2mod           0.008969   0.196903   0.046  0.96367    
## x.sex1M:y.fav1fav:z.fund1fund  0.438301   0.336151   1.304  0.19227    
## x.sex1M:y.fav1fav:z.fund2mod   0.282383   0.301553   0.936  0.34905    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance:  2.4536e+02  on 11  degrees of freedom
## Residual deviance: -9.6367e-14  on  0  degrees of freedom
## AIC: 100.14
## 
## Number of Fisher Scoring iterations: 3
exp(model_saturated$coefficients)
##                   (Intercept)                       x.sex1M 
##                    70.0000000                     0.7000000 
##                     y.fav1fav                   z.fund1fund 
##                     1.5857143                     1.0428571 
##                    z.fund2mod             x.sex1M:y.fav1fav 
##                     1.5000000                     1.5315315 
##           x.sex1M:z.fund1fund            x.sex1M:z.fund2mod 
##                     0.6262231                     0.7619048 
##         y.fav1fav:z.fund1fund          y.fav1fav:z.fund2mod 
##                     1.0625694                     1.0090090 
## x.sex1M:y.fav1fav:z.fund1fund  x.sex1M:y.fav1fav:z.fund2mod 
##                     1.5500717                     1.3262868

Interpretasi Output Model Saturated ## Interpretasi Hasil Model Saturated

17.0.2 Ringkasan Model

Model yang digunakan adalah model log-linear saturated dengan semua efek utama, interaksi dua arah, dan interaksi tiga arah. Model ini memodelkan hubungan antara jenis kelamin (x.sex), sikap terhadap hukuman mati (y.fav), dan tingkat fundamentalisme (z.fund) terhadap frekuensi responden.


17.0.3 Hasil Estimasi Koefisien

Parameter Estimate Std. Error z value Pr(> z
(Intercept) 4.25 0.12 35.55 <2e-16*** 70.00
x.sex1M -0.36 0.19 -1.92 0.055 . 0.70
y.fav1fav 0.46 0.15 3.02 0.0025 ** 1.59
z.fund1fund 0.04 0.17 0.25 0.80 1.04
z.fund2mod 0.41 0.15 2.63 0.0086 ** 1.50
x.sex1M:y.fav1fav 0.43 0.23 1.87 0.062 . 1.53
x.sex1M:z.fund1fund -0.47 0.28 -1.66 0.097 . 0.63
x.sex1M:z.fund2mod -0.27 0.25 -1.09 0.28 0.76
y.fav1fav:z.fund1fund 0.06 0.21 0.29 0.78 1.06
y.fav1fav:z.fund2mod 0.01 0.20 0.05 0.96 1.01
x.sex1M:y.fav1fav:z.fund1fund 0.44 0.34 1.30 0.19 1.55
x.sex1M:y.fav1fav:z.fund2mod 0.28 0.30 0.94 0.35 1.33

17.0.4 Interpretasi Koefisien

  • (Intercept): Rata-rata log jumlah kasus untuk kategori referensi (Perempuan, Menolak hukuman mati, Liberal) adalah 4.25 (atau \(\mu \approx 70\)).

  • x.sex1M: Laki-laki memiliki expected count sekitar 0.7 kali Perempuan dalam kategori referensi lainnya, namun hanya mendekati signifikansi (p = 0.055).

  • y.fav1fav: Mereka yang mendukung hukuman mati memiliki expected count sekitar 1.59 kali lipat dibanding yang menolak (signifikan, p = 0.0025).

  • z.fund1fund: Kelompok Fundamentalist tidak berbeda nyata dari Liberal (\(\exp(0.04) \approx 1.04\); p = 0.80).

  • z.fund2mod: Kelompok Moderate memiliki expected count 1.5 kali lebih besar dibanding Liberal (signifikan, p = 0.0086).

  • Interaksi dua & tiga arah: Sebagian besar tidak signifikan (p > 0.05), artinya tidak ada bukti kuat adanya efek gabungan antar variabel.


17.0.5 Goodness-of-Fit

  • Residual deviance \(\approx 0\) menandakan model saturated benar-benar fit terhadap data (seluruh variasi data dijelaskan oleh model).
  • AIC = 100.14 dapat digunakan untuk perbandingan dengan model yang lebih sederhana.

17.0.6 Kesimpulan

  • Model saturated ini sangat fit dengan data, namun tidak semua parameter/interaksi signifikan.

  • Efek utama yang paling signifikan adalah:

    • Sikap mendukung hukuman mati (expected count 1.6x lebih tinggi dari yang menolak)

    • Kelompok Moderate (expected count 1.5x lebih tinggi dari Liberal)

  • Tidak ditemukan bukti kuat interaksi dua atau tiga arah yang signifikan.

  • Model yang lebih sederhana (tanpa interaksi tiga arah) perlu dipertimbangkan untuk model final yang lebih parsimonious.


Catatan interpretasi:

  • Nilai exp(coef) menyatakan rasio ekspektasi (expected count ratio) dibandingkan baseline.

  • Efek positif → menaikkan expected count; Efek negatif → menurunkan expected count.

  • Koefisien signifikan pada p-value < 0.05.

17.1 Model Homogenous

Model log-linear homogenous memasukkan semua efek utama dan semua interaksi dua arah, tanpa interaksi tiga arah. Secara matematis, model ini dapat dituliskan sebagai berikut:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]

# Homogenous Model
model_homogenous <- glm(counts ~ x.sex + y.fav + z.fund +
              x.sex*y.fav + x.sex*z.fund + y.fav*z.fund,
              family = poisson(link = "log"))
summary(model_homogenous)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     x.sex * z.fund + y.fav * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            4.31096    0.10522  40.972  < 2e-16 ***
## x.sex1M               -0.51575    0.13814  -3.733 0.000189 ***
## y.fav1fav              0.35707    0.12658   2.821 0.004788 ** 
## z.fund1fund           -0.06762    0.14452  -0.468 0.639854    
## z.fund2mod             0.33196    0.13142   2.526 0.011540 *  
## x.sex1M:y.fav1fav      0.66406    0.12728   5.217 1.81e-07 ***
## x.sex1M:z.fund1fund   -0.16201    0.15300  -1.059 0.289649    
## x.sex1M:z.fund2mod    -0.08146    0.14079  -0.579 0.562887    
## y.fav1fav:z.fund1fund  0.23873    0.16402   1.455 0.145551    
## y.fav1fav:z.fund2mod   0.13081    0.14951   0.875 0.381614    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.361  on 11  degrees of freedom
## Residual deviance:   1.798  on  2  degrees of freedom
## AIC: 97.934
## 
## Number of Fisher Scoring iterations: 3

17.2 Uji Hipotesis: Apakah Ada Interaksi Tiga Arah? (Saturated vs Homogenous)

Pengujian ini menggunakan residual deviance dari kedua model (saturated dan homogenous).

17.2.1 Langkah-Langkah Pengujian

17.2.1.1 1. Hipotesis

  • H0: Tidak ada interaksi tiga arah (model homogenous sudah cukup)

  • H1: Ada interaksi tiga arah (model saturated diperlukan)

17.2.1.2 2. Hitung Selisih Deviance

# Deviance antar model
Deviance.model <- model_homogenous$deviance - model_saturated$deviance
Deviance.model
## [1] 1.797977

17.2.1.3 3. Hitung Derajat Bebas

# Derajat bebas = db model homogenous - db model saturated
derajat.bebas <- (model_homogenous$df.residual - model_saturated$df.residual)
derajat.bebas
## [1] 2

17.2.1.4 4. Chi-Square Tabel (\(\alpha = 0.05\))

chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)
chi.tabel
## [1] 5.991465

17.2.1.5 5. Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima H0", "Tolak H0")
Keputusan
## [1] "Terima H0"

Interpretasi Pada taraf nyata 5%, belum cukup bukti untuk menolak H0 atau dapat dikatakan bahwa tidak ada interaksi tiga arah antara jenis kelamin, fundamentalisme, dan pendapat mengenai hukuman mati.

Catatan:

  • Model pengurang adalah model yang lebih lengkap (lebih banyak parameter, df lebih kecil), yaitu model saturated.

  • Derajat bebas dihitung dari selisih derajat bebas model homogenous dan saturated.

  • Keputusan berdasarkan perbandingan deviance model dengan chi-square tabel.

Rangkuman

Pengujian Ada Tidaknya Interaksi Tiga Arah (Saturated Model vs Homogenous Model)

  • Hipotesis

    • \(H_0\): \(\lambda_{ijk}^{XYZ} = 0\) (Tidak ada interaksi tiga arah; model yang terbentuk adalah model homogenous)

    • \(H_1\): \(\lambda_{ijk}^{XYZ} \neq 0\) (Ada interaksi tiga arah; model yang terbentuk adalah model saturated)

  • Tingkat Signifikansi

    • \(\alpha = 5\%\)
  • Statistik Uji

    • \(\Delta \text{Deviance} = \text{Deviance model homogenous} - \text{Deviance model saturated}\)

    • \(= 1.798 - 0.00 = 1.798\)

    • \(db = db\ \text{model homogenous} - db\ \text{model saturated} = 2 - 0 = 2\)

  • Daerah Penolakan

    • Tolak \(H_0\) jika \(\Delta \text{Deviance} > \chi^2_{0.05, db} = \chi^2_{0.05,2} = 5.991\)
  • Keputusan

    • Karena \(1.798 < 5.991\), maka tidak tolak \(H_0\)
  • Interpretasi

    • Pada taraf nyata 5%, belum cukup bukti untuk menolak \(H_0\) atau dapat dikatakan bahwa tidak ada interaksi tiga arah antara jenis kelamin, fundamentalisme, dan pendapat mengenai hukuman mati.

Catatan Perhitungan Derajat Bebas dan Selisih Deviance

Ingat, dalam membuat selisih deviance, model yang menjadi pengurang adalah model yang lebih lengkap (parameter yang lebih banyak atau derajat bebasnya lebih kecil).

Makin banyak parameter, makin kecil derajat bebasnya, karena:

  • \(db =\) banyaknya amatan (atau perkalian dimensi tabel kontingensi, misal \(2 \times 2 \times 3 = 12\)) dikurangi banyaknya parameter (koefisien, termasuk intercept).

Cek di output R ada berapa banyak coefficients-nya (termasuk intercept) untuk menghitung derajat bebas yang benar.


18 UJI MODEL INTERAKSI DUA ARAH (HOMOGENOUS VS CONDITIONAL ON X)

18.1 Model Conditional on X

Model log-linear conditional pada X memasukkan efek utama dan interaksi dua arah antara X dengan Y dan X dengan Z, tanpa interaksi antara Y dengan Z maupun interaksi tiga arah.

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \]

# Conditional Association on X
model_conditional_X <- glm(counts ~ x.sex + y.fav + z.fund +
              x.sex*y.fav + x.sex*z.fund,
              family = poisson(link = "log"))
summary(model_conditional_X)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     x.sex * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          4.23495    0.08955  47.293  < 2e-16 ***
## x.sex1M             -0.52960    0.13966  -3.792 0.000149 ***
## y.fav1fav            0.48302    0.08075   5.982 2.20e-09 ***
## z.fund1fund          0.07962    0.10309   0.772 0.439916    
## z.fund2mod           0.41097    0.09585   4.288 1.81e-05 ***
## x.sex1M:y.fav1fav    0.65845    0.12708   5.181 2.20e-07 ***
## x.sex1M:z.fund1fund -0.12841    0.15109  -0.850 0.395405    
## x.sex1M:z.fund2mod  -0.06267    0.13908  -0.451 0.652274    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.3612  on 11  degrees of freedom
## Residual deviance:   3.9303  on  4  degrees of freedom
## AIC: 96.067
## 
## Number of Fisher Scoring iterations: 4

18.2 Pengujian Ada Tidaknya Interaksi Antara Y dan Z (Homogenous Model vs Conditional Association on X)

18.2.1 Hipotesis

  • \(H_0\): \(\lambda^{YZ}_{jk} = 0\) (Tidak ada interaksi antara pendapat hukuman mati (Y) dan fundamentalisme (Z))
  • \(H_1\): \(\lambda^{YZ}_{jk} \neq 0\) (Ada interaksi antara pendapat hukuman mati (Y) dan fundamentalisme (Z))

18.2.2 Tingkat Signifikansi

  • \(\alpha = 5\%\)

18.2.3 Statistik Uji

  • \(\Delta\)Deviance \(= \text{Deviance model conditional on X} - \text{Deviance model homogenous}\)
  • \(= 3.903 - 1.798 = 2.132\)
  • \(db = db\ \text{model conditional on X} - db\ \text{model homogenous} = 4 - 2 = 2\)

18.2.4 Daerah Penolakan

  • Tolak \(H_0\) jika \(\Delta\)Deviance \(> \chi^2_{0.05,2} = 5.991\)

18.2.5 Keputusan

  • Karena \(2.132 < 5.991\), maka tidak tolak \(H_0\)

18.2.6 Kesimpulan

  • Dengan taraf nyata 5%, belum cukup bukti untuk menolak \(H_0\) atau dapat dikatakan bahwa tidak ada interaksi antara pendapat tentang hukuman mati dan fundamentalisme. Dengan kata lain, model yang terbentuk adalah model tanpa parameter \(\lambda^{YZ}_{jk}\).

# Pengujian hipotesis

# Deviance of Model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance   # model_conditional_X: conditional on X, model_homogenous: homogenous
Deviance.model
## [1] 2.132302

18.3 Pengujian Selisih Deviance (Conditional on X vs Homogenous)

Langkah-langkah uji hipotesis menggunakan residual deviance:

# Selisih deviance antar model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance
Deviance.model
## [1] 2.132302

Hitung Derajat Bebas

# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (4 - 2)
derajat.bebas
## [1] 2

Nilai Chi-Square Tabel

chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 5.991465

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"

Interpretasi Karena nilai Deviance.model = 2.13 lebih kecil dari nilai kritis chi-square tabel = 5.99 (dengan df = 2, alpha = 0.05), maka keputusan uji adalah “Terima”.

Pada taraf nyata 5%, belum cukup bukti untuk menolak H0, atau dengan kata lain tidak ada interaksi antara pendapat mengenai hukuman mati (Y) dan fundamentalisme (Z). Model yang terbentuk cukup hanya sampai dua interaksi dengan X (conditional on X), sehingga interaksi Y*Z tidak signifikan secara statistik.

19 UJI MODEL INTERAKSI DUA ARAH (HOMOGENOUS VS CONDITIONAL ON Y)

19.1 Model Conditional on Y

Model log-linear conditional pada Y memasukkan efek utama dan interaksi dua arah antara X dengan Y dan Y dengan Z, tanpa interaksi antara X dengan Z maupun interaksi tiga arah.

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \]

# Conditional Association on Y
model_conditional_Y <- glm(counts ~ x.sex + y.fav + z.fund +
              x.sex*y.fav + y.fav*z.fund,
              family = poisson(link = "log"))
summary(model_conditional_Y)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     y.fav * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            4.33931    0.09919  43.748  < 2e-16 ***
## x.sex1M               -0.59345    0.10645  -5.575 2.48e-08 ***
## y.fav1fav              0.37259    0.12438   2.996  0.00274 ** 
## z.fund1fund           -0.12516    0.13389  -0.935  0.34989    
## z.fund2mod             0.30228    0.12089   2.500  0.01240 *  
## x.sex1M:y.fav1fav      0.65845    0.12708   5.181 2.20e-07 ***
## y.fav1fav:z.fund1fund  0.21254    0.16205   1.312  0.18966    
## y.fav1fav:z.fund2mod   0.11757    0.14771   0.796  0.42606    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.3612  on 11  degrees of freedom
## Residual deviance:   2.9203  on  4  degrees of freedom
## AIC: 95.057
## 
## Number of Fisher Scoring iterations: 4

19.2 Pengujian Ada Tidaknya Interaksi antara X dan Z (Homogenous model vs Conditional Association on Y)

  • Hipotesis

    • \(H_0: \lambda_{ik}^{XZ} = 0\) (Tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z))

    • \(H_1: \lambda_{ik}^{XZ} \neq 0\) (Ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z))

  • Tingkat Signifikansi

    • \(\alpha = 5\%\)
  • Statistik Uji

    • \(\Delta \text{Deviance} = \text{Deviance model conditional on Y} - \text{Deviance model homogenous}\)

    • \(= 2.9203 - 1.798 = 1.1223\)

    • \(db = db \text{ model conditional on Y} - db \text{ model homogenous}\)

    • \(= 4 - 2 = 2\)

  • Daerah Penolakan

    • Tolak \(H_0\) jika \(\Delta \text{Deviance} > \chi^2_{0.05,2} = 5.991\)
  • Keputusan

    • Karena \(1.1223 < 5.991\), maka tidak tolak \(H_0\)
  • Kesimpulan

    • Dengan taraf nyata 5%, belum cukup bukti untuk menolak \(H_0\) atau dapat dikatakan bahwa tidak ada interaksi antara jenis kelamin dan fundamentalisme. Dengan kata lain, model yang terbentuk adalah model tanpa parameter \(\lambda_{ik}^{XZ}\).

19.3 Pengujian Hipotesis Interaksi X dan Z (Conditional on Y vs Homogenous)

# Deviance of Model
Deviance.model <- model_conditional_Y$deviance - model_homogenous$deviance   # model_conditional_Y: conditional on Y, model_homogenous: homogenous
Deviance.model
## [1] 1.122315

Hitung Derajat Bebas

derajat.bebas <- (4 - 2)
derajat.bebas
## [1] 2

Nilai Chi-Square Tabel

chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 5.991465

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"

Interpretasi Karena nilai Deviance.model = 1.12 lebih kecil dari nilai kritis chi-square tabel = 5.99 (df = 2, alpha = 0.05), maka keputusan uji adalah “Terima”.

Kesimpulan: Pada taraf nyata 5%, belum cukup bukti untuk menolak \(H_0\). Artinya, tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z) yang signifikan secara statistik. Model tanpa parameter \(\lambda_{ik}^{XZ}\) sudah cukup baik untuk data ini.

20 UJI MODEL INTERAKSI DUA ARAH (HOMOGENOUS VS CONDITIONAL ON Z)

20.1 Model Conditional on Z

Model log-linear conditional pada Z memasukkan efek utama dan interaksi dua arah antara X dengan Z dan Y dengan Z, tanpa interaksi antara X dengan Y maupun interaksi tiga arah.

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]

# Conditional Association on Z
model_conditional_Z <- glm(counts ~ x.sex + y.fav + z.fund +
              x.sex*z.fund + y.fav*z.fund,
              family = poisson(link = "log"))
summary(model_conditional_Z)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * z.fund + 
##     y.fav * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            4.12255    0.10518  39.195  < 2e-16 ***
## x.sex1M               -0.07453    0.10713  -0.696    0.487    
## y.fav1fav              0.65896    0.11292   5.836 5.36e-09 ***
## z.fund1fund           -0.06540    0.15126  -0.432    0.665    
## z.fund2mod             0.33196    0.13777   2.410    0.016 *  
## x.sex1M:z.fund1fund   -0.12841    0.15109  -0.850    0.395    
## x.sex1M:z.fund2mod    -0.06267    0.13908  -0.451    0.652    
## y.fav1fav:z.fund1fund  0.21254    0.16205   1.312    0.190    
## y.fav1fav:z.fund2mod   0.11757    0.14771   0.796    0.426    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.361  on 11  degrees of freedom
## Residual deviance:  29.729  on  3  degrees of freedom
## AIC: 123.87
## 
## Number of Fisher Scoring iterations: 4

20.2 Pengujian Ada Tidaknya Interaksi antara X dan Y (Homogenous model vs Conditional Association on Z)

  • Hipotesis

    • \(H_0: \lambda_{ij}^{XY} = 0\) (Tidak ada interaksi antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y))

    • \(H_1: \lambda_{ij}^{XY} \neq 0\) (Ada interaksi antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y))

  • Tingkat Signifikansi

    • \(\alpha = 5\%\)
  • Statistik Uji

    • \(\Delta \text{Deviance} = \text{Deviance model conditional on Z} - \text{Deviance model homogenous}\)

    • \(= 29.729 - 1.798 = 27.931\)

    • \(db = db \text{ model conditional on Z} - db \text{ model homogenous}\)

    • \(= 3 - 2 = 1\)

  • Daerah Penolakan

    • Tolak \(H_0\) jika \(\Delta \text{Deviance} > \chi^2_{0.05,1} = 3.841\)
  • Keputusan

    • Karena \(27.931 > 3.841\), maka tolak \(H_0\)
  • Kesimpulan

    • Dengan taraf nyata 5 persen, ada interaksi antara jenis kelamin dan pendapat tentang hukuman mati. Dengan kata lain, model yang terbentuk adalah model dengan parameter \(\lambda_{ij}^{XY}\).

20.3 Pengujian Hipotesis Interaksi X dan Y (Conditional on Z vs Homogenous)

# Deviance of Model
Deviance.model <- model_conditional_Z$deviance - model_homogenous$deviance   # model_conditional_Z: conditional on Z, model_homogenous: homogenous
Deviance.model
## [1] 27.93095

Hitung Derajat Bebas

derajat.bebas <- (3 - 2)
derajat.bebas
## [1] 1

Nilai Chi-Square Tabel

chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 3.841459

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Tolak"

Interpretasi Karena nilai Deviance.model = 27.93 jauh lebih besar dari nilai kritis chi-square tabel = 3.84 (df = 1, alpha = 0.05), maka keputusan uji adalah “Tolak”.

Kesimpulan: Pada taraf nyata 5%, terdapat bukti yang cukup untuk menolak \(H_0\). Artinya, ada interaksi yang signifikan antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y). Dengan kata lain, model terbaik yang terbentuk adalah model yang menyertakan parameter interaksi \(\lambda_{ij}^{XY}\).

21 PEMILIHAN MODEL TERBAIK

21.1 Ringkasan Model Log Linier

Model Parameter Deviance Jumlah Parameter df AIC
Saturated \(\lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk}\) 0.00 12 0 100.14
Homogenous \(\lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk}\) 1.798 10 2 97.934
Conditional on X \(\lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik}\) 3.9303 8 4 96.067
Conditional on Y \(\lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk}\) 2.9203 8 4 95.057
Conditional on Z \(\lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk}\) 29.729 9 3 123.87

21.2 Ringkasan Pengujian Interaksi 3 Arah dan 2 Arah

Interaksi Pengujian \(\Delta\) deviance \(\Delta\) df Chi-square Tabel Keputusan Keterangan
XYZ Saturated vs Homogenous 1.798 2 5.991 Tidak Tolak H0 tidak ada interaksi
YZ Conditional on X vs Homogenous 2.1323 2 5.991 Tidak Tolak H0 tidak ada interaksi
XZ Conditional on Y vs Homogenous 1.1223 2 5.991 Tidak Tolak H0 tidak ada interaksi
XY Conditional on Z vs Homogenous 27.931 1 3.841 Tolak H0 ada interaksi

21.3 Kesimpulan Pemilihan Model Terbaik

Dari hasil di atas diketahui bahwa asosiasi yang nyata hanya terdapat antara jenis kelamin dan pendapat mengenai hukuman mati. Sehingga, model terbaik adalah:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} \]


Model terbaik adalah model log-linear tanpa interaksi tiga arah dan hanya memuat interaksi dua arah antara jenis kelamin dan sikap terhadap hukuman mati.

22 MODEL TERBAIK

Model terbaik dipilih berdasarkan pengujian interaksi yang signifikan, yaitu hanya interaksi dua arah antara jenis kelamin (X) dan sikap terhadap hukuman mati (Y):

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} \]

# Model Terbaik
bestmodel <- glm(counts ~ x.sex + y.fav + z.fund +
                 x.sex*y.fav,
                 family = poisson(link = "log"))
summary(bestmodel)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav, 
##     family = poisson(link = "log"))
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        4.26518    0.07794  54.721  < 2e-16 ***
## x.sex1M           -0.59345    0.10645  -5.575 2.48e-08 ***
## y.fav1fav          0.48302    0.08075   5.982 2.20e-09 ***
## z.fund1fund        0.01986    0.07533   0.264    0.792    
## z.fund2mod         0.38130    0.06944   5.491 4.00e-08 ***
## x.sex1M:y.fav1fav  0.65845    0.12708   5.181 2.20e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.3612  on 11  degrees of freedom
## Residual deviance:   4.6532  on  6  degrees of freedom
## AIC: 92.79
## 
## Number of Fisher Scoring iterations: 4

Dari summary model diatas terlihat bahwa best model memiliki AIC yang lebih rendah dibandingkan saturated, homogeneous, dan conditional model

23 INTERPRETASI KOEFISIEN MODEL TERBAIK

# Interpretasi koefisien model terbaik
data.frame(
  koef = bestmodel$coefficients,
  exp_koef = exp(bestmodel$coefficients)
)
##                          koef   exp_koef
## (Intercept)        4.26517861 71.1776316
## x.sex1M           -0.59344782  0.5524194
## y.fav1fav          0.48302334  1.6209677
## z.fund1fund        0.01985881  1.0200573
## z.fund2mod         0.38129767  1.4641834
## x.sex1M:y.fav1fav  0.65845265  1.9318008

23.1 Interpretasi Koefisien Model Terbaik

  • \(\exp(\lambda^X_{1M}) = \exp(-0,593) = 0,552 \rightarrow\) nilai odds
    Tanpa memperhatikan fundamentalisme dan pendapat mengenai hukuman mati, peluang seseorang berjenis kelamin laki-laki adalah 0,55 kali dibandingkan perempuan.
    Atau, peluang seseorang berjenis kelamin perempuan adalah \(1/0,55 = 1,81\) kali dibandingkan laki-laki.

  • \(\exp(\lambda^Y_{1fav}) = \exp(0,483) = 1,621 \rightarrow\) nilai odds
    Tanpa memperhatikan jenis kelamin dan fundamentalisme, peluang seseorang mendukung hukuman mati adalah 1,621 kali dibandingkan yang menolak.

  • \(\exp(\lambda^Z_{1fund}) = \exp(0,01986) = 1,02 \rightarrow\) nilai odds
    Tanpa memperhatikan jenis kelamin dan pendapat mengenai hukuman mati, peluang seseorang fundamentalist adalah 1,02 kali dibandingkan liberal.

  • \(\exp(\lambda^Z_{2mod}) = \exp(0,381) = 1,464 \rightarrow\) nilai odds
    Tanpa memperhatikan jenis kelamin dan pendapat mengenai hukuman mati, peluang seseorang moderate adalah 1,464 kali dibandingkan liberal.

  • \(\exp(\lambda^{XY}_{1M,1fav}) = \exp(0,658) = 1,932 \rightarrow\) nilai odds ratio
    Tanpa memperhatikan fundamentalisme, odds mendukung hukuman mati (dibandingkan menolak) jika dia laki-laki adalah 1,932 kali dibandingkan odds yang sama jika dia perempuan.

24 NILAI DUGAAN MODEL TERBAIK

# Fitted values dari model terbaik
data.frame(
  Fund = z.fund,
  sex = x.sex,
  favor = y.fav,
  counts = counts,
  fitted = bestmodel$fitted.values
)
##     Fund sex favor counts    fitted
## 1  1fund  1M  1fav    128 125.59539
## 2  1fund  1M  2opp     32  40.10855
## 3  1fund  2F  1fav    123 117.69079
## 4  1fund  2F  2opp     73  72.60526
## 5   2mod  1M  1fav    182 180.27878
## 6   2mod  1M  2opp     56  57.57155
## 7   2mod  2F  1fav    168 168.93257
## 8   2mod  2F  2opp    105 104.21711
## 9   3lib  1M  1fav    119 123.12582
## 10  3lib  1M  2opp     49  39.31990
## 11  3lib  2F  1fav    111 115.37664
## 12  3lib  2F  2opp     70  71.17763

24.1 Perhitungan Manual Nilai Dugaan (Fitted Value) Model Terbaik

Secara manual, nilai fitted value diperoleh dengan cara sebagai berikut:

\[\begin{align*} \hat{\mu}_{111} &= \exp(\lambda + \lambda^x_{1m} + \lambda^y_{1fav} + \lambda^z_{fund} + \lambda^{xy}_{1m,1fav}) \\ &= \exp(4.265 - 0.593 + 0.483 + 0.01986 + 0.658) \\ &= \exp(4.833) = 125.595 \\ \\ \hat{\mu}_{112} &= \exp(\lambda + \lambda^x_{1m} + \lambda^y_{1fav} + \lambda^z_{2mod} + \lambda^{xy}_{1m,1fav}) \\ &= \exp(4.265 - 0.593 + 0.483 + 0.381 + 0.658) \\ &= \exp(5.195) = 180.279 \\ \\ \hat{\mu}_{113} &= \exp(\lambda + \lambda^x_{1m} + \lambda^y_{1fav} + \lambda^z_{lib} + \lambda^{xy}_{1m,1fav}) \\ &= \exp(4.265 - 0.593 + 0.483 + 0 + 0.658) \\ &= \exp(4.813) = 123.126 \\ \\ \hat{\mu}_{121} &= \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{fund} + \lambda^{xy}_{1m,2opp}) \\ &= \exp(4.265 - 0.593 + 0 + 0.01986 + 0) \\ &= \exp(3.692) = 40.109 \\ \\ \hat{\mu}_{122} &= \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{2mod} + \lambda^{xy}_{1m,2opp}) \\ &= \exp(4.265 - 0.593 + 0 + 0.381 + 0) \\ &= \exp(4.053) = 57.572 \\ \\ \hat{\mu}_{123} &= \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{lib} + \lambda^{xy}_{1m,2opp}) \\ &= \exp(4.265 - 0.593 + 0 + 0 + 0) \\ &= \exp(3.672) = 39.320 \\ \\ \hat{\mu}_{211} &= \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{fund} + \lambda^{xy}_{2f,1fav}) \\ &= \exp(4.265 + 0 + 0.483 + 0.01986 + 0) \\ &= \exp(4.768) = 117.691 \\ \\ \hat{\mu}_{212} &= \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{2mod} + \lambda^{xy}_{2f,1fav}) \\ &= \exp(4.265 + 0 + 0.483 + 0.381 + 0) \\ &= \exp(5.1295) = 168.933 \\ \\ \hat{\mu}_{213} &= \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{lib} + \lambda^{xy}_{2f,1fav}) \\ &= \exp(4.265 + 0 + 0.483 + 0 + 0) \\ &= \exp(4.748) = 115.377 \\ \\ \hat{\mu}_{221} &= \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{fund} + \lambda^{xy}_{2f,2opp}) \\ &= \exp(4.265 + 0 + 0 + 0.01986 + 0) \\ &= \exp(4.285) = 72.605 \\ \\ \hat{\mu}_{222} &= \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{2mod} + \lambda^{xy}_{2f,2opp}) \\ &= \exp(4.265 + 0 + 0 + 0.381 + 0) \\ &= \exp(4.646) = 104.217 \\ \\ \hat{\mu}_{223} &= \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{lib} + \lambda^{xy}_{2f,2opp}) \\ &= \exp(4.265 + 0 + 0 + 0 + 0) \\ &= \exp(4.265) = 71.178 \\ \end{align*}\]

Keterangan:
Nilai \(\hat{\mu}_{ijk}\) akan sama apapun referensi dari kategori peubahnya yang kita gunakan.

25 Referensi

  • Agresti, A. (2013). Categorical Data Analysis. John Wiley & Sons.

  • Agresti, A. (2019). An Introduction to Categorical Data Analysis. Wiley.

  • Christensen, R. (1997). Log-Linear Models and Logistic Regression. Springer.

  • Fisher, R. A. (1935). The Design of Experiments. Oliver and Boyd.

  • Fox, J. (2008). Applied Regression Analysis and Generalized Linear Models.

  • Howell, D. C. (2012). Statistical Methods for Psychology (8th ed.). Cengage Learning.

  • Mehta, C. R., & Patel, N. R. (1983). A Network Algorithm for Performing Fisher’s Exact Test in r × c Contingency Tables. Journal of the American Statistical Association, 78(382), 427-434.

  • Modul ADK, Pertemuan 14. (2021). Universitas Padjadjaran.