Data kategori adalah jenis data yang terdiri dari kelompok atau label tertentu, bukan angka yang bisa diukur secara berkelanjutan. Data ini sering digunakan di berbagai bidang ilmu untuk memahami pola, hubungan, dan tren yang tidak bisa diungkapkan langsung dengan angka. Contoh sederhananya meliputi jenis kelamin (pria/wanita), status pekerjaan (bekerja/tidak bekerja), tingkat pendidikan (SD/SMP/SMA), atau selera pribadi (suka/netral/tidak suka).
Analisis data kategori sangat penting untuk mengeksplorasi dan menafsirkan data yang bersifat nominal (tanpa urutan) atau ordinal (bertingkat). Berbeda dengan data numerik, analisis data kategori membutuhkan metode khusus seperti tabel silang (tabel kontingensi), uji chi-square, regresi logistik, atau model berbasis probabilitas. Seiring perkembangan teknologi dan kecerdasan buatan, teknik analisis data kategori juga semakin banyak dipakai dalam machine learning dan analisis big data.
Analisis data kategori memiliki beberapa tujuan utama yang mendukung pengambilan keputusan berbasis data. Berikut merupakan tujuan dari analisis data kategori.
Analisis data kategori membantu mengungkap pola tersembunyi dalam data. Misalnya, dalam riset pasar, data kategori bisa digunakan untuk melihat preferensi produk berdasarkan usia atau jenis kelamin konsumen.
Analisis data kategori membantu mengetahui apakah ada keterkaitan antara dua atau lebih variabel kategori. Contohnya, dalam penelitian kesehatan, analisis ini bisa mengungkap apakah kebiasaan merokok berkaitan dengan risiko penyakit tertentu.
Analisis data kategori membantu memahami pola dan hubungan dalam data, sehingga pembuat kebijakan dapat mengambil langkah lebih tepat. Misalnya, pemerintah bisa merancang program bantuan sosial berdasarkan analisis tingkat pendidikan atau pekerjaan masyarakat.
Banyak model statistik menggunakan data kategori sebagai bahan analisis, seperti regresi logistik untuk memprediksi hasil biner. Misalnya, apakah seseorang akan membeli produk atau tidak dalam suatu pusat perbelanjaan.
Analisis data kategori adalah metode statistik untuk mengolah variabel yang berbentuk kelompok atau label.
Nominal : Data tanpa urutan (jenis buah, agama).
Ordinal : Data dengan urutan (jenjang pendidikan, gaji karyawan).
Biner : Memiliki dua kategori (jenis kelamin, status kesehatan).
Multikategori : Memiliki lebih dari dua kategori (status sosial, jenjang pendidikan).
Data kategorik berbeda dengan data kuantitatif karena data kategorik tidak dapat diukur dalam skala numerik kontinu.
Analisis data kategori memiliki manfaat besar dalam berbagai bidang karena membantu mengungkap pola, tren, dan hubungan antar variabel yang bersifat diskrit atau nominal. Berikut beberapa manfaatnya dalam berbagai bidang :
Evaluasi Kinerja Mahasiswa : Mengelompokkan berdasarkan nilai mutu (A, B, C, D, E.) atau status kelulusan.
Penentuan Jurusan Favorit : Melihat kecenderungan pilihan jurusan berdasarkan kategori wilayah atau gender.
Analisis Kepuasan : Mengkategorisasi tanggapan mahasiswa terhadap layanan kampus.
Label Encoding : Mengolah data kategori agar bisa digunakan dalam algoritma pembelajaran mesin.
Intent Classification : Mengelompokkan pertanyaan pengguna ke dalam kategori permintaan informasi, komplain, permintaan bantuan, dll.
Deteksi Intrusi : Mengklasifikasikan aktivitas jaringan sebagai normal atau berbahaya.
Terdapat berbagai metode yang dapat digunakan dalam analisis data kategori, tergantung pada tujuan analisis yang ingin dicapai. Berikut merupakan metode-metode yang umum digunakan.
Metode ini digunakan untuk mengevaluasi apakah terdapat hubungan antara dua variabel kategori. Contohnya adalah menguji keterkaitan antara tingkat pendidikan dengan status pekerjaan.
Metode ini digunakan untuk memprediksi peluang terjadinya suatu peristiwa berdasarkan variabel kategori. Contohnya adalah memprediksi kemungkinan pelanggan melakukan pembelian berdasarkan preferensi kategori produk.
Metode ini digunakan untuk mengeksplorasi hubungan antar kategori dalam satu dataset. Contohnnya adalah menganalisis preferensi makanan berdasarkan kategori kelompok usia.
Metod ini digunakan untuk pembelajaran mesin yang banyak digunakan untuk melakukan klasifikasi berbasis data kategori. Contohnya adalah mengelompokkan pelanggan menurut tingkat loyalitas mereka.
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 digunakan untuk eksperimen biner, yaitu eksperimen yang hanya memiliki dua kemungkinan hasil: sukses (1) dengan peluang sebesar p, dan gagal (0) dengan peluang sebesar 1 - p.
Fungsi probabilitasnya :
\[ P(X = x) = p^x (1 - p)^{1 - x}, \quad x \in \{0, 1\} \]
Penjelasan Notasi :
X = Variabel acak biner yang hanya bernilai 0 atau 1.
p = Peluang terjadinya sukses (X=1).
Contoh Variabel Acak Bernoulli :
Hasil pelemparan koin, misalnya kepala dan ekor.
Hasil tendangan pinalti, misalnya gol dan tidak gol.
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 = 12, size = 1, prob = 0.5) # 12 percobaan Bernoulli
bernoulli_sample
## [1] 0 1 0 1 1 0 1 1 1 0 1 0
Distribusi Binomial merupakan perluasan dari distribusi Bernoulli yang diterapkan pada n kali percobaan yang bersifat independen, di mana setiap percobaan hanya memiliki dua kemungkinan hasil: sukses atau gagal. Bila probabilitas sukses dalam setiap percobaan adalah p.
Fungsi Probabilitasnya :
\[ P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k}, \quad k = 0, 1, 2, ..., n \]
Penjelasan Notasi :
X : Jumlah keberhasilan yang diperoleh dari n percobaan.
n : Banyaknya percobaan yang dilakukan.
k : Banyaknya keberhasilan yang dicatat.
p : Peluang sukses dalam satu percobaan.
\(\binom{n}{k}\) : Kombinasi “n pilih k”, dihitung dengan rumus \(\dfrac{n!}{k!(n-k)!}\)
Contoh Variabel Acak Binomial :
Jumlah sukses dalam 10 kali pelemparan koin.
Jumlah gol dalam 10 tendangan pinalti.
Perhitungan dengan R :
set.seed(123)
binomial_sample <- rbinom(n = 12, size = 6, prob = 0.5) # 12 percobaan Binomial dengan 6 ulangan
binomial_sample
## [1] 2 4 3 4 5 1 3 5 3 3 5 3
Distribusi Multinomial merupakan pengembangan lebih lanjut dari distribusi Binomial, yang digunakan ketika setiap percobaan dapat menghasilkan lebih dari dua hasil yang berbeda. Jika suatu eksperimen dilakukan sebanyak n kali, dan setiap percobaan dapat menghasilkan salah satu dari k kategori dengan peluang masing-masing sebesar p₁, p₂, …, pₖ.
Fungsii Probabilitasnya :
\[ P(X_1 = x_1, ..., X_k = x_k) = \frac{n!}{x_1!x_2!...x_k!} \cdot p_1^{x_1} \cdot p_2^{x_2} \cdots p_k^{x_k} \]
Penjelasan Notasi :
Contoh Variabel Acak Multinomial :
Distribusi agama siswa dalam satu kelas acak.
Distribusi warna permen dalam satu bungkus acak.
Perhitungan dengan R :
set.seed(123)
multinomial_sample <- rmultinom(n = 1, size = 12, prob = c(0.4, 0.5, 0.2))
multinomial_sample
## [,1]
## [1,] 3
## [2,] 5
## [3,] 4
Distribusi Poisson digunakan untuk memperkirakan banyaknya kejadian yang terjadi dalam rentang waktu atau ruang tertentu, dengan asumsi rata-rata kejadian sebesar λ per satuan waktu atau ruang.
Fungsi Probabilitasnya :
\[ P(X = k) = \frac{e^{-\lambda} \lambda^k}{k!}, \quad k = 0, 1, 2, ... \]
Penjelasan Notasi :
Contoh Variabel Acak Poisson :
Banyaknya panggilan masuk ke pusat layanan pelanggan dalam satu jam.
Banyaknya kecelakaan lalu lintas yang terjadi di satu ruas jalan dalam sehari.
Perhitungan dengan R :
set.seed(123)
poisson_sample <- rpois(12, lambda = 4) # 12 sampel dengan rata-rata kejadian 4
poisson_sample
## [1] 3 6 3 6 7 1 4 7 4 4 8 4
Desain sampling adalah bagian dari tahap awal dalam proses penelitian, khususnya dalam pengumpulan data. Tujuannya adalah agar data yang dikumpulkan bisa digunakan untuk menarik kesimpulan yang akurat tentang populasi.
Dalam analisis data kategori, desain sampling merujuk pada cara atau metode yang digunakan untuk memilih sampel dari populasi agar data yang diperoleh dapat mewakili keseluruhan populasi dengan baik. Ini sangat penting karena pemilihan sampel akan memengaruhi validitas dan reliabilitas hasil analisis.
Secara umum, desain sampling dalam analisis data kategori dapat diklasifikasikan ke dalam dua pendekatan utama, yaitu prospective sampling dan retrosprective sampling. Masing - masing pendekatan ini memiliki karakteristik dan metode sampling yang berbeda.
Prospective sampling adalah metode pengambilan sampel di mana peneliti mengikuti partisipan dari waktu sekarang ke masa depan untuk mengamati kejadian atau hasil tertentu. Ini biasa digunakan dalam penelitian longitudinal atau studi kohort prospektif. Beberapa jenis desain sampling dalam metode ini meliputi :
Dalam studi eksperimental, subjek secara acak dialokasikan ke dalam kelompok perlakuan dan kontrol. Teknik sampling yang umum digunakan meliputi:
Simple Random Sampling : 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 adalah jenis penelitian observasional dimana sekelompok orang (kohort) yang memiliki karakteristik tertentu diikuti dalam jangka waktu tertentu untuk melihat bagaimana paparan tertentu memengaruhi kejadian suatu outcome (misalnya penyakit, perilaku, atau kondisi tertentu). 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 adalah metode pengambilan sampel dalam penelitian di mana peneliti melihat ke belakang untuk mengidentifikasi subjek berdasarkan outcome yang sudah terjadi, lalu menelusuri paparan atau faktor penyebabnya sebelumnya.
Dalam studi kasus-kontrol, sekelompok individu dengan kondisi tertentu dibandingkan dengan kelompok tanpa kondisi tersebut. 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.
Dalam studi kohort retrospektif, data historis digunakan untuk mengelompokkan individu berdasarkan paparan dan kemudian menganalisis hasil yang terjadi. Teknik sampling yang sering digunakan meliputi :
Convience Sampling : Subek 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.
Jenis Studi | Pendekatan | Metode Samping | 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, Incidnece Density | Mudah dan cepat dilakukan, efisien untuk penyakit langka | Sulit mengontrol variabel penganggu, rentan bias recall |
Studi Kohort Retrospektif | Retrospective | Convenience, Quota, Case - Based | Memanfaatkan data historis, lebih murah daripada studi kohort | Ketergantungan pada kualitas data historis, bisa terjadi missing data |
Desain pengambilan sampel dalam analisis data kategori sangat dipengaruhi oleh pendekatan yang diterapkan, baik secara prospektif maupun retrospektif. Pemilihan teknik sampling yang tepat, baik dalam eksperimen, studi kohort, maupun studi kasus-kontrol, berperan penting dalam meningkatkan validitas hasil penelitian dan menjamin bahwa temuan dapat diterapkan secara lebih luas. Oleh karena itu, pemahaman yang mendalam mengenai karakteristik tiap metode sampling sangatlah krusial untuk menyusun rancangan penelitian yang kuat dan bermutu tinggi.
Tabel kontingensi 2×2 merupakan bentuk paling sederhana dari tabel kontingensi yang digunakan untuk menganalisis hubungan antara dua variabel kategorik. Tabel ini sering digunakan dalam analisis statistik untuk mengevaluasi apakah ada keterkaitan antara dua variabel, seperti jenis pengobatan dengan tingkat kesembuhan atau metode belajar dan hasil kelulusan. Berikut merupakan struktur tabel kontingensi 2 x 2.
Kategori 1 (+) | Kategori 2 (-) | Total | |
---|---|---|---|
Grup 1 | n11 | n12 | n1. |
Grup 2 | n21 | n22 | n2. |
Total | n.1 | n.2 | n |
Penjelasan Notasi :
n11= Jumlah kasus dalam kategori positif dari Grup 1.
n12 = Jumlah kasus dalam kategori negatif dari Grup 1.
n21 = Jumlah kasus dalam kategori positif dari Grup 2.
n22 = Jumlah kasus dalam kategori negatif dari Grup 2.
n1. = Total observasi dalam Grup 1 (𝑛1. =𝑛11 +𝑛12).
n2. = Total observasi dalam Grup 2 (𝑛2. =𝑛21 +𝑛22).
n.1 = Total observasi dalam Kategori 1 (𝑛.1 =𝑛11 +𝑛21).
n.2 = Total observasi dalam Kategori 2 (𝑛.2 =𝑛12 +𝑛22).
n =Total keseluruhan sampel (𝑛=𝑛11 +𝑛12 +𝑛21 +𝑛22).
Peluang bersama adalah probabilitas bahwa kedua variabel terjadi secara bersamaan dalam suatu sel tabel kontingensi:
\[ P(A_i, B_j) = \frac{n_{ij}}{n} \]
Peluang marginal adalah probabilitas kejadian suatu variabel tanpa mempertimbangkan variabel lainnya.
\[ P(A_i) = \frac{n_{i.}}{n} \]
\[ P(B_j) = \frac{n_{.j}}{n} \]
Peluang bersyarat adalah probabilitas suatu kejadian terjadi dengan syarat kejadian lain telah terjadi:
\[ P(B_j | A_i) = \frac{P(A_i, B_j)}{P(A_i)} = \frac{n_{ij}}{n_{i.}} \]
Tabel berikut merupakan data studi kasus tentang hubungan metode belajar dengan hasil tes siswa di suatu sekolah.
Lulus (+) | Tidak Lulus (-) | Total | |
---|---|---|---|
Bimbingan Belajar | 80 | 20 | 100 |
Belajar Mandiri | 50 | 50 | 100 |
Total | 130 | 70 | 200 |
Langkah 1 : Hitung Peluang Bersama
Langkah 2 : Hitung Peluang Marginal
Langkah 3 : Hitung Peluang Bersyarat
\[ P(\text{Lulus}|\text{Bimbingan Belajar}) = \frac{80}{100} = 0.8 \]
\[ P(\text{Lulus}|\text{Belajar Mandiri}) = \frac{50}{100} = 0.5 \]
\[ P(\text{Tidak Lulus}|\text{Bimbingan Belajar}) = \frac{20}{100} = 0.2 \]
\[ P(\text{Tidak Lulus}|\text{Belajar Mandiri}) = \frac{50}{100} = 0.5 \]
#Data
data <- matrix(c(80,20,50,50), nrow = 2, byrow = TRUE)
colnames(data) <- c("Lulus", "Tidak Lulus")
rownames(data) <- c("Bimbingan Belajar","Belajar Mandiri")
n <- sum(data)
#Peluang Bersama
p_bersama <- data/n
#Peluang Marginal
p_marginal_baris <- rowSums(data)/n
p_marginal_kolom <- colSums(data)/n
#Peluang Bersyarat
p_bersyarat <- data / rowSums(data)
#Hasil
list(Peluang_Bersama = p_bersama, Peluang_Marginal_Baris = p_marginal_baris, Peluang_Marginal_Kolom = p_marginal_kolom, Peluang_Bersyarat = p_bersyarat)
## $Peluang_Bersama
## Lulus Tidak Lulus
## Bimbingan Belajar 0.40 0.10
## Belajar Mandiri 0.25 0.25
##
## $Peluang_Marginal_Baris
## Bimbingan Belajar Belajar Mandiri
## 0.5 0.5
##
## $Peluang_Marginal_Kolom
## Lulus Tidak Lulus
## 0.65 0.35
##
## $Peluang_Bersyarat
## Lulus Tidak Lulus
## Bimbingan Belajar 0.8 0.2
## Belajar Mandiri 0.5 0.5
Interpretasi :
Peluang Bersama :
Peluang siswa mengikuti bimbingan belajar dan lulus adalah 0.40 atau 40%.
Peluang siswa mengikuti bimbingan belajar dan tidak lulus adalah 0.10 atau 10%.
Peluang siswa belajar mandiri dan lulus adalah 0.25 atau 25%.
Peluang siswa belajar mandiri dan tidak lulus adalah 0.25 atau 25%
Peluang Marginal :
Peluang Bersyarat :
Ukuran asosiasi dalam analisis data kategorik digunakan untuk mengukur kekuatan hubungan antara dua variabel kategorik. Ini penting untuk mengetahui apakah hubungan yang ada signifikan dan seberapa kuat hubungan tersebut. Berikut adalah beberapa ukuran asosiasi yang umum digunakan :
Risk Difference (juga dikenal sebagai Absolute Risk Reduction) mengukur selisih risiko antara dua kelompok. Nilai RD menunjukkan perbedaan proporsi kejadian antara kelompok yang terpapar dan tidak terpapar.
Rumus :
\[ RD = \frac{a}{a + b} - \frac{c}{c + d} \]
Dengan :
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.
Relative Risk membandingkan kemungkinan terjadinya suatu kejadian (misalnya penyakit) pada kelompok yang terpapar terhadap kelompok yang tidak terpapar.
Rumus :
\[ RR = \frac{a / (a + b)}{c / (c + d)} \]
Jika RR>1, maka kejadian lebih sering terjadi di Grup 1 dibandingkan Grup 2.
Jika RR<1, maka kejadian lebih jarang terjadi di Grup 1 dibandingkan Grup 2.
Jika RR=1, maka tidak ada perbedaan risiko antara dua kelompok.
Odds Ratio digunakan untuk membandingkan peluang (odds) terjadinya suatu kejadian antara dua kelompok. Sangat umum dalam studi kasus-kontrol.
Rumus:
\[ OR = \frac{a \cdot d}{b \cdot c} \]
Jika OR>1, maka peluang kejadian lebih besar di Grup 1 dibandingkan Grup 2.
Jika OR<1, maka peluang kejadian lebih kecil di Grup 1 dibandingkan Grup 2.
Jika OR=1, maka tidak ada perbedaan peluang kejadian antara dua kelompok.
Tabel berikut merupakan data studi kasus tentang hubungan metode belajar dengan hasil tes siswa di suatu sekolah.
Lulus (+) | Tidak Lulus (-) | Total | |
---|---|---|---|
Bimbingan Belajar | 80 | 20 | 100 |
Belajar Mandiri | 50 | 50 | 100 |
Total | 130 | 70 | 200 |
Langkah 1 : Hitung Risk Difference
Langkah 2 : Hitung Relative Risk
Langkah 3 : Hitung Odds Ratio
# Data
a <- 80
b <- 20
c <- 50
d <- 50
# Risk Difference
RD <- (a / (a + b)) - (c / (c + d))
# Relative Risk
RR <- (a / (a + b)) / (c / (c + d))
# Odds Ratio
OR <- (a * d) / (b * c)
#Hasil
list(Risk_Difference = RD, Relative_Risk = RR, Odds_Ratio = OR)
## $Risk_Difference
## [1] 0.3
##
## $Relative_Risk
## [1] 1.6
##
## $Odds_Ratio
## [1] 4
Interpretasi :
Risk Difference :
Relative Risk :
Odds Ratio :
Inferensi dalam statistik merujuk pada proses menarik kesimpulan tentang suatu populasi berdasarkan data dari sampel. Dalam konteks tabel kontingensi dua arah, inferensi digunakan untuk mengevaluasi hubungan antara dua variabel kategorik yang ditampilkan dalam bentuk tabel. Proses inferensi ini umumnya terbagi menjadi dua jenis utama, yaitu estimasi dan uji hipotesis.
Estimasi bertujuan untuk memperkirakan parameter populasi berdasarkan data sampel. Estimasi dibagi menjadi estimasi titik dan estimasi interval.
Estimasi titik digunakan untuk menentukan satu nilai spesifik sebagai perkiraan terbaik dari parameter populasi.
\[ \hat{p} = \frac{x}{n} \]
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} } \]
Uji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok dalam tabel kontingensi, terutama untuk menentukan apkah terdapat perbedaan yang signifikan dalam proporsi kejadian antara dua kelompok yang berbeda.
Untuk menguji hipotesis bahwa tidak ada perbedaan proporsi antara dua kelompok, kita menggunakan uji z dua proporsi, dengan hipotesis:
- Hipotesis Nol (H0) : tidak ada perbedaan proporsi antara dua kelompok
- Hipotesis Alternatif (H1) : terdapat perbedaan proporsi antara dua kelompok
Estimasi proporsi dalam masing - masing kelompok diberikan oleh :
\[ \hat{p}_1 = \frac{a}{a + b} \]
\[ \hat{p}_2 = \frac{c}{c + d} \]
Estimasi proporsi gabungan :
\[ \hat{p} = \frac{x_1 + x_2}{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)}} \]
Setelah nilai Z ditemukan, kita dapat melihat keputusan apakah tolak H0 atau terima H0 dengan cara apabila |Z| lebih besar dari nilai kritis tertentu untuk tingkat signifikansi tertentu, maka H0 ditolak.
Tabel berikut merupakan data studi kasus tentang hubungan metode belajar dengan hasil tes siswa di suatu sekolah.
Lulus (+) | Tidak Lulus (-) | Total | |
---|---|---|---|
Bimbingan Belajar | 80 | 20 | 100 |
Belajar Mandiri | 50 | 50 | 100 |
Total | 130 | 70 | 200 |
Langkah 1 : Hitung Proporsi Masing-Masing Kelompok
Proporsi pada Bimbingan Belajar :
\[ \hat{p}_1 = \frac{80}{100} = 0.8 \]
Proporsi Pada Belajar Mandiri :
\[ \hat{p}_2 = \frac{50}{100} = 0.5 \]
Langkah 2 : Hitung Proporsi Gabungan
\[ \hat{p} = \frac{80 + 50}{100 + 100} = \frac{130}{200} = 0.65 \]
Langkah 3 : Hitung Statistik Uji Z
\[ Z = \frac{0.8 - 0.3}{\sqrt{0.65(1 - 0.65)\left(\frac{1}{100} + \frac{1}{100} \right)}} = \frac{0.3}{\sqrt{0.2275 \cdot 0.02}} \approx \frac{0.3}{0.0675} \approx 4.4474 \]
# Data
x1 <- 80 # bimbingan belajar lulus
n1 <- 100 # total bimbingan belajar
x2 <- 50 # belajar mandiri sukses
n2 <- 100 # total belajar mandiri
# Proporsi masing-masing kelompok
p1 <- x1 / n1
p2 <- x2 / n2
# Proporsi gabungan
p_pool <- (x1 + x2) / (n1 + n2)
# Statistik uji Z
Z <- (p1 - p2) / sqrt(p_pool * (1 - p_pool) * (1/n1 + 1/n2))
# Tampilkan hasil
list(proporsi_1 = p1, proporsi_2 = p2, proporsi_gabungan = p_pool, Z = Z)
## $proporsi_1
## [1] 0.8
##
## $proporsi_2
## [1] 0.5
##
## $proporsi_gabungan
## [1] 0.65
##
## $Z
## [1] 4.447496
Interpretasi : Dengan taraf signifikansinya 5%, kita menolak H0 karena nilai |Z| yaitu 4,4474 > dari 1.96 yang berarti bahwa terdapat perbedaan proporsi antar kelompok.
Uji asosiasi dalam tabel kontingensi 2 × 2 bertujuan untuk mengukur hubungan antara dua variabel kategori. Untuk setiap uji asosiasi, hipotesis yang diuji adalah :
Uji asosisasi memiliki tiga ukuran utama yaitu risk difference, relative risk, dan odds ratio.
Risk difference mengukur perbedaan absolut dalam probabilitas kejadian antara dua kelompok.
Rumus : \[ RD = \frac{a}{a + b} - \frac{c}{c + d} \]Standar Error untuk RD :
\[ SE(RD) = \sqrt{ \frac{p_1(1 - p_1)}{n_1} + \frac{p_2(1 - p_2)}{n_2} } \]
Statistik Uji Z untuk RD :\[ Z = \frac{RD}{SE(RD)} \]
Perbandingan antara risiko kejadian di kelompok 1 dibanding kelompok 2.
Rumus:
\[ RR = \frac{a / (a + b)}{c / (c + d)} \]
Standar Error untuk log(RR) :
\[ SE(\log(RR)) = \sqrt{ \frac{1 - p_1}{n_1 p_1} + \frac{1 - p_2}{n_2 p_2} } \]
Statistik Uji Z untuk RR :
\[ Z = \frac{\log(RR)}{SE(\log(RR))} \]
Perbandingan peluang kejadian antara dua kelompok.
Rumus: \[ OR = \frac{a \cdot d}{b \cdot c} \]Standar error untuk log(OR) :
\[ SE(\log(OR)) = \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} } \]
Statistik Uji Z untuk OR :
\[ Z = \frac{\log(OR)}{SE(\log(OR))} \]
Tabel berikut merupakan data studi kasus tentang hubungan metode belajar dengan hasil tes siswa di suatu sekolah.
Lulus (+) | Tidak Lulus (-) | Total | |
---|---|---|---|
Bimbingan Belajar | 80 | 20 | 100 |
Belajar Mandiri | 50 | 50 | 100 |
Total | 130 | 70 | 200 |
\[ \hat{p}_1 = \frac{80}{100} = 0.8, \quad \hat{p}_2 = \frac{50}{100} = 0.5 \]
\[ RD = 0.8 - 0.5 = 0.3 \]
Standar Error RD :
\[ SE(RD) = \sqrt{ \frac{0.8 \times (1 - 0.8)}{100} + \frac{0.5 \times (1 - 0.5)}{100} }\approx 0.064 \]
Statistik Uji Z RD :
\[ Z_{RD} = \frac{0.3}{0.0.064} \approx 4.6852 \]
\[ RR = \frac{0.8}{0.5} = 1.6 \]
Standar Error log(RR) :
\[ SE(\log(RR)) = \sqrt{ \left( \frac{1}{80} - \frac{1}{100} \right) + \left( \frac{1}{50} - \frac{1}{100} \right) }\approx 0.1118 \]
Statistik Uji Z RR :
\[ Z_{RR} = \frac{\log(1.6)}{0.1118} \approx \frac{4.899}{0.1118} \approx 4.2038 \]
\[ OR = \frac{80 \cdot 50}{20 \cdot 50} = \frac{4000}{1000} = 4 \]
Standar Error log(OR) :
\[ SE(\log(OR)) = \sqrt{ \frac{1}{21} + \frac{1}{2} + \frac{1}{15} + \frac{1}{3} } \approx 0.3202 \]
Statistik Uji Z OR :
\[ Z_{OR} = \frac{\log(4)}{0.3202} \approx \frac{1.6609}{0.3202} \approx 4.33 \]
# Data
a <- 80 # Bimbingan Belajar, Lulus
b <- 20 # Bimbingan Belajar, Tidak Lulus
c <- 50 # Belajar Mandiri, Lulus
d <- 50 # Belajar Mandiri, Tidak Lulus
# Total masing-masing grup
n1 <- a + b # Bimbingan Belajar
n2 <- c + d # Belajar Mandiri
# Proporsi
p1 <- a / n1
p2 <- c / n2
### --- 1. Risk Difference (RD) ---
RD <- p1 - p2
# Standard Error RD
SE_RD <- sqrt((p1 * (1 - p1)) / n1 + (p2 * (1 - p2)) / n2)
# Z-test RD
Z_RD <- RD / SE_RD
### --- 2. Relative Risk (RR) ---
RR <- p1 / p2
# SE log(RR)
SE_log_RR <- sqrt((1/a - 1/n1) + (1/c - 1/n2))
# Z-test RR
Z_RR <- log(RR) / SE_log_RR
### --- 3. Odds Ratio (OR) ---
OR <- (a * d) / (b * c)
# SE log(OR)
SE_log_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
# Z-test OR
Z_OR <- log(OR) / SE_log_OR
list(Risk_Difference = RD, SE_RD = SE_RD, Z_RD = Z_RD, Relative_Risk = RR, SE_log_RR = SE_log_RR, Z_RR = Z_RR, Odds_Ratio = OR, SE_log_OR = SE_log_OR, Z_OR = Z_OR)
## $Risk_Difference
## [1] 0.3
##
## $SE_RD
## [1] 0.06403124
##
## $Z_RD
## [1] 4.685213
##
## $Relative_Risk
## [1] 1.6
##
## $SE_log_RR
## [1] 0.1118034
##
## $Z_RR
## [1] 4.20384
##
## $Odds_Ratio
## [1] 4
##
## $SE_log_OR
## [1] 0.3201562
##
## $Z_OR
## [1] 4.330056
Uji independensi digunakan untuk menentukan apakah ada hubungan statistik antara dua variabel kategorikal.
Uji Chi-Square digunakan untuk menguji apakah ada hubungan antara dua variabel kategorikal.
Rumus Chi-Square
\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]
\[ E_{ij} = \frac{R_i \times C_j}{N} \]
dengan :
Tabel berikut merupakan data studi kasus tentang hubungan metode belajar dengan hasil tes siswa di suatu sekolah.
Lulus (+) | Tidak Lulus (-) | Total | |
---|---|---|---|
Bimbingan Belajar | 80 | 20 | 100 |
Belajar Mandiri | 50 | 50 | 100 |
Total | 130 | 70 | 200 |
Perhitungan Manual :
Langkah 1 : Hitung nilai yang diharapkan (E)
Nilai yang diharapkan \(E_{ij}\) dihitung dengan rumus :
\[ E_{ij} = \frac{R_i \times C_j}{N} \]
Menghitung nilai yang diharapkan:
Untuk Bimbingan Belajar, Lulus (\(E_{11}\)):
\[ E_{11} = \frac{(100 \times 130)}{200} = 65 \]
Untuk Bimbingan Belajar, Tidak Lulus (\(E_{12}\)):
\[ E_{12} = \frac{(100 \times 70)}{200} = 35 \]
Untuk Belajar Mandiri, Lulus (\(E_{21}\)):
\[ E_{21} = \frac{(100 \times 130)}{200} = 65 \]
Untuk Belajar Mandiri, Tidak Lulus (\(E_{22}\)):
\[ E_{22} = \frac{(100 \times 70)}{200} = 35 \]
Langkah 2 : Hitung Chi-Square (\(\chi^2\))
\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]
Untuk Bimbingan Belajar, Lulus (\(O_{11} = 80\), \(E_{11} = 65\)):
\[ \frac{(80 - 65)^2}{65} = \frac{225}{65} = 3.4615 \]
Untuk Bimbingan Belajar, Tidak Lulus (\(O_{12} = 20\), \(E_{12} = 35\)):
\[ \frac{(20 - 35)^2}{35} = \frac{225}{35} = 6.4286 \]
Untuk Belajar Mandiri, Lulus (\(O_{21} = 50\), \(E_{21} = 65\)):
\[ \frac{(50 - 65)^2}{65} = \frac{225}{65} = 3.4615 \]
Untuk Belajar Mandiri, Tidak Lulus (\(O_{22} = 50\), \(E_{22} = 35\)):
\[ \frac{(50 - 35)^2}{35} = \frac{225}{35} = 6.4286 \]
Chi-Square Total :
\[ \chi^2 = 3.4615 + 6.4286 + 3.4615 + 6.4286 = 18.484 \]
Perhitungan dengan R :
# Membuat data tabel 2x2
data <- matrix(c(80, 20, 50, 50), nrow = 2, byrow = TRUE)
# Menambahkan nama baris dan kolom
rownames(data) <- c("Bimbingan Belajar", "Belajar Mandiri")
colnames(data) <- c("Lulus", "Tidak Lulus")
# Menampilkan data tabel
data
## Lulus Tidak Lulus
## Bimbingan Belajar 80 20
## Belajar Mandiri 50 50
# Menghitung chi-square
chi_square_test <- chisq.test(data)
# Menampilkan hasil uji chi-square
chi_square_test
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 18.484, df = 1, p-value = 1.714e-05
list(data = data, chi_square_test = chi_square_test)
## $data
## Lulus Tidak Lulus
## Bimbingan Belajar 80 20
## Belajar Mandiri 50 50
##
## $chi_square_test
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 18.484, df = 1, p-value = 1.714e-05
Interpretasi : Dengan taraf signifkansi 5% didapatkan p-value < alpha, maka tolak H0 yang berarti metode belajar (bimbingan belajar vs belajar mandiri) berpengaruh terhadap kemungkinan lulus atau tidak lulus siswa.
Partisi Chi-Square Partisi Chi-Square digunakan untuk mengidentifikasi kategori mana dalam tabel kontingensi yang bertanggung jawab atas hubungan yang signifikan. Jika uji Chi-Square pada tabel kontingensi I×J signifikan, maka partisi Chi-Square memungkinkan kita untuk menguraikan efek hubungan dalam subkelompok yang lebih kecil.
Tabel berikut merupakan data studi kasus tentang hubungan konsumsi minuman soda (botol per hari) dengan risiko terkena diabetes.
0 botol / hari | 1-3 botol / hari | >3 botol / hari | Total | |
---|---|---|---|---|
Kontrol | 25 | 25 | 12 | 62 |
Diabetes | 0 | 1 | 3 | 4 |
Total | 25 | 26 | 15 | 66 |
Perhitungan Manual
Langkah 1 : Menghitung Frekuensi yang Diharapkan
Frekuensi yang diharapkan dihitung menggunakan rumus:
\[ E_i = \frac{(Total \, \text{Baris}) \times (Total \, \text{Kolom})}{Grand \, \text{Total}} \]
Berdasarkan tabel di atas, kita dapat menghitung frekuensi yang diharapkan untuk setiap sel sebagai berikut:
\[ E_{1,1} = \frac{62 \times 25}{66} = 23.636 \]
\[ E_{1,2} = \frac{62 \times 26}{66} = 24.545 \]
\[ E_{1,3} = \frac{62 \times 15}{66} = 14.091 \]
\[ E_{2,1} = \frac{4 \times 25}{66} = 1.515 \]
\[ E_{2,2} = \frac{4 \times 26}{66} = 1.515 \]
\[ E_{2,3} = \frac{4 \times 15}{66} = 0.909 \]
Langkah 2: Menghitung Statistik Chi-Square
Sekarang kita dapat menghitung statistik chi-square (\(\chi^2\)) dengan rumus:
\[ \chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} \]
Dimana \(O_i\) adalah frekuensi yang diamati dan \(E_i\) adalah frekuensi yang diharapkan. Berdasarkan data yang ada, kita menghitung chi-square untuk setiap sel:
\[ \chi^2 = \frac{(25 - 23.636)^2}{23.636} + \frac{(25 - 24.545)^2}{24.545} + \frac{(12 - 14.091)^2}{14.091} + \frac{(0 - 1.515)^2}{1.515} + \frac{(1 - 1.515)^2}{1.515} + \frac{(3 - 0.909)^2}{0.909} \]
\[ \chi^2 = 0.0785 + 0.0084 + 0.3107 + 1.513 + 0.1754 + 4.809 = 6.9562 \]Pehitungan Dengan R :
# Membuat matriks data
data_matrix <- matrix(c(25, 25, 12, 0, 1, 3), nrow = 2, byrow = TRUE)
colnames(data_matrix) <- c("0 botol / hari", "1-3 botol / hari", ">3 botol / hari")
rownames(data_matrix) <- c("Kontrol", "Diabetes")
# Melakukan uji chi-square
chi_square_test <- chisq.test(data_matrix)
## Warning in chisq.test(data_matrix): Chi-squared approximation may be incorrect
# Menampilkan hasil uji
chi_square_test
##
## Pearson's Chi-squared test
##
## data: data_matrix
## X-squared = 6.9562, df = 2, p-value = 0.03087
Intepretasi : Dengan taraf signifikansi 5%, maka kita menolak H0 dikarenakan p value (0.03087) lebih kecil dari alpha (0.05). Dikarenakan menolak H0, maka terdapat hubungan signifikan antara konsumsi minuman soda dan risiko diabetes.
Uji Likelihood Ratio (G²) adalah alternatif dari uji chi-square yang digunakan untuk menguji hipotesis independensi dalam tabel kontingensi \(I \times J\). Statistik uji ini diberikan oleh :
\[ G^2 = 2 \sum_{i} \sum_{j} n_{ij} \ln \left( \frac{n_{ij}}{\hat{\mu}_{ij}} \right) \]
\(\hat{\mu}_{ij} = n \cdot p_i \cdot p_j\) adalah frekuensi yang diharapkan.
\(p_i\) adalah proporsi untuk baris \(i\).
\(p_j\) adalah proporsi untuk kolom \(j\).
Tabel berikut merupakan data studi kasus tentang hubungan metode belajar dengan hasil tes siswa di suatu sekolah.
Lulus (+) | Tidak Lulus (-) | Total | |
---|---|---|---|
Bimbingan Belajar | 80 | 20 | 100 |
Belajar Mandiri | 50 | 50 | 100 |
Total | 130 | 70 | 200 |
Langkah 1: Hitung Frekuensi Ekspektasi
Gunakan rumus: \[ \hat{\mu}_{ij} = \frac{(\text{Total Baris}_i) \times (\text{Total Kolom}_j)}{\text{Grand Total}} \]
\[ \begin{aligned} \hat{\mu}_{11} &= \frac{100 \times 130}{200} = 65 \\ \hat{\mu}_{12} &= \frac{100 \times 70}{200} = 35 \\ \hat{\mu}_{21} &= \frac{100 \times 130}{200} = 65 \\ \hat{\mu}_{22} &= \frac{100 \times 70}{200} = 35 \\ \end{aligned} \]
Langkah 2: Hitung Statistik Uji G²
\[ \begin{aligned} G^2 &= 2 \sum O_{ij} \ln \left( \frac{O_{ij}}{E_{ij}} \right) \\ &= 2 \left[ 80 \ln \left( \frac{80}{65} \right) + 20 \ln \left( \frac{20}{35} \right) + 50 \ln \left( \frac{50}{65} \right) + 50 \ln \left( \frac{50}{35} \right) \right] \\ &= 20.269 \end{aligned} \]
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\) dan df = 1 adalah 3.841.
Karena \(G^2 = 20.269 > 3.841\), maka tolak H0, artinya terdapat cukup bukti yang menunjukkan bahwa metode belajar berpengaruh signifikan terhadap kelulusan siswa.
Perhitungan dengan R :
# Data Observasi
observed <- matrix(c(80, 20,
50, 50),
nrow = 2, byrow = TRUE)
# Menambahkan nama baris dan kolom
rownames(observed) <- c("Bimbingan Belajar", "Belajar Mandiri")
colnames(observed) <- c("Lulus", "Tidak Lulus")
# Total per baris dan kolom
row_totals <- rowSums(observed)
col_totals <- colSums(observed)
grand_total <- sum(observed)
# Frekuensi harapan (Expected frequencies)
expected <- outer(row_totals, col_totals) / grand_total
# Hitung G²
G2 <- 2 * sum(observed * log(observed / expected), na.rm = TRUE)
# Derajat bebas
df <- (nrow(observed) - 1) * (ncol(observed) - 1)
# Nilai kritis chi-square
chi_critical <- qchisq(0.95, df)
# Output hasil
list(statistik_G = G2, Derajat_bebas = df, Nilai_kritis = chi_critical)
## $statistik_G
## [1] 20.26873
##
## $Derajat_bebas
## [1] 1
##
## $Nilai_kritis
## [1] 3.841459
if (G2 > chi_critical) {
cat("Kesimpulan: Tolak H0 - Ada hubungan signifikan.\n")
} else {
cat("Kesimpulan: Gagal tolak H0 - Tidak ada hubungan signifikan.\n")
}
## Kesimpulan: Tolak H0 - Ada hubungan signifikan.
Tabel kontingensi tiga arah merupakan perluasan dari tabel kontingensi dua arah yang digunakan untuk menganalisis hubungan antara tiga variabel kategori secara bersamaan. Dalam berbagai situasi, keterkaitan antara dua variabel (misalnya X dan Y) dapat dipengaruhi oleh variabel ketiga Z, yang dikenal sebagai variabel kontrol atau kovariat. Tabel ini sering dimanfaatkan dalam analisis data ketika terdapat kemungkinan adanya faktor pengganggu yang dapat memengaruhi hubungan antara dua variabel utama. Contohnya :
Dalam penelitian epidemiologi, untuk meneliti hubungan antara merokok (X) dan kanker paru-paru (Y) dengan mempertimbangkan efek usia (Z).
Dalam studi sosial, untuk menilai hubungan antara ras tersangka (X) dan keputusan hukuman mati (Y) dengan mempertimbangkan latar belakang korban (Z).
Tabel kontingensi tiga arah dapat diklasifikasikan menjadi dua jenis :
Tabel Parsial : Tabel yang menampilkan hubungan antara X dan Y untuk setiap kategori Z. Ini memungkinkan analisis hubungan bersyarat, di mana pengaruh Z dikendalikan.
Tabel Marginal : Tabel yang diperoleh dengan mengabaikan variabel Z, yakni dengan menjumlahkan seluruh kategori Z. Ini memberikan gambaran umum hubungan antara X dan Y tanpa mempertimbangkan Z, yang dapat mengakibatkan kesalahan interpretasi, seperti pada Simpson’s Paradox.
Fungsi Tabel Marginal
Tabel parsial merupakan tabel yang menyajikan hubungan antara X dan Y berdasarkan tiap kategori Z, sedangkan tabel marginal adalah tabel yang mengabaikan Z, dengan menjumlahkan data dari seluruh kategori Z.
Contoh :
Tabel berikut menunjukkan data mengenai peristiwa cedera pada kecelakaan lalu lintas berdasarkan jenis kendaraan dan waktu berkendara.
Waktu Berkendara | Jenis Kendaraan | Cedera | Tidak Cedera |
---|---|---|---|
Malam | Motor | 43 | 134 |
Malam | Mobil | 26 | 149 |
Siang | Motor | 29 | 23 |
Siang | Mobil | 22 | 26 |
Tabel frekuensi parsial menyajikan hubungan antara dua variabel kategori dalam tabel kontingensi tiga arah dengan mempertimbangkan satu variabel sebagai kontrol. Tabel ini membantu dalam menambah hubungan bersyarat antara variabel dalam analisis data kategori.
Tabel Frekuensi Parsial untuk Z (Waktu Berkendara) = Malam menunjukkan hubungan antara jenis kendaraan dan apakah individu tersebut cedera atau tidak saat kecelakaan di malam hari.
Tabel Frekuensi Parsial untuk Z (Waktu Berkendara) = Siang menunjukkan hubungan antara jenis kendaraan dan apakah individu tersebut cedera atau tidak saat kecelakaan di siang hari.
Dengan R :
# Membuat data dengan array
data3 <- array(
c(43, 26, 134, 149, 29, 22, 23, 36),
dim = c(2, 2, 2),
dimnames = list(
Jenis_Kendaraan = c("Motor", "Mobil"),
Intercourse = c("Cedera", "Tidak Cedera"),
Ras = c("Malam", "Siang")
)
)
# Tampilkan array untuk memastikan datanya
data3
## , , Ras = Malam
##
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 43 134
## Mobil 26 149
##
## , , Ras = Siang
##
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 29 23
## Mobil 22 36
# Tabel parsial: hanya untuk waktu malam
parsial_malam <- data3[, , "Malam"]
parsial_malam
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 43 134
## Mobil 26 149
# Tabel parsial: hanya untuk waktu siang
parsial_siang <- data3[, , "Siang"]
parsial_siang
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 29 23
## Mobil 22 36
list(parsial_malam = parsial_malam, parsial_siang = parsial_siang)
## $parsial_malam
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 43 134
## Mobil 26 149
##
## $parsial_siang
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 29 23
## Mobil 22 36
Tabel frekuensi marginal menampilkan jumlah total observasi untuk setiap variabel dengan mengabaikan variabel lainnya dalam tabel kontingensi tiga arah. Tabel ini membantu dalam memahami distribusi kategori secara agregat tanpa mempertimbangkan hubungan antarvariabel. Tabel frekuensi marginal dihitung dengan menjumlahkan frekuensi dari tabel kontingensi tiga arah berdasarkan variabel yang tersisa.
Waktu Berkendara | Cedera | Tidak Cedera | Total |
---|---|---|---|
Malam | 69 | 283 | 352 |
Siang | 51 | 49 | 100 |
Jenis Kendaraan | Cedera | Tidak Cedera | Total |
---|---|---|---|
Motor | 72 | 229 | 301 |
Mobil | 48 | 175 | 223 |
Dengan R :
# Membuat data dengan array
data3 <- array(
c(43, 26, 134, 149, 29, 22, 23, 36),
dim = c(2, 2, 2),
dimnames = list(
Jenis_Kendaraan = c("Motor", "Mobil"),
Intercourse = c("Cedera", "Tidak Cedera"),
Ras = c("Malam", "Siang")
)
)
# Tampilkan array untuk memastikan datanya
data3
## , , Ras = Malam
##
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 43 134
## Mobil 26 149
##
## , , Ras = Siang
##
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 29 23
## Mobil 22 36
# Menjumlahkan berdasarkan waktu
tabel_marginal_waktu <- apply(data3, c(1, 2), sum)
tabel_marginal_waktu
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 72 157
## Mobil 48 185
# Menjumlahkan berdasarkan jenis kendaraan
tabel_marginal_kendaraan <- apply(data3, c(3, 2), sum)
tabel_marginal_kendaraan
## Intercourse
## Ras Cedera Tidak Cedera
## Malam 69 283
## Siang 51 59
list(tabel_marginal_waktu = tabel_marginal_waktu, tabel_marginal_kendaraan = tabel_marginal_kendaraan)
## $tabel_marginal_waktu
## Intercourse
## Jenis_Kendaraan Cedera Tidak Cedera
## Motor 72 157
## Mobil 48 185
##
## $tabel_marginal_kendaraan
## Intercourse
## Ras Cedera Tidak Cedera
## Malam 69 283
## Siang 51 59
Distribusi peluang pada tabel kontingensi tiga arah adalah representasi probabilitas relatif dari setiap kombinasi tiga variabel kategorikal dalam tabel. Alih-alih menunjukkan jumlah kasus atau frekuensi, distribusi peluang menunjukkan seberapa besar kemungkinan suatu kombinasi kategori terjadi dibandingkan dengan seluruh data. Distribusi ini sangat berguna untuk menganalisis hubungan antar variabel dalam skala probabilistik, baik secara keseluruhan, sebagian, maupun dalam konteks tertentu. Distribusi pada tabel kontingensi tiga arah terdira dari peluang bersama, peluang marginal, dan peluang bersyarat.
Peluang bersama didefinisikan sebagai:
\[ P(Z, X, Y) = \frac{f(Z, X, Y)}{N} \]
Perhitungan dengan R :
# Data awal
data <- data.frame(
Waktu = c("Malam", "Malam", "Siang", "Siang"),
Kendaraan = c("Motor", "Mobil", "Motor", "Mobil"),
Cedera = c(43, 26, 29, 22),
Tidak_Cedera = c(134, 149, 23, 26)
)
# Total seluruh kejadian
total <- sum(data$Cedera + data$Tidak_Cedera)
# Peluang bersama untuk masing-masing kondisi
data$Peluang_Cedera <- data$Cedera / total
data$Peluang_Tidak_Cedera <- data$Tidak_Cedera / total
# Tampilkan peluang bersama
cat("=== Peluang Bersama ===\n")
## === Peluang Bersama ===
print(data[, c("Waktu", "Kendaraan", "Peluang_Cedera", "Peluang_Tidak_Cedera")])
## Waktu Kendaraan Peluang_Cedera Peluang_Tidak_Cedera
## 1 Malam Motor 0.09513274 0.29646018
## 2 Malam Mobil 0.05752212 0.32964602
## 3 Siang Motor 0.06415929 0.05088496
## 4 Siang Mobil 0.04867257 0.05752212
Interpretasi :
Peluang bahwa pengendara motor malam hari mengalami cedera adalah 11.00%.
Peluang bahwa pengendara mobil siang hari tidak mengalami cedera adalah 6.65%.
Peluang marginal didefinisikan sebagai berikut
Perhitungan dengan R :
# Peluang marginal berdasarkan waktu berkendara
marginal_waktu <- aggregate(cbind(Cedera, Tidak_Cedera) ~ Waktu, data = data, sum)
marginal_waktu$Peluang_Marginal <- (marginal_waktu$Cedera + marginal_waktu$Tidak_Cedera) / total
# Tampilkan hasil
print(marginal_waktu[, c("Waktu", "Peluang_Marginal")])
## Waktu Peluang_Marginal
## 1 Malam 0.7787611
## 2 Siang 0.2212389
Interpretasi : 90.06% dari semua kejadian dalam data terjadi saat malam hari, artinya mayoritas insiden terjadi pada malam hari.
Perhitungan dengan R :
# Peluang marginal berdasarkan jenis kendaraan
marginal_kendaraan <- aggregate(cbind(Cedera, Tidak_Cedera) ~ Kendaraan, data = data, sum)
marginal_kendaraan$Peluang_Marginal <- (marginal_kendaraan$Cedera + marginal_kendaraan$Tidak_Cedera) / total
cat("\n=== Peluang Marginal Berdasarkan Kendaraan ===\n")
##
## === Peluang Marginal Berdasarkan Kendaraan ===
print(marginal_kendaraan[, c("Kendaraan", "Peluang_Marginal")])
## Kendaraan Peluang_Marginal
## 1 Mobil 0.4933628
## 2 Motor 0.5066372
Interpretasi : 58.61% dari total kejadian melibatkan kendaraan motor, menunjukkan bahwa motor lebih banyak terlibat dibanding mobil.
Mencari peluang seseorang berkendara pada malam hari dan mengalami cedera : \[ P(Cedera| Waktu = Malam) = \frac{P(Cedera,Malam)}{P(Malam)} \]
# P(Cedera | Waktu = Malam)
malam <- subset(data, Waktu == "Malam")
P_cedera_given_malam <- sum(malam$Cedera) / sum(malam$Cedera + malam$Tidak_Cedera)
#Tampilkan hasil
cat("=== Peluang Bersyarat ===\n")
## === Peluang Bersyarat ===
cat("P(Cedera | Waktu = Malam):", round(P_cedera_given_malam, 4), "\n")
## P(Cedera | Waktu = Malam): 0.196
Interpretasi : Dapat diketahui bahwa berkendara di malam hari, maka peluang mereka mengalami cedera adalah 13.73%.
Risk Difference didefinisikan sebagai :
\[ RD = \frac{a}{a + b} - \frac{c}{c + d} \]
Perhitungan dengan R :
# Risk Difference
cedera_malam <- 69
total_malam <- 352
risk_malam <- cedera_malam / total_malam
cedera_siang <- 51
total_siang <- 100
risk_siang <- cedera_siang / total_siang
risk_difference <- risk_malam - risk_siang
cat("Risk Difference (Malam - Siang):", round(risk_difference, 4), "\n")
## Risk Difference (Malam - Siang): -0.314
Interpretasi :
RD negatif menunjukkan siang hari lebih berisiko.
Jika hasil = -0.314, maka risiko cedera berkurang 31.4% saat malam dibanding siang.
Relative Risk didefinisikan sebagai :
\[ RR = \frac{a / (a + b)}{c / (c + d)} \]
Perhitungan dengan R :
# Relative Risk
relative_risk <- risk_malam / risk_siang
cat("Relative Risk (Malam vs Siang):", round(relative_risk, 4), "\n")
## Relative Risk (Malam vs Siang): 0.3844
Interpretasi :
RR < 1 menunjukkan risiko lebih tinggi di siang hari.
Jika RR = 0.3843, maka risiko cedera malam hari hanya 38.4% dari siang hari.
Odds Ratio didefinisikan sebagai :
\[ OR = \frac{a \cdot d}{b \cdot c} \]
Perhitungan dengan R :
# Odds Ratio
tidak_cedera_malam <- 283
tidak_cedera_siang <- 49
odds_malam <- cedera_malam / tidak_cedera_malam
odds_siang <- cedera_siang / tidak_cedera_siang
odds_ratio <- odds_malam / odds_siang
cat("Odds Ratio (Malam vs Siang):", round(odds_ratio, 4), "\n")
## Odds Ratio (Malam vs Siang): 0.2343
Interpretasi :
OR < 1 menunjukkan peluang cedera lebih kecil di malam hari.
Jika OR = 0.2378, maka peluang cedera sekitar 76% lebih rendah saat malam dibanding siang.
Tabel kontingensi tiga arah digunakan untuk mengevaluasi hubungan antara dua variabel kategorik, misalnya adalah hubungan antara jenis kendaraan (X) dan risiko cedera saat kecelakaan (Y) dengan variabel waktu berkendara (Z).. Dalam analisis ini, dibuat beberapa tabel 2×2 untuk setiap kategori variabel ketiga serta satu tabel gabungan (marginal) yang mengabaikan variabel tersebut.
Jika nilai odds ratio dari setiap tabel parsial relatif stabil, maka kita dapat menghitung odds ratio gabungan menggunakan metode Mantel-Haenszel.
Independensi bersyarat berarti bahwa dua variabel (misalnya X dan Y) tidak saling berhubungan pada setiap level dari variabel ketiga (Z). Dengan kata lain, X dan Y dikatakan independen secara bersyarat terhadap Z jika odds ratio di masing-masing strata Z bernilai 1.
Untuk menguji apakah X dan Y benar-benar independen bersyarat terhadap Z, digunakan uji statistik Cochran-Mantel-Haenszel (CMH). Uji ini berguna untuk melihat hubungan antara dua variabel kategori sambil memperhitungkan potensi variabel perancu (confounder).
\[ CMH = \frac{\sum_k \left( n_{1ik} - \mu_{1ik} \right)^2}{\sum_k \text{var}(n_{1ik})} \]
\[ \mu_{1ik} = E(n_{1ik}) = \frac{n_{1.k} \cdot n_{1ik}}{n_{.k}} \]
Varians dari \(n_{1ik}\) diberikan oleh :
\[ \text{var}(n_{1ik}) = \frac{n_{1.k} \cdot n_{2.k} \cdot n_{1ik} \cdot n_{2.k}}{n_{2.k}^2 \cdot (n_{.k} - 1)} \]
Tabel berikut menunjukkan data mengenai peristiwa cedera pada kecelakaan lalu lintas berdasarkan jenis kendaraan dan waktu berkendara.
Waktu Berkendara | Jenis Kendaraan | Cedera | Tidak Cedera |
---|---|---|---|
Malam | Motor | 43 | 134 |
Malam | Mobil | 26 | 149 |
Siang | Motor | 29 | 23 |
Siang | Mobil | 22 | 26 |
Perhitungan Manual :
Rumus nilai harapan \(\mu_{1ik}\) untuk setiap strata \(k\):
\[ \mu_{1ik} = \frac{(n_{i+k} \times n_{+ik})}{n_{++k}} \]
Untuk Malam (k=1) :
\[ \mu_{111} = \frac{(177 \times 69)}{352} = 34.696 \]
Untuk Siang (k=2) :
\[ \mu_{112} = \frac{(52 \times 51)}{110} = 24,109 \]
Rumus varians:
\[ \text{Var}(n_{1ik}) = \frac{n_{i+k} \times n_{0+k} \times n_{+ik} \times n_{+0k}}{n_{++k}^2 \times (n_{++k} - 1)} \]
Untuk Malam (k=1) :
\[ \text{Var}(n_{111}) = \frac{(177 \times 134 \times 43 \times 149)}{352^2 \times (352 - 1)} = 13.91 \]
Untuk Siang (k=2) :
\[ \text{Var}(n_{112}) = \frac{(175 \times 149 \times 26 \times 134)}{350^2 \times (350 - 1)} = 9.91 \]
Rumus statistik CMH:
\[ X^2_{CMH} = \frac{\sum_k (n_{1ik} - \mu_{1ik})^2}{\sum_k \text{Var}(n_{1ik})} \]
\[ X^2_{CMH} = \frac{((43 - 34.696) + (29 - 24.109))^2}{13.91 + 9.91} = 7.309 \]
Intepretasi : Dengan taraf signifikansi 5%, maka kita memiliki nilai kritis sebesar 3.841. Dikarenakan 7.309 > 3.841 maka hipotesis nol ditolak yang berarti terdapat hubungan signifikan antara jenis kendaraan terhadap risiko cedera setelah mengontrol waktu berkendara.
Perhitungan dengan R :
#Membuat data
data_cmh <- array(
c(43, 26, 134, 149, # Malam
29, 22, 23, 36), # Siang
dim = c(2, 2, 2),
dimnames = list(
"Jenis Kendaraan" = c("Motor", "Mobil"),
"Risiko Cedera" = c("Cedera", "Tidak Cedera"),
"Waktu Berkendara" = c("Malam", "Siang")
)
)
# Menampilkan tabel
print(data_cmh)
## , , Waktu Berkendara = Malam
##
## Risiko Cedera
## Jenis Kendaraan Cedera Tidak Cedera
## Motor 43 134
## Mobil 26 149
##
## , , Waktu Berkendara = Siang
##
## Risiko Cedera
## Jenis Kendaraan Cedera Tidak Cedera
## Motor 29 23
## Mobil 22 36
cmh_base <- mantelhaen.test(data_cmh, correct = FALSE)
cmh_base
##
## Mantel-Haenszel chi-squared test without continuity correction
##
## data: data_cmh
## Mantel-Haenszel X-squared = 8.3751, df = 1, p-value = 0.003804
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.229343 2.967939
## sample estimates:
## common odds ratio
## 1.910135
Intepretasi : Dikarenakan p value 0.003804 < 0.05 maka keputusannya adalah menolak H0 yang berarti terdapat hubungan signifikan antara jenis kelamin terhadap perlakuan intercourse setelah mengontrol variabel ras.
Generalized Linear Model (GLM) adalah kerangka statistik yang memperluas regresi linier untuk menangani berbagai jenis distribusi respons, termasuk data kategorik seperti biner atau multikategori. GLM terdiri dari tiga komponen utama: distribusi respons dari keluarga eksponensial, fungsi link yang menghubungkan mean respons dengan prediktor linier, dan prediktor linier itu sendiri. Bagian ini menjelaskan secara mendetail keluarga eksponensial (dengan distribusi-distribusinya), model regresi logistik, dan model regresi Poisson, yang semuanya relevan untuk analisis data kategorik.
Keluarga eksponensial adalah kelompok distribusi probabilitas yang memiliki bentuk fungsi densitas atau massa probabilitas yang seragam, memungkinkan fleksibilitas dalam pemodelan data kategorik dan lainnya. Distribusi dalam keluarga ini mencakup Bernoulli, Binomial, Multinomial, Poisson, dan Normal, yang masing-masing memiliki parameter spesifik untuk memodelkan mean dan varians respons. Bentuk umum fungsi densitas (atau massa) untuk keluarga eksponensial adalah:
\[ f(y; \theta, \phi) = \exp\left[\frac{y\theta - b(\theta)}{a(\phi)} + c(y, \phi)\right] \]
di mana:
\(y\): Variabel respons. \(\theta\): Parameter alami (natural parameter). \(\phi\): Parameter dispersi (dispersion parameter). \(b(\theta)\): Fungsi yang menentukan mean dan varians. \(a(\phi)\): Fungsi skala, sering konstan atau bergantung pada \(\phi\). \(c(y, \phi)\): Fungsi normalisasi.
Mean dan varians respons diberikan oleh:
Mean: \(E(Y) = \mu = b'(\theta)\). Varians: \(\text{Var}(Y) = b''(\theta) a(\phi)\).
Berikut adalah distribusi-distribusi utama dalam keluarga eksponensial yang relevan untuk data kategorik:
Distribusi Bernoulli memodelkan data biner dengan dua hasil (sukses = 1, gagal = 0) dalam satu percobaan. Ini adalah kasus dasar untuk data kategorik biner, seperti respons ya/tidak.
Fungsi massa probabilitasnya adalah: \[ P(Y = y) = \pi^y (1-\pi)^{1-y}, \quad y = 0, 1 \]
Dalam bentuk eksponensial: \[ f(y; \pi) = \exp\left[y \log\left(\frac{\pi}{1-\pi}\right) + \log(1-\pi)\right] \]
di mana:
\(\theta = \log\left(\frac{\pi}{1-\pi}\right)\) (logit dari probabilitas sukses). \(b(\theta) = \log(1 + e^\theta)\). \(a(\phi) = 1\) (tidak ada parameter dispersi). \(c(y, \phi) = 0\).
Parameter, Mean, dan Varians:
Parameter: \(\pi\) (probabilitas sukses, \(0 \leq \pi \leq 1\)).
Mean: \(E(Y) = \pi\).
Varians: \(\text{Var}(Y) = \pi(1-\pi)\).
Distribusi Bernoulli digunakan dalam regresi logistik untuk memodelkan probabilitas kejadian biner, seperti apakah pasien sembuh atau tidak setelah pengobatan.
Distribusi Binomial memodelkan jumlah keberhasilan dalam \(n\) percobaan independen, masing-masing dengan probabilitas sukses \(\pi\). Ini cocok untuk data kategorik biner yang diulang.
Fungsi massa probabilitasnya adalah:
\[ P(Y = y) = \binom{n}{y} \pi^y (1-\pi)^{n-y}, \quad y = 0, 1, \ldots, n \] Dalam bentuk eksponensial untuk \(Y/n\) (proporsi sukses):
\[ f(y; \pi, n) = \exp\left[y \log\left(\frac{\pi}{1-\pi}\right) + n \log(1-\pi) + \log\binom{n}{y}\right] \]
di mana:
\(\theta = \log\left(\frac{\pi}{1-\pi}\right)\). \(b(\theta) = n \log(1 + e^\theta)\). \(a(\phi) = 1\). \(c(y, \phi) = \log\binom{n}{y}\).
Parameter, Mean, dan Varians:
Parameter: \(n\) (jumlah percobaan), \(\pi\) (probabilitas sukses).
Mean: \(E(Y) = n\pi\).
Varians: \(\text{Var}(Y) = n\pi(1-\pi)\).
Distribusi Binomial digunakan untuk menganalisis frekuensi keberhasilan dalam percobaan berulang, seperti jumlah pasien yang sembuh dari \(n\) pasien dalam uji klinis.
Distribusi Multinomial memodelkan pembagian \(n\) observasi independen ke dalam \(k\) kategori, masing-masing dengan probabilitas \(\pi_i\). Ini cocok untuk data kategorik multikategori, seperti preferensi konsumen.
Fungsi massa probabilitasnya adalah: \[ P(n_1, n_2, \ldots, n_k) = \frac{n!}{n_1! n_2! \cdots n_k!} \pi_1^{n_1} \pi_2^{n_2} \cdots \pi_k^{n_k} \]
di mana \(\sum n_i = n\) dan \(\sum \pi_i = 1\). Dalam bentuk eksponensial: \[ f(n_1, \ldots, n_k; \pi_1, \ldots, \pi_k) = \exp\left[\sum_{i=1}^{k-1} n_i \log\left(\frac{\pi_i}{\pi_k}\right) + \log\left(\frac{n!}{n_1! \cdots n_k!}\right)\right] \]
di mana:
\(\theta_i = \log\left(\frac{\pi_i}{\pi_k}\right)\) untuk kategori \(i = 1, \ldots, k-1\). \(b(\theta) = n \log\left(1 + \sum_{i=1}^{k-1} e^{\theta_i}\right)\). \(a(\phi) = 1\). \(c(n_1, \ldots, n_k) = \log\left(\frac{n!}{n_1! \cdots n_k!}\right)\).
Parameter, Mean, dan Varians:
Parameter: \(n\) (jumlah observasi), \(\pi_1, \ldots, \pi_k\) (probabilitas kategori).
Mean: \(E(n_i) = n \pi_i\).
Varians: \(\text{Var}(n_i) = n \pi_i (1 - \pi_i)\).
Kovarians: \(\text{Cov}(n_i, n_j) = -n \pi_i \pi_j\) untuk \(i \neq j\).
Distribusi Multinomial digunakan dalam regresi logistik multinomial untuk memodelkan pilihan konsumen atau klasifikasi ke dalam beberapa kategori, seperti tingkat kepuasan.
Distribusi Poisson memodelkan jumlah kejadian acak dalam interval waktu atau ruang tertentu, cocok untuk data kategorik berupa frekuensi atau hitungan dalam kategori.
Fungsi massa probabilitasnya adalah: \[P(Y = y) = \frac{e^{-\lambda} \lambda^y}{y!}, \quad y = 0, 1, 2, \ldots\] Dalam bentuk eksponensial: \[f(y; \lambda) = \exp\left[y \log(\lambda) - \lambda - \log(y!)\right]\] di mana:
\(\theta = \log(\lambda)\). \(b(\theta) = e^\theta\). \(a(\phi) = 1\). \(c(y) = -\log(y!)\).
Parameter, Mean, dan Varians:
Parameter: \(\lambda\) (rata-rata kejadian, \(\lambda > 0\)).
Mean: \(E(Y) = \lambda\).
Varians: \(\text{Var}(Y) = \lambda\).
Distribusi Poisson digunakan dalam regresi Poisson untuk memodelkan frekuensi kejadian, seperti jumlah kasus penyakit dalam kelompok tertentu.
Regresi logistik adalah model GLM yang digunakan untuk memodelkan variabel respons kategorik, terutama biner (sukses/gagal) atau multikategori, dengan menghubungkan probabilitas hasil ke prediktor melalui fungsi logit. Model ini cocok untuk data kategorik karena mengasumsikan respons mengikuti distribusi Bernoulli (untuk biner) atau Multinomial (untuk multikategori).
Untuk respons biner \(Y_i \in {0, 1}\) pada observasi ke-\(i\), regresi logistik memodelkan probabilitas sukses \(\pi_i = P(Y_i = 1)\) sebagai:
\[ \log\left(\frac{\pi_i}{1-\pi_i}\right) = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \cdots + \beta_p x_{ip} \] di mana:
\(\pi_i\): Probabilitas sukses untuk observasi ke-\(i\). \(\beta_0\): Intersep. \(\beta_j\): Koefisien untuk prediktor \(x_{ij}\) (\(j = 1, \ldots, p\)). \(x_{ij}\): Nilai prediktor ke-\(j\) untuk observasi ke-\(i\).
Fungsi link logit menghubungkan mean respons \(\mu_i = \pi_i\) ke prediktor linier \(\eta_i = \beta_0 + \sum \beta_j x_{ij}\), dan probabilitas dihitung sebagai:
\[ \pi_i = \frac{\exp(\eta_i)}{1 + \exp(\eta_i)} \] Untuk data multikategori dengan \(k\) kategori, regresi logistik multinomial memodelkan probabilitas kategori \(j\) relatif terhadap kategori referensi \(k\):
\[ \log\left(\frac{P(Y_i = j)}{P(Y_i = k)}\right) = \beta_{j0} + \beta_{j1} x_{i1} + \cdots + \beta_{jp} x_{ip}, \quad j = 1, \ldots, k-1 \] Probabilitas masing-masing kategori adalah:
\[ P(Y_i = j) = \frac{\exp(\beta_{j0} + \sum \beta_{jj} x_{ij})}{1 + \sum_{m=1}^{k-1} \exp(\beta_{m0} + \sum \beta_{mj} x_{ij})} \] Untuk data ordinal, model odds proporsional digunakan:
\[ \log\left(\frac{P(Y_i \leq j)}{P(Y_i > j)}\right) = \alpha_j + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \] di mana \(\alpha_j\) adalah ambang batas untuk kategori \(j\).
Regresi logistik digunakan untuk memprediksi probabilitas kejadian biner, seperti risiko penyakit berdasarkan faktor usia dan kebiasaan merokok, atau untuk mengklasifikasikan respons multikategori, seperti preferensi konsumen. Keunggulannya adalah kemampuan menangani prediktor campuran dan interpretasi koefisien sebagai log-odds.
Regresi Poisson adalah model GLM yang digunakan untuk memodelkan variabel respons berupa hitungan atau frekuensi kejadian, yang diasumsikan mengikuti distribusi Poisson. Model ini cocok untuk data kategorik berupa jumlah kejadian dalam kategori, seperti jumlah kasus penyakit per wilayah.
Untuk respons \(Y_i\) (jumlah kejadian pada observasi ke-\(i\)), regresi Poisson memodelkan rata-rata kejadian \(\lambda_i = E(Y_i)\) dengan fungsi link log:
\[ \log(\lambda_i) = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \cdots + \beta_p x_{ip} \] di mana:
\(\lambda_i\): Rata-rata kejadian untuk observasi ke-\(i\). \(\beta_0\): Intersep. \(\beta_j\): Koefisien untuk prediktor \(x_{ij}\). \(x_{ij}\): Nilai prediktor ke-\(j\) untuk observasi ke-\(i\).
Fungsi link log memastikan \(\lambda_i > 0\), dan probabilitas distribusi Poisson adalah:
\[ P(Y_i = y_i) = \frac{e^{-\lambda_i} \lambda_i^{y_i}}{y_i!}, \quad y_i = 0, 1, 2, \ldots \]
Koefisien \(\beta_j\) diinterpretasikan sebagai perubahan log-rata-rata kejadian per unit perubahan prediktor \(x_j\), sehingga \(\exp(\beta_j)\) adalah rasio rata-rata kejadian.
Regresi Poisson digunakan untuk menganalisis frekuensi kejadian, seperti jumlah kecelakaan lalu lintas per wilayah berdasarkan faktor seperti kepadatan populasi, atau jumlah kasus penyakit berdasarkan faktor risiko. Keunggulannya adalah kemampuan menangani data hitungan dan interpretasi yang intuitif, tetapi model ini sensitif terhadap overdispersi (varians lebih besar dari mean).
Generalized Linear Model menyediakan kerangka fleksibel untuk analisis data kategorik melalui keluarga eksponensial, yang mencakup distribusi Bernoulli, Binomial, Multinomial, dan Poisson. Regresi logistik memodelkan probabilitas respons biner atau multikategori dengan fungsi link logit, cocok untuk klasifikasi dan prediksi. Regresi Poisson memodelkan frekuensi kejadian dengan fungsi link log, ideal untuk data hitungan. Pemilihan model tergantung pada jenis respons dan struktur data, memastikan analisis yang akurat dan relevan.
Generalized Linear Model (GLM) adalah kerangka statistik untuk menganalisis data kategorik, seperti data biner atau hitungan, dengan menghubungkan mean respons ke prediktor melalui fungsi link. Inferensi pada GLM melibatkan estimasi parameter, evaluasi ekspektasi dan varians, serta diagnostik model untuk memastikan kesesuaian dengan data. Bagian ini menjelaskan lima aspek inferensi pada GLM: menduga ekspektasi dan varians, menaksir parameter, diagnostik model, serta metode estimasi dan inferensi untuk regresi logistik dan regresi Poisson. Semua perhitungan dilakukan secara manual dan dengan sintaks R tanpa package statistik, menggunakan data kecelakaan lalu lintas berikut:
Waktu Berkendara | Jenis Kendaraan | Cedera | Tidak Cedera |
---|---|---|---|
Malam | Motor | 43 | 134 |
Malam | Mobil | 26 | 149 |
Siang | Motor | 29 | 23 |
Siang | Mobil | 22 | 26 |
Ekspektasi (mean) dan varians dalam GLM ditentukan oleh distribusi respons dari keluarga eksponensial dan fungsi link.
Prosedur:
Ekspektasi: Mean respons \(\mu_i = E(Y_i)\) adalah probabilitas sukses \(\pi_i\) untuk data biner (Bernoulli) atau rata-rata kejadian \(\lambda_i\) untuk hitungan (Poisson).
Fungsi Link: Menghubungkan \(\mu_i\) ke prediktor linier \(\eta_i = \beta_0 + \sum \beta_j x_{ij}\), misalnya, logit untuk regresi logistik atau log untuk regresi Poisson.
Varians: Untuk Bernoulli, \(\text{Var}(Y_i) = \pi_i (1-\pi_i)\). Untuk Poisson, \(\text{Var}(Y_i) = \lambda_i\).
Perhitungan Manual: Untuk data kecelakaan, respons adalah cedera (1 = cedera, 0 = tidak cedera), mengikuti distribusi Bernoulli. Ekspektasi dan varians dihitung untuk setiap kelompok:
Total: \(43 + 134 = 177\) \(\pi_1 = 43 / 177 \approx 0,24294\) Varians: \(\pi_1 (1 - \pi_1) = 0,24294 \times (1 - 0,24294) \approx 0,18397\)
Total: \(26 + 149 = 175\) \(\pi_2 = 26 / 175 \approx 0,14857\) Varians: \(0,14857 \times (1 - 0,14857) \approx 0,12649\)
Total: \(29 + 23 = 52\) \(\pi_3 = 29 / 52 \approx 0,55769\) Varians: \(0,55769 \times (1 - 0,55769) \approx 0,24678\)
Total: \(22 + 26 = 48\) \(\pi_4 = 22 / 48 \approx 0,45833\) Varians: \(0,45833 \times (1 - 0,45833) \approx 0,24826\)
Untuk regresi Poisson, jumlah cedera per kelompok adalah \(\lambda_i\), misalnya, \(\lambda_1 = 43\) untuk malam-motor, dengan varians \(\text{Var}(Y_1) = 43\).
Sintaks R Manual:
# Data
data <- list(
list(waktu="Malam", kendaraan="Motor", cedera=43, tidak_cedera=134),
list(waktu="Malam", kendaraan="Mobil", cedera=26, tidak_cedera=149),
list(waktu="Siang", kendaraan="Motor", cedera=29, tidak_cedera=23),
list(waktu="Siang", kendaraan="Mobil", cedera=22, tidak_cedera=26)
)
# Menghitung ekspektasi dan varians
for (d in data) {
total <- d$cedera + d$tidak_cedera
pi <- d$cedera / total
var <- pi * (1 - pi)
cat(sprintf("%s, %s: pi = %.5f, var = %.5f\n", d$waktu, d$kendaraan, pi, var))
}
## Malam, Motor: pi = 0.24294, var = 0.18392
## Malam, Mobil: pi = 0.14857, var = 0.12650
## Siang, Motor: pi = 0.55769, var = 0.24667
## Siang, Mobil: pi = 0.45833, var = 0.24826
# Pengambilan keputusan
for (d in data) {
pi <- d$cedera / (d$cedera + d$tidak_cedera)
if (pi > 0.5) {
cat(sprintf("%s, %s: Probabilitas cedera tinggi (%.3f), perhatikan keselamatan.\n", d$waktu, d$kendaraan, pi))
} else {
cat(sprintf("%s, %s: Probabilitas cedera rendah (%.3f), relatif aman.\n", d$waktu, d$kendaraan, pi))
}
}
## Malam, Motor: Probabilitas cedera rendah (0.243), relatif aman.
## Malam, Mobil: Probabilitas cedera rendah (0.149), relatif aman.
## Siang, Motor: Probabilitas cedera tinggi (0.558), perhatikan keselamatan.
## Siang, Mobil: Probabilitas cedera rendah (0.458), relatif aman.
Parameter GLM, yaitu koefisien \(\beta\), diestimasi menggunakan maximum likelihood estimation (MLE) dengan memaksimalkan log-likelihood.
**Prosedur:*
Likelihood: Produk probabilitas observasi berdasarkan distribusi respons.
Log-Likelihood: Logaritma dari likelihood untuk mempermudah optimasi.
Optimasi: Menggunakan iterasi seperti Newton-Raphson untuk menemukan \(\hat{\beta}\).
Standar Error: Diperoleh dari invers matriks Hessian log-likelihood.
Perhitungan Manual (Regresi Logistik) Untuk regresi logistik, modelnya adalah:
\[ \log\left(\frac{\pi_i}{1-\pi_i}\right) = \beta_0 + \beta_1 \text{Waktu}{\text{Siang}} + \beta_2 \text{Kendaraan}{\text{Mobil}} \]
Data diubah ke format observasi individu:
Malam, Motor: 43 cedera (1), 134 tidak cedera (0). Malam, Mobil: 26 cedera (1), 149 tidak cedera (0). Siang, Motor: 29 cedera (1), 23 tidak cedera (0). Siang, Mobil: 22 cedera (1), 26 tidak cedera (0).
Total observasi: \(177 + 175 + 52 + 48 = 452\). Log-likelihood adalah:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (1-y_i) \log(1-\pi_i) \right] \]
dengan \(\pi_i = \exp(\eta_i) / (1 + \exp(\eta_i))\), dan \(\eta_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2}\), di mana \(x_{i1} = 1\) untuk siang, 0 untuk malam; \(x_{i2} = 1\) untuk mobil, 0 untuk motor.
Inisialisasi \(\beta_0 = -1, \beta_1 = 1, \beta_2 = -0,5\). Iterasi manual:
Hitung \(\eta_i\) dan \(\pi_i\).
Hitung gradien: \(\partial \ell / \partial \beta_j = \sum (y_i - \pi_i) x_{ij}\).
Perbarui \(\beta_j \leftarrow \beta_j + \alpha \cdot \text{gradien}\), dengan \(\alpha = 0,01\).
Setelah iterasi, misalkan konvergensi ke \(\hat{\beta}_0 \approx -0,876\), \(\hat{\beta}_1 \approx 1,234\), \(\hat{\beta}_2 \approx -0,623\).
Sintaks R Manual:
# Data individu
data_indiv <- c()
for (d in data) {
for (i in 1:d$cedera) {
data_indiv <- rbind(data_indiv, c(ifelse(d$waktu == "Siang", 1, 0), ifelse(d$kendaraan == "Mobil", 1, 0), 1))
}
for (i in 1:d$tidak_cedera) {
data_indiv <- rbind(data_indiv, c(ifelse(d$waktu == "Siang", 1, 0), ifelse(d$kendaraan == "Mobil", 1, 0), 0))
}
}
colnames(data_indiv) <- c("x1", "x2", "y")
# Fungsi sigmoid
sigmoid <- function(x) {
1 / (1 + exp(-x))
}
# Log-likelihood
log_likelihood <- function(beta, data) {
ll <- 0
for (i in 1:nrow(data)) {
eta <- beta[1] + beta[2] * data[i, "x1"] + beta[3] * data[i, "x2"]
pi <- sigmoid(eta)
ll <- ll + data[i, "y"] * log(pi + 1e-10) + (1 - data[i, "y"]) * log(1 - pi + 1e-10)
}
return(ll)
}
# Gradien
gradient <- function(beta, data) {
grad <- c(0, 0, 0)
for (i in 1:nrow(data)) {
eta <- beta[1] + beta[2] * data[i, "x1"] + beta[3] * data[i, "x2"]
pi <- sigmoid(eta)
error <- data[i, "y"] - pi
grad[1] <- grad[1] + error
grad[2] <- grad[2] + error * data[i, "x1"]
grad[3] <- grad[3] + error * data[i, "x2"]
}
return(grad)
}
# Iterasi MLE
beta <- c(-1, 1, -0.5)
learning_rate <- 0.01
for (i in 1:100) {
grad <- gradient(beta, data_indiv)
beta <- beta + learning_rate * grad
}
# Pengambilan keputusan
for (i in 2:3) {
odds_ratio <- exp(beta[i])
if (odds_ratio > 1) {
cat(sprintf("Beta%d: Odds ratio = %.3f, meningkatkan risiko cedera.\n", i-1, odds_ratio))
} else {
cat(sprintf("Beta%d: Odds ratio = %.3f, menurunkan risiko cedera.\n", i-1, odds_ratio))
}
}
## Beta1: Odds ratio = 4.327, meningkatkan risiko cedera.
## Beta2: Odds ratio = 0.581, menurunkan risiko cedera.
Diagnostik memastikan model GLM sesuai dengan data dan tidak melanggar asumsi.
Prosedur:
Residual Deviance: Mengukur kesesuaian model; nilai besar menunjukkan ketidaksesuaian.
Pearson Residual: \((y_i - \hat{\mu}_i) / \sqrt{\text{Var}(\hat{\mu}_i)}\) untuk mengidentifikasi observasi yang tidak sesuai.
Goodness-of-Fit: Uji seperti Hosmer-Lemeshow untuk regresi logistik.
Overdispersi: Untuk Poisson, memeriksa apakah varians sesuai dengan mean.
Untuk regresi logistik, Pearson residual dihitung per kelompok:
Malam, Motor: \(\hat{\pi}_1 = \exp(-0,876) / (1 + \exp(-0,876)) \approx 0,294\).
Residual: \((43/177 - 0,294) / \sqrt{0,294 \times 0,706 / 177} \approx -0,856\).
Malam, Mobil: \(\hat{\pi}_2 \approx 0,149\). Residual: \((26/175 - 0,149) / \sqrt{0,149 \times 0,851 / 175} \approx -0,027\).
Siang, Motor: \(\hat{\pi}_3 \approx 0,557\). Residual: \((29/52 - 0,557) / \sqrt{0,557 \times 0,443 / 52} \approx 0,032\).
Siang, Mobil: \(\hat{\pi}_4 \approx 0,294\). Residual: \((22/48 - 0,294) / \sqrt{0,294 \times 0,706 / 48} \approx 2,268\).
Sintaks R Manual:
# Pearson residual
for (d in data) {
x1 <- ifelse(d$waktu == "Siang", 1, 0)
x2 <- ifelse(d$kendaraan == "Mobil", 1, 0)
eta <- beta[1] + beta[2] * x1 + beta[3] * x2
pi <- sigmoid(eta)
total <- d$cedera + d$tidak_cedera
observed <- d$cedera / total
residual <- (observed - pi) / sqrt(pi * (1 - pi) / total)
if (abs(residual) > 2) {
cat(sprintf("%s, %s: Residual besar (%.3f), model mungkin tidak fit.\n", d$waktu, d$kendaraan, residual))
} else {
cat(sprintf("%s, %s: Residual kecil (%.3f), model cukup fit.\n", d$waktu, d$kendaraan, residual))
}
}
## Malam, Motor: Residual kecil (0.156), model cukup fit.
## Malam, Mobil: Residual kecil (-0.185), model cukup fit.
## Siang, Motor: Residual kecil (-0.248), model cukup fit.
## Siang, Mobil: Residual kecil (0.257), model cukup fit.
Estimasi: Regresi logistik memodelkan probabilitas cedera menggunakan distribusi Bernoulli dan fungsi link logit. MLE memaksimalkan log-likelihood dengan iterasi.
Inferensi:
Uji Wald: Statistik \(z = \hat{\beta}_j / \text{SE}(\hat{\beta}_j)\) untuk menguji signifikansi.
Odds Ratio: \(\exp(\hat{\beta}_j)\) menunjukkan perubahan odds per unit prediktor.
Likelihood Ratio Test: Membandingkan model penuh dan tereduksi.
Perhitungan Manual:
Odds Ratio: Untuk \(\hat{\beta}_1 \approx 1,234\), \(\exp(1,234) \approx 3,435\), berarti odds cedera di siang hari 3,435 kali lebih tinggi dibandingkan malam.
Standar Error: Diperoleh dari akar invers diagonal matriks Hessian, misalkan \(\text{SE}(\hat{\beta}_1) \approx 0,3\).
Uji Wald: \(z = 1,234 / 0,3 \approx 4,113\), signifikan (p-value < 0,05).
Sintaks R Manual:
# Odds ratio dan uji Wald
se <- c(0.3, 0.3, 0.3) # Asumsi standar error
for (i in 1:3) {
odds_ratio <- exp(beta[i])
z <- beta[i] / se[i]
p_value <- 2 * (1 - pnorm(abs(z)))
if (p_value < 0.05) {
cat(sprintf("Beta%d: Odds ratio = %.3f, signifikan (p = %.3f).\n", i-1, odds_ratio, p_value))
} else {
cat(sprintf("Beta%d: Odds ratio = %.3f, tidak signifikan (p = %.3f).\n", i-1, odds_ratio, p_value))
}
}
## Beta0: Odds ratio = 0.312, signifikan (p = 0.000).
## Beta1: Odds ratio = 4.327, signifikan (p = 0.000).
## Beta2: Odds ratio = 0.581, tidak signifikan (p = 0.071).
Estimasi: Regresi Poisson memodelkan jumlah cedera menggunakan distribusi Poisson dan fungsi link log. MLE memaksimalkan log-likelihood.
Inferensi:
Uji Wald: Menguji signifikansi koefisien.
Rate Ratio: \(\exp(\hat{\beta}_j)\) menunjukkan perubahan rata-rata kejadian.
Likelihood Ratio Test: Mengevaluasi signifikansi prediktor.
Untuk regresi Poisson, modelnya adalah:
\[ \log(\lambda_i) = \beta_0 + \beta_1 \text{Waktu}{\text{Siang}} + \beta_2 \text{Kendaraan}{\text{Mobil}} \]
Log-likelihood Poisson:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\lambda_i) - \lambda_i - \log(y_i!) \right] \]
dengan \(\lambda_i = \exp(\eta_i)\). Inisialisasi \(\beta_0 = 3,5\), \(\beta_1 = 0\), \(\beta_2 = 0\). Setelah iterasi, misalkan \(\hat{\beta}_0 \approx 3,76\), \(\hat{\beta}_1 \approx 0,21\), \(\hat{\beta}_2 \approx -0,43\).
Rate Ratio: \(\exp(0,21) \approx 1,234\), berarti rata-rata cedera di siang hari 1,234 kali lebih tinggi.
Uji Wald: Dengan \(\text{SE}(\hat{\beta}_1) \approx 0,15\), \(z = 0,21 / 0,15 \approx 1,4\).
Sintaks R Manual
# Regresi Poisson
poisson_log_likelihood <- function(beta, data) {
ll <- 0
for (d in data) {
x1 <- ifelse(d$waktu == "Siang", 1, 0)
x2 <- ifelse(d$kendaraan == "Mobil", 1, 0)
lambda <- exp(beta[1] + beta[2] * x1 + beta[3] * x2)
y <- d$cedera
ll <- ll + y * log(lambda + 1e-10) - lambda
}
return(ll)
}
poisson_gradient <- function(beta, data) {
grad <- c(0, 0, 0)
for (d in data) {
x1 <- ifelse(d$waktu == "Siang", 1, 0)
x2 <- ifelse(d$kendaraan == "Mobil", 1, 0)
lambda <- exp(beta[1] + beta[2] * x1 + beta[3] * x2)
y <- d$cedera
error <- y - lambda
grad[1] <- grad[1] + error
grad[2] <- grad[2] + error * x1
grad[3] <- grad[3] + error * x2
}
return(grad)
}
# Iterasi MLE
beta_poisson <- c(3.5, 0, 0)
learning_rate <- 0.01
for (i in 1:100) {
grad <- poisson_gradient(beta_poisson, data)
beta_poisson <- beta_poisson + learning_rate * grad
}
# Pengambilan keputusan
for (i in 2:3) {
rate_ratio <- exp(beta_poisson[i])
if (rate_ratio > 1) {
cat(sprintf("Beta%d: Rate ratio = %.3f, meningkatkan jumlah cedera.\n", i-1, rate_ratio))
} else {
cat(sprintf("Beta%d: Rate ratio = %.3f, menurunkan jumlah cedera.\n", i-1, rate_ratio))
}
}
## Beta1: Rate ratio = 0.739, menurunkan jumlah cedera.
## Beta2: Rate ratio = 0.667, menurunkan jumlah cedera.
Inferensi pada GLM melibatkan estimasi ekspektasi dan varians berdasarkan distribusi respons, penaksiran parameter dengan MLE, diagnostik model untuk memastikan kesesuaian, serta metode estimasi dan inferensi spesifik untuk regresi logistik dan Poisson. Dalam kasus kecelakaan lalu lintas, regresi logistik memodelkan probabilitas cedera dengan distribusi Bernoulli, sedangkan regresi Poisson memodelkan jumlah cedera dengan distribusi Poisson. Perhitungan manual dan sintaks R tanpa package, dengan struktur if-else untuk interpretasi, memungkinkan pengambilan keputusan yang jelas berdasarkan odds ratio untuk logistik dan rate ratio untuk Poisson.
Regresi logistik adalah salah satu teknik statistik yang digunakan untuk menganalisis hubungan antara sebuah variabel respons biner (yang memiliki dua kategori) dengan satu atau lebih variabel prediktor. Dalam penggunaannya, variabel-variabel prediktor bisa memiliki berbagai jenis skala pengukuran, yaitu :
Skala Nominal : Variabel yang tidak memiliki urutan atau tingkatan antara kategorinya, hanya berfungsi sebagai pembeda. Contohnya adalah jenis kelamin (laki-laki, perempuan). Dalam regresi logistik, variabel ini biasanya dikodekan dalam bentuk dummy, seperti Female = 1 dan Male = 0.
Skala Ordinal: Variabel yang menunjukkan adanya urutan antar kategori, tetapi tidak menjamin kesamaan jarak antar kategori tersebut. Contoh: jenjang pendidikan (SMA, Sarjana, Magister, Doktor). Dalam analisis regresi logistik, variabel ordinal dapat:
Diolah seperti data nominal dengan membuat variabel dummy untuk tiap kategori
Dianggap seperti variabel rasio dengan memberikan skor tertentu (misalnya SMA = 1, Sarjana = 2, Magister = 3, Doktor = 4) untuk merepresentasikan tingkatan dan jarak antar kategori.
Skala Rasio: Variabel ini berbentuk numerik kontinu dengan titik nol absolut dan perbandingan yang bermakna. Misalnya, pendapatan bulanan dalam juta rupiah. Data seperti ini bisa langsung dimasukkan ke dalam model tanpa perlu transformasi khusus.
Dataset yang digunakan adalah dataset Diabetes
dengan 300 observasi. Variabel respon Diabetes Outcome
merupakan variabel biner (0 = tidak, 1 = ya). Variabel prediktor terdiri
dari:
Sex
Social Class
Blood Pressure
,
Glucose
, Age
Dataset ini telah dibersihkan dan tidak mengandung nilai kosong.
Eksplorasi awal dilakukan dengan melihat struktur data dan ringkasan statistik:
Diabetes <- data.frame(
Age = c(27, 47, 37, 43, 28, 39, 35, 34, 47, 48, 64, 35, 45, 60, 51, 38, 27, 26, 53, 54, 45, 52, 60, 58, 47, 54, 48, 47, 38, 59, 44, 42, 61, 40, 22, 33, 51, 25, 65, 50, 54, 74, 47, 61, 60, 51, 58, 44, 62, 60),
Sex = factor(c("F", "F", "M", "M", "M", "F", "F", "M", "F", "F", "F", "M", "M", "F", "F", "F", "F", "F", "M", "M", "M", "F", "M", "F", "M", "M", "F", "F", "M", "M", "M", "M", "M", "M", "F", "M", "M", "F", "M", "M", "M", "F", "M", "F", "M", "F", "M", "M", "F", "M")),
SocialClass = factor(c("MID", "LOW", "HIGH", "HIGH", "LOW", "LOW", "HIGH", "HIGH", "MID", "LOW", "MID", "MID", "MID", "LOW", "MID", "HIGH", "LOW", "LOW", "MID", "MID", "HIGH", "MID", "MID", "LOW", "MID", "LOW", "HIGH", "HIGH", "MID", "MID", "LOW", "LOW", "HIGH", "HIGH", "LOW", "MID", "MID", "HIGH", "LOW", "LOW", "MID", "LOW", "HIGH", "LOW", "LOW", "MID", "MID", "LOW", "MID", "HIGH")),
BloodPressure = c(70, 96, 92, 80, 70, 80, 98, 63, 78, 98, 76, 88, 85, 78, 77, 64, 89, 94, 63, 59, 91, 58, 77, 76, 87, 87, 66, 90, 90, 81, 84, 88, 60, 64, 58, 73, 92, 90, 76, 60, 57, 97, 65, 68, 78, 80, 80, 94, 66, 87),
Glucose = c(148, 85, 183, 114, 135, 110, 137, 78, 107, 133, 103, 174, 176, 92, 98, 134, 118, 112, 192, 174, 150, 164, 72, 84, 76, 173, 154, 143, 115, 165, 86, 135, 75, 128, 91, 98, 134, 110, 130, 174, 164, 98, 139, 135, 88, 70, 65, 136, 141, 166),
DiabetesOutcome = factor(c(1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1))
)
str(Diabetes)
## 'data.frame': 50 obs. of 6 variables:
## $ Age : num 27 47 37 43 28 39 35 34 47 48 ...
## $ Sex : Factor w/ 2 levels "F","M": 1 1 2 2 2 1 1 2 1 1 ...
## $ SocialClass : Factor w/ 3 levels "HIGH","LOW","MID": 3 2 1 1 2 2 1 1 3 2 ...
## $ BloodPressure : num 70 96 92 80 70 80 98 63 78 98 ...
## $ Glucose : num 148 85 183 114 135 110 137 78 107 133 ...
## $ DiabetesOutcome: Factor w/ 2 levels "0","1": 2 1 1 1 2 1 2 1 1 2 ...
summary(Diabetes)
## Age Sex SocialClass BloodPressure Glucose
## Min. :22.00 F:22 HIGH:13 Min. :57.00 Min. : 65.0
## 1st Qu.:38.25 M:28 LOW :18 1st Qu.:66.50 1st Qu.: 98.0
## Median :47.00 MID :19 Median :79.00 Median :131.5
## Mean :47.00 Mean :78.36 Mean :125.2
## 3rd Qu.:57.00 3rd Qu.:88.75 3rd Qu.:149.5
## Max. :74.00 Max. :98.00 Max. :192.0
## DiabetesOutcome
## 0:25
## 1:25
##
##
##
##
Interpretasi :
DiabetesOutcome
) menunjukkan
jumlah yang seimbang, yaitu 25 orang tidak menderita diabetes (0) dan 25
orang menderita diabetes (1).Model regresi logistik dibentuk sebagai berikut:
\[ \log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 \cdot \text{Age} + \beta_2 \cdot \text{Sex} + \beta_3 \cdot \text{SocialClass} + \beta_4 \cdot \text{BloddPressure} + \beta_5 \cdot \text{Glucose} \]
Model dapat diestimasi dengan perintah berikut :
model_log <- glm(DiabetesOutcome ~ Age + + Sex + SocialClass + BloodPressure + Glucose,
data = Diabetes, family = binomial)
summary(model_log)
##
## Call:
## glm(formula = DiabetesOutcome ~ Age + +Sex + SocialClass + BloodPressure +
## Glucose, family = binomial, data = Diabetes)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.576783 2.843592 0.203 0.8393
## Age 0.003693 0.026688 0.138 0.8900
## SexM -1.687655 0.730564 -2.310 0.0209 *
## SocialClassLOW -0.311091 0.831728 -0.374 0.7084
## SocialClassMID -0.079371 0.841407 -0.094 0.9248
## BloodPressure -0.033862 0.027108 -1.249 0.2116
## Glucose 0.023900 0.010611 2.252 0.0243 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 69.315 on 49 degrees of freedom
## Residual deviance: 57.812 on 43 degrees of freedom
## AIC: 71.812
##
## Number of Fisher Scoring iterations: 4
Interpretasi :
exp(-1.688) ≈ 0.19
kali dibandingkan perempuan.SocialClassLOW & MID (vs referensi HIGH)
LOW = -0.311 (p = 0.708)
MID = -0.079 (p = 0.925)
Kelas sosial tidak signifikan dalam model ini. Tidak ada perbedaan yang
berarti antara kelas sosial terhadap risiko diabetes.
exp(0.0239) ≈ 1.024
atau naik sekitar
2.4%.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
roc_curve <- roc(Diabetes$DiabetesOutcome, fitted(model_log))
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_curve, main = "Kurva ROC")
auc(roc_curve)
## Area under the curve: 0.7424
Nilai 0.7424 berarti bahwa model memiliki kemampuan yang cukup baik dalam membedakan antara individu yang menderita diabetes dan yang tidak.
library(ResourceSelection)
## Warning: package 'ResourceSelection' was built under R version 4.3.3
## ResourceSelection 0.3-6 2023-06-27
hoslem.test(Diabetes$DiabetesOutcome, fitted(model_log))
## Warning in Ops.factor(1, y): '-' not meaningful for factors
##
## Hosmer and Lemeshow goodness of fit (GOF) test
##
## data: Diabetes$DiabetesOutcome, fitted(model_log)
## X-squared = 50, df = 8, p-value = 4.087e-08
Hasil evaluasi menunjukkan bahwa model tidak memiliki ketepatan klasifikasi yang baik dan terdapat masalah kecocokan model berdasarkan uji Hosmer-Lemeshow (p-value < 0.05).
Dalam analisis regresi logistik, pemilihan pendekatan dalam membangun model sangat penting untuk memperoleh model yang akurat dalam memperkirakan probabilitas kejadian suatu outcome biner. Terdapat dua pendekatan utama, yaitu Confirmatory dan Exploratory.
Pendekatan ini digunakan ketika peneliti sudah memiliki dugaan atau teori sebelumnya mengenai hubungan antara variabel-variabel prediktor dan variabel respons. Fokus utamanya adalah menguji hipotesis yang sudah dirumuskan, bukan sekadar mencari model dengan performa terbaik.
Karakteristik :
Model dikembangkan berdasarkan teori ilmiah atau hasil studi terdahulu.
Tujuannya adalah mengonfirmasi apakah pengaruh suatu variabel benar-benar signifikan.
Peneliti biasanya membangun model penuh terlebih dahulu, lalu menilai apakah menambah atau menghapus variabel (termasuk interaksi) meningkatkan performa model secara signifikan.
Uji statistik seperti Likelihood Ratio Test (LRT) digunakan untuk membandingkan model yang berbeda.
Contoh :
Seorang peneliti ingin mengetahui apakah tingkat stres kerja dan durasi
tidur memengaruhi kemungkinan seseorang mengalami tekanan darah tinggi.
Berdasarkan teori kesehatan, model langsung dibangun menggunakan kedua
variabel tersebut. Selanjutnya diuji apakah variabel “durasi tidur”
secara signifikan berkontribusi dalam model.
Pendekatan ini dipakai ketika peneliti belum memiliki teori yang pasti, dan ingin menggali kemungkinan hubungan yang terdapat dalam data. Tujuan utamanya adalah menemukan model dengan kombinasi prediktor terbaik secara statistik.
Karakteristik :
Proses pemodelan bersifat bertahap dan fleksibel.
Pemilihan variabel dilakukan berdasarkan metrik statistik seperti AIC, deviance, atau log-likelihood.
Tiga teknik umum digunakan:
Forward Selection: Dimulai dari model kosong, variabel ditambahkan satu per satu.
Backward Elimination: Dimulai dari model penuh, variabel yang tidak signifikan dihapus.
Stepwise Selection: Kombinasi forward dan backward, memungkinkan variabel masuk dan keluar model secara dinamis.
Tujuan :
Mendapatkan model yang ringkas namun efektif (parsimonious) dalam
memprediksi outcome.
Contoh :
Seorang analis data memiliki dataset pelanggan dengan variabel seperti
usia, pengeluaran, frekuensi belanja, dan jenis kelamin, dan ingin
memprediksi apakah pelanggan akan berhenti berlangganan. Karena tidak
ada teori baku, ia menggunakan stepwise selection untuk menemukan
kombinasi variabel terbaik yang mampu memprediksi churn pelanggan secara
akurat.
Langkah ini menggunakan model awal regresi logistik, kemudian dilakukan seleksi otomatis dengan pendekatan dua arah (forward dan backward) :
step_model <- step(model_log, direction = "both")
## Start: AIC=71.81
## DiabetesOutcome ~ Age + +Sex + SocialClass + BloodPressure +
## Glucose
##
## Df Deviance AIC
## - SocialClass 2 57.973 67.973
## - Age 1 57.831 69.831
## - BloodPressure 1 59.431 71.431
## <none> 57.812 71.812
## - Glucose 1 63.776 75.776
## - Sex 1 63.991 75.991
##
## Step: AIC=67.97
## DiabetesOutcome ~ Age + Sex + BloodPressure + Glucose
##
## Df Deviance AIC
## - Age 1 57.985 65.985
## - BloodPressure 1 59.778 67.778
## <none> 57.973 67.973
## + SocialClass 2 57.812 71.812
## - Sex 1 63.993 71.993
## - Glucose 1 64.232 72.232
##
## Step: AIC=65.98
## DiabetesOutcome ~ Sex + BloodPressure + Glucose
##
## Df Deviance AIC
## - BloodPressure 1 59.818 65.818
## <none> 57.985 65.985
## + Age 1 57.973 67.973
## + SocialClass 2 57.831 69.831
## - Sex 1 64.006 70.006
## - Glucose 1 64.240 70.240
##
## Step: AIC=65.82
## DiabetesOutcome ~ Sex + Glucose
##
## Df Deviance AIC
## <none> 59.818 65.818
## + BloodPressure 1 57.985 65.985
## + Age 1 59.778 67.778
## - Sex 1 65.321 69.321
## + SocialClass 2 59.472 69.472
## - Glucose 1 66.362 70.362
summary(step_model)
##
## Call:
## glm(formula = DiabetesOutcome ~ Sex + Glucose, family = binomial,
## data = Diabetes)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.24042 1.25951 -1.779 0.0753 .
## SexM -1.52534 0.69098 -2.208 0.0273 *
## Glucose 0.02443 0.01041 2.347 0.0189 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 69.315 on 49 degrees of freedom
## Residual deviance: 59.818 on 47 degrees of freedom
## AIC: 65.818
##
## Number of Fisher Scoring iterations: 4
Berdasarkan hasil stepwise tersebut didapatkan bahwa jenis kelamin dan kadar glukosa merupakan prediktor signifikan terhadap outcome diabetes. Pria cenderung memiliki risiko diabetes yang lebih rendah dibanding wanita, pada kadar glukosa yang sama. Dapat disimpulkan bahwa model ini sudah lebih baik dari model kosong, namun deviance masih cukup besar, sehingga model bisa ditingkatkan lebih lanjut.
null_model <- glm(DiabetesOutcome ~ 1, data = Diabetes, family = binomial)
1 - (logLik(step_model) / logLik(null_model))
## 'log Lik.' 0.1370134 (df=3)
Nilai log-likelihood model sebesar 0.137 menunjukkan tingkat kecocokan model terhadap data yang telah diestimasi. Semakin tinggi (lebih mendekati nol atau positif) nilai log-likelihood, semakin baik model menjelaskan data dibandingkan model nol (tanpa prediktor).
roc_step <- roc(Diabetes$DiabetesOutcome, fitted(step_model))
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_step, main = "ROC Curve - Model Akhir")
auc(roc_step)
## Area under the curve: 0.7176
Kurva ROC menunjukkan bahwa model akhir memiliki performa yang cukup baik dalam membedakan antara penderita dan non-penderita diabetes. Kurva yang melengkung ke kiri atas menandakan kemampuan klasifikasi yang lebih baik daripada model acak, sehingga model layak digunakan dalam prediksi.
Distribusi multinomial adalah perluasan dari distribusi binomial untuk lebih dari dua kategori. 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\).
Sebuah survei dilakukan terhadap 10 orang yang diminta memilih salah satu dari tiga jenis motor favorit: Honda (A), Ducati (D), dan Yamaha (Y).
Hasil survei:
Probabilitas teoritik preferensi:
Pertanyaannya: Berapa peluang bahwa dalam 20 orang akan ada 6 yang memilih Honda, 8 memilih Ducati, dan 6 memilih Yamaha?
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!} p_1^{x_1} p_2^{x_2} \ldots p_k^{x_k} \]
dengan:
Perhitungan Manual di R
n <- 20
x <- c(6, 8, 6)
p <- c(0.3, 0.4, 0.3)
faktorial_total <- factorial(n)
faktorial_x <- prod(factorial(x))
koefisien <- faktorial_total / faktorial_x
peluang <- koefisien * prod(p^x);peluang
## [1] 0.0405391
Probabilitas bahwa 20 orang memilih 6 Honda, 8 Ducati, dan 6 Yamaha (dengan proporsi preferensi 0.3, 0.4, dan 0.3) adalah 0.0405391. Distribusi multinomial digunakan untuk menghitung peluang dalam percobaan dengan beberapa kategori hasil. Rumus dasarnya merupakan generalisasi dari binomial untuk lebih dari dua kategori.
Model ini digunakan untuk memodelkan hubungan antara satu variabel respon kategorik (>2 kategori) dan satu atau lebih variabel prediktor.
Misalkan \(Y\) memiliki \(K\) kategori, dan kita pilih referensi (baseline) kategori \(K\), maka model logit untuk kategori \(j\) adalah:
\[ \log \left( \frac{P(Y = j)}{P(Y = K)} \right) = \beta_{j0} + \beta_{j1}x_1 + \ldots + \beta_{jp}x_p \]
untuk \(j = 1, 2, \ldots, K - 1\).
Baseline-category logit model adalah model regresi logistik untuk variabel respon kategorik dengan lebih dari dua kategori (nominal). Model ini menggunakan satu kategori sebagai acuan (baseline) dan membandingkan kategori lainnya terhadap baseline tersebut dalam bentuk logit.
\[ \log \left(\frac{\pi_j}{\pi_c}\right), \quad j=1,\ldots,c-1 \]
dengan:
Maka, terdapat sebanyak \((c-1)\) fungsi logit.
Catatan: Kategori baseline bisa ditentukan secara eksplisit, tetapi default di R adalah kategori terakhir.
Model Regresi Jika terdapat satu prediktor \(x\), maka bentuk umum model logit-nya adalah:
\[ \log \left(\frac{\pi_j}{\pi_c}\right) = \alpha_j + \beta_j x, \quad j = 1, \ldots, c-1 \]
Contoh Kasus: 3 Kategori Respon Misalkan respon \(Y\) memiliki tiga kategori: \(Y \in \{1,2,3\}\), dan kita gunakan kategori ke-3 sebagai baseline. Maka:
\[ \log \left(\frac{\pi_1}{\pi_3}\right) = \alpha_1 + \beta_1 x \]
\[ \log \left(\frac{\pi_2}{\pi_3}\right) = \alpha_2 + \beta_2 x \]
Terdapat dua model logit, satu untuk perbandingan kategori 1 dengan 3, dan satu lagi untuk kategori 2 dengan 3.
Relasi Antar Kategori Jika ingin menghitung logit antara kategori 1 dan 2:
\[ \log \left(\frac{\pi_1}{\pi_2}\right) = \log \left(\pi_1 / \pi_3\right) - \log \left(\pi_2 / \pi_3\right) \]
\[ = (\alpha_1 + \beta_1 x) - (\alpha_2 + \beta_2 x) = (\alpha_1 - \alpha_2) + (\beta_1 - \beta_2)x \]
Model baseline-category logit:
Implementasi di R menggunakan fungsi multinom() dari package nnet, dan kategori baseline bisa diatur dengan relevel().
Estimasi dilakukan menggunakan metode maximum likelihood dengan algoritma iteratif seperti Newton-Raphson.
Log-likelihood:
\[ \ell(\beta) = \sum_{i=1}^{n} \sum_{j=1}^{K} y_{ij} \log(\pi_{ij}) \]
dengan \(\pi_{ij} = P(Y_i = j|x_i)\) dan \(y_{ij} = 1\) jika \(Y_i = j\).
Sebuah perusahaan pengembang aplikasi pembelajaran bahasa asing ingin mengetahui faktor-faktor yang memengaruhi jenis langganan yang dipilih pengguna setelah masa uji coba gratis selama 14 hari. Perusahaan ingin mengoptimalkan strategi pemasaran mereka berdasarkan kebiasaan pengguna selama masa uji coba.
Mereka melakukan survei terhadap 300 pengguna yang telah menyelesaikan masa uji coba, dan mengumpulkan data sebagai berikut :
Keputusan Langganan : Jenis paket berlangganan yang dipilih setelah masa uji coba (tidak berlangganan, paket standar, paket pro)
Durasi Penggunaan Aplikasi : Total jam belajar selama masa uji coba ( jam belajar aktif).
Bahasa Favorit :Bahasa yang paling sering dipelajari selama masa uji coba (Inggris, Jepang, Prancis).
Indeks Interaksi Fitur : Skor aktivitas pengguna dengan fitur aplikasi tambahan (latihan interaktif, forum diskusi, gamifikasi kuis).
Tujannya adalah mengetahui bagaimana durasi penggunaan aplikasi, bahasa favorit, dan interaksi fitur memengaruhi pilihan keputusan langganan pelanggan.
set.seed(55)
n <- 300
# Variabel-variabel simulasi
FavoriteLanguage <- sample(c("Inggris", "Jepang", "Prancis"), n, replace = TRUE)
Duration <- round(rnorm(n, mean = 15, sd = 5)) # Total jam belajar selama masa uji coba
Duration <- pmax(Duration, 0) # Tidak ada durasi negatif
FeatureInteraction <- round(pmax(rnorm(n, mean = 70, sd = 15), 0)) # Indeks interaksi fitur
# Simulasikan jenis langganan berdasarkan bahasa favorit
Subscription <- sapply(FavoriteLanguage, function(lang) {
if (lang == "Inggris") {
sample(c("Tidak Berlangganan", "Paket Standar", "Paket Pro"), size = 1,
prob = c(0.3, 0.4, 0.3))
} else if (lang == "Jepang") {
sample(c("Tidak Berlangganan", "Paket Standar", "Paket Pro"), size = 1,
prob = c(0.4, 0.3, 0.3))
} else {
sample(c("Tidak Berlangganan", "Paket Standar", "Paket Pro"), size = 1,
prob = c(0.2, 0.3, 0.5))
}
})
# Gabungkan menjadi data frame
df <- data.frame(
Subscription = factor(Subscription),
Duration = Duration,
FavoriteLanguage = factor(FavoriteLanguage),
FeatureInteraction = FeatureInteraction
)
# Set baseline untuk analisis regresi (misalnya: Tidak Berlangganan)
df$Subscription <- relevel(df$Subscription, ref = "Tidak Berlangganan")
# Tampilkan data awal
head(df)
# Load library
library(nnet)
# Estimasi model
model_multinom <- multinom(Subscription ~ Duration + FavoriteLanguage + FeatureInteraction, data = df)
## # weights: 18 (10 variable)
## initial value 329.583687
## iter 10 value 312.706609
## final value 312.420301
## converged
# Tampilkan ringkasan hasil estimasi
summary(model_multinom)
## Call:
## multinom(formula = Subscription ~ Duration + FavoriteLanguage +
## FeatureInteraction, data = df)
##
## Coefficients:
## (Intercept) Duration FavoriteLanguageJepang
## Paket Pro 2.2988036 -0.037814635 -0.5249742
## Paket Standar 0.6973863 0.002894146 -0.5824085
## FavoriteLanguagePrancis FeatureInteraction
## Paket Pro 0.9807760 -0.022726521
## Paket Standar 0.2208183 -0.004250402
##
## Std. Errors:
## (Intercept) Duration FavoriteLanguageJepang
## Paket Pro 0.9065429 0.03116649 0.3751310
## Paket Standar 0.8956554 0.03085098 0.3505482
## FavoriteLanguagePrancis FeatureInteraction
## Paket Pro 0.3997707 0.01038147
## Paket Standar 0.4008121 0.01001261
##
## Residual Deviance: 624.8406
## AIC: 644.8406
# Menghitung p-value
z_val <- summary(model_multinom)$coefficients / summary(model_multinom)$standard.errors
p_val <- 2 * (1 - pnorm(abs(z_val)))
# Tampilkan koefisien, z-value, dan p-value
cbind(
Coefficients = round(summary(model_multinom)$coefficients, 4),
`Z value` = round(z_val, 3),
`P value` = round(p_val, 4)
)
## (Intercept) Duration FavoriteLanguageJepang
## Paket Pro 2.2988 -0.0378 -0.5250
## Paket Standar 0.6974 0.0029 -0.5824
## FavoriteLanguagePrancis FeatureInteraction (Intercept) Duration
## Paket Pro 0.9808 -0.0227 2.536 -1.213
## Paket Standar 0.2208 -0.0043 0.779 0.094
## FavoriteLanguageJepang FavoriteLanguagePrancis FeatureInteraction
## Paket Pro -1.399 2.453 -2.189
## Paket Standar -1.661 0.551 -0.425
## (Intercept) Duration FavoriteLanguageJepang
## Paket Pro 0.0112 0.2250 0.1617
## Paket Standar 0.4362 0.9253 0.0966
## FavoriteLanguagePrancis FeatureInteraction
## Paket Pro 0.0142 0.0286
## Paket Standar 0.5817 0.6712
Berdasarkan hasil regresi logistik multinomial, ditemukan beberapa faktor yang secara signifikan memengaruhi kecenderungan seseorang memilih paket langganan dibandingkan dengan kategori referensi.
Bahasa favorit Jepang berpengaruh negatif signifikan terhadap pemilihan Paket Pro (z = -1.399, p = 0.1617) dan Paket Standar (z = -1.661, p = 0.0966). Meskipun nilai p untuk Paket Standar mendekati batas signifikansi 10%, secara umum ini menunjukkan bahwa pengguna dengan bahasa Jepang cenderung kurang memilih kedua paket tersebut, terutama Paket Standar.
Sebaliknya, bahasa favorit Prancis menunjukkan pengaruh positif dan signifikan terhadap pemilihan Paket Pro (z = 2.453, p = 0.0142), yang berarti pengguna yang menyukai bahasa Prancis lebih mungkin memilih Paket Pro dibandingkan kategori referensi. Namun, pengaruh terhadap Paket Standar tidak signifikan (p = 0.5817).
Durasi penggunaan menunjukkan hubungan negatif signifikan terhadap pemilihan Paket Pro (z = -1.213, p = 0.2250), tetapi tidak signifikan secara statistik. Pengaruh terhadap Paket Standar juga tidak signifikan (p = 0.9253).
Interaksi fitur (FeatureInteraction) tidak menunjukkan pengaruh signifikan terhadap pemilihan baik Paket Pro (p = 0.0286) maupun Paket Standar (p = 0.6712). Meski p untuk Paket Pro di bawah 0.05, nilai z = -2.189 menunjukkan pengaruh negatif; namun sebaiknya diuji lebih lanjut untuk memastikan stabilitas efek ini.
Regresi logistik ordinal digunakan ketika variabel respon Y bersifat ordinal (memiliki urutan), misalnya tingkat kepuasan: Rendah, Sedang, Tinggi. Model ini berbeda dengan : • Regresi logistik biner: hanya 2 kategori • Regresi logistik multinomial: kategori > 2 tetapi tidak berurutan
Model yang digunakan adalah Cumulative Logit Model dengan asumsi proportional odds :
\[ \log \left( \frac{P(Y \leq j)}{P(Y > j)} \right) = \alpha_j + \beta x \]
Untuk \(c\) kategori, terdapat \((c - 1)\) model logit kumulatif.
Koefisien \(\beta\) menjelaskan efek \(x\) terhadap kemungkinan berada pada kategori yang lebih rendah atau sama.
Odds ratio:
\[ \text{OR} = e^{\beta} \]
Misal kita memiliki data terkait tingkat kepuasan pelanggan (1 : Tidak Puas, 2: Cukup, 3: Puas) terhadap kualitsa pembelajaran :
set.seed(55)
n <- 200
speed <- round(runif(n, 1, 10))
satisfaction <- cut(5 + 0.5*speed + rnorm(n),
breaks = c(-Inf, 5.5, 7.5, Inf),
labels = c("Tidak Puas", "Cukup", "Puas"),
ordered_result = TRUE)
df <- data.frame(satisfaction, speed)
head(df)
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
model_ord <- polr(satisfaction ~ speed, data = df, Hess = TRUE)
summary(model_ord)
## Call:
## polr(formula = satisfaction ~ speed, data = df, Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## speed 0.7743 0.09293 8.332
##
## Intercepts:
## Value Std. Error t value
## Tidak Puas|Cukup 0.7475 0.3883 1.9250
## Cukup|Puas 3.7939 0.4964 7.6432
##
## Residual Deviance: 245.0161
## AIC: 251.0161
Berdasarkan hasil regresi logistik ordinal terhadap variabel satisfaction dengan prediktor speed, diperoleh bahwa kecepatan (speed) berpengaruh positif dan signifikan terhadap tingkat kepuasan pengguna.
Koefisien untuk speed adalah 0.7743 dengan nilai t = 8.332, yang menunjukkan bahwa setiap kenaikan satu unit pada kecepatan akan meningkatkan peluang responden berada pada kategori kepuasan yang lebih tinggi (misalnya, dari Tidak Puas ke Cukup, atau dari Cukup ke Puas). Karena nilai t-nya besar dan tidak mendekati nol, ini menunjukkan bahwa pengaruh speed signifikan secara statistik.
Model ini juga menghasilkan dua ambang batas (cutpoints/intercepts):
“Tidak Puas|Cukup” sebesar 0.7475
“Cukup|Puas” sebesar 3.7939
Kedua nilai ini digunakan untuk menghitung probabilitas kumulatif kategori kepuasan. Misalnya, semakin besar nilai speed, semakin kecil kemungkinan responden berada di kategori Tidak Puas atau Cukup, dan semakin besar kemungkinan berada di kategori Puas.
Nilai Residual Deviance sebesar 245.0161 dan AIC sebesar 251.0161 memberikan informasi tentang kelayakan model, yang bisa dibandingkan dengan model lain jika diperlukan.
(ctable <- coef(summary(model_ord)))
## Value Std. Error t value
## speed 0.7742641 0.0929311 8.331593
## Tidak Puas|Cukup 0.7475341 0.3883392 1.924951
## Cukup|Puas 3.7938935 0.4963761 7.643183
p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
(ctable <- cbind(ctable, "p value" = round(p, 4)))
## Value Std. Error t value p value
## speed 0.7742641 0.0929311 8.331593 0.0000
## Tidak Puas|Cukup 0.7475341 0.3883392 1.924951 0.0542
## Cukup|Puas 3.7938935 0.4963761 7.643183 0.0000
Karena p-value jauh lebih kecil dari 0.05, maka dapat disimpulkan
bahwa s
peed
berpengaruh
secara signifikan terhadap kepuasan (satisfaction). Artinya, terdapat
bukti statistik yang kuat bahwa peningkatan kecepatan layanan secara
nyata meningkatkan kemungkinan responden merasa lebih puas.
newdata <- data.frame(speed = 5:9)
predict(model_ord, newdata = newdata, type = "probs")
## Tidak Puas Cukup Puas
## 1 0.042136688 0.43851623 0.5193471
## 2 0.019878255 0.27919998 0.7009218
## 3 0.009263979 0.15512124 0.8356148
## 4 0.004292524 0.07886346 0.9168440
## 5 0.001983627 0.03815371 0.9598627
Model cumulative logit mengasumsikan efek prediktor sama untuk setiap cutof. Jika tidak, pertimbangkan model non-proportional odds seperti generalized ordinal model.
Selain cumulative logit, model ordinal lainnya :
Adjacent-category logit
Continuation-ratio (sequential) logit
Model tersebut dapat digunakan saat asumsi proportional odds tidak terpenuhi
Regresi ordinal efektif untuk respon berurutan.
Model cumulative logit menginterpretasikan efek dalam bentuk log-odds kumulatif.
Implementasi di R dengan fungsi polr() dari package MASS.
Jika diperlukan validasi lanjut, bisa digunakan uji devians atau likelihood ratio test
Model regresi logistik ordinal yang paling umum digunakan adalah Cumulative Logit Model dengan asumsi Proportional Odds.
Asumsi ini dikenal juga sebagai asumsi paralelisme (parallel lines assumption).
Definisi Asumsi Paralelisme:
Asumsi paralelisme menyatakan bahwa koefisien regresi (β) sama untuk
setiap kategori kumulatif dari variabel respon.
Bentuk umum model:
\[ \log \left( \frac{P(Y \leq j)}{P(Y > j)} \right) = \alpha_j + \beta x \]
Untuk \(j = 1, \ldots, c - 1\):
Visualisasi Dalam asumsi paralelisme, kurva logit kumulatif dari tiap kategori terhadap prediktor akan memiliki kemiringan yang sama (paralel), hanya berbeda posisi (intercept).
Konsekuensi Pelanggaran Asumsi
Jika asumsi ini tidak terpenuhi :
Efek prediktor berbeda untuk setiap batas kategori.
Model cumulative logit tidak valid.
Perlu gunakan model alternatif: – Generalized Ordinal Logistic Regression – Partial Proportional Odds Model
Pengujian Asumsi Paralelisme Untuk memeriksa validitas asumsi, dapat digunakan :
Likelihood Ratio Test antara model proportional dan non-proportional
Brant Test (paket brant di R)
library(MASS)
library(brant)
## Warning: package 'brant' was built under R version 4.3.3
model <- polr(satisfaction ~ speed, data = data, Hess = TRUE)
brant(model)
## --------------------------------------------
## Test for X2 df probability
## --------------------------------------------
## Omnibus 2.99 1 0.08
## speed 2.99 1 0.08
## --------------------------------------------
##
## H0: Parallel Regression Assumption holds
Kesimpulan
Asumsi paralelisme penting untuk validitas model cumulative logit.
Menyederhanakan interpretasi karena efek prediktor konstan.
Jika tidak terpenuhi, gunakan model ordinal alternatif.
Analisis data kategorik penting dalam statistika terapan karena banyak fenomena nyata menghasilkan data dalam bentuk kategori, seperti jenis kelamin, pendidikan, atau diagnosis medis. Tiga pendekatan umum untuk menganalisis data ini adalah tabel kontingensi, model log-linier, dan regresi logistik, masing-masing dengan tujuan dan kelebihan berbeda.
Tabel kontingensi digunakan untuk eksplorasi awal hubungan antar variabel kategorik, misalnya untuk menghitung odds ratio atau statistik chi-kuadrat dalam studi efek obat terhadap penyakit.
Model log-linier cocok untuk menganalisis struktur asosiasi dalam tabel kontingensi yang kompleks. Model ini memodelkan frekuensi sel dengan distribusi Poisson dan memperlakukan semua variabel secara setara, tanpa membedakan variabel dependen dan independen.
Regresi logistik digunakan ketika ada satu variabel kategorik sebagai outcome dan beberapa variabel prediktor. Model ini memodelkan peluang suatu kejadian (logit) dan umum dipakai untuk prediksi, baik dalam studi observasional maupun eksperimental. Model ini juga memiliki versi untuk outcome dengan lebih dari dua kategori.
Kesimpulan: - Tabel Kontingensi → Deskriptif - Model Log-linier → Eksploratif - Regresi Logistik → Prediktif
Pemilihan metode tergantung pada tujuan analisis: apakah ingin mendeskripsikan, mengeksplorasi hubungan, atau memprediksi outcome. Kombinasi ketiganya sering digunakan untuk pemahaman yang menyeluruh terhadap data kategorik.
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 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 biner:
\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 x \]
Digunakan jika ada variabel dependen kategorik (biasanya biner).
Bertujuan untuk memprediksi probabilitas suatu outcome.
Umumnya digunakan dalam studi observasional atau eksperimental.
Contoh :
data_glm <- data.frame(
Serangan = c(1, 0, 1, 0),
Obat = factor(c("Timolol", "Timolol", "Placebo", "Placebo")),
Frek = c(30, 20, 50, 70)
)
model_logit <- glm(Serangan ~ Obat, weights = Frek, family = binomial, data = data_glm)
summary(model_logit)
##
## Call:
## glm(formula = Serangan ~ Obat, family = binomial, data = data_glm,
## weights = Frek)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.3365 0.1852 -1.817 0.0692 .
## ObatTimolol 0.7419 0.3430 2.163 0.0305 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 235.08 on 3 degrees of freedom
## Residual deviance: 230.31 on 2 degrees of freedom
## AIC: 234.31
##
## Number of Fisher Scoring iterations: 4
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 atau model penuh menyertakan seluruh efek utama dan interaksi:
# 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 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 untuk tabel 2x2:
\[ OR = \frac{n_{11} n_{22}}{n_{12} n_{21}} \]
Interpretasi nilai OR:
Dalam model saturated:
# Estimasi odds ratio dan log-odds
logOR <- log((data[1,1] * data[2,2]) / (data[1,2] * data[2,1]))
logOR
## [1] -0.4183685
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 dari Agresti (2019) membahas hubungan antara kebahagiaan dan kepercayaan terhadap kehidupan akhirat.
data_survey <- matrix(c(32,190,
113,611,
51,326),
nrow = 3, byrow = TRUE,
dimnames = list(Kebahagiaan = c("Tidak", "Cukup", "Sangat"),
Surga = c("Tidak Percaya", "Percaya")))
ftable(data_survey)
## Surga Tidak Percaya Percaya
## Kebahagiaan
## Tidak 32 190
## Cukup 113 611
## Sangat 51 326
loglm(~ Kebahagiaan + Surga, data = data_survey)
## Call:
## loglm(formula = ~Kebahagiaan + Surga, data = data_survey)
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0.8911136 2 0.6404675
## Pearson 0.8836760 2 0.6428538
Model log-linear adalah model yang digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategorik yang disajikan dalam tabel kontingensi. Model ini mengasumsikan bahwa logaritma dari nilai ekspektasi frekuensi sel (μij ) dapat dinyatakan sebagai penjumlahan efek variabel dan (bila perlu) interaksinya. Untuk tabel 2x2: \[ \log(\mu_{ij}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]
Model log-linear digunakan untuk memodelkan frekuensi (count) pada tabel kontingensi dan menguji asosiasi antar variabel kategorik, tanpa menganggap ada variabel respon dan prediktor.
Model regresi logistik digunakan untuk memodelkan probabilitas kejadian suatu outcome (biner) berdasarkan satu atau lebih prediktor (bisa kategorik maupun kontinu).
Sistem Persamaan Model Log-Linear
\[\begin{align*} \log(\mu_{11}) &= \lambda + \lambda^A_1 + \lambda^B_1 + \lambda^{AB}_{11} \\ \log(\mu_{12}) &= \lambda + \lambda^A_1 + \lambda^B_2 + \lambda^{AB}_{12} \\ \log(\mu_{21}) &= \lambda + \lambda^A_2 + \lambda^B_1 + \lambda^{AB}_{21} \\ \log(\mu_{22}) &= \lambda + \lambda^A_2 + \lambda^B_2 + \lambda^{AB}_{22} \end{align*}\]
Constraint Sum-to-Zero
\[\begin{align*} \lambda_1^A + \lambda_2^A = 0 \\ \\ \lambda_1^B + \lambda_2^B = 0 \\ \\ \lambda_{11}^{AB} + \lambda_{12}^{AB} + \lambda_{21}^{AB} + \lambda_{22}^{AB} = 0 \end{align*}\]
Rumus Estimasi Parameter dengan Sum-to-Zero Constraint
\[ \lambda_1^A = \frac{1}{2} \left[ (\log \mu_{11} + \log \mu_{12}) - (\log \mu_{21} + \log \mu_{22}) \right] \] \[ \lambda_1^B = \frac{1}{2} \left[ (\log \mu_{11} + \log \mu_{21}) - (\log \mu_{12} + \log \mu_{22}) \right] \] \[ \lambda_{12}^{AB} = \frac{1}{4} \left[ \log \mu_{12} - \log \mu_{11} - \log \mu_{22} + \log \mu_{21} \right] \]
Diberikan data:
Merokok | Sakit | Sehat |
---|---|---|
Ya | 30 | 20 |
Tidak | 10 | 40 |
Model log-linear pada tabel 2x2:
\[ \log(\mu_{ij}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \] dengan constraint sum-to-zero: \[ \sum_i \lambda_i^A = 0,\quad \sum_j \lambda_j^B = 0,\quad \sum_{i,j} \lambda_{ij}^{AB} = 0 \]
Misalkan:
A1 = Merokok (Ya), A2 = Tidak
B1 = Sakit, B2 = Sehat
Observasi:
\(n_{11}\) = 30, \(n_{12}\) = 20
\(n_{21}\) = 10, \(n_{22}\) = 40
\[\begin{align*} \log(\mu_{11}) &= \lambda + \lambda^A_1 + \lambda^B_1 + \lambda^{AB}_{11} \\ \\ \log(\mu_{12}) &= \lambda + \lambda^A_1 + \lambda^B_2 + \lambda^{AB}_{12} \\ \\ \log(\mu_{21}) &= \lambda + \lambda^A_2 + \lambda^B_1 + \lambda^{AB}_{21} \\ \\ \log(\mu_{22}) &= \lambda + \lambda^A_2 + \lambda^B_2 + \lambda^{AB}_{22} \\ \end{align*} \] Constraint sum-to-zero:
\[\begin{align*} \lambda_1^A + \lambda_2^A = 0 \\ \\ \lambda_1^B + \lambda_2^B = 0 \\ \\ \lambda_{11}^{AB} + \lambda_{12}^{AB} + \lambda_{21}^{AB} + \lambda_{22}^{AB} = 0 \end{align*}\]
Langkah-langkah:
\[\begin{align*} \lambda &= \frac{1}{4} \sum_{i=1}^{2} \sum_{j=1}^{2} \log(n_{ij}) \\ &= \frac{1}{4} [\log(30) + \log(20) + \log(10) + \log(40)] \\ &= 3.0971 \end{align*} \]
\[\begin{align*} \lambda_1^A &= \frac{1}{2} [(\log(30) + \log(20)) - (\log(10) + \log(40))] \\ \\ &= \frac{1}{2} [(3.4012 + 2.9957) - (2.3026 + 3.6889)] \\ \\ &= \frac{1}{2} (6.3969 - 5.9915) \\ \\ &= \frac{1}{2} (0.4054) \\ \\ &= 0.2027 \\ \\ \lambda_2^A &= -0.2027 \\ \end{align*}\]
\[\begin{align*} \\ \lambda_1^B &= \frac{1}{2} [(\log(30) + \log(10)) - (\log(20) + \log(40))] \\ \\ &= \frac{1}{2} [(3.4012 + 2.3026) - (2.9957 + 3.6889)] \\ \\ &= \frac{1}{2} (5.7038 - 6.6846) \\ \\ &= \frac{1}{2} (-0.9808) \\ \\ &= -0.4904 \\ \\ \lambda_2^B &= +0.4904 \\ \end{align*}\]
\[\begin{align*} \lambda_{11}^{AB} &= \frac{1}{4} [(\log(30) - \log(20)) - \log(10) + \log(40)] \\ \\ &= \frac{1}{4} [(3.4012 - 2.9957 - 2.3026 + 3.6889)] \\ \\ &= \frac{1}{4} (-1.8971 + 3.6889) \\ \\ &= \frac{1}{4} (1.7918) \\ \\ &= 0.4479 \\ \\ \lambda_{12}^{AB} &= -0.4479 \\ \\ \lambda_{21}^{AB} &= -0.4479 \\ \\ \lambda_{22}^{AB} &= 0.4479 \\ \end{align*}\]
Ringkasan Parameter
\[ OR = \frac{n_{11} n_{22}}{n_{12} n_{21}} = \frac{30 \times 40}{20 \times 10} = \frac{1200}{200} = 6 \] Log odds ratio: \[ \log(OR) = \log(6) = 1.7918 \] Standard error (SE):
\[ SE = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} } \\ \\ = \sqrt{ \frac{1}{30} + \frac{1}{20} + \frac{1}{10} + \frac{1}{40} }\\ \\ = \sqrt{0.0333 + 0.05 + 0.1 + 0.025}\\ \\ = \sqrt{0.2083}\\ \\ = 0.4564 \\ \]
95% Confidence Interval for log(OR):
\[\begin{align*} \\ \log(OR) \pm 1.96 \times SE &= 1.7918 \pm 1.96 \times 0.4564 \\ \\ &= 1.7918 \pm 0.895 \\ \\ &= (1.7918 - 0.895,\ 1.7918 + 0.895) \\ \\ &= (0.8968,\ 2.6868) \\ \end{align*}\]
Back-transform to get CI for OR:
\[\begin{align*} \\ Lower &= \exp(0.8968) = 2.452\\ \\ Upper &= \exp(2.6868) = 14.68 \\ \end{align*}\]
Jadi, OR=6 dengan taraf signifikansi 95% memiliki interval kepercayaan dalam rentang 2.452 - 14.68
# Data 2x2
tabel <- matrix(c(30, 20, 10, 40), nrow = 2, byrow = TRUE)
colnames(tabel) <- c("Sakit", "Sehat")
rownames(tabel) <- c("Ya", "Tidak")
tabel
## Sakit Sehat
## Ya 30 20
## Tidak 10 40
#Ubah menjadi bentuk tabel untuk glm
data <- as.data.frame(as.table(tabel))
colnames(data) <- c("Merokok", "Status", "Freq")
data
# Model tanpa interaksi
fit_no_inter <- glm(Freq ~ Merokok + Status, family = poisson, data = data)
summary(fit_no_inter)
##
## Call:
## glm(formula = Freq ~ Merokok + Status, family = poisson, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.996e+00 1.871e-01 16.013 <2e-16 ***
## MerokokTidak 3.892e-10 2.000e-01 0.000 1.000
## StatusSehat 4.055e-01 2.041e-01 1.986 0.047 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 21.288 on 3 degrees of freedom
## Residual deviance: 17.261 on 1 degrees of freedom
## AIC: 43.036
##
## Number of Fisher Scoring iterations: 4
# Model dengan interaksi
fit_inter <- glm(Freq ~ Merokok * Status, family = poisson, data = data)
summary(fit_inter)
##
## Call:
## glm(formula = Freq ~ Merokok * Status, family = poisson, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4012 0.1826 18.629 < 2e-16 ***
## MerokokTidak -1.0986 0.3651 -3.009 0.00262 **
## StatusSehat -0.4055 0.2887 -1.405 0.16015
## MerokokTidak:StatusSehat 1.7918 0.4564 3.926 8.65e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2.1288e+01 on 3 degrees of freedom
## Residual deviance: 3.9968e-15 on 0 degrees of freedom
## AIC: 27.775
##
## Number of Fisher Scoring iterations: 3
Nilai \(\log(6)=1.7918\) sama dengan efek interaksi pada output R
Suatu survei dilakukan untuk mengetahui hubungan antara Jenis Kelamin (Laki-laki/Perempuan) dan Kategori BMI (Kurus/Normal/Gemuk):
Kurus | Normal | Gemuk | |
---|---|---|---|
Laki-laki | 12 | 20 | 8 |
Perempuan | 18 | 24 | 10 |
Bentuk umum model log-linear untuk tabel 2x3 (dengan sum-to-zero constraint): \[ \log(\mu_{ij}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \] dengan: - \(\mu_{ij}\): ekspektasi frekuensi pada baris ke-i, kolom ke-j - A: Jenis Kelamin (i=1:Laki-laki, i=2:Perempuan) - B: Kategori BMI (j=1:Kurus, j=2:Normal, j=3:Gemuk) - Constraint: \[ \sum_i \lambda_i^A = 0,\quad \sum_j \lambda_j^B = 0,\quad \sum_{i} \lambda_{ij}^{AB} = 0, dan \sum_{j}\lambda_{ij}^{AB}=0 \] Secara eksplisit:
\[\begin{align*} \\ \log(\mu_{ij}) &= \lambda \\ \\ &+ \lambda^A_1(Laki-laki), \lambda_2^A(Perempuan)\\ &+ \lambda^B_1(Kurus), \lambda^B_2(Normal), \lambda^B_3(Gemuk)\\ \\ &+ \lambda^{AB}_{ij}(interaksi jika ada) \\ \end{align*}\]
# Membuat data frame dari tabel
tabel2x3 <- matrix(c(12, 20, 8, 18, 24, 10), nrow = 2, byrow = TRUE)
colnames(tabel2x3) <- c("Kurus", "Normal", "Gemuk")
rownames(tabel2x3) <- c("Laki-laki", "Perempuan")
tabel2x3
## Kurus Normal Gemuk
## Laki-laki 12 20 8
## Perempuan 18 24 10
# Ubah menjadi data.frame untuk glm
data2x3 <- as.data.frame(as.table(tabel2x3))
colnames(data2x3) <- c("JenisKelamin", "BMI", "Freq")
data2x3
# Model log-linear tanpa interaksi (asumsi independen)
fit_no_inter <- glm(Freq ~ JenisKelamin + BMI, family = poisson, data = data2x3)
summary(fit_no_inter)
##
## Call:
## glm(formula = Freq ~ JenisKelamin + BMI, family = poisson, data = data2x3)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.5683 0.2179 11.789 <2e-16 ***
## JenisKelaminPerempuan 0.2624 0.2103 1.248 0.2122
## BMINormal 0.3830 0.2368 1.618 0.1058
## BMIGemuk -0.5108 0.2981 -1.713 0.0866 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 13.06443 on 5 degrees of freedom
## Residual deviance: 0.22527 on 2 degrees of freedom
## AIC: 35.26
##
## Number of Fisher Scoring iterations: 3
# Model log-linear dengan interaksi (untuk cek asosiasi)
fit_inter <- glm(Freq ~ JenisKelamin * BMI, family = poisson, data = data2x3)
summary(fit_inter)
##
## Call:
## glm(formula = Freq ~ JenisKelamin * BMI, family = poisson, data = data2x3)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.4849 0.2887 8.608 <2e-16 ***
## JenisKelaminPerempuan 0.4055 0.3727 1.088 0.277
## BMINormal 0.5108 0.3651 1.399 0.162
## BMIGemuk -0.4055 0.4564 -0.888 0.374
## JenisKelaminPerempuan:BMINormal -0.2231 0.4802 -0.465 0.642
## JenisKelaminPerempuan:BMIGemuk -0.1823 0.6032 -0.302 0.762
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 1.3064e+01 on 5 degrees of freedom
## Residual deviance: -9.0719e-30 on 0 degrees of freedom
## AIC: 39.034
##
## Number of Fisher Scoring iterations: 3
Interpretasi:
Model tanpa interaksi:
Jika deviance tidak signifikan, maka Jenis Kelamin dan BMI independen.
Intercept: log frekuensi pada kategori referensi (Laki-laki, Kurus)
Koefisien JenisKelaminPerempuan: perbedaan log-frekuensi antara Perempuan vs Laki-laki (pada Kurus)
Koefisien BMI: perbedaan log-frekuensi kategori BMI (Normal/Gemuk) terhadap Kurus (pada Laki-laki)
Model dengan interaksi:
Contoh interpretasi hasil (misal)
Jika koefisien JenisKelaminPerempuan negatif: proporsi Perempuan pada kategori referensi lebih kecil dibanding Laki-laki.
Jika koefisien BMI_Normal positif: kemungkinan seseorang Normal lebih tinggi daripada Kurus (pada Laki-laki).
Jika model interaksi signifikan, pola distribusi BMI berbeda antara Laki-laki dan Perempuan.
Pada pembahasan sebelumnya, kita telah memahami bahwa salah satu tujuan utama dari penyusunan model log linear adalah untuk mengestimasi parameter-parameter yang menjelaskan hubungan di antara variabel-variabel kategorik.
Pada materi kali ini, kita akan membahas model log linear yang lebih kompleks, yaitu model log linear untuk tabel kontingensi tiga arah. Model ini melibatkan tiga variabel kategorik, sehingga kemungkinan interaksi yang dapat terjadi di dalam model pun menjadi lebih banyak. Dalam konteks ini, interaksi paling tinggi yang dapat dimodelkan adalah interaksi tiga arah, yaitu interaksi yang melibatkan ketiga variabel secara bersamaan.
Model log-linear yang melibatkan tiga variabel kategorik (misal: X, Y, dan Z) dapat dibangun dalam berbagai bentuk model, tergantung pada tingkat interaksi yang ingin dimasukkan. Berikut adalah beberapa alternatif model log-linear yang umum digunakan: 1. Model Saturated \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \] Model ini memuat semua kemungkinan interaksi, termasuk interaksi tiga arah (X, Y, dan Z).
Model Homogen \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \] Model ini hanya mengakomodasi interaksi dua arah antar variabel tanpa memasukkan interaksi tiga arah.
Model Conditional
Conditional pada X: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \] Memuat interaksi X dengan Y dan X dengan Z.
Conditional pada Y: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \] Memuat interaksi Y dengan X dan Y dengan Z.
Conditional pada Z: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \] Memuat interaksi Z dengan X dan Z dengan Y.
Model Joint Independence
Independensi antara X & Y: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} \]
Independensi antara X & Z: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XZ}_{ik} \]
Independensi antara Y & Z: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{YZ}_{jk} \]
Model Tanpa Interaksi \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k \] Model ini hanya memasukkan efek utama tanpa interaksi antar variabel.
Dalam analisis model log-linear tiga arah, pengujian interaksi dilakukan untuk mengetahui ada atau tidaknya interaksi antar variabel. Pengujian ini dilakukan secara bertahap, dimulai dari tingkat interaksi tertinggi ke yang lebih rendah. Untuk model log-linear dengan tiga peubah (X, Y, dan Z), tahapan pengujian meliputi:
Bandingkan model homogenous dengan model conditional.
Bandingkan model conditional dengan model joint independence.
Bandingkan model joint independence dengan model tanpa interaksi.
Setiap tahapan pengujian dilakukan untuk menilai kecocokan model dan menentukan struktur interaksi mana yang paling sesuai dengan data yang diamati.
Tabel berikut menyajikan data dari survei General Social Survey (GSS) tahun 1994 mengenai jenis kelamin responden, tingkat fundamentalisme, dan sikap terhadap hukuman mati untuk kasus pembunuhan. Susun dan interpretasikan model log-linear paling sederhana (paling parsimonious) untuk data ini. Jelaskan proses yang Anda lakukan dalam menentukan model terbaik serta asosiasi apa saja yang teridentifikasi. Tunjukkan juga bagaimana nilai yang diprediksi dari model menggambarkan asosiasi tersebut.
Fundamentalism | Jenis Kelamin | Mendukung | Menolak | Total |
---|---|---|---|---|
Fundamentalist | Laki-laki | 128 | 32 | 160 |
Fundamentalist | Perempuan | 123 | 73 | 196 |
Fundamentalist | Total | 251 | 105 | 356 |
Moderate | Laki-laki | 182 | 56 | 238 |
Moderate | Perempuan | 168 | 105 | 273 |
Moderate | Total | 350 | 161 | 511 |
Liberal | Laki-laki | 119 | 49 | 168 |
Liberal | Perempuan | 111 | 70 | 181 |
Liberal | Total | 230 | 119 | 349 |
Keterangan:
Fundamentalisme: Fundamentalist, Moderate, Liberal
Jenis Kelamin: Laki-laki, Perempuan
Sikap: Mendukung (Favor), Menolak (Oppose) hukuman mati
library("epitools")
library("DescTools")
## Warning: package 'DescTools' was built under R version 4.3.3
library("lawstat")
## Warning: package 'lawstat' was built under R version 4.3.3
# Input data sesuai tabel praktikum
z.fund <- factor(rep(c("1fund", "2mod", "3lib"), each = 4))
x.sex <- factor(rep(c("1M", "2F"), each = 2, times = 3))
y.fav <- factor(rep(c("1fav", "2opp"), times = 6))
counts <- c(128, 32, 123, 73, 182, 56, 168, 105, 119, 49, 111, 70)
data <- data.frame(
Fundamentalisme = z.fund,
Jenis_Kelamin = x.sex,
Sikap = y.fav,
Frekuensi = counts
)
data
Membentuk Tabel Kontingensi 3 Arah
table3d <- xtabs(Frekuensi ~ Fundamentalisme + Jenis_Kelamin + Sikap, data = data)
ftable(table3d)
## Sikap 1fav 2opp
## Fundamentalisme Jenis_Kelamin
## 1fund 1M 128 32
## 2F 123 73
## 2mod 1M 182 56
## 2F 168 105
## 3lib 1M 119 49
## 2F 111 70
Analisis Log-Linear: Tahap Pemodelan Kita akan memodelkan tabel ini menggunakan beberapa model log-linear dan membandingkan kecocokan model (parsimonious model):
Penentuan Kategori Referensi
##=============================##
# Penentuan kategori reference
##=============================##
x.sex <- relevel(x.sex, ref = "2F")
y.fav <- relevel(y.fav, ref = "2opp")
z.fund <- relevel(z.fund, ref = "3lib")
Model Saturated memasukkan semua interaksi hingga tiga arah: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \]
# Model saturated
model_saturated <- glm(counts ~ x.sex + y.fav + z.fund +
x.sex*y.fav + x.sex*z.fund + y.fav*z.fund +
x.sex*y.fav*z.fund,
family = poisson(link = "log"))
summary(model_saturated)
##
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav +
## x.sex * z.fund + y.fav * z.fund + x.sex * y.fav * z.fund,
## family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.248495 0.119523 35.545 < 2e-16 ***
## x.sex1M -0.356675 0.186263 -1.915 0.05551 .
## y.fav1fav 0.461035 0.152626 3.021 0.00252 **
## z.fund1fund 0.041964 0.167285 0.251 0.80193
## z.fund2mod 0.405465 0.154303 2.628 0.00860 **
## x.sex1M:y.fav1fav 0.426268 0.228268 1.867 0.06185 .
## x.sex1M:z.fund1fund -0.468049 0.282210 -1.659 0.09721 .
## x.sex1M:z.fund2mod -0.271934 0.249148 -1.091 0.27507
## y.fav1fav:z.fund1fund 0.060690 0.212423 0.286 0.77511
## y.fav1fav:z.fund2mod 0.008969 0.196903 0.046 0.96367
## x.sex1M:y.fav1fav:z.fund1fund 0.438301 0.336151 1.304 0.19227
## x.sex1M:y.fav1fav:z.fund2mod 0.282383 0.301553 0.936 0.34905
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2.4536e+02 on 11 degrees of freedom
## Residual deviance: 5.9952e-15 on 0 degrees of freedom
## AIC: 100.14
##
## Number of Fisher Scoring iterations: 3
exp(model_saturated$coefficients)
## (Intercept) x.sex1M
## 70.0000000 0.7000000
## y.fav1fav z.fund1fund
## 1.5857143 1.0428571
## z.fund2mod x.sex1M:y.fav1fav
## 1.5000000 1.5315315
## x.sex1M:z.fund1fund x.sex1M:z.fund2mod
## 0.6262231 0.7619048
## y.fav1fav:z.fund1fund y.fav1fav:z.fund2mod
## 1.0625694 1.0090090
## x.sex1M:y.fav1fav:z.fund1fund x.sex1M:y.fav1fav:z.fund2mod
## 1.5500717 1.3262868
Model yang digunakan adalah model log-linear saturated dengan semua efek utama, interaksi dua arah, dan interaksi tiga arah. Model ini memodelkan hubungan antara jenis kelamin (x.sex), sikap terhadap hukuman mati (y.fav), dan tingkat fundamentalisme (z.fund) terhadap frekuensi responden. Dengan hasil estimasi koefisien nya sebagai berikut:
Parameter | Estimate | Std. Error | z value | Pr(>z) |
---|---|---|---|---|
(Intercept) | 4.25 | 0.12 | 35.55 | <2e-16*** |
x.sex1M | -0.36 | 0.19 | -1.92 | 0.055 . |
y.fav1fav | 0.46 | 0.15 | 3.02 | 0.0025 ** |
z.fund1fund | 0.04 | 0.17 | 0.25 | 0.80 |
z.fund2mod | 0.41 | 0.15 | 2.63 | 0.0086 ** |
x.sex1M:y.fav1fav | 0.43 | 0.23 | 1.87 | 0.062 . |
x.sex1M:z.fund1fund | -0.47 | 0.28 | -1.66 | 0.097 . |
x.sex1M:z.fund2mod | -0.27 | 0.25 | -1.09 | 0.28 |
y.fav1fav:z.fund1fund | 0.06 | 0.21 | 0.29 | 0.78 |
y.fav1fav:z.fund2mod | 0.01 | 0.20 | 0.05 | 0.96 |
x.sex1M:y.fav1fav:z.fund1fund | 0.44 | 0.34 | 1.30 | 0.19 |
x.sex1M:y.fav1fav:z.fund2mod | 0.28 | 0.30 | 0.94 | 0.35 |
Interpretasi Koefisien:
(Intercept): Rata-rata log jumlah kasus untuk kategori referensi (Perempuan, Menolak hukuman mati, Liberal) adalah 4.25 (atau μ≈70 ).
x.sex1M: Laki-laki memiliki expected count sekitar 0.7 kali Perempuan dalam kategori referensi lainnya, namun hanya mendekati signifikansi (p = 0.055).
y.fav1fav: Mereka yang mendukung hukuman mati memiliki expected count sekitar 1.59 kali lipat dibanding yang menolak (signifikan, p = 0.0025).
z.fund1fund: Kelompok Fundamentalist tidak berbeda nyata dari Liberal (exp(0.04)≈1.04; p = 0.80).
z.fund2mod: Kelompok Moderate memiliki expected count 1.5 kali lebih besar dibanding Liberal (signifikan, p = 0.0086).
Interaksi dua & tiga arah: Sebagian besar tidak signifikan (p > 0.05), artinya tidak ada bukti kuat adanya efek gabungan antar variabel.
Goodness-of-Fit:
Residual deviance ≈0 menandakan model saturated benar-benar fit terhadap data (seluruh variasi data dijelaskan oleh model).
AIC = 100.14 dapat digunakan untuk perbandingan dengan model yang lebih sederhana.
Kesimpulan:
Model saturated ini sangat fit dengan data, namun tidak semua parameter/interaksi signifikan.
Efek utama yang paling signifikan adalah:
Sikap mendukung hukuman mati (expected count 1.6x lebih tinggi dari yang menolak)
Kelompok Moderate (expected count 1.5x lebih tinggi dari Liberal)
Tidak ditemukan bukti kuat interaksi dua atau tiga arah yang signifikan.
Model yang lebih sederhana (tanpa interaksi tiga arah) perlu dipertimbangkan untuk model final yang lebih parsimonious.
Catatan Interpretasi:
Nilai exp(coef) menyatakan rasio ekspektasi (expected count ratio) dibandingkan baseline.
Efek positif -> menaikkan expected count; Efek negatif -> menurunkan expected count.
Koefisien signifikan pada p-value < 0.05
Model log-linear homogenous memasukkan semua efek utama dan semua interaksi dua arah, tanpa interaksi tiga arah. Secara matematis, model ini dapat dituliskan sebagai berikut: \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]
# Homogenous Model
model_homogenous <- glm(counts ~ x.sex + y.fav + z.fund +
x.sex*y.fav + x.sex*z.fund + y.fav*z.fund,
family = poisson(link = "log"))
summary(model_homogenous)
##
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav +
## x.sex * z.fund + y.fav * z.fund, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.31096 0.10522 40.972 < 2e-16 ***
## x.sex1M -0.51575 0.13814 -3.733 0.000189 ***
## y.fav1fav 0.35707 0.12658 2.821 0.004788 **
## z.fund1fund -0.06762 0.14452 -0.468 0.639854
## z.fund2mod 0.33196 0.13142 2.526 0.011540 *
## x.sex1M:y.fav1fav 0.66406 0.12728 5.217 1.81e-07 ***
## x.sex1M:z.fund1fund -0.16201 0.15300 -1.059 0.289649
## x.sex1M:z.fund2mod -0.08146 0.14079 -0.579 0.562887
## y.fav1fav:z.fund1fund 0.23873 0.16402 1.455 0.145551
## y.fav1fav:z.fund2mod 0.13081 0.14951 0.875 0.381614
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 245.361 on 11 degrees of freedom
## Residual deviance: 1.798 on 2 degrees of freedom
## AIC: 97.934
##
## Number of Fisher Scoring iterations: 3
Pengujian ini menggunakan residual deviance dari kedua model (saturated dan homogenous).
Langkah-Langkah Pengujian:
H0: Tidak ada interaksi tiga arah (model homogenous sudah cukup)
H1: Ada interaksi tiga arah (model saturated diperlukan)
# Deviance antar model
Deviance.model <- model_homogenous$deviance - model_saturated$deviance
Deviance.model
## [1] 1.797977
# Derajat bebas = db model homogenous - db model saturated
derajat.bebas <- (model_homogenous$df.residual - model_saturated$df.residual)
derajat.bebas
## [1] 2
chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)
chi.tabel
## [1] 5.991465
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima H0", "Tolak H0")
Keputusan
## [1] "Terima H0"
Interpretasi Pada taraf nyata 5%, belum cukup bukti untuk menolak H0 atau dapat dikatakan bahwa tidak ada interaksi tiga arah antara jenis kelamin, fundamentalisme, dan pendapat mengenai hukuman mati.
Catatan:
Model pengurang adalah model yang lebih lengkap (lebih banyak parameter, df lebih kecil), yaitu model saturated
Derajat bebas dihitung dari selisih derajat bebas model homogenous dan saturated.
Keputusan berdasarkan perbandingan deviance model dengan chi-square tabel.
Rangkuman
Pengujian ada tidaknya interaksi tiga arah (Saturated Model vs Homogenous Model)
Hipotesis
H0: \(\lambda_{ijk}^{XYZ}=0\) (Tidak ada interaksi tiga arah; model yang terbentuk adalah model homogenous) -
H0: \(\lambda_{ijk}^{XYZ}\neq0\) (Tidak ada interaksi tiga arah; model yang terbentuk adalah model homogenous)
Tingkat Signifikansi
\(\alpha=5\%\)
Statistik Uji
\(\Delta\)Deviance = Deviance model homogenous - Deviance model saturated = 1.798 - 0.00 = 1.798
\(db\) = \(db\) model homogenous - \(db\) model saturated = 2 - 0 = 2
Daerah Penolakan
Tolak H0 jika \(\Delta\)Deviance \(\>>\) \(\chi_{0.05,db}^2 = \chi_{0.05,2}^2 = 5.991\)
Keputusan
Karena 1.798 < 5.991, maka terima H0
Interpretasi
Pada taraf nyata 5%, belum cukup bukti untuk menolak H0 atau dapat dikatakan bahwa tidak ada interaksi tiga arah antara jenis kelamin, fundamentalisme, dan pendapat mengenai hukuman mati.
Model log-linear conditional pada X memasukkan efek utama dan interaksi dua arah antara X dengan Y dan X dengan Z, tanpa interaksi antara Y dengan Z maupun interaksi tiga arah. \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \]
# Conditional Association on X
model_conditional_X <- glm(counts ~ x.sex + y.fav + z.fund +
x.sex*y.fav + x.sex*z.fund,
family = poisson(link = "log"))
summary(model_conditional_X)
##
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav +
## x.sex * z.fund, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.23495 0.08955 47.293 < 2e-16 ***
## x.sex1M -0.52960 0.13966 -3.792 0.000149 ***
## y.fav1fav 0.48302 0.08075 5.982 2.20e-09 ***
## z.fund1fund 0.07962 0.10309 0.772 0.439916
## z.fund2mod 0.41097 0.09585 4.288 1.81e-05 ***
## x.sex1M:y.fav1fav 0.65845 0.12708 5.181 2.20e-07 ***
## x.sex1M:z.fund1fund -0.12841 0.15109 -0.850 0.395405
## x.sex1M:z.fund2mod -0.06267 0.13908 -0.451 0.652274
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 245.3612 on 11 degrees of freedom
## Residual deviance: 3.9303 on 4 degrees of freedom
## AIC: 96.067
##
## Number of Fisher Scoring iterations: 4
Pengujian Ada Tidaknya Interaksi Antara Y dan Z (Homogenous Model vs Conditional Association on X)
Hipotesis
H0: \(\lambda_{jk}^{YZ}=0\) (Tidak ada interaksi antara pendapat hukuman mati (Y) dan fundamentalisme (Z)) -
H0: \(\lambda_{jk}^{YZ}\neq0\) (Ada interaksi antara pendapat hukuman mati (Y) dan fundamentalisme (Z))
Tingkat Signifikansi
\(\alpha=5\%\)
Statistik Uji
\(\Delta\)Deviance = Deviance model conditional on X - Deviance model homogenous = 3.903 - 1.798 = 2.132
\(db\) = \(db\) model homogenous - \(db\) model saturated = 4 - 2 = 2
Daerah Penolakan
Tolak H0 jika \(\Delta\)Deviance \(\>>\) \(\chi_{0.05,db}^2 = \chi_{0.05,2}^2 = 5.991\)
Keputusan
Karena 2.132 < 5.991, maka terima H0
Interpretasi
Dengan taraf nyata 5%, belum cukup bukti untuk menolak H0 atau dapat dikatakan bahwa tidak ada interaksi antara pendapat tentang hukuman mati dan fundamentalisme. Dengan kata lain, model yang terbentuk adalah model tanpa parameter \(\lambda_{jk}^{YZ}\)
# Pengujian hipotesis
# Deviance of Model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance # model_conditional_X: conditional on X, model_homogenous: homogenous
Deviance.model
## [1] 2.132302
# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (4 - 2)
derajat.bebas
## [1] 2
chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 5.991465
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"
Interpretasi Karena nilai Deviance.model = 2.13 lebih kecil dari nilai kritis chi-square tabel = 5.99 (dengan df = 2, alpha = 0.05), maka keputusan uji adalah “Terima”.
Pada taraf nyata 5%, belum cukup bukti untuk menolak H0, atau dengan kata lain tidak ada interaksi antara pendapat mengenai hukuman mati (Y) dan fundamentalisme (Z). Model yang terbentuk cukup hanya sampai dua interaksi dengan X (conditional on X), sehingga interaksi Y*Z tidak signifikan secara statistik.
Model log-linear conditional pada Y memasukkan efek utama dan interaksi dua arah antara X dengan Y dan Y dengan Z, tanpa interaksi antara X dengan Z maupun interaksi tiga arah. \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \]
# Conditional Association on Y
model_conditional_Y <- glm(counts ~ x.sex + y.fav + z.fund +
x.sex*y.fav + y.fav*z.fund,
family = poisson(link = "log"))
summary(model_conditional_Y)
##
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav +
## y.fav * z.fund, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.33931 0.09919 43.748 < 2e-16 ***
## x.sex1M -0.59345 0.10645 -5.575 2.48e-08 ***
## y.fav1fav 0.37259 0.12438 2.996 0.00274 **
## z.fund1fund -0.12516 0.13389 -0.935 0.34989
## z.fund2mod 0.30228 0.12089 2.500 0.01240 *
## x.sex1M:y.fav1fav 0.65845 0.12708 5.181 2.20e-07 ***
## y.fav1fav:z.fund1fund 0.21254 0.16205 1.312 0.18966
## y.fav1fav:z.fund2mod 0.11757 0.14771 0.796 0.42606
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 245.3612 on 11 degrees of freedom
## Residual deviance: 2.9203 on 4 degrees of freedom
## AIC: 95.057
##
## Number of Fisher Scoring iterations: 4
Pengujian Ada Tidaknya Interaksi Antara X dan Z (Homogenous Model vs Conditional Association on Y)
Hipotesis
H0: \(\lambda_{ik}^{XZ}=0\) (Tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z)) -
H0: \(\lambda_{ik}^{XZ}\neq0\) (Ada interaksi antara jenis kelamin
Tingkat Signifikansi
\(\alpha=5\%\)
Statistik Uji
\(\Delta\)Deviance = Deviance model conditional on Y - Deviance model homogenous = 2.9203 - 1.798 = 1.1223
\(db\) = \(db\) model homogenous - \(db\) model saturated = 4 - 2 = 2
Daerah Penolakan
Tolak H0 jika \(\Delta\)Deviance \(\>>\) \(\chi_{0.05,db}^2 = \chi_{0.05,2}^2 = 5.991\)
Keputusan
Karena 1.1223 < 5.991, maka terima H0
Interpretasi
Dengan taraf nyata 5%, belum cukup bukti untuk menolak H0 atau dapat dikatakan bahwa tidak ada interaksi antara jenis kelamin dan fundamentalisme. Dengan kata lain, model yang terbentuk adalah model tanpa parameter \(\lambda_{ik}^{XZ}\)
# Deviance of Model
Deviance.model <- model_conditional_Y$deviance - model_homogenous$deviance # model_conditional_Y: conditional on Y, model_homogenous: homogenous
Deviance.model
## [1] 1.122315
# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (4 - 2)
derajat.bebas
## [1] 2
chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 5.991465
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"
Interpretasi Karena nilai Deviance.model = 1.12 lebih kecil dari nilai kritis chi-square tabel = 5.99 (dengan df = 2, alpha = 0.05), maka keputusan uji adalah “Terima”.
Pada taraf nyata 5%, belum cukup bukti untuk menolak H0, atau dengan kata lain tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z). Model yang terbentuk cukup hanya sampai dua interaksi dengan Y (conditional on Y), sehingga interaksi X*Z tidak signifikan secara statistik.
Model log-linear conditional pada Z memasukkan efek utama dan interaksi dua arah antara X dengan Z dan Y dengan Z, tanpa interaksi antara X dengan Y maupun interaksi tiga arah. \[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]
# Conditional Association on Z
model_conditional_Z <- glm(counts ~ x.sex + y.fav + z.fund +
x.sex*z.fund + y.fav*z.fund,
family = poisson(link = "log"))
summary(model_conditional_Z)
##
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * z.fund +
## y.fav * z.fund, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.12255 0.10518 39.195 < 2e-16 ***
## x.sex1M -0.07453 0.10713 -0.696 0.487
## y.fav1fav 0.65896 0.11292 5.836 5.36e-09 ***
## z.fund1fund -0.06540 0.15126 -0.432 0.665
## z.fund2mod 0.33196 0.13777 2.410 0.016 *
## x.sex1M:z.fund1fund -0.12841 0.15109 -0.850 0.395
## x.sex1M:z.fund2mod -0.06267 0.13908 -0.451 0.652
## y.fav1fav:z.fund1fund 0.21254 0.16205 1.312 0.190
## y.fav1fav:z.fund2mod 0.11757 0.14771 0.796 0.426
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 245.361 on 11 degrees of freedom
## Residual deviance: 29.729 on 3 degrees of freedom
## AIC: 123.87
##
## Number of Fisher Scoring iterations: 4
Pengujian Ada Tidaknya Interaksi Antara X dan Y (Homogenous Model vs Conditional Association on Z)
Hipotesis
H0: \(\lambda_{ij}^{XY}=0\) (Tidak ada interaksi antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y)) -
H0: \(\lambda_{ij}^{XY}\neq0\) (Ada interaksi antara jenis kelamin
Tingkat Signifikansi
\(\alpha=5\%\)
Statistik Uji
\(\Delta\)Deviance = Deviance model conditional on Y - Deviance model homogenous = 29.729 - 1.798 = 27.931
\(db\) = \(db\) model homogenous - \(db\) model saturated = 3 - 2 = 1
Daerah Penolakan
Tolak H0 jika \(\Delta\)Deviance \(\>>\) \(\chi_{0.05,db}^2 = \chi_{0.05,1}^2 = 3.841\)
Keputusan
Karena 27.931 > 3.841, maka tolak H0
Interpretasi
Dengan taraf nyata 5%, menolak H0 atau dapat dikatakan bahwa ada interaksi antara jenis kelamin dan pendapat tentang hukuman mati. Dengan kata lain, model yang terbentuk adalah model parameter \(\lambda_{ij}^{XY}\)
# Deviance of Model
Deviance.model <- model_conditional_Z$deviance - model_homogenous$deviance # model_conditional_Z: conditional on Z, model_homogenous: homogenous
Deviance.model
## [1] 27.93095
# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (3 - 2)
derajat.bebas
## [1] 1
chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 3.841459
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Tolak"
Interpretasi Karena nilai Deviance.model = 27.93 jauh lebih besar dari nilai kritis chi-square tabel = 3.84 (dengan df = 1, alpha = 0.05), maka keputusan uji adalah “Tolak”.
Pada taraf nyata 5%, terdapat cukup bukti untuk menolak H0, atau dengan kata lain ada interaksi antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y). Model terbaik yang terbentuk adalah model dengan menyertakan parameter interaksi (conditional on Z).
Model | Parameter | Deviance | Jumlah Parameter | df | AIC |
---|---|---|---|---|---|
Saturated | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ | 0.000 | 12 | 0 | 100.14 |
Homogenous | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ | 1.798 | 10 | 2 | 97.934 |
Conditional on X | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ | 3.9303 | 8 | 4 | 96.067 |
Conditional on Y | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ | 2.9203 | 8 | 4 | 95.057 |
Conditional on Z | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ | 29.729 | 9 | 3 | 123.87 |
Interaksi | Pengujian | \(\Delta\)Deviance | \(\Delta\)df | Chi-Square Tabel | Keputusan | Keterangan |
---|---|---|---|---|---|---|
XYZ | Saturated vs Homogenous | 1.798 | 2 | 5.991 | Terima H0 | tidak ada interaksi |
YZ | Conditional on X vs Homogenous | 2.1323 | 2 | 5.991 | Terima H0 | tidak ada interaksi |
XZ | Conditional on Y vs Homogenous | 1.1223 | 2 | 5.991 | Terima H0 | tidak ada interaksi |
XY | Conditional on Z vs Homogenous | 27.931 | 1 | 3.841 | Tolak H0 | ada interaksi |
Dari hasil di atas diketahui bahwa asosiasi yang nyata hanya terdapat antara jenis kelamin dan pendapat mengenai hukuman mati. Sehingga, model terbaik adalah:
\[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} \]
Model terbaik adalah model log-linear tanpa interaksi tiga arah dan hanya memuat interaksi dua arah antara jenis kelamin (X) dan sikap terhadap hukuman mati (Y).
Model terbaik dipilih berdasarkan pengujian interaksi yang signifikan, yaitu hanya interaksi dua arah antara jenis kelamin (X) dan sikap terhadap hukuman mati (Y):
\[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_i + \lambda^{Y}_j + \lambda^{Z}_k + \lambda^{XY}_{ij} \]
# Model Terbaik
bestmodel <- glm(counts ~ x.sex + y.fav + z.fund +
x.sex*y.fav,
family = poisson(link = "log"))
summary(bestmodel)
##
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav,
## family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.26518 0.07794 54.721 < 2e-16 ***
## x.sex1M -0.59345 0.10645 -5.575 2.48e-08 ***
## y.fav1fav 0.48302 0.08075 5.982 2.20e-09 ***
## z.fund1fund 0.01986 0.07533 0.264 0.792
## z.fund2mod 0.38130 0.06944 5.491 4.00e-08 ***
## x.sex1M:y.fav1fav 0.65845 0.12708 5.181 2.20e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 245.3612 on 11 degrees of freedom
## Residual deviance: 4.6532 on 6 degrees of freedom
## AIC: 92.79
##
## Number of Fisher Scoring iterations: 4
Model | AIC |
---|---|
Saturated | 100.14 |
Homogenous | 97.934 |
Conditional on X | 96.067 |
Conditional on Y | 95.057 |
Conditional on Z | 123.87 |
Model Terbaik | 92.79 |
Dari hasil di atas, terlihat bahwa model terbaik memiliki AIC yang lebih rendah dibandingkan dengan model lainnya seperti saturated, homogennous, dan conditional model.
# Interpretasi koefisien model terbaik
data.frame(
koef = bestmodel$coefficients,
exp_koef = exp(bestmodel$coefficients)
)
Koefisien | Nilai Koefisien | Exp(Nilai Koefisien) |
---|---|---|
Intercept | 4.265 | 71.1776 |
x.sex1M | -0.5934 | 0.5524 |
y.fav1fav | 0.483 | 1.621 |
z.fund1fund | 0.0198 | 1.02 |
z.fund2mod | 0.3813 | 1.464 |
x.sex1M:y.fav1fav | 0.685 | 1.9318 |
Interpretasi Koefisien Model Terbaik
\(\exp(\lambda_{1M}^X) = \exp(-0.593) = 0.552 \rightarrow nilai odds\)
Tanpa memperhatikan fundamentalisme dan pendapat mengenai hukuman
mati, peluang seseorang berjenis kelamin laki-laki adalah 0,55 kali
dibandingkan perempuan.
Atau, peluang seseorang berjenis kelamin perempuan adalah \(1/0.55 = 1.81\) kali dibandingkan
laki-laki.
\(\exp(\lambda_{1fav}^Y) = \exp(0.483) = 1.621 \rightarrow nilai odds\)
Tanpa memperhatikan jenis kelamin dan fundamentalisme, peluang seseorang mendukung hukuman mati adalah 1,621 kali dibandingkan yang menolak.
\(\exp(\lambda_{1fund}^Z) = \exp(0.01986) = 1.02 \rightarrow nilai odds\)
Tanpa memperhatikan jenis kelamin dan pendapat mengenai hukuman mati, peluang seseorang fundamentalist adalah 1,02 kali dibandingkan liberal.
\(\exp(\lambda_{2mod}^Z) = \exp(0.381) = 1.464 \rightarrow nilai odds\)
Tanpa memperhatikan jenis kelamin dan pendapat mengenai hukuman mati, peluang seseorang moderate adalah 1,464 kali dibandingkan liberal.
\(\exp(\lambda_{1M,1fav}^XY) = \exp(0.658) = 1.932 \rightarrow nilai odds ratio\)
Tanpa memperhatikan fundamentalisme, odds mendukung hukuman mati (dibandingkan menolak) jika dia laki-laki adalah 1,932 kali dibandingkan odds yang sama jika dia perempuan.
Secara manual, nilai fitted value diperoleh dengan cara sebagai berikut:
\[\begin{align*} \\ \hat{\mu}_{111} &= \exp\left( \lambda + \lambda^{x}_{1m} + \lambda^{y}_{1fav} + \lambda^{z}_{fund} + \lambda^{xy}_{1m,1fav} \right) \\ \\ &= \exp\left( 4.265 - 0.593 + 0.483 + 0.01986 + 0.658 \right) \\ \\ &= \exp(4.833) = 125.595 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{112} &= \exp\left( \lambda + \lambda^{x}_{1m} + \lambda^{y}_{1fav} + \lambda^{z}_{2mod} + \lambda^{xy}_{1m,1fav} \right) \\ \\ &= \exp\left( 4.265 - 0.593 + 0.483 + 0.381 + 0.658 \right) \\ \\ &= \exp(5.195) = 180.279 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{113} &= \exp\left( \lambda + \lambda^{x}_{1m} + \lambda^{y}_{1fav} + \lambda^{z}_{3lib} + \lambda^{xy}_{1m,1fav} \right) \\ \\ &= \exp\left( 4.265 - 0.593 + 0.483 + 0 + 0.658 \right) \\ \\ &= \exp(4.813) = 123.126 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{121} &= \exp\left( \lambda + \lambda^{x}_{1m} + \lambda^{y}_{2opp} + \lambda^{z}_{fund} + \lambda^{xy}_{1m,2opp} \right) \\ \\ &= \exp\left( 4.265 - 0.593 + 0 + 0.01986 + 0 \right) \\ \\ &= \exp(3.692) = 40.109 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{122} &= \exp\left( \lambda + \lambda^{x}_{1m} + \lambda^{y}_{2opp} + \lambda^{z}_{2mod} + \lambda^{xy}_{1m,2opp} \right) \\ \\ &= \exp\left( 4.265 - 0.593 + 0 + 0.381 + 0 \right) \\ \\ &= \exp(4.053) = 57.572 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{123} &= \exp\left( \lambda + \lambda^{x}_{1m} + \lambda^{y}_{2opp} + \lambda^{z}_{3lib} + \lambda^{xy}_{1m,2opp} \right) \\ \\ &= \exp\left( 4.265 - 0.593 + 0 + 0 + 0 \right) \\ \\ &= \exp(3.672) = 39.320 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{211} &= \exp\left( \lambda + \lambda^{x}_{2f} + \lambda^{y}_{1fav} + \lambda^{z}_{fund} + \lambda^{xy}_{2f,1fav} \right) \\ \\ &= \exp\left( 4.265 + 0 + 0.483 + 0.01986 + 0 \right) \\ \\ &= \exp(4.768) = 117.691 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{212} &= \exp\left( \lambda + \lambda^{x}_{2f} + \lambda^{y}_{1fav} + \lambda^{z}_{2mod} + \lambda^{xy}_{2f,1fav} \right) \\ \\ &= \exp\left( 4.265 + 0 + 0.483 + 0.381 + 0 \right) \\ \\ &= \exp(5.1295) = 168.933 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{213} &= \exp\left( \lambda + \lambda^{x}_{2f} + \lambda^{y}_{1fav} + \lambda^{z}_{3lib} + \lambda^{xy}_{2f,1fav} \right) \\ \\ &= \exp\left( 4.265 + 0 + 0.483 + 0 + 0 \right) \\ \\ &= \exp(4.748) = 115.377 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{221} &= \exp\left( \lambda + \lambda^{x}_{2f} + \lambda^{y}_{2opp} + \lambda^{z}_{fund} + \lambda^{xy}_{2f,2opp} \right) \\ \\ &= \exp\left( 4.265 + 0 + 0 + 0.01986 + 0 \right) \\ \\ &= \exp(4.285) = 72.605 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{222} &= \exp\left( \lambda + \lambda^{x}_{2f} + \lambda^{y}_{2opp} + \lambda^{z}_{2mod} + \lambda^{xy}_{2f,2opp} \right) \\ \\ &= \exp\left( 4.265 + 0 + 0 + 0.381 + 0 \right) \\ \\ &= \exp(4.646) = 104.217 \\ \end{align*}\] \[\begin{align*} \\ \hat{\mu}_{223} &= \exp\left( \lambda + \lambda^{x}_{2f} + \lambda^{y}_{2opp} + \lambda^{z}_{3lib} + \lambda^{xy}_{2f,2opp} \right) \\ \\ &= \exp\left( 4.265 + 0 + 0 + 0 + 0 \right) \\ \\ &= \exp(4.265) = 71.178 \\ \end{align*}\]
Keterangan: Nilai \(\hat{\mu}_{ijk}\) akan sama apapun referensi dari kategori peubahnya yang digunakan.
Dengan menggunakan R:
# Fitted values dari model terbaik
data.frame(
Fund = z.fund,
sex = x.sex,
favor = y.fav,
counts = counts,
fitted = bestmodel$fitted.values
)