Puji syukur penulis panjatkan ke hadirat Tuhan Yang Maha Esa, karena dengan rahmat dan karunia-Nya, penulisan ebook ini yang berjudul Analisis Data Kategori dapat diselesaikan dengan baik.

Ebook ini disusun sebagai bagian dari upaya untuk menyediakan sumber belajar yang sistematis, aplikatif, dan mudah dipahami dalam bidang analisis data kategori. Dalam dunia riset dan industri, data kategori sering muncul dalam bentuk hasil survei, data medis, pilihan konsumen, dan berbagai konteks lainnya. Oleh karena itu, pemahaman terhadap teknik analisis yang sesuai menjadi hal yang sangat penting.

Materi dalam ebook ini mencakup pengantar teori dasar, model-model statistik yang umum digunakan seperti regresi logistik dan model multinomial, serta implementasi praktis menggunakan perangkat lunak R. Dengan pendekatan berbasis studi kasus dan data simulasi, pembaca tidak hanya dibekali konsep, tetapi juga kemampuan menerapkan langsung teknik analisis tersebut pada data nyata.

Penulisan ebook ini tidak lepas dari tantangan, baik dalam menyederhanakan konsep statistik yang kompleks, maupun dalam menyusun contoh yang relevan dan aplikatif. Oleh karena itu, masukan dari pembaca sangat penulis harapkan untuk perbaikan di masa yang akan datang.

Ucapan terima kasih penulis sampaikan kepada para dosen, kolega, serta komunitas pengguna R yang telah memberikan inspirasi dan referensi dalam menyusun buku ini. Semoga ebook ini dapat memberikan kontribusi nyata dalam proses pembelajaran dan pengembangan analisis data kategori di berbagai bidang.

Jatinangor, 12 Juni 2025

Stephani Julieta

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 umumdari data kategori mencakup jenis kelamin (laki-laki/perempuan), status pernikahan (menikah/belum menikah), tingkat pendidikan (rendah/menengah/tinggi), dan preferensi konsumen (setuju/netral/tidak se tuju). Analisis data kategori memainkan peran penting dalam eksplorasi dan interpretasi data yang bersifat nom inal 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 proba bilitas. Dengan berkembangnya teknologi dan kecerdasan buatan, analisis data kategori juga semakin banyak diterapkan dalam machine learning dan big data analytics

Tujuan Analisis Data Kategori

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

Mengidentifikasi Pola dan Tren

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

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.

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.

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).

Definisi dan Ruang Lingkup Analisis Data Kategori

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

Nominal vs Ordinal

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

Data Biner vs Multikategori

• Biner: Jenis data kategorik yang hanya memiliki dua kemungkinan nilai atau kategori (contoh: benar/salah, sukses/gagal, sehat/sakit).
• Multikategori: Jenis data kategorik yang memiliki lebih dari dua kategori. Kategori-kategori ini bisa ordinal atau nominal (contoh: tingkat pendidikan)

Perbedaan dengan Data Kuantitatif

Data kategorik berbeda dari data kuantitatif karena tidak dapat diukur dalam skala numerik kontinu. Data kategorik menyatakan jenis atau kelompok, sedangkan data kuantitatif menyatakan jumlah atau ukuran.

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:

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.

Kesehatan dan Kedokteran

Analisis data kategori memiliki peran yang sangat penting dalam bidang kesehatan dan kedokteran karena banyak data yang dikumpulkan bersifat kategorik, seperti status diagnosis, jenis kelamin, golongan darah, tingkat keparahan penyakit, dan respons terhadap pengobatan. Beberapa manfaat utamanya adalah:

• Mengidentifikasi faktor dan risiko penyakit.
• Mengevaluasi efektivitas intervensi medis.
• Memprediksi hasil klinis pasien.

Pemasaran dan Bisnis

Dalam dunia pemasaran dan bisnis, analisis data kategori memainkan peranan penting dalam memahami perilaku konsumen, segmentasi pasar, dan pengambilan keputusan strategis. Banyak informasi dalam konteks bisnis bersifat kategorik, seperti jenis produk, preferensi pelanggan, saluran distribusi, atau tingkat kepuasan.Berikut beberapa manfaat utamanya:

• Segmentasi pasar yang lebih efektif.
• Mengetahui preferensi dan perilaku pelanggan.
• Mengevaluasi kepuasan pelanggan.

Pendidikan

Analisis data kategori sangat membantu dalam mengkaji berbagai aspek pendidikan, karena banyak informasi yang bersifat non-numerik dan berbentuk klasifikasi. Beberapa manfaatnya:

• Mengukur pencapaian akademik berdasarkan karakteristik siswa.
• Menganalisis faktor yang memengaruhi partisipasi pendidikan.
• Mengevaluasi efektivitas program pendidikan.
• Mendeteksi kesenjangan pendidikan.

Kebijakan Publik dan Pemerintahan

Dalam bidang ini, data kategorik digunakan untuk mengelompokkan masyarakat dan program kebijakan guna memastikan pelayanan yang lebih tepat sasaran.Manfaatnya antara lain:

• Membantu perumusan kebijakan yang inklusif, dengan memahami kebutuhan berdasarkan kategori masyarakat seperti umur, status pekerjaan, dan wilayah domisili.
• Mengevaluasi dampak program pemerintah.
• Mendukung pengambilan keputusan yang berbasis data.

Keamanan dan Kriminalitas

Dalam bidang ini, data kategorik digunakan untuk menganalisis pola kejahatan, mengidentifikasi pelaku, dan merancang strategi penanggulangan. Manfaatnya antara lain:

• Mengklasifikasikan jenis kejahatan (pencurian, penipuan, kekerasan) untuk mengetahui jenis yang paling dominan di suatu wilayah.
• Menganalisis profil pelaku dan korban berdasarkan kategori usia, jenis kelamin, atau status sosial untuk keperluan preventif.
• Membantu pemetaan wilayah rawan kejahatan berdasarkan kategori daerah (perkotaan/pedesaan), waktu kejadian (siang/malam), dan lokasi (rumah, jalan umum).

Metode dalam Analisis Data Kategori

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

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.

Regresi Logistik

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

Analisis Correspondence (CA)

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

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.

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.

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\} \] dengan:

  • \(p\) adalah probabilitas sukses
  • \(1 - p\) adalah probabilitas gagal
  • \(X \sim \text{Bernoulli}(p)\)

Contoh Variabel Acak Bernoulli

  • Hasil dari lemparan koin (Kepala = 1, Ekor = 0)
  • Keberhasilan atau kegagalan dalam suatu percobaan klinis.

Perhitungan dengan R

library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
set.seed(123)
bernoulli_sample <- rbinom(n = 15, size = 2, prob = 0.5) # 15 percobaan Bernoulli
bernoulli_sample
##  [1] 1 2 1 2 2 0 1 2 1 1 2 1 1 1 0

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 𝑝, maka distribusi Binomial memiliki fungsi probabilitas:

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

dengan:

  • \(Y\) = jumlah keberhasilan
  • \(k\) = nilai keberhasilan tertentu \((k = 0, 1, 2, \dots, n)\)
  • \(n\) = jumlah total percobaan
  • \(p\) = probabilitas sukses pada setiap percobaan
  • \(\binom{n}{k} = \dfrac{n!}{k!(n - k)!}\) adalah koefisien binomial

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 = 15, size = 8, prob = 0.5) # 15 percobaan Binomial\ dengan 8 ulangan
binomial_sample
##  [1] 3 5 4 6 6 2 4 6 4 4 6 4 5 4 2

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 𝑛 kali,dan setiap percobaan dapat menghasilkan salah satu dari 𝑘 kategori dengan probabilitas 𝑝1,𝑝2,…,𝑝𝑘, maka distribusi probabilitasnya:

\[ P(Y_1 = y_1, Y_2 = y_2, \dots, Y_k = y_k) = \frac{n!}{y_1! y_2! \dots y_k!} \cdot p_1^{y_1} p_2^{y_2} \dots p_k^{y_k} \]

dengan syarat:

  • \(\sum_{i=1}^{k} y_i = n\)
  • \(\sum_{i=1}^{k} p_i = 1\)
  • \(0 \leq p_i \leq 1\) untuk setiap \(i\)
  • \(Y_i\) = Jumlah kejadian kategori ke-\(i\)
  • \(p_i\) = Probabilitas kejadian kategori ke-\(i\)
  • \(n\) = Jumlah total percobaan

Contoh Variabel Acak Multinomial:

Contoh Kasus

Misalkan seorang pelanggan memilih satu dari tiga merek kopi setiap pagi:

  • A (kopi instan lokal)
  • B (kopi sachet impor)
  • C (kopi seduh manual)

Dari survei diketahui probabilitas pilihan pelanggan:

  • \(P(A) = 0.5\)
  • \(P(B) = 0.3\)
  • \(P(C) = 0.2\)

Jika terdapat 10 pelanggan, berapa probabilitas bahwa:

  • 5 orang memilih A,
  • 3 orang memilih B,
  • 2 orang memilih C?

Distribusi ini mengikuti Multinomial(n = 10, prob = c(0.5, 0.3, 0.2))

Perhitungan Teoritis

Rumus peluang distribusi multinomial:

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

  • \(n = 10\)
  • \(x = (5, 3, 2)\)
  • \(p = (0.5, 0.3, 0.2)\)

Perhitungan di R

# Parameter
n <- 10
x <- c(5, 3, 2)
p <- c(0.5, 0.3, 0.2)

# Fungsi menghitung probabilitas multinomial
prob <- factorial(n) / (factorial(x[1]) * factorial(x[2]) * factorial(x[3])) *
  p[1]^x[1] * p[2]^x[2] * p[3]^x[3]

prob
## [1] 0.08505
set.seed(123)

# Simulasi satu percobaan multinomial
multinomial_sample <- rmultinom(n = 2, size = 10, prob = p)
multinomial_sample
##      [,1] [,2]
## [1,]    4    5
## [2,]    3    2
## [3,]    3    3

Distribusi Poisson

Distribusi Poisson adalah distribusi probabilitas diskret yang menyatakan probabilitas sejumlah kejadian terjadi dalam suatu interval waktu atau ruang tertentu, dengan asumsi bahwa kejadian tersebut terjadi secara acak dan independen, serta rata-rata kejadiannya tetap.

Distribusi ini cocok digunakan untuk memodelkan:

  • Jumlah panggilan telepon masuk ke call center per jam
  • Jumlah kecelakaan di jalan tertentu per minggu
  • Jumlah pelanggan datang ke toko per hari

Rumus fungsi probabilitas dari distribusi Poisson adalah:
\[ P(X = x) = \frac{\lambda^x e^{-\lambda}}{x!} \]

Contoh Variabel Acak Poisson

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

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

Desain Sampling dalam Analisis Data Kategori

Dalam analisis data kategori, desain sampling (rancangan pengambilan sampel) sangat penting karena dapat memengaruhi kualitas hasil analisis dan generalisasi terhadap populasi. Desain sampling adalah cara atau strategi dalam memilih unit observasi dari suatu populasi untuk dikumpulkan dan dianalisis. Dalam konteks data kategorik, desain ini sangat menentukan proporsi masing-masing kategori dalam sampel. 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.

Prospective Sampling

Prospective sampling (pengambilan sampel prospektif) adalah metode pengambilan sampel dalam penelitian di mana partisipan atau unit observasi dipilih terlebih dahulu, kemudian diikuti secara waktu ke depan untuk mengamati atau mencatat kejadian atau hasil yang terjadi.

Dengan kata lain, dalam metode ini, peneliti mulai dari sekarang dan mengikuti peserta secara prospektif (ke depan) dalam waktu untuk melihat apakah mereka akan mengalami outcome tertentu.

Karakteristik Utama

  • Penelitian dimulai sebelum outcome terjadi.
  • Data dikumpulkan secara berkelanjutan dari waktu ke waktu.
  • Biasanya digunakan dalam studi kohort.
  • Cocok untuk menganalisis hubungan sebab-akibat antara faktor risiko dan outcome.

Beberapa jenis desain sampling dalam metode ini meliputi:

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.

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.

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.

Studi Kasus-Kontrol

Dalamstudi 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.

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

Tabel Perbandingan Desain Sampling

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 Mudah dan cepat dilakukan, efisien untuk penyakit langka Sulit mengontrol variabel pengganggu, rentan bias recall
Studi Kohort Retrospektif Retrospective Density

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.

Tabel Kontingensi 2 x 2

Tabel kontingensi 2x2 adalah tabel yang digunakan untuk menyajikan hubungan antara dua variabel kategorik, masing-masing dengan dua kategori. Tabel ini sering digunakan dalam analisis statistik seperti uji Chi-Square dan uji Fisher’s Exact Test untuk menguji hubungan antara variabel.

Berikut adalah struktur tabel kontingensi 2x2:

Col1 Kategori 1 (+) Kategori 2 (-) Total
Group 1 n11 n12 n1.
Group 2 n21 n22 n2.
Total n.1 n.2 n

• 𝑛11 = Jumlah kasus dalam kategori positif dari Grup 1
• 𝑛12 = Jumlah kasus dalam kategori negatif dari Grup 1
• 𝑛21 = Jumlah kasus dalam kategori positif dari Grup 2
• 𝑛22 = Jumlah kasus dalam kategori negatif dari Grup 2
• 𝑛1. = Total observasi dalam Grup 1 (𝑛1. =𝑛11 +𝑛12)
• 𝑛2. = Total observasi dalam Grup 2 (𝑛2. =𝑛21 +𝑛22)
• 𝑛.1 = Total observasi dalam Kategori 1 (𝑛.1 =𝑛11 +𝑛21)
• 𝑛.2 = Total observasi dalam Kategori 2 (𝑛.2 =𝑛12 +𝑛22)
• 𝑛 = Total keseluruhan sampel (𝑛=𝑛11 +𝑛12 +𝑛21 +𝑛22)

Berikut adalah contoh kasus dari tabel kontingensi 2x2:

Misalkan sebuah penelitian ingin menganalisis hubungan antara kebiasaan merokok dan kejadian penyakit jantung pada 200 individu. Data yang diperoleh disajikan dalam tabel kontingensi berikut:

Penyakit Jantung (+) Penyakit Jantung (-) Total
Merokok 50 30 80
Tidak Merokok 20 100 120
Total 70 130 200

Distribusi Peluang dalam Tabel Kontingensi 2 x 2

Peluang Bersama

Peluang bersama adalah probabilitas dari kombinasi tertentu dalam tabel kontingensi. Rumusnya:

\[ P(A \cap B) = \frac{n(A \cap B)}{n_{total}} \]

Perhitungannya:

  • \(P(Merokok, Jantung) = \frac{50}{200} = 0.25\)
  • \(P(Merokok, Tidak Jantung) = \frac{30}{200} = 0.15\)
  • \(P Tidak Merokok, Jantung) = \frac{20}{200} = 0.10\)
  • \(P(Tidak Merokok, Tidak Jantung) = \frac{100}{200} = 0.50\)
n_total <- 200
table_data <- matrix(c(50, 30, 20, 100), nrow = 2, byrow = TRUE,
                     dimnames = list(c("Merokok", "Tidak Merokok"), 
                                     c("Penyakit Jantung", "Tidak Penyakit Jantung")))

P_joint <- table_data / n_total
P_joint
##               Penyakit Jantung Tidak Penyakit Jantung
## Merokok                   0.25                   0.15
## Tidak Merokok             0.10                   0.50

Peluang Marginal

Peluang marginal (marginal probability) adalah peluang suatu peristiwa terjadi tanpa mempertimbangkan peristiwa lainnya. Peluang ini diperoleh dengan menjumlahkan peluang bersama dari suatu tabel kontingensi di sepanjang baris atau kolom tertentu.

Peluang marginal diperoleh dengan menjumlahkan nilai dalam satu baris atau kolom:

\[ P(A) = \frac{n(A)}{n_{total}} \]

Perhitungannya:

  • \(P(Merokok) = \frac{80}{200} = 0.40\)
  • \(P(Tidak Merokok) = \frac{120}{200} = 0.60\)
  • \(P(Jantung) = \frac{70}{200} = 0.35\)
  • \(P(TIdak Jantung) = \frac{130}{200} = 0.65\)
P_marginal_M <- rowSums(table_data) / n_total
P_marginal_J <- colSums(table_data) / n_total

P_marginal_M
##       Merokok Tidak Merokok 
##           0.4           0.6
P_marginal_J
##       Penyakit Jantung Tidak Penyakit Jantung 
##                   0.35                   0.65

Peluang Bersyarat

Peluang bersyarat (conditional probability) adalah peluang suatu peristiwa terjadi dengan syarat bahwa peristiwa lain sudah terjadi. Dalam notasi probabilitas, peluang bersyarat dari A yang terjadi jika B sudah terjadi ditulis sebagai:

\[ P(A | B) = \frac{P(A \cap B)}{P(B)} \]

Perhitungannya:

  • \(P(M | J) = \frac{50}{80} = 0.625\)
  • \(P(M | TJ) = \frac{30}{80} = 0.375\)
  • \(P(TM | J) = \frac{20}{120} = 0.167\)
  • \(P(TM | TJ) = \frac{100}{120} = 0.833\)
# Definisi nilai
total <- 200
merokok <- 80
tidak_merokok <- 120

penyakit_jantung <- 70
tidak_penyakit_jantung <- 130

merokok_dan_penyakit <- 50
merokok_dan_tidak_penyakit <- 30
tidak_merokok_dan_penyakit <- 20
tidak_merokok_dan_tidak_penyakit <- 100

# Peluang Bersyarat

# P(Merokok | Jantung)
p_penyakit_given_merokok <- merokok_dan_penyakit / merokok

# P(Merokok | Tidak Jantung)
p_penyakit_given_tidak_merokok <- merokok_dan_tidak_penyakit / merokok

# P(Tidak Merokok | Jantung)
p_merokok_given_penyakit <- tidak_merokok_dan_penyakit / tidak_merokok

# P(Tidak Merokok | Tidak Jantung)
p_merokok_given_tidak_penyakit <- tidak_merokok_dan_tidak_penyakit / tidak_merokok

# Tampilkan hasil
cat("P(Penyakit Jantung | Merokok) =", round(p_penyakit_given_merokok, 3), "\n")
## P(Penyakit Jantung | Merokok) = 0.625
cat("P(Penyakit Jantung | Tidak Merokok) =", round(p_penyakit_given_tidak_merokok, 3), "\n")
## P(Penyakit Jantung | Tidak Merokok) = 0.375
cat("P(Merokok | Penyakit Jantung) =", round(p_merokok_given_penyakit, 3), "\n")
## P(Merokok | Penyakit Jantung) = 0.167
cat("P(Merokok | Tidak Penyakit Jantung) =", round(p_merokok_given_tidak_penyakit, 3), "\n")
## P(Merokok | Tidak Penyakit Jantung) = 0.833

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 𝑃(Jantung|Merokok) >𝑃(Jantung|Tidak Perokok), maka ini menunjukkan bahwa Merokok lebih berisiko terkena Penyakit Jantung dibandingkan Tidak Merokok.

• 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.

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.

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.

\[ RD = P(J | M) - P(J | M) \] Contoh perhitungan dalam R:

RD <- function(n11, n12, n21, n22) {
 (n11 / (n11 + n12))- (n21 / (n21 + n22))
 }
 RD(60, 40, 50, 50)
## [1] 0.1

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.

• Jika 𝑅𝑅>1, maka kejadian lebih sering terjadi di Grup 1 dibandingkan Grup 2.
• Jika 𝑅𝑅<1, maka kejadian lebih jarang terjadi di Grup 1 dibandingkan Grup 2.
• Jika 𝑅𝑅=1, maka tidak ada perbedaan risiko antara dua kelompok.

\[ RR = \frac{P(J | M)}{P(J | M)} \]

Contoh perhitungan dalam R:

RR <- function(n11, n12, n21, n22) {
 (n11 / (n11 + n12)) / (n21 / (n21 + n22))
 }
 RR(60, 40, 50, 50)
## [1] 1.2

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

Odds Ratio (OR)

Rasio odds (OR) mengukur seberapa besar peluang terjadinya suatu kejadian pada kelompok dengan eksposur dibandingkan dengan kelompok tanpa eksposur.

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

Dengan: \(a = 50\), \(b = 30\), \(c = 20\), \(d = 100\)

OR <- (table_data[1,1] / table_data[1,2]) / (table_data[2,1] / table_data[2,2])
OR
## [1] 8.333333

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

Perbandingan Risk Difference, Relative Risk, dan Odds Ratio

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:
- Risk Differnece digunakan untuk memahami dampak absolut dari suatu faktor risiko atau intervensi.
- Relative Risk lebih cocok untuk studi kohort atau eksperimen karena mengukur kemungkinan relatif.
- Odds Ratio sering digunakan dalam studi kasus-kontrol karena dapat memperkirakan risiko relatif dalam desain penelitian ini.

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

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

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,
- 𝑥 adalah jumlah individu dalam kategori tertentu,
- 𝑛 adalah total jumlah individu dalam sampel.

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.

Uji Hipotesis

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
Group 1 \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Group 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 \ne 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 𝑍 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
Group 1 70 20 90
Group 2 20 70 90
Total 90 90 180

Langkah 1: Hitung Proporsi Sampel

  • \(\hat{p}_1 = \frac{70}{90} = 0.777\)
  • \(\hat{p}_2 = \frac{20}{90} = 0.222\)

Langkah 2: Hitung Proporsi Gabungan

  • \(\hat{p} = \frac{70 + 20}{90 + 90} = \frac{90}{180} = 0.50\)

Langkah 3: Hitung Statistik Uji Z

\[ Z = \frac{0.777 - 0.222}{\sqrt{0.50(1 - 0.50) \left(\frac{1}{90} + \frac{1}{90} \right)}} \]

\[ Z = \frac{0.55}{\sqrt{0.50 \times 0.50 \times 0.0222}} = \frac{0.55}{\sqrt{0.0055}} = \frac{0.55}{0.0745} = 7.382 \] Interpretasi:

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

set.seed(123)
data<- matrix(c(70, 20, 20, 70), nrow = 2, byrow = TRUE)
dimnames(data) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print(data)
##         Kejadian
## Terpapar Ya Tidak
##    Ya    70    20
##    Tidak 20    70
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 = 53.356, df = 1, p-value = 2.783e-13
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  0.4229760 0.6881351
## sample estimates:
##    prop 1    prop 2 
## 0.7777778 0.2222222

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

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.

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

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
Group 1 70 20 90
Group 2 20 70 90
Total 90 90 180

Misalkan:

\[ \hat{p}_1 = \frac{70}{90} = 0.777 \quad \text{dan} \quad \hat{p}_2 = \frac{20}{90} = 0.222 \]

  • Risk Difference:

\[ RD = 0.777 - 0.222 = 0.555 \]

  • Standard Error:

\[ SE(RD) = \sqrt{ \frac{0.777(0.222)}{90} + \frac{0.222(0.777)}{90} } \]

\[ SE(RD) = \sqrt{ \frac{0.172}{90} + \frac{0.172}{90} } = \sqrt{0.00191 + 0.00191} = \sqrt{0.00382} = 0.061859 \]

  • Statistik uji Z:

\[ Z_{RD} = \frac{0.55}{0.061859} = 8.891188 \]

Perhitungan Manual untuk RR - Relative Risk

\[ RR = \frac{ \frac{70}{90} }{ \frac{20}{90} } = \frac{0.777}{0.222} = 3.5 \]

  • Standard Error untuk ln RR:

\[ SE(\ln RR) = \sqrt{ \frac{1}{70} - \frac{1}{90} + \frac{1}{20} - \frac{1}{90} } \]

\[ SE(\ln RR) = \sqrt{0.014 - 0.011 + 0.05 - 0.011} = \sqrt{0.042} = 0.2049 \] - Statistik uji Z:

\[ Z_{RR} = \frac{\ln 3.5}{0.2049} = \frac{1.252}{0.2049} = 6.114 \] Perhitungan Manual untuk OR - Odds Ratio

\[ OR = \frac{70 \times 70}{20 \times 20} = \frac{4900}{400} = 12.25 \]

  • Standard Error untuk ln OR:

\[ SE(\ln OR) = \sqrt{ \frac{1}{70} + \frac{1}{20} + \frac{1}{20} + \frac{1}{70} } \]

\[ SE(\ln OR) = \sqrt{0.014 + 0.05 + 0.05 + 0.014} = \sqrt{0.1028} = 0.3206 \]

  • Statistik uji Z:

\[ Z_{OR} = \frac{\ln 12.25}{0.3206} = \frac{2.505}{0.3206} = 7.815 \] Perhitungan Menggunakan R:

n11 <- 70; n12 <- 20; n21 <- 20; n22 <- 70
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.5555556
## 
## $SE_RD
## [1] 0.06197482
## 
## $Z_RD
## [1] 8.964215
## 
## $RR
## [1] 3.5
## 
## $SE_Ln_RR
## [1] 0.2050939
## 
## $Z_RR
## [1] 6.108242
## 
## $OR
## [1] 12.25
## 
## $SE_Ln_OR
## [1] 0.3585686
## 
## $Z_OR
## [1] 6.987578

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.

Uji Independensi

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

Uji Chi-Square

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

Rumus Chi-Square:

\[ \chi^2 = \sum_{i=1}^{n} \frac{(O_i - E_i)^2}{E_i} \] dimana:

O adalah nilai observasi dalam tabel kontingensi.
E adalah nilai yang diharapkan, dihitung sebagai:

\[ E_{ij} = \frac {({Ri \times Cj})}{N} \] dengan:

Ri =total baris ke-i.
Cj =total kolom ke-j.
N =total sampel. ## Analisis Residual dalam Tabel Kontingensi

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 \] Hitung Statistik Chi-Square:

\[ \chi^2 = \frac{(30 - 18)^2}{18} + \frac{(10 - 22)^2}{22} + \frac{(15 - 27)^2}{27} + \frac{(45 - 33)^2}{33} \]

\[ \chi^2 = \frac{144}{18} + \frac{144}{22} + \frac{144}{27} + \frac{144}{33} \]

\[ \chi^2 = 8 + 6.55 + 5.33 + 4.36 = 24.24 \]

Dengan derajat kebebasan \(df = (2 - 1)(2 - 1) = 1\), kita membandingkan dengan nilai tabel \(\chi^2\), yaitu 3.841, dan karena \(\text{p-value} < 0.05\), maka kita menolak hipotesis nol.

Perhitungan menggunakan R:

# 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”.

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×Jsignifikan, 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×Jdan menghitung Chi-Square keseluruhan.
2. Memecah tabel menjadi beberapa tabel 2×2sebanyak (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:

Hipotesis yang Diuji

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

Hitung untuk masing-masing sel:

  • 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:

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

Perhitungan:

\[ 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 dihitung:

\[ X^2 = 12.57 \]

Langkah 3: Bandingkan dengan Tabel Chi-Square

Derajat bebas:

\[ df = (I - 1)(J - 1) = (2 - 1)(3 - 1) = 2 \] Nilai kritis \(\chi^2\) untuk \(\alpha = 0.05\) dan \(df = 2\) adalah 5.99.

Karena \(X^2 = 12.57 > 5.99\), maka kita menolak H₀, sehingga ada hubungan yang signifikan antara Gender dan Identifikasi Partai Politik.

Perhitungan menggunakan R:

# Matriks 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")
data_matrix
##        Democrat Republican Independent
## Female      495        272         590
## Male        330        265         498
# 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 dannmenyimpulkan bahwa Gender berhubungan dengan pilihan partai politik.

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

Gender Democrat Republican
Female 496 272
Male 330 265

Chi-square : 𝑋2 = 11.536, 𝑝 < 0.001

Partisi 2: Democrat + Republican vs. Independent

Gender Democrat + Republican Independent
Female 767 590
Male 595 498

Chi-Square: 𝑋2 = 1.065, 𝑝 = 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.

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^2\)

\[ 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 = 19.88 > 3.841 \]

Kesimpulan:

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 𝐺2 lebih besar dari nilai kritis 𝜒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.

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).

Distribusi Hipergeometrik

Distribusi Hipergeometrik digunakan untuk menghitung probabilitas mendapatkan sejumlah keberhasilan tertentu dalam sampel acak tanpa pengembalian dari populasi terbatas yang terdiri dari dua kategori.

Fungsi probabilitas dari distribusi ini dinyatakan sebagai:

\[ 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
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{11}{2}}{\binom{40}{20}} \] Implementasi Menggunakan R

# Parameter
N <- 40   # total populasi
K <- 29   # jumlah objek dalam kategori sukses
n <- 20   # ukuran sampel
x <- 18   # jumlah keberhasilan dalam sampel

# Menggunakan dhyper untuk menghitung P(X = 18)
p_hyper <- dhyper(x, K, N - K, n)
p_hyper
## [1] 0.01380413

Misalkan diketahui data sebagai berikut:

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

Langkah-Langkah Perhitungan:

  1. Asumsikan H₀: Tidak ada hubungan antara grup dan respon.
  2. Hitung probabilitas tabel yang diamati menggunakan distribusi hipergeometrik:

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

# Tabel observasi
 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
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.

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 dia mati 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.

Jenis Residual

  1. Raw Residual Residual mentah adalah selisih langsung antara nilai observasi dan harapan:

\[ R_{ij} = O_{ij} - E_{ij} \]

  1. Pearson Residual Pearson residual mempertimbangkan skala berdasarkan frekuensi harapan:

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

  1. Standardized Residual Standardized residual memperhitungkan estimasi varians dari sel tertentu:

\[ SR_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - p_{i\cdot})(1 - p_{\cdot j})}} \]

Catatan: Rumus ini bergantung pada model yang digunakan dan umumnya dihitung oleh software statistik.

  1. Adjusted (Studentized) Residual Residual ini memperhitungkan pengaruh keseluruhan tabel (lebih konservatif):

\[ AR_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - h_{ij})}} \]

Di mana \(h_{ij}\) adalah leverage dari sel \(i,j\).

Implementasi di R Berikut adalah contoh implementasi analisis residual dari tabel kontingensi:

# Data dummy
observed <- matrix(c(20, 30, 25, 25), nrow = 2, byrow = TRUE)
dimnames(observed) <- list(Gender = c("Male", "Female"),
                           Response = c("Yes", "No"))

# Chi-square test
chisq_test <- chisq.test(observed)

# Output
chisq_test$residuals       # Pearson residual
##         Response
## Gender          Yes         No
##   Male   -0.5270463  0.4767313
##   Female  0.5270463 -0.4767313
chisq_test$stdres          # Standardized residual (if available in version)
##         Response
## Gender         Yes        No
##   Male   -1.005038  1.005038
##   Female  1.005038 -1.005038

Jika residual terstandarisasi tidak tersedia secara langsung, gunakan paket vcd:

library(vcd)
## Warning: package 'vcd' was built under R version 4.3.3
## Loading required package: grid
assoc(observed, shade = TRUE)

Kesimpulan Jenis-jenis residual memberikan wawasan lokal terhadap hubungan antara dua variabel kategorik dalam tabel kontingensi. Dengan memahami nilai residual, kita dapat mengetahui apakah sel tertentu memiliki frekuensi yang jauh lebih tinggi atau rendah dari yang diharapkan.

Deteksi Outlier dalam Analisis Data Kategori Menggunakan Residual

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.

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.

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
Group A, Sukses 2.06 2.45
Group A, Gagal -2.20 -2.60
Group B, Sukses -1.96 -2.10
Group 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.

Perhitungan menggunakan R:

# 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.

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 𝑋 dan 𝑌) dapat dipengaruhi oleh variabel ketiga 𝑍, 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 (𝑋) dan kanker paru-paru (𝑌) dengan mengendalikan efek usia (𝑍).
• Dalam penelitian sosial, untuk mengevaluasi hubungan antara ras tersangka (𝑋) dan keputusan hukuman mati (𝑌) dengan mempertimbangkan ras korban (𝑍).

Tabel kontingensi tiga arah dapat dipecah menjadi:

• Tabel Parsial: Tabel yang menyajikan hubungan antara 𝑋 dan 𝑌 pada setiap kategori 𝑍. Ini memungkinkan analisis hubungan bersyarat, di mana efek 𝑍 dikendalikan.
• Tabel Marginal: Tabel yang diperoleh dengan mengabaikan 𝑍, yaitu dengan menjumlahkan semua kategori 𝑍. Ini memberikan gambaran umum hubungan antara 𝑋 dan 𝑌 tanpa mempertimbangkan 𝑍,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.

Tabel Parsial dan Marginal

Tabel parsial adalah tabel yang mengelompokkan𝑋dan𝑌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|} \hline Z & X & Y = 1 & Y = 2 & \ldots & Y = J \\ \hline Z = 1 & X = 1 & n_{111} & n_{121} & \ldots & n_{1J1} \\ & X = 2 & n_{211} & n_{221} & \ldots & n_{2J1} \\ & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline Z = 2 & X = 1 & n_{112} & n_{122} & \ldots & n_{1J2} \\ & X = 2 & n_{212} & n_{222} & \ldots & n_{2J2} \\ & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline Z = K & X = 1 & n_{11K} & n_{12K} & \ldots & n_{1JK} \\ & X = 2 & n_{21K} & n_{22K} & \ldots & n_{2JK} \\ & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline \end{array} \]

Contoh Data

Tabel berikut menggambarkan hubungan antara jenis kelamin (Z), aktivitas fisik (X), dan status obesitas (Y), dengan jumlah total individu dalam setiap kelompok.

Z (Jenis Kelamin) X (Aktivitas Fisik) Y (Obesitas) Tidak Obesitas Jumlah
Laki-laki Aktif 15 35 50
Laki-laki Tidak Aktif 25 25 50
Perempuan Aktif 10 40 50
Perempuan Tidak Aktif 30 20 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 untuk Z (Jenis Kelamin) = Laki-laki:

X (Aktivitas Fisik) Y (Obesitas) Tidak Obesitas Jumlah
Aktif 15 35 50
Tidak Aktif 25 25 50

Tabel Frekuensi Parsial untuk Z (Jenis Kelamin) = Perempuan:

X (Aktivitas Fisik) Y (Obesitas) Tidak Obesitas Jumlah
Aktif 10 40 50
Tidak Aktif 30 20 50

Tabel Marginal

Tabel marginal diperoleh dengan menjumlahkan data dari semua kategori Z (jenis kelamin):

X (Aktivitas Fisik) Y (Obesitas) Tidak Obesitas Jumlah
Aktif 25 75 100
Tidak Aktif 55 45 100

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

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

# Buat array 3 dimensi untuk Merokok x Kanker x Usia
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")
               ))

# Tampilkan data dalam bentuk tabel silang
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

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.

Tabel Kontingesi 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):

Tabel data:

Victims.Race Defendant.s.Race Yes No
White White 53 414
Black 11 37
Black White 0 16
Black 4 139
Total White 53 430
Black 15 176
  • Tersangka White:
    \[ RD_W = \frac{53}{53 + 414} \]

  • Tersangka Black:
    \[ RD_B = \frac{11}{11 + 37} \]

Maka:

\[ 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
(nilai negatif menunjukkan bahwa kelompok referensi — kulit putih — 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
  1. Relative Risk (RR) Rumus:

\[ RR = \frac{\frac{a}{a + b}}{\frac{c}{c + d}} \]

Perhitungan Manual:

\[ RR = \left( \frac{53}{467} \right) \div \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
  1. 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 nilai 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.

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

Tabel untuk Usia = Muda

Sehat Tidak Sehat
Olahraga Rutin 30 20
Tidak Rutin 10 40

Tabel untuk Usia = Tua

Sehat Tidak Sehat
Olahraga Rutin 5 10
Tidak Rutin 15 50

Implementasi dalam R

# Membuat array 3 dimensi: Olahraga x Kesehatan x Usia
data4 <- array(c(30, 20, 10, 40,   # Usia Muda
                 5, 10, 15, 50),   # Usia Tua
               dim = c(2, 2, 2),
               dimnames = list(
                 Olahraga = c("Rutin", "Tidak Rutin"),
                 Kesehatan = c("Sehat", "Tidak Sehat"),
                 Usia = c("Muda", "Tua")
               ))

# Tampilkan data
ftable(data4)
##                         Usia Muda Tua
## Olahraga    Kesehatan                
## Rutin       Sehat              30   5
##             Tidak Sehat        10  15
## Tidak Rutin Sehat              20  10
##             Tidak Sehat        40  50

Pengujian Conditional Independence

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

Teori dan Rumus

Perhitungan Manual:
Untuk setiap kategori Usia (Z), kita uji apakah:

\[ P(X, Y \mid Z) \approx P(X \mid Z) \cdot P(Y \mid Z) \] Misalkan untuk usia muda:

\[ P(\text{Sehat} \mid \text{OlahragaRutin}, \text{Muda}) = \frac{30}{30 + 10} = 0.75 \] \[ P(\text{Sehat} \mid \text{TidakOlahraga}, \text{Muda}) = \frac{20}{20 + 40} = 0.333 \] \[ P(\text{Sehat} \mid \text{Muda}) = \frac{30 + 20}{100} = 0.5 \] Jika nilai \(P(\text{Sehat} \mid \text{OlahragaRutin}, \text{Muda})\) tidak jauh berbeda dari \(P(\text{Sehat} \mid \text{Muda})\), maka conditional independence berlaku.

Perhitungan dengan R

# Contoh array data tiga dimensi (Health x Olahraga x Usia)
sports_health <- array(
  c(30, 10, 20, 40,   # Muda
    25, 25, 10, 40),  # Tua
  dim = c(2, 2, 2),
  dimnames = list(
    Kesehatan = c("Sehat", "TidakSehat"),
    Olahraga = c("Rutin", "Tidak"),
    Usia = c("Muda", "Tua")
  )
)

# Uji Chi-Square untuk masing-masing strata usia
chisq_muda <- chisq.test(sports_health[, , "Muda"])
chisq_tua <- chisq.test(sports_health[, , "Tua"])

# Tampilkan hasil
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 = 8.6154, df = 1, p-value = 0.003333

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.

Marginal Y dan X

margin_YX <- matrix(c(65, 65,
                      30, 45),
                    nrow = 2,
                    byrow = TRUE)
colnames(margin_YX) <- c("Obat A", "Obat B")
rownames(margin_YX) <- c("Sembuh", "Tidak Sembuh")

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).

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.

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 \mid 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.

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 \times 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 \times 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)} \ne 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 (\(df\)) = 1.
  • Tolak \(H_0\) jika \(CMH > \chi^2_{(1)}\) atau p-value < α.

Contoh Kasus 1

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

Dengan: - \(n_{11k}\): Frekuensi sel baris 1 kolom 1 pada tabel parsial ke-\(k\)
- \(n_{12k}\): Frekuensi sel baris 1 kolom 2
- \(n_{21k}\): Frekuensi sel baris 2 kolom 1
- \(n_{22k}\): Frekuensi sel baris 2 kolom 2
- \(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:

\[ \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} + \frac{[(n_{11k} + n_{22k})(n_{11k} + n_{12k}) + (n_{12k} + n_{21k})(n_{11k} + n_{22k})]/n_{..k}^2}{2(\sum n_{12k}n_{21k}/n_{..k})^2} + \frac{(n_{12k} + n_{21k})(n_{12k}n_{21k})/n_{..k}^2}{2(\sum n_{12k}n_{21k}/n_{..k})^2} \]

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) + \cdots + (104)(36)/250}{(35)(100) + \cdots + (21)(89)/250} = 2.17 \]

2. Standard Error

\[ SE(\log \hat{\theta}_{MH}) = 0.04 \] 3. Interval Kepercayaan 95% log Odds Ratio

\[ \log(2.17) \pm 1.96 \times (0.04) \] 4. 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.

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)} = \cdots = \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(1)} = \cdots = \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_{HBD} = \sum_{j=1}^K \frac{(a_j - \tilde{a}_j)^2}{\text{Var}(a_j|\hat{OR}_{MH})} \] Dengan:

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

Catatan:

  • Statistik BD mengikuti distribusi Chi-square dengan derajat bebas \(df = K - 1\).
  • Jika nilai BD > 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 Test 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 odds ratio berbeda di beberapa strata.

Generalized Linear Model (GLM)

Generalized Linear Model (GLM) adalah perluasan dari model regresi linear yang memungkinkan respon (variabel dependen) memiliki distribusi selain distribusi normal. GLM digunakan untuk menganalisis data dengan berbagai tipe distribusi seperti binomial, Poisson, Gamma, dan lainnya.

Komponen GLM

GLM terdiri dari tiga komponen utama:

  1. Distribusi dari keluarga eksponensial (contoh: Normal, Binomial, Poisson).
  2. Fungsi link yang menghubungkan nilai harapan \(\mu\) dari respon ke prediktor linear.
  3. Fungsi linear prediktor: kombinasi linear dari variabel prediktor.

Notasi dan Rumus GLM

  1. Model Umum

\[ g(\mu_i) = \eta_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \]

  1. Fungsi Link Umum
Distribusi Respon Fungsi Link Notasi Fungsi Link
Normal Identitas \(g(\mu) = \mu\)
Binomial Logit \(g(\mu) = \log\left(\frac{\mu}{1-\mu}\right)\)
Poisson Log \(g(\mu) = \log(\mu)\)

Contoh Kasus: Regresi Logistik

Model ini digunakan untuk respon biner (misal: sukses/gagal). Fungsi link yang digunakan adalah logit.

Rumus:

\[ \log\left(\frac{\pi}{1 - \pi}\right) = \beta_0 + \beta_1 x_1 + \cdots + \beta_p x_p \] di mana \(\pi = P(Y = 1)\) adalah probabilitas kejadian sukses.

Implementasi GLM di R

# Contoh regresi logistik pada data biner
data(mtcars)

# Misal: prediksi apakah mobil adalah otomatis (am = 1) atau manual (am = 0)
# Berdasarkan variabel mpg dan hp
model_logit <- glm(am ~ mpg + hp, data = mtcars, family = binomial)

# Ringkasan hasil model
summary(model_logit)
## 
## Call:
## glm(formula = am ~ mpg + hp, family = binomial, data = mtcars)
## 
## 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
# Visualisasi probabilitas prediksi
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
mtcars$predicted_prob <- predict(model_logit, type = "response")

ggplot(mtcars, aes(x = mpg, y = predicted_prob, color = factor(am))) +
  geom_point() +
  labs(title = "Prediksi Probabilitas Transmisi Otomatis",
       y = "Probabilitas (am = 1)", color = "Transmisi")

Exponential Family

Salah satu syarat utama dalam Generalized Linear Model (GLM) adalah bahwa distribusi dari variabel respon harus berasal dari keluarga eksponensial (exponential family). Banyak distribusi umum yang digunakan dalam statistik termasuk dalam keluarga ini, seperti Normal, Binomial, Poisson, Gamma, dan lainnya.

Bentuk Umum Distribusi Keluarga Eksponensial

Distribusi keluarga eksponensial dapat dituliskan dalam bentuk umum sebagai berikut:

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

Keterangan: - \(\theta\): parameter natural (canonical parameter) - \(\phi\): parameter skala (scale/dispersion) - \(a(\phi)\): fungsi skala - \(b(\theta)\): fungsi log-partisi (cumulant function) - \(c(y, \phi)\): fungsi normalisasi - \(y\): nilai respon

Komponen Penting

  1. Nilai Harapan:

\[ \mathbb{E}(Y) = b'(\theta) \]

  1. Variansi:

\[ \operatorname{Var}(Y) = a(\phi) \cdot b''(\theta) \]

Fungsi varians sering kali ditulis dalam bentuk:

\[ \operatorname{Var}(Y) = \phi V(\mu) \] di mana \(V(\mu)\) disebut fungsi varians.

Contoh Distribusi dalam Exponential Family

Distribusi \(\theta\) (Canonical) \(b(\theta)\) \(a(\phi)\) Varians
Normal \(\mu\) \(\frac{\theta^2}{2}\) \(\sigma^2\) \(\sigma^2\)
Binomial \(\log\left(\frac{\pi}{1 - \pi}\right)\) \(\log(1 + e^\theta)\) \(1\) \(n\pi(1 - \pi)\)
Poisson \(\log(\lambda)\) \(e^\theta\) \(1\) \(\lambda\)

Kaitan dengan GLM

GLM menggunakan distribusi dari keluarga eksponensial, dan menghubungkan nilai harapan \(\mu\) dengan prediktor linear melalui fungsi link:

\[ g(\mu) = \eta = X\beta \]

  • Jika \(g(\mu) = \theta\), maka \(g\) disebut canonical link function.

Implementasi di R

# Contoh GLM dengan distribusi dari exponential family

# Data: Poisson regression (jumlah kejadian)
counts <- c(18, 17, 15, 20, 10, 20, 25, 13, 12)
outcome <- gl(3, 1, 9)
treatment <- gl(3, 3)

# Model GLM Poisson
model_pois <- glm(counts ~ outcome + treatment, family = poisson())

summary(model_pois)
## 
## Call:
## glm(formula = counts ~ outcome + treatment, family = poisson())
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.045e+00  1.709e-01  17.815   <2e-16 ***
## outcome2    -4.543e-01  2.022e-01  -2.247   0.0246 *  
## outcome3    -2.930e-01  1.927e-01  -1.520   0.1285    
## treatment2   1.217e-15  2.000e-01   0.000   1.0000    
## treatment3   8.438e-16  2.000e-01   0.000   1.0000    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 10.5814  on 8  degrees of freedom
## Residual deviance:  5.1291  on 4  degrees of freedom
## AIC: 56.761
## 
## Number of Fisher Scoring iterations: 4

Model Regresi Logistik

Model regresi logistik digunakan ketika variabel respon (Y) bersifat biner (hanya memiliki dua kategori, misalnya 0 dan 1). Tujuannya adalah untuk memodelkan probabilitas kejadian dari salah satu kategori (biasanya kategori “1”) berdasarkan satu atau lebih variabel prediktor.

Fungsi Logistik

Model regresi logistik memodelkan log odds dari probabilitas sukses (\(\pi\)) sebagai fungsi linier dari prediktor:

\[ \text{logit}(\pi) = \log\left( \frac{\pi}{1 - \pi} \right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p \] Dari persamaan ini, kita bisa menurunkan bentuk probabilitas:

\[ \pi = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p)}} \] Interpretasi Koefisien

  • \(\beta_j\) menunjukkan perubahan log odds untuk setiap kenaikan satu unit pada variabel \(X_j\).
  • Jika dieksponensialkan (\(e^{\beta_j}\)), maka hasilnya adalah odds ratio.

Estimasi Parameter

Parameter model (\(\beta\)) diestimasi menggunakan Maximum Likelihood Estimation (MLE), bukan OLS seperti pada regresi linier biasa.

Statistik Uji

  • Uji Wald: Digunakan untuk menguji signifikansi masing-masing koefisien.
  • Uji Likelihood Ratio (LRT): Untuk membandingkan model penuh dan model tanpa prediktor.

Implementasi Regresi Logistik di R

# Data dummy: apakah seseorang diterima berdasarkan nilai dan pengalaman
data <- data.frame(
  diterima = c(0, 0, 1, 1, 1, 0, 1, 1, 0, 0),
  nilai = c(60, 65, 80, 85, 90, 58, 78, 82, 62, 67),
  pengalaman = c(1, 2, 4, 5, 6, 1, 3, 4, 1, 2)
)

# Model regresi logistik
model <- glm(diterima ~ nilai + pengalaman, family = binomial, data = data)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# Ringkasan hasil model
summary(model)
## 
## Call:
## glm(formula = diterima ~ nilai + pengalaman, family = binomial, 
##     data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.709e+02  2.288e+06       0        1
## nilai        5.582e+00  4.216e+04       0        1
## pengalaman  -1.310e+01  2.794e+05       0        1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1.3863e+01  on 9  degrees of freedom
## Residual deviance: 3.6660e-10  on 7  degrees of freedom
## AIC: 6
## 
## Number of Fisher Scoring iterations: 24

Misalkan kita ingin memprediksi kemungkinan seseorang membeli produk berdasarkan umur dan pendapatan.

# Simulasi Data
set.seed(123)
n <- 200
umur <- runif(n, 18, 60)
pendapatan <- rnorm(n, mean = 5000 + umur*50, sd = 1000)
log_odds <- -10 + 0.1 * umur + 0.002 * pendapatan
prob <- 1 / (1 + exp(-log_odds))
beli <- rbinom(n, size = 1, prob = prob)

data <- data.frame(umur, pendapatan, beli = factor(beli))
head(data)
# Fit model
model <- glm(beli ~ umur + pendapatan, data = data, family = binomial)
summary(model)
## 
## Call:
## glm(formula = beli ~ umur + pendapatan, family = binomial, data = data)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)  
## (Intercept) -9.572371   5.743597  -1.667   0.0956 .
## umur         0.024163   0.162870   0.148   0.8821  
## pendapatan   0.002325   0.001511   1.539   0.1238  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 22.401  on 199  degrees of freedom
## Residual deviance: 13.603  on 197  degrees of freedom
## AIC: 19.603
## 
## Number of Fisher Scoring iterations: 9
model2 <- glm(beli ~ umur, data = data, family = binomial)

# Buat prediksi
umur_seq <- seq(min(data$umur), max(data$umur), length.out = 100)
pred_data <- data.frame(umur = umur_seq)
pred_data$prob <- predict(model2, newdata = pred_data, type = "response")

# Plot
library(ggplot2)

ggplot(data, aes(x = umur, y = as.numeric(beli) - 1)) +
  geom_point(alpha = 0.5) +
  geom_line(data = pred_data, aes(x = umur, y = prob), color = "blue", size = 1) +
  labs(title = "Kurva Logit - Probabilitas Membeli Berdasarkan Umur",
       y = "Probabilitas Membeli", x = "Umur") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

exp(coef(model))
##  (Intercept)         umur   pendapatan 
## 6.962609e-05 1.024457e+00 1.002328e+00
# Confusion matrix dan akurasi
pred_class <- ifelse(predict(model, type = "response") > 0.5, 1, 0)
table(Predicted = pred_class, Actual = data$beli)
##          Actual
## Predicted   0   1
##         0   1   0
##         1   1 198
# Akurasi
mean(pred_class == as.numeric(data$beli) - 1)
## [1] 0.995

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).
Fungsi log-likelihood 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 atau algoritma IRLS.

Contoh 1 Misalnya kita memiliki data simulasi sebagai berikut

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

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.12040    0.07089   1.699   0.0894 .  
## x            0.72465    0.04319  16.777   <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: 442.89  on 199  degrees of freedom
## Residual deviance: 198.62  on 198  degrees of freedom
## AIC: 544.09
## 
## Number of Fisher Scoring iterations: 5

Plot Hasil Prediksi

 plot(data$x,data$y,pch=16, col="pink", 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] 0.868837

Inferensi GLM

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

Mencari Ekspektasi dan Varians dalam GLM

Ekspektasi dan Varians dalam GLM

  1. Ekspektasi Estimator

Dalam konteks GLM, estimasi parameter \(\hat{\boldsymbol{\beta}}\) umumnya diperoleh melalui Maximum Likelihood Estimation (MLE).

Jika asumsi model terpenuhi, maka ekspektasi dari estimator adalah:

\[ \mathbb{E}(\hat{\boldsymbol{\beta}}) = \boldsymbol{\beta} \]

yang berarti estimator tersebut adalah tak bias (unbiased estimator).

  1. Varians Estimator

Varians menunjukkan presisi dari estimasi parameter:

\[ \mathrm{Var}(\hat{\boldsymbol{\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{\boldsymbol{\beta}} \sim \mathcal{N} \left( \boldsymbol{\beta}, \mathrm{Var}(\hat{\boldsymbol{\beta}}) \right) \]

Distribusi ini adalah dasar dari:

  • Uji Wald
  • Confidence interval
  • P-value

Varians dalam GLM Tidak Konstan

Tidak seperti regresi linear (OLS) yang mengasumsikan homoskedastisitas:

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

Dalam GLM:

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

Dengan:

  • \(\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 : \[ \mathrm{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

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:

\[ \boldsymbol{\beta}^{(t+1)} = \boldsymbol{\beta}^{(t)} + \left( \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X} \right)^{-1} \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{z}^{(t)} \]

dengan:

  • \(\boldsymbol{\beta}^{(t)}\): vektor parameter pada iterasi ke-\(t\)
  • \(\mathbf{X}\): matriks desain (design matrix)
  • \(\mathbf{W}^{(t)}\): matriks bobot (weight matrix) pada iterasi ke-\(t\), biasanya diagonal
  • \(\mathbf{z}^{(t)}\): vektor respons terubah (adjusted dependent variable) atau “working response”

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

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:

\[ \chi^2 = \sum_{i=1}^{n} \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.

Detail Metode Estimasi dan Inferensi Regresi Logistik

Regresi logistik digunakan saat variabel respon bersifat biner (contoh: 0 dan 1). Model ini memodelkan probabilitas kejadian sukses (Y=1) berdasarkan kovariat:

\[ P(Y_i = 1 \mid x_i) = \pi_i \]

Model logistik dengan fungsi link logit:

\[ \text{logit}(\pi_i) = \log \left( \frac{\pi_i}{1 - \pi_i} \right) = x_i^\top \beta \]

Sehingga probabilitas menjadi:

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

\[ L(\beta) = \prod_{i=1}^n \pi_i^{y_i} (1 - \pi_i)^{1 - y_i} \]

Fungsi log-likelihood:

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

Dengan \(\pi_i = \frac{e^{x_i^\top \beta}}{1 + e^{x_i^\top \beta}}\), log-likelihood dapat ditulis sebagai:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i x_i^\top \beta - \log(1 + e^{x_i^\top \beta}) \right] \] Estimasi Parameter: Maximum Likelihood Estimation (MLE)

Estimasi parameter \(\beta\) dilakukan dengan maksimisasi fungsi log-likelihood, secara numerik dengan metode seperti iterasi Newton-Raphson atau Fisher Scoring.

Inferensi Statistik

Setelah memperoleh \(\hat{\beta}\), kita lakukan inferensi:

  1. Matriks Varians-Kovarians:

\[ \text{Var}(\hat{\beta}) = (X^\top W X)^{-1} \] dengan:

\[ W_{ii} = \pi_i (1 - \pi_i) \] 2. Z-Statistik untuk Uji Hipotesis:

\[ z_j = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \] Digunakan untuk menguji \(H_0: \beta_j = 0\).

  1. Confidence Interval:

\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j) \] atau dalam bentuk odds ratio:

\[ \exp(\hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j)) \] Implementasi di R

Kita akan menggunakan dataset mtcars untuk memodelkan probabilitas mobil menggunakan transmisi otomatis (am = 1) atau manual (am = 0):

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

# Model logistik
logit_model <- glm(am ~ mpg + hp + wt, family = binomial(link = "logit"), data = mtcars)

# Ringkasan model
summary(logit_model)
## 
## Call:
## glm(formula = am ~ mpg + hp + wt, family = binomial(link = "logit"), 
##     data = mtcars)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)  
## (Intercept) -15.72137   40.00281  -0.393   0.6943  
## mpg           1.22930    1.58109   0.778   0.4369  
## hp            0.08389    0.08228   1.020   0.3079  
## wt           -6.95492    3.35297  -2.074   0.0381 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 43.2297  on 31  degrees of freedom
## Residual deviance:  8.7661  on 28  degrees of freedom
## AIC: 16.766
## 
## Number of Fisher Scoring iterations: 10

Metode Newton-Raphson memperbarui parameter dengan rumus iteratif:

\[ \beta^{(t+1)} = \beta^{(t)} - \left[ H(\beta^{(t)}) \right]^{-1} \nabla \ell(\beta^{(t)}) \] Gradien (First Derivative):

\[ \nabla \ell(\beta) = X^\top (y - \pi) \] Hesian (Second Derivative):

\[ H(\beta) = -X^\top W X \quad \text{dengan} \quad W = \text{diag}(\pi_i (1 - \pi_i)) \] Algoritma Newton-Raphson

Langkah-langkah:

  1. Inisialisasi \(\beta^{(0)}\)
  2. Hitung \(\pi^{(t)} = \frac{\exp(X \beta^{(t)})}{1 + \exp(X \beta^{(t)})}\)
  3. Hitung gradien: \(g = X^\top (y - \pi)\)
  4. Hitung Hesian: \(H = -X^\top W X\)
  5. Update: \(\beta^{(t+1)} = \beta^{(t)} + (X^\top W X)^{-1} X^\top (y - \pi)\)
  6. Ulangi sampai konvergen

Implementasi dalam R

# Contoh data simulasi
set.seed(123)
n <- 100
x <- rnorm(n)
X <- cbind(1, x)  # dengan intercept
beta_true <- c(-1, 2)
eta <- X %*% beta_true
pi <- 1 / (1 + exp(-eta))
y <- rbinom(n, 1, pi)

# Newton-Raphson
beta <- rep(0, ncol(X))  # inisialisasi
tol <- 1e-6
max_iter <- 100

for (i in 1:max_iter) {
  eta <- X %*% beta
  p <- 1 / (1 + exp(-eta))
  W <- diag(as.vector(p * (1 - p)))
  z <- eta + (y - p) / (p * (1 - p))
  beta_new <- solve(t(X) %*% W %*% X) %*% t(X) %*% W %*% z
  if (max(abs(beta_new - beta)) < tol) break
  beta <- beta_new
}

beta  # hasil estimasi
##         [,1]
##   -0.9961379
## x  2.0261734

Perbandingan dengan GLM:

glm_model <- glm(y ~ x, family = binomial)
summary(glm_model)
## 
## Call:
## glm(formula = y ~ x, family = binomial)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.9961     0.2887  -3.451 0.000559 ***
## x             2.0262     0.4205   4.819 1.44e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 131.79  on 99  degrees of freedom
## Residual deviance:  90.54  on 98  degrees of freedom
## AIC: 94.54
## 
## Number of Fisher Scoring iterations: 5
  • 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_0 : \beta_j = 0\)
  • \(H_1 : \beta_j \neq 0\)

Teori Wald Test

Dari teori estimasi MLE, estimator \(\hat{\beta}_j\) mendekati distribusi normal:

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

Jika \(H_0\) 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(130)
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.6688     0.2219  -3.014  0.00258 **
## x             0.6150     0.2286   2.691  0.00713 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 130.68  on 99  degrees of freedom
## Residual deviance: 122.46  on 98  degrees of freedom
## AIC: 126.46
## 
## Number of Fisher Scoring iterations: 4

Langkah 1: Ambil nilai koefisien dan SE

beta_hat <- coef(model)["x"]
beta_hat
##         x 
## 0.6150327
se_beta <- summary(model)$coefficients["x", "Std. Error"]
se_beta
## [1] 0.2285923

Langkah 2: Hitung nilai statistik Z

Z <- beta_hat / se_beta
Z
##        x 
## 2.690522

Langkah 3: Hitung statistik Wald

Wald_stat <- Z^2
Wald_stat
##        x 
## 7.238908

Langkah 4: Hitung p-value

p_value <- 1- pchisq(Wald_stat, df = 1)
p_value
##           x 
## 0.007134037

Interpretasi:

• 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")

Evaluasi Kebaikan Model

1. Akaike Information Criterion (AIC) Semakin kecil AIC, semakin baik model.

AIC(model)
## [1] 126.4607

2. Bayesian Information Criterion (BIC) Alternatif terhadap AIC, menghukum kompleksitas model.

BIC(model)
## [1] 131.6711

• 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.

Detail Metode Estimasi dan Inferensi Regresi Poisson

Model Regresi Poisson

Model regresi Poisson digunakan untuk memodelkan data cacah (count data), di mana variabel respons \(Y\) mengikuti distribusi Poisson dengan parameter \(\mu\):

\[ Y_i \sim \text{Poisson}(\mu_i), \quad i = 1, 2, ..., n \] Hubungan antara rata-rata \(\mu_i\) dan kovariat \(x_i\) dilakukan dengan fungsi link logaritma:

\[ \log(\mu_i) = x_i^\top \beta \Rightarrow \mu_i = \exp(x_i^\top \beta) \] Fungsi Log-Likelihood

Fungsi likelihood untuk distribusi Poisson adalah:

\[ L(\beta) = \prod_{i=1}^n \frac{e^{-\mu_i} \mu_i^{y_i}}{y_i!} \] Dengan \(\mu_i = \exp(x_i^\top \beta)\), log-likelihood menjadi:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\mu_i) - \mu_i - \log(y_i!) \right] \] Substitusi \(\mu_i = \exp(x_i^\top \beta)\) menghasilkan:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i x_i^\top \beta - \exp(x_i^\top \beta) - \log(y_i!) \right] \] Estimasi Parameter (Maximum Likelihood Estimation)

Estimasi parameter \(\hat{\beta}\) diperoleh dengan maksimisasi fungsi log-likelihood. Ini dilakukan secara numerik, biasanya dengan iterasi Newton-Raphson atau Fisher scoring.

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().

Langkah 1: Definisikan Model Regresi Poisson

\[ \log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \quad \Rightarrow \quad \lambda_i = \exp(\mathbf{x}_i^\top \boldsymbol{\beta}) \] Langkah 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] \] Langkah 3: Formulasi Iteratif

\[ \boldsymbol{\beta}^{(t+1)} = \left(\mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X} \right)^{-1} \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{z}^{(t)} \]

Dengan:

  • \(\mathbf{W} = \text{diag}(\lambda_i)\)
  • \(\mathbf{z} = \eta + \frac{y - \lambda}{\lambda}\)

dan:

\[ \eta_i = \log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \] Simulasi Data

# Simulasi data Poisson
set.seed(123)
n <- 100
x <- rnorm(n)
X <- model.matrix(~ x)
beta_true <- c(0.5, 0.3)
eta <- X %*% beta_true
lambda <- exp(eta)
y <- rpois(n, lambda)

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- 6
## Konvergen pada iterasi ke- 8
beta # hasil estimasi
##                  [,1]
## (Intercept) 0.4285691
## x           0.3548355

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.4286     0.0840   5.102 3.36e-07 ***
## x             0.3548     0.0849   4.180 2.92e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 139.65  on 99  degrees of freedom
## Residual deviance: 122.18  on 98  degrees of freedom
## AIC: 322.96
## 
## 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

# 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: 2.690522 
## Chi-Square: 7.238908 
## p-value: 0.007134037

Uji Likelihood Ratio (Chi-Square)

 model_null <- glm(y ~ 1, family = poisson, data = data)
 anova(model_null, model, test = "Chisq")

Evaluasi Model (AIC & BIC)

 AIC(model)
## [1] 126.4607
 BIC(model)
## [1] 131.6711

• 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

Inferensi Statistik

Setelah mendapatkan \(\hat{\beta}\), kita bisa melakukan inferensi:

  1. Matriks Varians-Kovarians:

\[ \text{Var}(\hat{\beta}) = (X^\top W X)^{-1} \] Dengan \(W\) adalah matriks bobot diagonal:
\[ W_{ii} = \mu_i = \exp(x_i^\top \hat{\beta}) \] 2. Z-Statistik untuk Uji Signifikansi:

\[ z_j = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \] Jika \(|z_j| > z_{\alpha/2}\), maka parameter signifikan.

  1. Confidence Interval:

\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j) \] atau pada skala \(\mu\):

\[ \exp(\hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j)) \]

Implementasi di R

Kita akan menggunakan dataset warpbreaks:

# Dataset
data(warpbreaks) 
head(warpbreaks)
# Model regresi Poisson
poisson_model <- glm(breaks ~ wool + tension, family = poisson(link = "log"), data = warpbreaks)

# Summary hasil model
summary(poisson_model) 
## 
## Call:
## glm(formula = breaks ~ wool + tension, family = poisson(link = "log"), 
##     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

Regresi Logistik dengan Prdiktor Nominal, Ordinal, dan Rasio

Regresi logistik digunakan ketika variabel dependen bersifat kategorik. Model ini memodelkan hubungan antara variabel independen (prediktor) dengan log odds terjadinya suatu kejadian.

Fungsi logit:

\[ \log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + \ldots + \beta_kX_k \]

Prediktor bisa berupa: - Nominal: tanpa urutan (misal: jenis kelamin). - Ordinal: ada urutan, jarak tidak mesti sama (misal: tingkat pendidikan). - Rasio: numerik dengan nol absolut (misal: usia, pendapatan).

Simulasi Data

Kita akan membuat data simulasi berisi: - Jenis Kelamin (Nominal) - Tingkat Pendidikan (Ordinal) - Usia (Rasio) - Status Sakit (0 = tidak sakit, 1 = sakit)

# 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)

# Membentuk probabilitas sukses
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)

# Buat dataset
library(tibble)
## Warning: package 'tibble' was built under R version 4.3.3
sim_data <- tibble(success, gender, education, income)

# Tampilkan 6 data pertama
head(sim_data)

Eksplorasi Data

 sim_data %>%
 dplyr::group_by(success) %>%
 dplyr::summarise(
Jumlah = dplyr::n(),
 Rata2_Income = mean(income)
 )

Perlakuan Variabel Ordinal

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

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

Pemilihan Model Regresi Logsitik dan Evaluasi

Membangun Model Regresi Logistik: Pendekatan Confirmatory dan Explanatory

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 memban gun 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 Eksplanatori)

Pendekatan ini digunakan ketika peneliti belum memiliki teori yang pasti atau ingin mengeksplorasi hubungan potensial antarvariabel.

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 di gunakan secara komplementer: teori digunakan sebagai dasar, dan seleksi eksploratori dilakukan untuk menyempurnakan model.

Simulasi Data

set.seed(123)
n <- 200
ipk <- rnorm(n, 3, 0.5)
belajar <- rnorm(n, 5, 1)
lulus <- rbinom(n, 1, plogis(-4 + 1.5*ipk + 0.3*belajar))
data1 <- data.frame(lulus = factor(lulus), ipk, belajar)

Pemilihan Model

# Model null (tanpa prediktor)
model.null <- glm(lulus ~ 1, data = data1, family = "binomial")

# Model full (semua prediktor)
model.full <- glm(lulus ~ ipk + belajar, data = data1, family = "binomial")

Metode Stepwise: Forward, Backward, dan Kedua Arah

# Forward
model.forward <- step(model.null,
                      scope = list(lower = model.null, upper = model.full),
                      direction = "forward")
## Start:  AIC=148.77
## lulus ~ 1
## 
##           Df Deviance    AIC
## + ipk      1   142.69 146.69
## <none>         146.77 148.77
## + belajar  1   145.51 149.51
## 
## Step:  AIC=146.69
## lulus ~ ipk
## 
##           Df Deviance    AIC
## <none>         142.69 146.69
## + belajar  1   141.13 147.13
# Backward
model.backward <- step(model.full, direction = "backward")
## Start:  AIC=147.13
## lulus ~ ipk + belajar
## 
##           Df Deviance    AIC
## - belajar  1   142.69 146.69
## <none>         141.13 147.13
## - ipk      1   145.51 149.51
## 
## Step:  AIC=146.69
## lulus ~ ipk
## 
##        Df Deviance    AIC
## <none>      142.69 146.69
## - ipk   1   146.77 148.77
# Both
model.both <- step(model.null,
                   scope = list(lower = model.null, upper = model.full),
                   direction = "both")
## Start:  AIC=148.77
## lulus ~ 1
## 
##           Df Deviance    AIC
## + ipk      1   142.69 146.69
## <none>         146.77 148.77
## + belajar  1   145.51 149.51
## 
## Step:  AIC=146.69
## lulus ~ ipk
## 
##           Df Deviance    AIC
## <none>         142.69 146.69
## + belajar  1   141.13 147.13
## - ipk      1   146.77 148.77
summary(model.forward)
## 
## Call:
## glm(formula = lulus ~ ipk, family = "binomial", data = data1)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept)  -0.8864     1.4544  -0.609    0.542  
## ipk           0.9871     0.5058   1.951    0.051 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 146.77  on 199  degrees of freedom
## Residual deviance: 142.69  on 198  degrees of freedom
## AIC: 146.69
## 
## Number of Fisher Scoring iterations: 5
summary(model.backward)
## 
## Call:
## glm(formula = lulus ~ ipk, family = "binomial", data = data1)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept)  -0.8864     1.4544  -0.609    0.542  
## ipk           0.9871     0.5058   1.951    0.051 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 146.77  on 199  degrees of freedom
## Residual deviance: 142.69  on 198  degrees of freedom
## AIC: 146.69
## 
## Number of Fisher Scoring iterations: 5
summary(model.both)
## 
## Call:
## glm(formula = lulus ~ ipk, family = "binomial", data = data1)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept)  -0.8864     1.4544  -0.609    0.542  
## ipk           0.9871     0.5058   1.951    0.051 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 146.77  on 199  degrees of freedom
## Residual deviance: 142.69  on 198  degrees of freedom
## AIC: 146.69
## 
## Number of Fisher Scoring iterations: 5

Evaluasi Model: ROC dan AUC

library(pROC)
## Warning: package 'pROC' was built under R version 4.3.3
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
prob <- predict(model.full, type = "response")
roc_obj <- roc(data1$lulus, prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj)

auc(roc_obj)
## Area under the curve: 0.6423

Pseudo R-Squared

\[ R^2 = 1 - \frac{\log L_{model}}{\log L_{null}} \]

library(pscl)
## Warning: package 'pscl' was built under R version 4.3.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
model.null <- glm(lulus ~ 1, family = "binomial", data = data1)
pR2(model.full)
## fitting null model for pseudo-r2
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
## -70.56511914 -73.38499825   5.63975822   0.03842583   0.02780492   0.05347688

Tabel Klasifikasi dan Evaluasi

pred <- ifelse(prob > 0.5, 1, 0)
actual <- as.numeric(as.character(data1$lulus))
conf <- table(Prediksi = pred, Aktual = actual)
conf
##         Aktual
## Prediksi   0   1
##        1  24 176

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.

Pembuatan Model

Perbandingan AIC dan Deviance

AIC(model.full, model.null)

Likelihood-Ratio Test

\[ G^2 = -2(\log L_0 - \log L_1) \]

anova(model.null, model.full, test = "Chisq")

Prinsip Parsimony

Model yang kompleks sering memiliki AIC dan deviance. 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 bahwa 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.

Evaluasi Tabel Klasifikasi dan Akurasi Model

Sensitivitas dan Spesifisitas

  • Sensitivitas: Kemampuan model mendeteksi kelas positif secara benar (True Positive Rate).

\[ \text{Sensitivity} = \frac{\text{TP}}{\text{TP} + \text{FN}} \]

  • Spesifisitas: Kemampuan model mendeteksi kelas negatif secara benar (True Negative Rate).

\[ \text{Specificity} = \frac{\text{TN}}{\text{TN} + \text{FP}} \]

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.

Detail ROC Penjelasan Kurva ROC (Receiver Operating Characteristics)

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: Sensitivitas = True Positive Rate = \(\frac{TP}{TP + FN}\)
  • Sumbu X: \(1 - \text{Specificity} = False Positive Rate = \frac{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 diturunkan, model mengklasifikasikan lebih banyak pengamatan sebagai positif:
    • Sensitivitas naik
    • Spesifisitas turun
  • Saat cut-off dinaikkan, 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 - \text{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 juga dikenal sebagai concordance index, yaitu probabilitas bahwa model memberikan skor probabilitas yang lebih tinggi untuk kasus positif daripada 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:

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).

Pseudo R-squared pada Regresi Logistik

Apa itu Distribusi Multinomial

Distribusi multinomial adalah generalisasi dari distribusi binomial untuk lebih dari dua kategori. Distribusi ini digunakan untuk memodelkan jumlah kejadian dalam beberapa kategori dari sejumlah percobaan tetap. Jika \(X_1, X_2, \ldots, X_k\) menyatakan banyaknya kejadian dalam masing-masing dari \(k\) kategori, maka:

\[ P(X_1 = x_1, \ldots, X_k = x_k) = \frac{n!}{x_1!x_2! \ldots x_k!} p_1^{x_1} p_2^{x_2} \ldots p_k^{x_k} \] dengan \(\sum_{i=1}^{k} x_i = n\) dan \(\sum_{i=1}^{k} p_i = 1\).

Studi Kasus

Misalkan sebuah survei meminta responden memilih satu dari tiga jenis buah favorit: Apel, Pisang, Jeruk. Dari 100 responden, kita ingin mengetahui probabilitas kombinasi hasil seperti 40 memilih Apel, 35 Pisang, dan 25 Jeruk.

Hasil survei yang ingin dihitung probabilitasnya:

  • Apel: 40 orang
  • Pisang: 35 orang
  • Jeruk: 25 orang

Probabilitas teoretik preferensi:

  • \(p_A = 0.3\)
  • \(p_P = 0.35\)
  • \(p_J = 0.35\)

Pertanyaannya: Berapa peluang bahwa dalam 100 orang akan ada 40 yang memilih Apel, 35 memilih Pisang, dan 25 memilih Jeruk?

Rumus Distribusi Multinomial

Distribusi peluang multinomial:

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

dengan:

  • \(n = 100\), \(x_1 = 40\), \(x_2 = 35\), \(x_3 = 25\)
  • \(p_1 = 0.3\), \(p_2 = 0.35\), \(p_3 = 0.35\)

Perhitungan Manual di R

n <- 100
x <- c(40, 35, 25)
p <- c(0.3, 0.35, 0.35)

# 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.0003823078

Berdasarkan perhitungan menggunakan distribusi multinomial, didapatkan bahwa probabilitas tepat 40 orang memilih Apel, 35 orang memilih Pisang, dan 25 orang memilih Jeruk dari 100 responden adalah sebesar 0.0003823. Nilai probabilitas ini sangat kecil, yang berarti bahwa kombinasi hasil tersebut tidak terlalu mungkin terjadi jika preferensi teoretik buah masing-masing adalah 30% untuk Apel, dan 35% untuk Pisang dan Jeruk. Hal ini menunjukkan bahwa meskipun kombinasi tersebut masih mungkin secara teoritis, namun tergolong jarang terjadi dalam praktik, mengingat banyaknya kombinasi lain yang juga mungkin muncul dari distribusi tersebut.

Baseline-category Logit Model

Model logit kategori dasar atau Baseline Category Logit Model digunakan untuk menganalisis variabel respon kategori nominal dengan lebih dari dua kategori. Model ini termasuk dalam keluarga generalized logit models, dan merupakan dasar dari regresi logistik multinomial.

  1. Tujuan Model Untuk memodelkan log odds (rasio peluang logaritmik) dari setiap kategori terhadap satu kategori referensi (baseline). Biasanya, kategori referensi dipilih secara arbitrer, tetapi umumnya dipilih kategori terakhir.

  2. Notasi dan Struktur Model

Misalkan \(Y\) adalah variabel kategori dengan \(K\) kategori, dan \(x = (x_1, x_2, \dots, x_p)\) adalah vektor prediktor.

Model logit dasar untuk kategori \(j\) terhadap kategori referensi \(K\) adalah: \[ \log \left( \frac{P(Y = j \mid x)}{P(Y = K \mid x)} \right) = \beta_{j0} + \beta_{j1} x_1 + \beta_{j2} x_2 + \cdots + \beta_{jp} x_p, \quad \text{untuk } j = 1, 2, \dots, K - 1 \]

Probabilitas Kategori

Dari model di atas, probabilitas setiap kategori dapat dihitung sebagai:

\[ P(Y = j \mid x) = \frac{\exp(\beta_{j0} + \beta_{j1} x_1 + \cdots + \beta_{jp} x_p)}{1 + \sum_{k=1}^{K-1} \exp(\beta_{k0} + \beta_{k1} x_1 + \cdots + \beta_{kp} x_p)} \]

\[ P(Y = K \mid x) = \frac{1}{1 + \sum_{k=1}^{K-1} \exp(\beta_{k0} + \beta_{k1} x_1 + \cdots + \beta_{kp} x_p)} \]

Contoh Aplikasi: Pemilihan Mode Transportasi Misalkan seseorang dapat memilih salah satu dari tiga moda transportasi untuk ke kampus:

  • Mobil
  • Motor
  • Transportasi Umum (referensi)

Prediktor: waktu tempuh dalam menit dan status kepemilikan kendaraan (punya/tidak).

a. Simulasi Data

set.seed(123)
n <- 200
waktu <- rnorm(n, mean = 30, sd = 5)
kepemilikan <- sample(c("Punya", "Tidak"), n, replace = TRUE)

# Simulasi variabel respon
transport <- sample(c("Mobil", "Motor", "Umum"), n, replace = TRUE)

data <- data.frame(transport = factor(transport),
                   waktu = waktu,
                   kepemilikan = factor(kepemilikan))
  1. Model Logit Kategori Dasar di R
library(nnet)
model <- multinom(transport ~ waktu + kepemilikan, data = data)
## # weights:  12 (6 variable)
## initial  value 219.722458 
## iter  10 value 215.848829
## iter  10 value 215.848829
## iter  10 value 215.848829
## final  value 215.848829 
## converged
summary(model)
## Call:
## multinom(formula = transport ~ waktu + kepemilikan, data = data)
## 
## Coefficients:
##       (Intercept)      waktu kepemilikanTidak
## Motor  -2.5230186 0.08387636      -0.08750534
## Umum   -0.4154727 0.02493556      -0.47222858
## 
## Std. Errors:
##       (Intercept)      waktu kepemilikanTidak
## Motor    1.189597 0.03909618        0.3623746
## Umum     1.124475 0.03798017        0.3472448
## 
## Residual Deviance: 431.6977 
## AIC: 443.6977
  1. Interpretasi Koefisien Koefisien untuk “Mobil” dan “Motor” dihitung terhadap referensi “Umum”. Jika koefisien waktu negatif untuk “Mobil”, maka semakin lama waktu tempuh, peluang memilih mobil semakin kecil dibanding “Umum”.

  2. Uji Signifikansi

z <- summary(model)$coefficients / summary(model)$standard.errors
pval <- 2 * (1 - pnorm(abs(z)))
pval
##       (Intercept)      waktu kepemilikanTidak
## Motor  0.03393012 0.03192209        0.8091850
## Umum   0.71176876 0.51147575        0.1738521
  1. Kelebihan dan Kekurangan
  • Kelebihan: Cocok untuk kategori nominal (tidak berurutan) Interpretasi sederhana sebagai perbandingan dengan kategori referensi

  • Kekurangan: Interpretasi dapat bergantung pada pilihan referensi Tidak mempertimbangkan struktur ordinal (jika ada)

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 \mid x_i)\) dan \(y_{ij} = 1\) jika \(Y_i = j\).

Contoh Kasus

Siswa SMA memilih jurusan antara IPA, IPS, atau Bahasa berdasarkan nilai matematika dan status sekolah (negeri/swasta).

Simulasi Data

set.seed(123)
n <- 300
nilai <- rnorm(n, 70, 10)
status <- factor(sample(c("Negeri", "Swasta"), n, replace = TRUE))
jurusan <- sample(c("IPA", "IPS", "Bahasa"), n, replace = TRUE)
data <- data.frame(jurusan = factor(jurusan), nilai, status)
head(data)

Estimasi Model

library(nnet)
model <- multinom(jurusan ~ nilai + status, data = data)
## # weights:  12 (6 variable)
## initial  value 329.583687 
## iter  10 value 326.021220
## iter  10 value 326.021220
## iter  10 value 326.021220
## final  value 326.021220 
## converged
summary(model)
## Call:
## multinom(formula = jurusan ~ nilai + status, data = data)
## 
## Coefficients:
##     (Intercept)        nilai statusSwasta
## IPA -0.48989716  0.006739655   -0.3296327
## IPS -0.07166585 -0.002764858    0.3588150
## 
## Std. Errors:
##     (Intercept)      nilai statusSwasta
## IPA    1.073083 0.01508280    0.2874710
## IPS    1.049033 0.01478655    0.2795287
## 
## Residual Deviance: 652.0424 
## AIC: 664.0424

Nilai P-Value dan Interpretasi

z <- summary(model)$coefficients / summary(model)$standard.errors
pval <- 2 * (1 - pnorm(abs(z)))
pval
##     (Intercept)     nilai statusSwasta
## IPA    0.648007 0.6549879    0.2515203
## IPS    0.945534 0.8516726    0.1992670

Interpretasi: Jika \(\beta > 0\), maka kenaikan variabel prediktor meningkatkan peluang kategori dibanding referensi.

Prediksi dan Validasi

prediksi <- predict(model, newdata = data)
table(Predicted = prediksi, Actual = data$jurusan)
##          Actual
## Predicted Bahasa IPA IPS
##    Bahasa     38  37  29
##    IPA        18  18  14
##    IPS        52  37  57
mean(prediksi == data$jurusan)  # akurasi
## [1] 0.3766667

Kesimpulan

Model logistik multinomial sangat cocok untuk variabel kategori nominal. Model baseline-category logit membandingkan setiap kategori dengan referensi.

Contoh Kasus 2

# Simulasi kasus baru
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
kelas <- sample(c("A", "B", "C"), 200, replace = TRUE)
df2 <- data.frame(kelas = factor(kelas), x1, x2)

mod2 <- multinom(kelas ~ x1 + x2, data = df2)
## # weights:  12 (6 variable)
## initial  value 219.722458 
## iter  10 value 218.471769
## iter  10 value 218.471769
## iter  10 value 218.471769
## final  value 218.471769 
## converged
summary(mod2)
## Call:
## multinom(formula = kelas ~ x1 + x2, data = df2)
## 
## Coefficients:
##   (Intercept)          x1          x2
## B  0.10969079 -0.09624713 0.110971624
## C  0.04694174 -0.20743047 0.007175174
## 
## Std. Errors:
##   (Intercept)        x1        x2
## B   0.2574311 0.1707369 0.3475489
## C   0.2617516 0.1760712 0.3574962
## 
## Residual Deviance: 436.9435 
## AIC: 448.9435

Perhitungan Manual Probabilitas (2 kategori)

Jika:

  • \(\beta_0 = 1\), \(\beta_1 = 0.5\), \(x = 2\),
  • Referensi kategori: C

Hitung probabilitas untuk A dan B:

\[ \eta_A = 1 + 0.5(2) = 2 \\ \eta_B = 0.5 + 0.3(2) = 1.1 \\ P(A) = \frac{e^{2}}{1 + e^{2} + e^{1.1}} \approx 0.55 \\ P(B) = \frac{e^{1.1}}{1 + e^{2} + e^{1.1}} \approx 0.30 \\ P(C) = \frac{1}{1 + e^{2} + e^{1.1}} \approx 0.15 \]

Regresi Logistik Ordinal

Regresi logistik ordinal digunakan untuk menganalisis hubungan antara variabel respon berskala ordinal (berjenjang) dengan satu atau lebih variabel prediktor. Contoh variabel ordinal: tingkat kepuasan (Rendah, Sedang, Tinggi).

Konsep Cumulative Logit Model

Model paling umum dalam regresi logistik ordinal adalah Cumulative Logit Model atau Proportional Odds Model.

\[ \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.

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

Contoh Data: Kepuasan Pelanggan

Misalnya: tingkat kepuasan pelanggan (1 = Tidak Puas, 2 = Cukup Puas, 3 = Puas) dipengaruhi oleh lama layanan (menit) dan status pelanggan (lama/baru).

Simulasi Data

set.seed(123)
n <- 300
lama <- rnorm(n, mean = 15, sd = 5)
status <- factor(sample(c("Lama", "Baru"), n, replace = TRUE))
cutoff <- c(-Inf, 1.5, 3, Inf)
skor_linear <- 0.1 * lama + ifelse(status == "Lama", 0.5, 0)
y_star <- 1 + skor_linear + rnorm(n)
kepuasan <- cut(y_star, breaks = cutoff, labels = c("Tidak Puas", "Cukup Puas", "Puas"), ordered_result = TRUE)

data <- data.frame(kepuasan, lama, status)
head(data)

Estimasi Model Ordinal

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
model <- polr(kepuasan ~ lama + status, data = data, method = "logistic")
summary(model)
## 
## Re-fitting to get Hessian
## Call:
## polr(formula = kepuasan ~ lama + status, data = data, method = "logistic")
## 
## Coefficients:
##             Value Std. Error t value
## lama       0.1719    0.02701   6.365
## statusLama 0.6166    0.23046   2.675
## 
## Intercepts:
##                       Value  Std. Error t value
## Tidak Puas|Cukup Puas 0.8401 0.4234     1.9840 
## Cukup Puas|Puas       3.2277 0.4619     6.9878 
## 
## Residual Deviance: 547.8578 
## AIC: 555.8578

Nilai P-Value

Gunakan z-statistik untuk menghitung p-value dari estimasi:

(ctable <- coef(summary(model)))
## 
## Re-fitting to get Hessian
##                           Value Std. Error  t value
## lama                  0.1719467 0.02701299 6.365332
## statusLama            0.6165771 0.23046076 2.675410
## Tidak Puas|Cukup Puas 0.8401191 0.42344469 1.984011
## Cukup Puas|Puas       3.2277231 0.46190649 6.987828
pval <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
cbind(ctable, "p value" = pval)
##                           Value Std. Error  t value      p value
## lama                  0.1719467 0.02701299 6.365332 1.948673e-10
## statusLama            0.6165771 0.23046076 2.675410 7.463785e-03
## Tidak Puas|Cukup Puas 0.8401191 0.42344469 1.984011 4.725457e-02
## Cukup Puas|Puas       3.2277231 0.46190649 6.987828 2.791744e-12

Prediksi Probabilitas

predict(model, newdata = data.frame(lama = 10, status = "Baru"), type = "probs")
## Tidak Puas Cukup Puas       Puas 
##  0.2933130  0.5254897  0.1811973

Goodness-of-fit dan Proportional Odds

Gunakan AIC, pseudo R² atau deviance model:

AIC(model)
## [1] 555.8578

Alternatif Model Ordinal

Jika asumsi paralelisme tidak terpenuhi, gunakan:
- Partial Proportional Odds Model
- Adjacent Categories Logit Model
- Continuation Ratio Model

Kesimpulan

Regresi logistik ordinal cocok digunakan untuk data dengan urutan tetapi tanpa interval tetap antar kategori. Model cumulative logit adalah model utama dengan asumsi odds yang proporsional antar kategori. Jika asumsi ini tidak terpenuhi, alternatif model harus dipertimbangkan.

Asumsi Paralelisme dalam Regresi Logsitik Ordinal

Model ini mengasumsikan bahwa efek prediktor \(\beta\) sama untuk semua batas kumulatif. Ini disebut asumsi paralelisme.

Gunakan VGAM::vglm() dan bandingkan dengan model non-paralel:

# library(VGAM)
# m1 <- vglm(kepuasan ~ lama + status, family = cumulative(parallel = TRUE), data = data)
# m2 <- vglm(kepuasan ~ lama + status, family = cumulative(parallel = FALSE), data = data)
# lrtest(m1, m2) # LRT untuk asumsi paralelisme

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:

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}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]

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

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
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(μ) ~ efek GLM: logit(p) ~ prediktor
Cocok untuk Eksplorasi awal Tabel > 2 variabel Studi prediktif

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}) = \lambda + \lambda_i^{T} + \lambda_j^{R} + \lambda_{ij}^{TR} \]

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

Model Independent

Model independen mengasumsikan bahwa tidak ada interaksi antara variabel: \[ \log(\mu_{ij}) = \lambda + \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

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

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

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

Studi Kasus: Hubungan Antara Jenis Kelamin, Status Merokok, dan Status Kesehatan

Seorang peneliti ingin mempelajari hubungan antara jenis kelamin (Gender), status merokok (Smoking), dan status kesehatan (Health) pada sekelompok orang dewasa.

Tujuannya adalah untuk melihat apakah ada interaksi yang signifikan antara tiga variabel kategori tersebut.

Data Simulasi

# Simulasi data kontingensi 3 arah
data <- expand.grid(
  Gender = c("Male", "Female"),
  Smoking = c("Smoker", "NonSmoker"),
  Health = c("Good", "Poor")
)

# Tambahkan frekuensi
set.seed(123)
data$Freq <- c(40, 15, 25, 10, 35, 20, 30, 12)
head(data)

Model Log-Linear Log-linear model digunakan untuk menganalisis frekuensi sel dalam tabel kontingensi.

Model paling kompleks (saturasi) adalah: \[ \log(F_{ijk}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^C_k + \lambda^{AB}_{ij} + \lambda^{AC}_{ik} + \lambda^{BC}_{jk} + \lambda^{ABC}_{ijk} \]

Model yang kita bangun bertujuan untuk menyederhanakan interaksi antar variabel.

Analisis Model dengan R

# Load package
library(MASS)

# Model saturasi
model_sat <- loglm(Freq ~ Gender * Smoking * Health, data = data)

# Model tanpa interaksi 3 arah
model_no_3way <- loglm(Freq ~ (Gender + Smoking + Health)^2, data = data)

# Model independen murni (tanpa interaksi)
model_indep <- loglm(Freq ~ Gender + Smoking + Health, data = data)

Evaluasi Model

summary(model_sat)
## Formula:
## Freq ~ Gender * Smoking * Health
## attr(,"variables")
## list(Freq, Gender, Smoking, Health)
## attr(,"factors")
##         Gender Smoking Health Gender:Smoking Gender:Health Smoking:Health
## Freq         0       0      0              0             0              0
## Gender       1       0      0              1             1              0
## Smoking      0       1      0              1             0              1
## Health       0       0      1              0             1              1
##         Gender:Smoking:Health
## Freq                        0
## Gender                      1
## Smoking                     1
## Health                      1
## attr(,"term.labels")
## [1] "Gender"                "Smoking"               "Health"               
## [4] "Gender:Smoking"        "Gender:Health"         "Smoking:Health"       
## [7] "Gender:Smoking:Health"
## attr(,"order")
## [1] 1 1 1 2 2 2 3
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
## attr(,"predvars")
## list(Freq, Gender, Smoking, Health)
## attr(,"dataClasses")
##      Freq    Gender   Smoking    Health 
## "numeric"  "factor"  "factor"  "factor" 
## 
## Statistics:
##                  X^2 df P(> X^2)
## Likelihood Ratio   0  0        1
## Pearson            0  0        1
summary(model_no_3way)
## Formula:
## Freq ~ (Gender + Smoking + Health)^2
## attr(,"variables")
## list(Freq, Gender, Smoking, Health)
## attr(,"factors")
##         Gender Smoking Health Gender:Smoking Gender:Health Smoking:Health
## Freq         0       0      0              0             0              0
## Gender       1       0      0              1             1              0
## Smoking      0       1      0              1             0              1
## Health       0       0      1              0             1              1
## attr(,"term.labels")
## [1] "Gender"         "Smoking"        "Health"         "Gender:Smoking"
## [5] "Gender:Health"  "Smoking:Health"
## attr(,"order")
## [1] 1 1 1 2 2 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
## attr(,"predvars")
## list(Freq, Gender, Smoking, Health)
## attr(,"dataClasses")
##      Freq    Gender   Smoking    Health 
## "numeric"  "factor"  "factor"  "factor" 
## 
## Statistics:
##                        X^2 df  P(> X^2)
## Likelihood Ratio 0.4151195  1 0.5193824
## Pearson          0.4162923  1 0.5187930
summary(model_indep)
## Formula:
## Freq ~ Gender + Smoking + Health
## attr(,"variables")
## list(Freq, Gender, Smoking, Health)
## attr(,"factors")
##         Gender Smoking Health
## Freq         0       0      0
## Gender       1       0      0
## Smoking      0       1      0
## Health       0       0      1
## attr(,"term.labels")
## [1] "Gender"  "Smoking" "Health" 
## attr(,"order")
## [1] 1 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
## attr(,"predvars")
## list(Freq, Gender, Smoking, Health)
## attr(,"dataClasses")
##      Freq    Gender   Smoking    Health 
## "numeric"  "factor"  "factor"  "factor" 
## 
## Statistics:
##                       X^2 df  P(> X^2)
## Likelihood Ratio 1.651671  4 0.7994768
## Pearson          1.651082  4 0.7995833

Interpretasi: - Model saturasi akan selalu cocok sempurna (p-value besar). - Model dengan interaksi 2 arah (\(Gender*Smoking\), dll) masih cukup baik jika p-value > 0.05. - Model independen akan buruk jika ada hubungan nyata antar variabel.

Perbandingan Model

anova(model_indep, model_no_3way, model_sat)
## LR tests for hierarchical log-linear models
## 
## Model 1:
##  Freq ~ Gender + Smoking + Health 
## Model 2:
##  Freq ~ (Gender + Smoking + Health)^2 
## Model 3:
##  Freq ~ Gender * Smoking * Health 
## 
##            Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1   1.6516710  4                                    
## Model 2   0.4151195  1  1.2365515         3        0.74425
## Model 3   0.0000000  0  0.4151195         1        0.51938
## Saturated 0.0000000  0  0.0000000         0        1.00000

Pilih model yang tidak terlalu kompleks tetapi masih punya goodness-of-fit yang baik (nilai deviance kecil, p-value besar).

Visualisasi Frekuensi Observasi

library(ggplot2)
ggplot(data, aes(x = Smoking, y = Freq, fill = Health)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~ Gender) +
  labs(title = "Distribusi Merokok dan Kesehatan menurut Gender")

Kesimpulan Log-linear model memungkinkan kita memodelkan hubungan dan interaksi antara tiga atau lebih variabel kategori. Model interaksi dua arah mungkin sudah cukup jika interaksi tiga arah tidak signifikan.

Referensi