Puji syukur penulis panjatkan ke hadirat Tuhan Yang Maha Esa, karena dengan rahmat dan karunia-Nya, penulisan ebook ini yang berjudul Analisis Data Kategori dapat diselesaikan dengan baik.
Ebook ini disusun sebagai bagian dari upaya untuk menyediakan sumber belajar yang sistematis, aplikatif, dan mudah dipahami dalam bidang analisis data kategori. Dalam dunia riset dan industri, data kategori sering muncul dalam bentuk hasil survei, data medis, pilihan konsumen, dan berbagai konteks lainnya. Oleh karena itu, pemahaman terhadap teknik analisis yang sesuai menjadi hal yang sangat penting.
Materi dalam ebook ini mencakup pengantar teori dasar, model-model statistik yang umum digunakan seperti regresi logistik dan model multinomial, serta implementasi praktis menggunakan perangkat lunak R. Dengan pendekatan berbasis studi kasus dan data simulasi, pembaca tidak hanya dibekali konsep, tetapi juga kemampuan menerapkan langsung teknik analisis tersebut pada data nyata.
Penulisan ebook ini tidak lepas dari tantangan, baik dalam menyederhanakan konsep statistik yang kompleks, maupun dalam menyusun contoh yang relevan dan aplikatif. Oleh karena itu, masukan dari pembaca sangat penulis harapkan untuk perbaikan di masa yang akan datang.
Ucapan terima kasih penulis sampaikan kepada para dosen, kolega, serta komunitas pengguna R yang telah memberikan inspirasi dan referensi dalam menyusun buku ini. Semoga ebook ini dapat memberikan kontribusi nyata dalam proses pembelajaran dan pengembangan analisis data kategori di berbagai bidang.
Jatinangor, 12 Juni 2025
Stephani Julieta
Dalam statistik, data kategori merupakan jenis data yang terdiri dari kategori atau kelompok, bukan angka yang memiliki nilai kontinu. Data ini sering kali digunakan dalam berbagai disiplin ilmu untuk memahami pola, hubungan, dan tren yang tidak dapat diukur secara langsung menggunakan skala numerik. Contoh umumdari data kategori mencakup jenis kelamin (laki-laki/perempuan), status pernikahan (menikah/belum menikah), tingkat pendidikan (rendah/menengah/tinggi), dan preferensi konsumen (setuju/netral/tidak se tuju). Analisis data kategori memainkan peran penting dalam eksplorasi dan interpretasi data yang bersifat nom inal atau ordinal. Berbeda dengan data kontinu, analisis data kategori memerlukan pendekatan khusus, seperti tabel kontingensi, uji chi-square, analisis regresi logistik, dan metode estimasi berbasis model proba bilitas. Dengan berkembangnya teknologi dan kecerdasan buatan, analisis data kategori juga semakin banyak diterapkan dalam machine learning dan big data analytics
Analisis data kategori memiliki berbagai tujuan utama yang membantu dalam pengambilan keputusan berba sis data. Beberapa tujuan utama dari analisis ini meliputi:
Analisis data kategori memungkinkan peneliti dan praktisi untuk mengidentifikasi pola-pola yang tersem bunyi dalam data. Misalnya, dalam penelitian pemasaran, analisis ini dapat digunakan untuk memahami preferensi konsumen berdasarkan kelompok demografis tertentu.
Dalam banyak kasus, hubungan antara dua atau lebih variabel kategori menjadi perhatian utama. Misalnya, dalam penelitian kesehatan, analisis data kategori dapat membantu memahami hubungan antara gaya hidup dan penyakit tertentu.
Dengan memahami pola dan hubungan dalam data kategori, pengambil keputusan dapat membuat strategi yang lebih tepat sasaran. Misalnya, dalam kebijakan publik, analisis data kategori dapat digunakan untuk menentukan kebijakan sosial berdasarkan segmentasi masyarakat.
Banyak model prediktif yang menggunakan data kategori sebagai salah satu inputnya, seperti regresi logistik untuk memprediksi kejadian biner (misalnya, apakah seorang pasien memiliki risiko tinggi terkena penyakit atau tidak).
Analisis data kategori adalah teknik statistik yang digunakan untuk menganalisis variabel yang bersifat kategorik
• Nominal: Tidak memiliki urutan (contoh: warna, jenis
kelamin).
• Ordinal: Memiliki urutan (contoh: tingkat pendidikan, tingkat
kepuasan)
• Biner: Jenis data kategorik yang hanya memiliki dua kemungkinan
nilai atau kategori (contoh: benar/salah, sukses/gagal,
sehat/sakit).
• Multikategori: Jenis data kategorik yang memiliki lebih dari dua
kategori. Kategori-kategori ini bisa ordinal atau nominal (contoh:
tingkat pendidikan)
Data kategorik berbeda dari data kuantitatif karena tidak dapat diukur dalam skala numerik kontinu. Data kategorik menyatakan jenis atau kelompok, sedangkan data kuantitatif menyatakan jumlah atau ukuran.
Analisis data kategori memiliki manfaat luas dalam berbagai bidang, baik di sektor akademik maupun industri. Berikut adalah beberapa bidang utama dimana analisis ini banyak diterapkan:
Dalam ilmu sosial dan psikologi, analisis data kategori digunakan untuk memahami perilaku manusia, opini publik, dan faktor sosial lainnya. Misalnya:
• Survei kepuasan pelanggan menggunakan skala Likert (sangat puas
hingga sangat tidak puas).
• Studi tentang hubungan antara faktor sosial-ekonomi dan tingkat
pendidikan seseorang.
•Penelitian tentang efek terapi psikologis terhadap kelompok pasien
tertentu.
Analisis data kategori memiliki peran yang sangat penting dalam bidang kesehatan dan kedokteran karena banyak data yang dikumpulkan bersifat kategorik, seperti status diagnosis, jenis kelamin, golongan darah, tingkat keparahan penyakit, dan respons terhadap pengobatan. Beberapa manfaat utamanya adalah:
• Mengidentifikasi faktor dan risiko penyakit.
• Mengevaluasi efektivitas intervensi medis.
• Memprediksi hasil klinis pasien.
Dalam dunia pemasaran dan bisnis, analisis data kategori memainkan peranan penting dalam memahami perilaku konsumen, segmentasi pasar, dan pengambilan keputusan strategis. Banyak informasi dalam konteks bisnis bersifat kategorik, seperti jenis produk, preferensi pelanggan, saluran distribusi, atau tingkat kepuasan.Berikut beberapa manfaat utamanya:
• Segmentasi pasar yang lebih efektif.
• Mengetahui preferensi dan perilaku pelanggan.
• Mengevaluasi kepuasan pelanggan.
Analisis data kategori sangat membantu dalam mengkaji berbagai aspek pendidikan, karena banyak informasi yang bersifat non-numerik dan berbentuk klasifikasi. Beberapa manfaatnya:
• Mengukur pencapaian akademik berdasarkan karakteristik siswa.
• Menganalisis faktor yang memengaruhi partisipasi pendidikan.
• Mengevaluasi efektivitas program pendidikan.
• Mendeteksi kesenjangan pendidikan.
Dalam bidang ini, data kategorik digunakan untuk mengelompokkan masyarakat dan program kebijakan guna memastikan pelayanan yang lebih tepat sasaran.Manfaatnya antara lain:
• Membantu perumusan kebijakan yang inklusif, dengan memahami
kebutuhan berdasarkan kategori masyarakat seperti umur, status
pekerjaan, dan wilayah domisili.
• Mengevaluasi dampak program pemerintah.
• Mendukung pengambilan keputusan yang berbasis data.
Dalam bidang ini, data kategorik digunakan untuk menganalisis pola
kejahatan, mengidentifikasi pelaku, dan merancang strategi
penanggulangan. Manfaatnya antara lain:
• Mengklasifikasikan jenis kejahatan (pencurian, penipuan, kekerasan)
untuk mengetahui jenis yang paling dominan di suatu wilayah.
• Menganalisis profil pelaku dan korban berdasarkan kategori usia, jenis
kelamin, atau status sosial untuk keperluan preventif.
• Membantu pemetaan wilayah rawan kejahatan berdasarkan kategori daerah
(perkotaan/pedesaan), waktu kejadian (siang/malam), dan lokasi (rumah,
jalan umum).
Berbagai metode dapat digunakan dalam analisis data kategori, tergantung pada tujuan penelitian. Beber apa metode umum meliputi:
Digunakan untuk menguji hubungan antara dua variabel kategori. Contohnya, menguji apakah ada hubungan antara tingkat pendidikan dan status pekerjaan.
Digunakan untuk memprediksi probabilitas suatu kejadian berdasarkan variabel kategori. Contohnya, memprediksi apakah seorang pelanggan akan membeli produk berdasarkan kategori pref erensi mereka.
Digunakan untuk memahami hubungan antara berbagai kategori dalam satu dataset. Contohnya, analisis tentang preferensi makanan berdasarkan kelompok usia.
Metode machine learning yang sering digunakan untuk klasifikasi berbasis kategori. Contohnya, mengklasifikasikan pelanggan berdasarkan tingkat loyalitas mereka.
Analisis data kategori merupakan bagian penting dari analisis statistik yang memiliki aplikasi luas dalam berbagai bidang. Dengan pendekatan yang tepat, analisis ini dapat membantu dalam memahami pola, hubungan, dan tren dalam data yang bersifat kategori. Selain itu, metode analisis data kategori seperti tabel kontingensi, uji chi-square, regresi logistik, dan machine learning terus berkembang seiring dengan kemajuan teknologi, memungkinkan pengambilan keputusan yang lebih akurat dan berbasis data. Dengan demikian, pemahaman yang baik tentang analisis data kategori sangat penting bagi peneliti, praktisi bisnis, pembuat kebijakan, dan profesional dari berbagai disiplin ilmu untuk menghasilkan wawasan yang lebih dalam dan keputusan yang lebih tepat.
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 percobaan biner, yaitu percobaan yang memiliki dua kemungkinan hasil:
Fungsi probabilitasnya:
\[ P(X = x) = p^x (1 - p)^{1 - x}, \quad x \in \{0, 1\} \] dengan:
Contoh Variabel Acak Bernoulli
Perhitungan dengan R
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
set.seed(123)
bernoulli_sample <- rbinom(n = 15, size = 2, prob = 0.5) # 15 percobaan Bernoulli
bernoulli_sample
## [1] 1 2 1 2 2 0 1 2 1 1 2 1 1 1 0
Distribusi Binomial adalah generalisasi dari distribusi Bernoulli yang digunakan untuk n kali percobaan independen yang masing-masing memiliki dua kemungkinan hasil (sukses atau gagal). Jika setiap percobaan memiliki probabilitas sukses 𝑝, maka distribusi Binomial memiliki fungsi probabilitas:
\[ P(Y = k) = \binom{n}{k} p^k (1 - p)^{n - k} \]
dengan:
Contoh Variabel Acak Binomial: - Jumlah keberhasilan dalam 10 kali
lemparan koin
- Jumlah pasien yang sembuh setelah diberikan obat tertentu dalam suatu
studi klinis.
Perhitungan dengan R
set.seed(123)
binomial_sample <- rbinom(n = 15, size = 8, prob = 0.5) # 15 percobaan Binomial\ dengan 8 ulangan
binomial_sample
## [1] 3 5 4 6 6 2 4 6 4 4 6 4 5 4 2
Distribusi Multinomial adalah generalisasi lebih lanjut dari distribusi Binomial, digunakan ketika setiap percobaan memiliki lebih dari dua kemungkinan hasil. Jika suatu eksperimen dilakukan 𝑛 kali,dan setiap percobaan dapat menghasilkan salah satu dari 𝑘 kategori dengan probabilitas 𝑝1,𝑝2,…,𝑝𝑘, maka distribusi probabilitasnya:
\[ P(Y_1 = y_1, Y_2 = y_2, \dots, Y_k = y_k) = \frac{n!}{y_1! y_2! \dots y_k!} \cdot p_1^{y_1} p_2^{y_2} \dots p_k^{y_k} \]
dengan syarat:
Contoh Variabel Acak Multinomial:
Contoh Kasus
Misalkan seorang pelanggan memilih satu dari tiga merek kopi setiap pagi:
Dari survei diketahui probabilitas pilihan pelanggan:
Jika terdapat 10 pelanggan, berapa probabilitas bahwa:
Distribusi ini mengikuti Multinomial(n = 10, prob = c(0.5, 0.3, 0.2))
Perhitungan Teoritis
Rumus peluang distribusi multinomial:
\[ P(X_1 = x_1, X_2 = x_2, ..., X_k = x_k) = \frac{n!}{x_1!x_2!...x_k!} p_1^{x_1} p_2^{x_2} ... p_k^{x_k} \] Dengan:
Perhitungan di R
# Parameter
n <- 10
x <- c(5, 3, 2)
p <- c(0.5, 0.3, 0.2)
# Fungsi menghitung probabilitas multinomial
prob <- factorial(n) / (factorial(x[1]) * factorial(x[2]) * factorial(x[3])) *
p[1]^x[1] * p[2]^x[2] * p[3]^x[3]
prob
## [1] 0.08505
set.seed(123)
# Simulasi satu percobaan multinomial
multinomial_sample <- rmultinom(n = 2, size = 10, prob = p)
multinomial_sample
## [,1] [,2]
## [1,] 4 5
## [2,] 3 2
## [3,] 3 3
Distribusi Poisson adalah distribusi probabilitas diskret yang menyatakan probabilitas sejumlah kejadian terjadi dalam suatu interval waktu atau ruang tertentu, dengan asumsi bahwa kejadian tersebut terjadi secara acak dan independen, serta rata-rata kejadiannya tetap.
Distribusi ini cocok digunakan untuk memodelkan:
Rumus fungsi probabilitas dari distribusi Poisson adalah:
\[
P(X = x) = \frac{\lambda^x e^{-\lambda}}{x!}
\]
Contoh Variabel Acak Poisson
• Jumlah panggilan telepon masuk ke pusat layanan dalam satu
jam
• Jumlah kecelakaan lalu lintas di satu jalan dalam sehari
set.seed(123)
poisson_sample <- rpois(20, lambda = 2) # 20 sampel dengan rata-rata kejadian 2
poisson_sample
## [1] 1 3 2 4 4 0 2 4 2 2 5 2 3 2 0 4 1 0 1 5
Dalam analisis data kategori, desain sampling (rancangan pengambilan sampel) sangat penting karena dapat memengaruhi kualitas hasil analisis dan generalisasi terhadap populasi. Desain sampling adalah cara atau strategi dalam memilih unit observasi dari suatu populasi untuk dikumpulkan dan dianalisis. Dalam konteks data kategorik, desain ini sangat menentukan proporsi masing-masing kategori dalam sampel. Secara umum, desain sampling dalam analisis data kategori dapat diklasifikasikan ke dalam dua pendekatan utama, yaitu prospective sampling dan retrospective sampling. Masing-masing pendekatan ini memiliki karakteristik dan metode sampling yang berbeda, yang sering digunakan dalam penelitian eksperimental maupun observasional seperti eksperimen, studi kohort, dan studi kasus-kontrol.
Prospective sampling (pengambilan sampel prospektif) adalah metode pengambilan sampel dalam penelitian di mana partisipan atau unit observasi dipilih terlebih dahulu, kemudian diikuti secara waktu ke depan untuk mengamati atau mencatat kejadian atau hasil yang terjadi.
Dengan kata lain, dalam metode ini, peneliti mulai dari sekarang dan mengikuti peserta secara prospektif (ke depan) dalam waktu untuk melihat apakah mereka akan mengalami outcome tertentu.
Karakteristik Utama
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 (SRS): Setiap individu dalam populasi memiliki
probabilitas yang sama untuk dipilih.
• Stratified Random Sampling: Populasi dibagi menjadi strata berdasarkan
karakteristik tertentu, lalu sampel diambil secara acak dari setiap
strata.
• Cluster Sampling: Populasi dibagi menjadi kelompok-kelompok (cluster),
kemudian beberapa cluster dipilih secara acak untuk dianalisis.
Studi kohort adalah penelitian observasional dimana kelompok individu
dengan karakteristik tertentu diikuti dari waktu ke waktu untuk
mengamati kejadian yang dipelajari. Jenis sampling yang umum dalam studi
kohort meliputi: • Census Sampling: Seluruh anggota dalam populasi
tertentu diikutsertakan dalam penelitian.
• Systematic Sampling: Subjek dipilih berdasarkan interval tertentu dari
daftar populasi.
• Matched Sampling: Setiap individu dalam kelompok kohort dipasangkan
dengan individu serupa dalam kelompok lain berdasarkan variabel
tertentu.
Retrospective sampling adalah metode dimana data dikumpulkan dari peristiwa yang telah terjadi sebelumnya. Teknik ini sering digunakan dalam studi observasional yang mencari hubungan antara faktor risiko dan hasil tertentu.
Dalamstudi kasus-kontrol, sekelompok individu dengan kondisi tertentu
(kasus) dibandingkan dengan kelompok tanpa kondisi tersebut (kontrol).
Teknik sampling yang sering digunakan meliputi:
• Purposive Sampling: Pemilihan sampel berdasarkan karakteristik yang
relevan dengan tujuan penelitian.
• Snowball Sampling: Responden awal membantu merekrut subjek lain yang
memiliki karakteristik serupa.
• Incidence Density Sampling: Kasus dan kontrol dipilih dari populasi
yang sama dengan memperhitungkan periode waktu kemunculan kasus.
Dalam studi kohort retrospektif, data historis digunakan untuk
mengelompokkan individu berdasarkan paparan dan kemudian menganalisis
hasil yang terjadi. Teknik sampling yang sering digunakan
meliputi:
• Convenience Sampling: Subjek dipilih berdasarkan ketersediaan data
yang sudah ada.
• Quota Sampling: Sampel dipilih untuk mencerminkan proporsi tertentu
dalam populasi.
• Case-Based Sampling: Sampel dipilih berdasarkan karakteristik kasus
yang telah terjadi
Jenis Studi | Pendekatan | Metode Sampling | Keuntungan | Kelemahan |
---|---|---|---|---|
Eksperimen | Prospective | SRS, Stratified, Cluster | Kontrol tinggi terhadap variabel, hubungan sebab akibat dapat dianalisis | Biaya tinggi, etika dan validitas perlu diperhatikan |
Studi Kohort | Prospective | Census, Systematic, Matched | Dapat mengamati perkembangan kejadian dalam jangka panjang | Membutuhkan waktu lama, risiko kehilangan partisipan |
Studi Kasus Kontrol | Retrospective | Purposive, Snowball, Incidence | Mudah dan cepat dilakukan, efisien untuk penyakit langka | Sulit mengontrol variabel pengganggu, rentan bias recall |
Studi Kohort Retrospektif | Retrospective | Density |
Convenience, Quota, Case-Based | Memanfaatkan data historis, lebih murah daripada studi kohort | Ketergantungan pada kualitas data historis, bisa terjadi missing data |
Desain sampling dalam analisis data kategori sangat bergantung pada pendekatan yang digunakan, apakah itu prospective atau retrospective. Pemilihan metode sampling yang sesuai dalam eksperimen, studi kohort, dan studi kasus-kontrol dapat meningkatkan validitas penelitian serta memastikan hasil yang dapat digeneralisasikan. Oleh karena itu, pemahaman terhadap karakteristik masing-masing metode sampling menjadi penting dalam perencanaan penelitian yang robust dan berkualitas.
Tabel kontingensi 2x2 adalah tabel yang digunakan untuk menyajikan hubungan antara dua variabel kategorik, masing-masing dengan dua kategori. Tabel ini sering digunakan dalam analisis statistik seperti uji Chi-Square dan uji Fisher’s Exact Test untuk menguji hubungan antara variabel.
Berikut adalah struktur tabel kontingensi 2x2:
Col1 | Kategori 1 (+) | Kategori 2 (-) | Total |
---|---|---|---|
Group 1 | n11 | n12 | n1. |
Group 2 | n21 | n22 | n2. |
Total | n.1 | n.2 | n |
• 𝑛11 = Jumlah kasus dalam kategori positif dari Grup
1
• 𝑛12 = Jumlah kasus dalam kategori negatif dari Grup 1
• 𝑛21 = Jumlah kasus dalam kategori positif dari Grup 2
• 𝑛22 = Jumlah kasus dalam kategori negatif dari Grup 2
• 𝑛1. = Total observasi dalam Grup 1 (𝑛1. =𝑛11 +𝑛12)
• 𝑛2. = Total observasi dalam Grup 2 (𝑛2. =𝑛21 +𝑛22)
• 𝑛.1 = Total observasi dalam Kategori 1 (𝑛.1 =𝑛11
+𝑛21)
• 𝑛.2 = Total observasi dalam Kategori 2 (𝑛.2 =𝑛12
+𝑛22)
• 𝑛 = Total keseluruhan sampel (𝑛=𝑛11 +𝑛12 +𝑛21 +𝑛22)
Berikut adalah contoh kasus dari tabel kontingensi 2x2:
Misalkan sebuah penelitian ingin menganalisis hubungan antara kebiasaan merokok dan kejadian penyakit jantung pada 200 individu. Data yang diperoleh disajikan dalam tabel kontingensi berikut:
Penyakit Jantung (+) | Penyakit Jantung (-) | Total | |
---|---|---|---|
Merokok | 50 | 30 | 80 |
Tidak Merokok | 20 | 100 | 120 |
Total | 70 | 130 | 200 |
Peluang bersama adalah probabilitas dari kombinasi tertentu dalam tabel kontingensi. Rumusnya:
\[ P(A \cap B) = \frac{n(A \cap B)}{n_{total}} \]
Perhitungannya:
n_total <- 200
table_data <- matrix(c(50, 30, 20, 100), nrow = 2, byrow = TRUE,
dimnames = list(c("Merokok", "Tidak Merokok"),
c("Penyakit Jantung", "Tidak Penyakit Jantung")))
P_joint <- table_data / n_total
P_joint
## Penyakit Jantung Tidak Penyakit Jantung
## Merokok 0.25 0.15
## Tidak Merokok 0.10 0.50
Peluang marginal (marginal probability) adalah peluang suatu peristiwa terjadi tanpa mempertimbangkan peristiwa lainnya. Peluang ini diperoleh dengan menjumlahkan peluang bersama dari suatu tabel kontingensi di sepanjang baris atau kolom tertentu.
Peluang marginal diperoleh dengan menjumlahkan nilai dalam satu baris atau kolom:
\[ P(A) = \frac{n(A)}{n_{total}} \]
Perhitungannya:
P_marginal_M <- rowSums(table_data) / n_total
P_marginal_J <- colSums(table_data) / n_total
P_marginal_M
## Merokok Tidak Merokok
## 0.4 0.6
P_marginal_J
## Penyakit Jantung Tidak Penyakit Jantung
## 0.35 0.65
Peluang bersyarat (conditional probability) adalah peluang suatu peristiwa terjadi dengan syarat bahwa peristiwa lain sudah terjadi. Dalam notasi probabilitas, peluang bersyarat dari A yang terjadi jika B sudah terjadi ditulis sebagai:
\[ P(A | B) = \frac{P(A \cap B)}{P(B)} \]
Perhitungannya:
# Definisi nilai
total <- 200
merokok <- 80
tidak_merokok <- 120
penyakit_jantung <- 70
tidak_penyakit_jantung <- 130
merokok_dan_penyakit <- 50
merokok_dan_tidak_penyakit <- 30
tidak_merokok_dan_penyakit <- 20
tidak_merokok_dan_tidak_penyakit <- 100
# Peluang Bersyarat
# P(Merokok | Jantung)
p_penyakit_given_merokok <- merokok_dan_penyakit / merokok
# P(Merokok | Tidak Jantung)
p_penyakit_given_tidak_merokok <- merokok_dan_tidak_penyakit / merokok
# P(Tidak Merokok | Jantung)
p_merokok_given_penyakit <- tidak_merokok_dan_penyakit / tidak_merokok
# P(Tidak Merokok | Tidak Jantung)
p_merokok_given_tidak_penyakit <- tidak_merokok_dan_tidak_penyakit / tidak_merokok
# Tampilkan hasil
cat("P(Penyakit Jantung | Merokok) =", round(p_penyakit_given_merokok, 3), "\n")
## P(Penyakit Jantung | Merokok) = 0.625
cat("P(Penyakit Jantung | Tidak Merokok) =", round(p_penyakit_given_tidak_merokok, 3), "\n")
## P(Penyakit Jantung | Tidak Merokok) = 0.375
cat("P(Merokok | Penyakit Jantung) =", round(p_merokok_given_penyakit, 3), "\n")
## P(Merokok | Penyakit Jantung) = 0.167
cat("P(Merokok | Tidak Penyakit Jantung) =", round(p_merokok_given_tidak_penyakit, 3), "\n")
## P(Merokok | Tidak Penyakit Jantung) = 0.833
Interpretasi:
• Peluang bersama menunjukkan probabilitas gabungan dari kejadian
tertentu dalam tabel.
• Peluang marginal menunjukkan probabilitas suatu kejadian tanpa
mempertimbangkan variabel lain.
• Peluang bersyarat menunjukkan bagaimana probabilitas berubah ketika
informasi tentang variabel lain diberikan.
Jika 𝑃(Jantung|Merokok) >𝑃(Jantung|Tidak Perokok), maka ini menunjukkan bahwa Merokok lebih berisiko terkena Penyakit Jantung dibandingkan Tidak Merokok.
• Tabel kontingensi 2 × 2 membantu dalam memahami hubungan antara dua
variabel kategori.
• Peluang bersama, peluang marginal, dan peluang bersyarat adalah dasar
untuk memahami hubungan statistik antar variabel dalam tabel
kontingensi.
• Perhitungan manual dan implementasi dalam R membantu dalam
menganalisis data secara lebih akurat dan efisien.
Dalam analisis statistik, asosiasi dalam tabel kontingensi 2 × 2 digunakan untuk menentukan hubungan antara dua variabel kategori. Sebuah tabel kontingensi 2×2 menunjukkan frekuensi kejadian dua variabel dengan dua kategori, sehingga memungkinkan kita untuk menilai apakah terdapat hubungan statistik di antara mereka.
Analisis asosiasi ini sering diterapkan dalam berbagai bidang seperti
epidemiologi, riset sosial, dan eksperimen klinis. Contohnya:
• Epidemiologi: Meneliti hubungan antara kebiasaan
merokok dan kanker paru-paru.
• Eksperimen Klinis: Mengukur efektivitas suatu
pengobatan terhadap penyakit.
• Riset Sosial: Memeriksa hubungan antara tingkat
pendidikan dan tingkat pekerjaan.
Dalam tabel 2×2,kita dapat menghitung ukuran asosiasi seperti:
• Risk Difference (RD): Mengukur selisih risiko antara
dua kelompok.
• Relative Risk (RR): Mengukur perbandingan risiko
antara dua kelompok.
• Odds Ratio (OR): Membandingkan peluang kejadian
antara dua kelompok.
• Uji Chi-Square & Fisher’s Exact Test: Untuk
menguji apakah hubungan antara dua variabel signifikan secara
statistik.
Analisis ini menjadi dasar untuk memahami hubungan antar variabel dan mengambil keputusan berbasis data di berbagai bidang ilmu.
Risk Difference (RD) atau Perbedaan Risiko adalah ukuran absolut dalam epidemiologi yang menggambarkan perbedaan antara probabilitas kejadian suatu hasil dalam dua kelompok yang berbeda. RD dihitung sebagai selisih antara risiko kejadian dalam kelompok terpapar dan risiko kejadian dalam kelompok tidak terpapar.
\[ RD = \left( \frac{n_{11}}{n_{1.}} \right) - \left( \frac{n_{21}}{n_{2.}} \right) \]
\[ RD = P(J | M) - P(J | M) \] Contoh perhitungan dalam R:
RD <- function(n11, n12, n21, n22) {
(n11 / (n11 + n12))- (n21 / (n21 + n22))
}
RD(60, 40, 50, 50)
## [1] 0.1
Relative Risk (RR) atau Risiko Relatif adalah ukuran yang digunakan dalam epidemiologi untuk membandingkan risiko kejadian suatu peristiwa (misalnya penyakit atau kondisi tertentu) antara dua kelompok, yaitu kelompok yang terpapar dan kelompok yang tidak terpapar. RR menunjukkan seberapa besar kemungkinan kejadian tersebut terjadi pada kelompok terpapar dibandingkan dengan kelompok tidak terpapar.
• Jika 𝑅𝑅>1, maka kejadian lebih sering terjadi di Grup 1
dibandingkan Grup 2.
• Jika 𝑅𝑅<1, maka kejadian lebih jarang terjadi di Grup 1
dibandingkan Grup 2.
• Jika 𝑅𝑅=1, maka tidak ada perbedaan risiko antara dua kelompok.
\[ RR = \frac{P(J | M)}{P(J | M)} \]
Contoh perhitungan dalam R:
RR <- function(n11, n12, n21, n22) {
(n11 / (n11 + n12)) / (n21 / (n21 + n22))
}
RR(60, 40, 50, 50)
## [1] 1.2
Interpretasi: Relative Risk menggambarkan seberapa besar kemungkinan outcome terjadi di kelompok pertama dibandingkan dengan kelompok kedua.
Rasio odds (OR) mengukur seberapa besar peluang terjadinya suatu kejadian pada kelompok dengan eksposur dibandingkan dengan kelompok tanpa eksposur.
\[ OR = \frac{(a / b)}{(c / d)} \]
Dengan: \(a = 50\), \(b = 30\), \(c = 20\), \(d = 100\)
OR <- (table_data[1,1] / table_data[1,2]) / (table_data[2,1] / table_data[2,2])
OR
## [1] 8.333333
Interpretasi: Odds Ratio menunjukkan perbandingan odds antara dua kelompok, dengan nilai OR > 1 menunjukkan bahwa kelompok pertama memiliki odds lebih tinggi.
Perbandingan Risk Difference, Relative Risk, dan Odds Ratio
Ukuran | Definisi | Desain Sampling yang Cocok | Interpretasi |
---|---|---|---|
Risk Difference (RD) | Selisih probabilitas kejadian antara dua kelompok | Studi kohort atau eksperimen acak | Menunjukkan tambahan atau pengurangan risiko absolut |
Relative Risk (RR) | Perbandingan risiko kejadian di dua kelompok | Studi kohort atau eksperimen klinis | Mengukur berapa kali lebih besar risiko di satu kelompok dibandingkan kelompok lainnya |
Odds Ratio (OR) | Perbandingan odds antara dua kelompok | Studi kasus-kontrol atau studi observasional | Mengukur hubungan antara variabel eksposur dan kejadian dalam desain studi kasus-kontrol |
Kesimpulan:
- Risk Differnece digunakan untuk memahami dampak
absolut dari suatu faktor risiko atau intervensi.
- Relative Risk lebih cocok untuk studi kohort atau
eksperimen karena mengukur kemungkinan relatif.
- Odds Ratio sering digunakan dalam studi kasus-kontrol
karena dapat memperkirakan risiko relatif dalam desain penelitian
ini.
Inferensi dalam statistik mengacu pada proses pengambilan kesimpulan mengenai populasi berdasarkan sampel data. Dalam konteks tabel kontingensi dua arah, inferensi digunakan untuk menganalisis hubungan antara dua variabel kategorikal yang disusun dalam tabel kontingensi.
Tabel kontingensi adalah tabel yang menyajikan distribusi frekuensi dari dua variabel kategorikal dalam bentuk matriks. Tujuan utama dari inferensi pada tabel ini adalah untuk memahami hubungan antara variabel-variabel tersebut melalui estimasi dan pengujian hipotesis.
Inferensi dalam tabel kontingensi dua arah dapat dibagi menjadi dua kategori utama:
Estimasi bertujuan untuk memperkirakan parameter populasi berdasarkan data sampel. Estimasi dibagi menjadi:
Estimasi titik digunakan untuk menentukan satu nilai spesifik sebagai perkiraan terbaik dari parameter populasi.
\[ \hat{p}=\frac{x}{n} \]
dimana:
- \(\hat{p}\) adalah estimasi titik
proporsi,
- 𝑥 adalah jumlah individu dalam kategori tertentu,
- 𝑛 adalah total jumlah individu dalam sampel.
Estimasi interval bertujuan untuk memberikan rentang nilai yang diyakini mengandung parameter populasi dengan tingkat kepercayaan tertentu.
\[ \hat{p} \pm Z_{\alpha / 2} \sqrt{ \frac{ \hat{p}(1 - \hat{p}) }{n} } \] dimana:
Uji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok dalam tabel kontingensi, terutama untuk menentukan apakah terdapat perbedaan yang signifikan dalam proporsi kejadian antara dua kelompok yang berbeda.
Tabel kontingensi 2×2 memiliki struktur sebagai berikut:
Kejadian (+) | Tidak Kejadian (-) | Total | |
---|---|---|---|
Group 1 | \(n_{11}\) | \(n_{12}\) | \(n_{1.}\) |
Group 2 | \(n_{21}\) | \(n_{22}\) | \(n_{2.}\) |
Total | \(n_{.1}\) | \(n_{.2}\) | \(n_{..}\) |
Formulasi Uji Proporsi
Untuk menguji hipotesis bahwa tidak ada perbedaan proporsi antara dua kelompok, kita menggunakan uji z dua proporsi, dengan hipotesis:
Estimasi proporsi dalam masing-masing kelompok diberikan oleh:
\[ \hat{p}_1 = \frac{n_{11}}{n_{1.}}, \quad \hat{p}_2 = \frac{n_{21}}{n_{2.}} \]
Estimasi proporsi gabungan (pooling proportion):
\[ \hat{p} = \frac{n_{11} + n_{21}}{n_{1.} + n_{2.}} \]
Statistik uji untuk uji proporsi dua sampel:
\[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p}) \left( \frac{1}{n_{1.}} + \frac{1}{n_{2.}} \right)}} \] Statistik uji 𝑍 mengikuti distribusi normal baku N(0,1), dan p-value dihitung berdasarkan nilai kritis dari distribusi normal.
Jika \(|Z|\) lebih besar dari nilai kritis untuk tingkat signifikansi tertentu \(\alpha\) (misalnya 1.96 untuk \(\alpha = 0.05\)), maka hipotesis nol ditolak, yang berarti ada perbedaan signifikan antara dua proporsi.
Uji ini cocok digunakan dalam studi kohort dan eksperimen klinis.
Perhitungan Manual Langkah Demi Langkah
Misalkan kita memiliki data berikut:
Kejadian (+) | Tidak Kejadian (-) | Total | |
---|---|---|---|
Group 1 | 70 | 20 | 90 |
Group 2 | 20 | 70 | 90 |
Total | 90 | 90 | 180 |
Langkah 1: Hitung Proporsi Sampel
Langkah 2: Hitung Proporsi Gabungan
Langkah 3: Hitung Statistik Uji Z
\[ Z = \frac{0.777 - 0.222}{\sqrt{0.50(1 - 0.50) \left(\frac{1}{90} + \frac{1}{90} \right)}} \]
\[ Z = \frac{0.55}{\sqrt{0.50 \times 0.50 \times 0.0222}} = \frac{0.55}{\sqrt{0.0055}} = \frac{0.55}{0.0745} = 7.382 \] Interpretasi:
Karena \(Z = 7.382\) lebih besar dari nilai kritis untuk \(\alpha = 0.05\) (yaitu 1.96), kita menolak hipotesis nol, yang berarti ada perbedaan signifikan antara dua proporsi.
set.seed(123)
data<- matrix(c(70, 20, 20, 70), nrow = 2, byrow = TRUE)
dimnames(data) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print(data)
## Kejadian
## Terpapar Ya Tidak
## Ya 70 20
## Tidak 20 70
prop_test <- prop.test(x =c(data[1,1], data[2,1]),
n =c(sum(data[1,]), sum(data[2,])))
print(prop_test)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(data[1, 1], data[2, 1]) out of c(sum(data[1, ]), sum(data[2, ]))
## X-squared = 53.356, df = 1, p-value = 2.783e-13
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.4229760 0.6881351
## sample estimates:
## prop 1 prop 2
## 0.7777778 0.2222222
Interpretasi: Jika p-value < 0.05, maka terdapat perbedaan proporsi kejadian antara kelompok terpapar dan tidak terpapar.
Uji asosiasi dalam tabel kontingensi 2×2 bertujuan untuk mengukur hubungan antara dua variabel kategori. Tiga ukuran utama dalam uji asosiasi adalah:
Hipotesis Uji dalam Tabel Kontingensi 2 × 2
Untuk setiap uji asosiasi, hipotesis yang diuji adalah:
• Hipotesis Nol (H): Tidak ada asosiasi antara dua
variabel.
• Hipotesis Alternatif (H): Terdapat asosiasi antara
dua variabel.
Risk Difference mengukur perbedaan absolut dalam probabilitas kejadian antara dua kelompok:
\[ RD = \left(\frac{n_{11}}{n_{1.}}\right) - \left(\frac{n_{21}}{n_{2.}}\right) \] Standard Error untuk RD:
\[ SE(RD) = \sqrt{ \frac{\hat{p}_1(1 - \hat{p}_1)}{n_{1.}} + \frac{\hat{p}_2(1 - \hat{p}_2)}{n_{2.}} } \] Statistik uji Z:
\[ Z_{RD} = \frac{RD}{SE(RD)} \]
Relative Risk membandingkan kemungkinan kejadian antara dua kelompok:
\[ RR = \frac{ \frac{n_{11}}{n_{1.}} }{ \frac{n_{21}}{n_{2.}} } \]
Standard Error untuk log(RR):
\[ SE(\ln RR) = \sqrt{ \frac{1}{n_{11}} - \frac{1}{n_{1.}} + \frac{1}{n_{21}} - \frac{1}{n_{2.}} } \]
Statistik uji Z:
\[ Z_{RR} = \frac{\ln RR}{SE(\ln RR)} \]
Odds Ratio membandingkan peluang kejadian antara dua kelompok:
\[ OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} \] Standard Error untuk log(OR):
\[ SE(\ln OR) = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} } \] Statistik uji Z:
\[ Z_{OR} = \frac{\ln OR}{SE(\ln OR)} \]
Contoh Perhitungan Manual Misalkan kita memiliki data berikut:
Kejadian (+) | Tidak Kejadian (-) | Total | |
---|---|---|---|
Group 1 | 70 | 20 | 90 |
Group 2 | 20 | 70 | 90 |
Total | 90 | 90 | 180 |
Misalkan:
\[ \hat{p}_1 = \frac{70}{90} = 0.777 \quad \text{dan} \quad \hat{p}_2 = \frac{20}{90} = 0.222 \]
\[ RD = 0.777 - 0.222 = 0.555 \]
\[ SE(RD) = \sqrt{ \frac{0.777(0.222)}{90} + \frac{0.222(0.777)}{90} } \]
\[ SE(RD) = \sqrt{ \frac{0.172}{90} + \frac{0.172}{90} } = \sqrt{0.00191 + 0.00191} = \sqrt{0.00382} = 0.061859 \]
\[ Z_{RD} = \frac{0.55}{0.061859} = 8.891188 \]
Perhitungan Manual untuk RR - Relative Risk
\[ RR = \frac{ \frac{70}{90} }{ \frac{20}{90} } = \frac{0.777}{0.222} = 3.5 \]
\[ SE(\ln RR) = \sqrt{ \frac{1}{70} - \frac{1}{90} + \frac{1}{20} - \frac{1}{90} } \]
\[ SE(\ln RR) = \sqrt{0.014 - 0.011 + 0.05 - 0.011} = \sqrt{0.042} = 0.2049 \] - Statistik uji Z:
\[ Z_{RR} = \frac{\ln 3.5}{0.2049} = \frac{1.252}{0.2049} = 6.114 \] Perhitungan Manual untuk OR - Odds Ratio
\[ OR = \frac{70 \times 70}{20 \times 20} = \frac{4900}{400} = 12.25 \]
\[ SE(\ln OR) = \sqrt{ \frac{1}{70} + \frac{1}{20} + \frac{1}{20} + \frac{1}{70} } \]
\[ SE(\ln OR) = \sqrt{0.014 + 0.05 + 0.05 + 0.014} = \sqrt{0.1028} = 0.3206 \]
\[ Z_{OR} = \frac{\ln 12.25}{0.3206} = \frac{2.505}{0.3206} = 7.815 \] Perhitungan Menggunakan R:
n11 <- 70; n12 <- 20; n21 <- 20; n22 <- 70
n1. <- n11 + n12; n2. <- n21 + n22
# Risk Difference
p1<-(n11/n1.)
p2<-(n21/n2.)
rd <- p1- p2
se_rd <- sqrt((p1 * (1- p1) / n1.) + p2*((1- p2) / n2.))
z_rd <- rd / se_rd
# Relative Risk
rr <- (n11/n1.) / (n21/n2.)
se_ln_rr <- sqrt((1/n11)- (1/n1.) + (1/n21)- (1/n2.))
z_rr <- log(rr) / se_ln_rr
# Odds Ratio
or <- (n11 * n22) / (n12 * n21)
se_ln_or <- sqrt((1/n11) + (1/n12) + (1/n21) + (1/n22))
z_or <- log(or) / se_ln_or
# Hasil
list(RD = rd, SE_RD = se_rd, Z_RD = z_rd, RR = rr, SE_Ln_RR = se_ln_rr, Z_RR = z_rr, OR = or, SE_Ln_OR = se_ln_or, Z_OR = z_or)
## $RD
## [1] 0.5555556
##
## $SE_RD
## [1] 0.06197482
##
## $Z_RD
## [1] 8.964215
##
## $RR
## [1] 3.5
##
## $SE_Ln_RR
## [1] 0.2050939
##
## $Z_RR
## [1] 6.108242
##
## $OR
## [1] 12.25
##
## $SE_Ln_OR
## [1] 0.3585686
##
## $Z_OR
## [1] 6.987578
Kesimpulan:
- Risk Difference (RD) mengukur perbedaan risiko absolut.
- Relative Risk (RR) membandingkan kemungkinan kejadian antara dua
kelompok.- Odds Ratio (OR) membandingkan peluang kejadian antara dua
kelompok.
- Standard error dan statistik uji Z digunakan untuk menilai
signifikansi statistik masing-masing ukuran asosiasi.
Uji independensi 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_{i=1}^{n} \frac{(O_i - E_i)^2}{E_i}
\] dimana:
• O adalah nilai observasi dalam tabel kontingensi.
• E adalah nilai yang diharapkan, dihitung sebagai:
\[ E_{ij} = \frac {({Ri \times Cj})}{N} \] dengan:
• Ri =total baris ke-i.
• Cj =total kolom ke-j.
• N =total sampel. ## Analisis Residual dalam Tabel
Kontingensi
Contoh Perhitungan Manual Chi-Square
Misalkan kita memiliki tabel berikut:
Kejadian Ya | Kejadian Tidak | Total | |
---|---|---|---|
Terpapar | 30 | 10 | 40 |
Tidak Terpapar | 15 | 45 | 60 |
Total | 45 | 55 | 100 |
Hitung Nilai yang Diharapkan E:
\[ E_{11} = \frac{40 \times 45}{100} = 18 \]
\[ E_{12} = \frac{40 \times 55}{100} = 22 \]
\[ E_{21} = \frac{60 \times 45}{100} = 27 \] \[ E_{22} = \frac{60 \times 55}{100} = 33 \] Hitung Statistik Chi-Square:
\[ \chi^2 = \frac{(30 - 18)^2}{18} + \frac{(10 - 22)^2}{22} + \frac{(15 - 27)^2}{27} + \frac{(45 - 33)^2}{33} \]
\[ \chi^2 = \frac{144}{18} + \frac{144}{22} + \frac{144}{27} + \frac{144}{33} \]
\[ \chi^2 = 8 + 6.55 + 5.33 + 4.36 = 24.24 \]
Dengan derajat kebebasan \(df = (2 - 1)(2 - 1) = 1\), kita membandingkan dengan nilai tabel \(\chi^2\), yaitu 3.841, dan karena \(\text{p-value} < 0.05\), maka kita menolak hipotesis nol.
Perhitungan menggunakan R:
# Contoh Data
set.seed(123)
data <- matrix(c(30, 10, 15, 45), nrow = 2, byrow = TRUE)
dimnames(data) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print(data)
## Kejadian
## Terpapar Ya Tidak
## Ya 30 10
## Tidak 15 45
# Uji Chi-Square
chisq_test <- chisq.test(data)
print(chisq_test)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 22.264, df = 1, p-value = 2.376e-06
Interpretasi: Jika p-value < 0.05, maka terdapat hubungan antara variabel “Terpapar” dan “Kejadian”.
Partisi Chi-Square digunakan untuk mengidentifikasi kategori mana dalam tabel kontingensi yang bertanggung jawab atas hubungan yang signifikan. Jika uji Chi-Square pada tabel kontingensi I×Jsignifikan, maka partisi Chi-Square memungkinkan kita untuk menguraikan efek hubungan dalam subkelompok yang lebih kecil.
Menurut Lancaster dan Irwin, statistik uji chi-square dapat dipecah menjadi komponen-komponen sebanyak derajat bebas dari tabel kontingensi, memungkinkan identifikasi kategori yang berkontribusi pada hubungan yang signifikan.
Hal ini juga dikenal dengan Simpson’s Paradox: Tren yang muncul dalam beberapa kelompok data dapat menghilang atau bahkan berbalik arah ketika data tersebut digabungkan.
Langkah-langkah Partisi Chi-Square:
1. Menggunakan tabel I×Jdan menghitung Chi-Square keseluruhan.
2. Memecah tabel menjadi beberapa tabel 2×2sebanyak (I-1)(J-1).
3. Menghitung statistik Chi-Square pada masing-masing tabel 2 × 2.
4. Menginterpretasikan kategori mana yang memberikan kontribusi
signifikan.
Contoh Perhitungan Manual Misalkan kita memiliki data identifikasi partai politik berdasarkan gender dari Agresti (2019, Table 2.4): Uji independensi Chi-Square digunakan untuk menentukan apakah dua variabel kategori dalam tabel kontingensi memiliki hubungan statistik atau tidak. Misalkan kita memiliki data berikut:
Hipotesis yang Diuji
Langkah-Langkah Perhitungan Manual
Langkah 1: Lakukan Chi-Square Secara Keseluruhan
Frekuensi ekspektasi dihitung menggunakan rumus:
\[ E_{ij} = \frac{(n_i \times n_j)}{n} \]
Hitung untuk masing-masing sel:
Rumus:
\[ X^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
Perhitungan:
\[ X^2 = \frac{(495 - 456.95)^2}{456.95} + \frac{(272 - 297.43)^2}{297.43} + \frac{(590 - 602.62)^2}{602.62} + \frac{(330 - 368.05)^2}{368.05} + \frac{(265 - 239.57)^2}{239.57} + \frac{(498 - 485.38)^2}{485.38} \]
Setelah dihitung:
\[ X^2 = 12.57 \]
Langkah 3: Bandingkan dengan Tabel Chi-Square
Derajat bebas:
\[ df = (I - 1)(J - 1) = (2 - 1)(3 - 1) = 2 \] Nilai kritis \(\chi^2\) untuk \(\alpha = 0.05\) dan \(df = 2\) adalah 5.99.
Karena \(X^2 = 12.57 > 5.99\), maka kita menolak H₀, sehingga ada hubungan yang signifikan antara Gender dan Identifikasi Partai Politik.
Perhitungan menggunakan R:
# Matriks data observasi
data_matrix <- matrix(c(495, 272, 590, 330, 265, 498), nrow = 2, byrow = TRUE)
colnames(data_matrix) <- c("Democrat", "Republican", "Independent")
rownames(data_matrix) <- c("Female", "Male")
data_matrix
## Democrat Republican Independent
## Female 495 272 590
## Male 330 265 498
# Uji Chi-Square
chi_test <- chisq.test(data_matrix)
# Hasil
list(
Chi_Square = chi_test$statistic,
P_Value = chi_test$p.value,
Decision = ifelse(chi_test$p.value < 0.05, "Reject H0", "Fail to Reject H0")
)
## $Chi_Square
## X-squared
## 12.56926
##
## $P_Value
## [1] 0.00186475
##
## $Decision
## [1] "Reject H0"
Interpretasi: Hasil- Hasil uji Chi-Square menunjukkan bahwa hubungan antara Gender dan Identifikasi Partai Politik signifikan secara statistik (p < 0.05).
• Karena nilai Chi-Square (12.57) lebih besar dari nilai kritis (5.99), kita menolak hipotesis nol dannmenyimpulkan bahwa Gender berhubungan dengan pilihan partai politik.
Langkah 2: Lakukan Partisi Chi-Square Partisi 1: Democrat vs. Republican
Gender | Democrat | Republican |
---|---|---|
Female | 496 | 272 |
Male | 330 | 265 |
Chi-square : 𝑋2 = 11.536, 𝑝 < 0.001
Partisi 2: Democrat + Republican vs. Independent
Gender | Democrat + Republican | Independent |
---|---|---|
Female | 767 | 590 |
Male | 595 | 498 |
Chi-Square: 𝑋2 = 1.065, 𝑝 = 0.698
Perhitungan menggunakan R:
# Data Observasi
data_matrix <- matrix(c(495, 272, 330, 265), nrow = 2, byrow = TRUE)
colnames(data_matrix) <- c("Democrat", "Republican")
rownames(data_matrix) <- c("Female", "Male")
# Uji Chi-Square Partisi 1
chi_test1 <- chisq.test(data_matrix)
# Data Partisi 2
data_matrix2 <- matrix(c(767, 590, 595, 498), nrow = 2, byrow = TRUE)
colnames(data_matrix2) <- c("Dem+Rep", "Independent")
rownames(data_matrix2) <- c("Female", "Male")
# Uji Chi-Square Partisi 2
chi_test2 <- chisq.test(data_matrix2)
# Hasil
list(Chi_Square_Partisi1 = chi_test1, Chi_Square_Partisi2 = chi_test2)
## $Chi_Square_Partisi1
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_matrix
## X-squared = 11.178, df = 1, p-value = 0.0008279
##
##
## $Chi_Square_Partisi2
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_matrix2
## X-squared = 0.98267, df = 1, p-value = 0.3215
Interpretasi Hasil:
• Hasil partisi pertama menunjukkan bahwa perbedaan antara Democrat dan
Republican signifikan (p < 0.001).
• Hasil partisi kedua menunjukkan bahwa gabungan Democrat + Republican
tidak berbeda signifikan dengan Independent (p = 0.698).
• Kesimpulan:Gender lebih mempengaruhi pilihan antara Democrat dan
Republican, tetapi tidak berpengaruh signifikan terhadap pilihan
Independent.
Uji Likelihood Ratio (G²) adalah alternatif dari uji chi-square yang digunakan untuk menguji hipotesis independensi dalam tabel kontingensi I × J. Statistik uji ini diberikan oleh:
\[ G^2 = 2 \sum_i \sum_j n_{ij} \ln\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right) \] Dimana:
\(n_{ij}\) adalah frekuensi
observasi dalam tabel kontingensi
\(\hat{\mu}_{ij} = n \cdot
p_{i+}p_{+j}\) adalah frekuensi ekspektasi
Statistik ( G^2 ) mengikuti distribusi
chi-square dengan derajat bebas \((I-1)(J-1)\)
Tolak \(H_0\) jika \(G^2 \geq \chi^2_{(1-\alpha/2)(I-1)(J-1)}\)
Contoh Perhitungan Manual
Misalkan kita menggunakan data lung cancer sebagai berikut:
Cancer (+) | Control (-) | Total | |
---|---|---|---|
Smoker | 688 | 650 | 1338 |
Non-Smoker | 21 | 59 | 80 |
Total | 709 | 709 | 1418 |
Langkah 1: Hitung Frekuensi Ekspektasi
\[ \hat{\mu}_{11} = \frac{1338 \times 709}{1418} = 669 \] \[ \hat{\mu}_{12} = \frac{1338 \times 709}{1418} = 669 \]
\[ \hat{\mu}_{21} = \frac{80 \times 709}{1418} = 40 \]
\[ \hat{\mu}_{22} = \frac{80 \times 709}{1418} = 40 \] Langkah 2: Hitung Statistik Uji \(G^2\)
\[ G^2 = 2 \left[ 688 \ln\left(\frac{688}{669}\right) + 650 \ln\left(\frac{650}{669}\right) + 21 \ln\left(\frac{21}{40}\right) + 59 \ln\left(\frac{59}{40}\right) \right] \]
Setelah dihitung secara manual:
\[ G^2 = 2 \times (19.27 + (-18.73) + (-13.53) + 22.93) = 2 \times (9.94) = 19.88 \] Langkah 3: Bandingkan dengan Distribusi Chi-Square Derajat Bebas
\[ (I - 1)(J - 1) = (2 - 1)(2 - 1) = 1 \] Nilai kritis \(\chi^2\) untuk \(\alpha = 0.05\) dengan df = 1 adalah 3.841.
Karena:
\[
G^2 = 19.88 > 3.841
\]
Kesimpulan:
Kita menolak hipotesis nol dan menyimpulkan bahwa ada hubungan signifikan antara merokok dan kanker paru-paru.
Perhitungan menggunakan R:
# Data Observasi
data_matrix <- matrix(c(688, 650, 21, 59), nrow = 2, byrow = TRUE)
colnames(data_matrix) <- c("Cancer (+)", "Control (-)")
rownames(data_matrix) <- c("Smoker", "Non-Smoker")
# Hitung Frekuensi Ekspektasi
data_expected <- chisq.test(data_matrix)$expected
# Hitung Statistik G²
G2 <- 2 * sum(data_matrix * log(data_matrix / data_expected))
# Nilai kritis chi-square untuk df = 1 dan alpha = 0.05
critical_value <- qchisq(0.95, df = 1)
# Hasil
list(G2 = G2,
Critical_Value = critical_value,
Decision = ifelse(G2 > critical_value, "Reject H0", "Fail to Reject H0"))
## $G2
## [1] 19.87802
##
## $Critical_Value
## [1] 3.841459
##
## $Decision
## [1] "Reject H0"
Kesimpulan:
• Uji Likelihood Ratio (G²) digunakan sebagai alternatif dari uji
Chi-Square untuk menguji independensi dalam tabel kontingensi.
• Jika 𝐺2 lebih besar dari nilai kritis 𝜒2, maka hipotesis nol ditolak,
menunjukkan adanya hubungan antara dua variabel.
• Contoh perhitungan manual dan implementasi di R menunjukkan bahwa ada
asosiasi signifikan antara merokok dan kanker paru-paru.
Uji Fisher’s Exact digunakan untuk menguji hubungan antara dua variabel kategorikal dalam tabel kontingensi kecil, dimana asumsi Chi-square tidak berlaku karena ukuran sampel yang kecil.
Uji ini pertama kali dikembangkan oleh Sir Ronald A. Fisher, seorang ahli statistik, yang menggunakannya dalam penelitian biologi dan medis. Fisher’s Exact Test menjadi sangat penting dalam analisis data yang memiliki frekuensi kecil karena tidak bergantung pada asumsi distribusi normal.
Keunggulan:
• Cocok untuk ukuran sampel kecil.
• Tidak memerlukan asumsi normalitas atau chi-square.
• Memberikan hasil yang lebih akurat dibandingkan uji Chi-square pada
data dengan frekuensi kecil.
Keterbatasan:
• Perhitungan bisa menjadi sangat berat secara komputasi jika ukuran
tabel besar.
• Hanya cocok untuk tabel kontingensi kecil (misalnya 2x2 atau
3x3).
Distribusi Hipergeometrik digunakan untuk menghitung probabilitas mendapatkan sejumlah keberhasilan tertentu dalam sampel acak tanpa pengembalian dari populasi terbatas yang terdiri dari dua kategori.
Fungsi probabilitas dari distribusi ini dinyatakan sebagai:
\[ P(X = x) = \frac{\binom{K}{x} \binom{N-K}{n-x}}{\binom{N}{n}} \]
dengan:
Misalkan kita memiliki contoh berikut:
Menggunakan rumus di atas:
\[ P(X = 18) = \frac{\binom{29}{18} \binom{11}{2}}{\binom{40}{20}} \] Implementasi Menggunakan R
# Parameter
N <- 40 # total populasi
K <- 29 # jumlah objek dalam kategori sukses
n <- 20 # ukuran sampel
x <- 18 # jumlah keberhasilan dalam sampel
# Menggunakan dhyper untuk menghitung P(X = 18)
p_hyper <- dhyper(x, K, N - K, n)
p_hyper
## [1] 0.01380413
Misalkan diketahui data sebagai berikut:
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 18 | 2 | 20 |
Grup B | 11 | 9 | 20 |
Total | 29 | 11 | 40 |
Langkah-Langkah Perhitungan:
\[ P = \frac{\binom{20}{18} \binom{40-29}{20-18}}{\binom{40}{20}} \]
# Tabel observasi
choose(29, 18) * choose(11, 2) / choose(40, 20)
## [1] 0.01380413
Berikut semua kombinasi tabel 2 x 2 yang mungkin dengan total bari dan total kolom sama:
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 20 | 0 | 20 |
Grup B | 9 | 11 | 20 |
Total | 29 | 11 | 40 |
choose(29, 20) * choose(11, 0) / choose(40, 20)
## [1] 7.26533e-05
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 19 | 1 | 20 |
Grup B | 10 | 10 | 20 |
Total | 29 | 11 | 40 |
choose(29, 19) * choose(11, 1) / choose(40, 20)
## [1] 0.001598373
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 18 | 2 | 20 |
Grup B | 11 | 9 | 20 |
Total | 29 | 11 | 40 |
choose(29, 18) * choose(11, 2) / choose(40, 20)
## [1] 0.01380413
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 17 | 3 | 20 |
Grup B | 12 | 8 | 20 |
Total | 29 | 11 | 40 |
choose(29, 17) * choose(11, 3) / choose(40, 20)
## [1] 0.06211857
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 16 | 4 | 20 |
Grup B | 13 | 7 | 20 |
Total | 29 | 11 | 40 |
choose(29, 16) * choose(11, 4) / choose(40, 20)
## [1] 0.162464
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 15 | 5 | 20 |
Grup B | 14 | 6 | 20 |
Total | 29 | 11 | 40 |
choose(29, 15) * choose(11, 5) / choose(40, 20)
## [1] 0.2599423
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 14 | 6 | 20 |
Grup B | 15 | 5 | 20 |
Total | 29 | 11 | 40 |
choose(29, 14) * choose(11, 6) / choose(40, 20)
## [1] 0.2599423
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 13 | 7 | 20 |
Grup B | 16 | 4 | 20 |
Total | 29 | 11 | 40 |
choose(29, 13) * choose(11, 7) / choose(40, 20)
## [1] 0.162464
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 12 | 8 | 20 |
Grup B | 17 | 3 | 20 |
Total | 29 | 11 | 40 |
choose(29, 12) * choose(11, 8) / choose(40, 20)
## [1] 0.06211857
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 11 | 9 | 20 |
Grup B | 18 | 2 | 20 |
Total | 29 | 11 | 40 |
choose(29, 11) * choose(11, 9) / choose(40, 20)
## [1] 0.01380413
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 10 | 10 | 20 |
Grup B | 19 | 1 | 20 |
Total | 29 | 11 | 40 |
choose(29, 10) * choose(11, 10) / choose(40, 20)
## [1] 0.001598373
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 9 | 11 | 20 |
Grup B | 20 | 0 | 20 |
Total | 29 | 11 | 40 |
choose(29, 9) * choose(11, 11) / choose(40, 20)
## [1] 7.26533e-05
p-value untuk uji Exact Fisher adalah kumulatif nilai p-value untuk setiap tabel yang lebih kecil sama dengan nilai p-value tabel empiris
Ya | Tidak | Total | |
---|---|---|---|
Grup A | 18 | 2 | 20 |
Grup B | 11 | 9 | 20 |
Total | 29 | 11 | 40 |
choose(29, 18) * choose(11, 2) / choose(40, 20)
## [1] 0.01380413
yaitu
p.value<-0.00007+0.00160+0.01380+0.01380+0.00160+0.00007
p.value
## [1] 0.03094
data <- matrix(c(18, 2, 11, 9), nrow = 2, byrow = TRUE)
fisher.test(data)
##
## Fisher's Exact Test for Count Data
##
## data: data
## p-value = 0.03095
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.147793 78.183838
## sample estimates:
## odds ratio
## 6.994073
Hasilnya akan memberikan nilai p untuk menentukan apakah ada hubungan signifikan antara kedua variabel.
Interpretasi Hasil: • Jika p-value < 0.05, kita menolak hipotesis
nol, yang berarti ada hubungan signifikan antara dua variabel.
• Jika p-value >= 0.05, kita gagal menolak hipotesis nol, yang
berarti tidak ada cukup bukti untuk menyatakan adanya hubungan
signifikan.
Residual dalam tabel kontingensi digunakan untuk mengidentifikasi sel
mana yang menyumbang paling banyak terhadap hubungan antara variabel
kategori. Residual mengukur selisih antara frekuensi yang dia mati dan
frekuensi yang diharapkan berdasarkan model independensi. Jika suatu sel
memiliki residual yang besar (positif atau negatif), berarti frekuensi
observasi dalam sel tersebut sangat berbeda dari yang diharapkan.
Sebaliknya, jika residualnya kecil, berarti nilai observasi mendekati
nilai ekspektasi, sehingga sel tersebut tidak banyak menyumbang terhadap
hubungan antara variabel [Agresti, A. (2013)].
• Jika residual 0:
– Tidak ada perbedaan signifikan antara jumlah observasi yang terjadi di
suatu sel dengan jumlah yang diprediksi oleh model independensi.
– Artinya, variabel baris dan kolom dalam tabel tidak memiliki hubungan
kuat atau tidak menunjukkan pola keterkaitan yang jelas.
• Jika residual positif besar:
– Frekuensi observasi jauh lebih tinggi dari yang diharapkan →
menunjukkan hubungan positif yang kuat antara kategori tersebut.
• Jika residual negatif besar: – Frekuensi observasi
jauh lebih rendah dari yang diharapkan → menunjukkan hubungan negatif
atau tidak adanya asosiasi.
• Residual kecil (0) → Tidak ada hubungan antara
variabel baris dan kolom.
• Residual besar (positif atau negatif) → Ada
hubungan yang signifikan antara variabel baris dan kolom.
Jadi, dalam analisis residual tabel kontingensi, nilai residual mendekati nol mengindikasikan bahwa variabel-variabel yang dianalisis tidak memiliki hubungan yang signifikan, dan data sesuai dengan asumsi independensi.
\[ R_{ij} = O_{ij} - E_{ij} \]
\[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
\[ SR_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - p_{i\cdot})(1 - p_{\cdot j})}} \]
Catatan: Rumus ini bergantung pada model yang digunakan dan umumnya dihitung oleh software statistik.
\[ AR_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - h_{ij})}} \]
Di mana \(h_{ij}\) adalah leverage dari sel \(i,j\).
Implementasi di R Berikut adalah contoh implementasi analisis residual dari tabel kontingensi:
# Data dummy
observed <- matrix(c(20, 30, 25, 25), nrow = 2, byrow = TRUE)
dimnames(observed) <- list(Gender = c("Male", "Female"),
Response = c("Yes", "No"))
# Chi-square test
chisq_test <- chisq.test(observed)
# Output
chisq_test$residuals # Pearson residual
## Response
## Gender Yes No
## Male -0.5270463 0.4767313
## Female 0.5270463 -0.4767313
chisq_test$stdres # Standardized residual (if available in version)
## Response
## Gender Yes No
## Male -1.005038 1.005038
## Female 1.005038 -1.005038
Jika residual terstandarisasi tidak tersedia secara langsung, gunakan
paket vcd
:
library(vcd)
## Warning: package 'vcd' was built under R version 4.3.3
## Loading required package: grid
assoc(observed, shade = TRUE)
Kesimpulan Jenis-jenis residual memberikan wawasan lokal terhadap hubungan antara dua variabel kategorik dalam tabel kontingensi. Dengan memahami nilai residual, kita dapat mengetahui apakah sel tertentu memiliki frekuensi yang jauh lebih tinggi atau rendah dari yang diharapkan.
Outlier dalam analisis data kategori adalah sel dalam tabel kontingensi yang memiliki nilai residual yang sangat besar, baik positif maupun negatif. Outlier ini menunjukkan bahwa ada kategori yang memiliki frekuensi observasi yang jauh lebih tinggi atau lebih rendah dibandingkan dengan nilai ekspektasi berdasarkan asumsi independensi.
Pearson Residual:
\[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
Jika nilai \(|e_{ij}| > 2\), maka sel tersebut dianggap sebagai indikasi adanya outlier.
Standardized Residual (Adjusted Residual):
\[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - p_{i+})(1 - p_{+j})}} \] Jika \(|r_{ij}| > 3\), maka sel tersebut dianggap sebagai outlier signifikan.
Misalkan kita memiliki tabel kontingensi berikut:
Sukses | Gagal | Total | |
---|---|---|---|
Grup A | 50 | 20 | 70 |
Grup B | 30 | 50 | 80 |
Total | 80 | 70 | 150 |
Setelah menghitung residual, kita menemukan:
Pearson Residual | Standardized Residual | |
---|---|---|
Group A, Sukses | 2.06 | 2.45 |
Group A, Gagal | -2.20 | -2.60 |
Group B, Sukses | -1.96 | -2.10 |
Group B, Gagal | 2.06 | 2.45 |
• Sel (A, Gagal) memiliki residual negatif terbesar (-2.20,-2.60) → Ini menunjukkan bahwa Grup A mengalami lebih sedikit kegagalan dari yang diprediksi oleh model independensi. Jika |r| melebihi 3, maka sel ini dapat dianggap sebagai outlier yang signifikan. • Sel (A, Sukses) dan (B, Gagal) memiliki residual positif cukup besar → Menunjukkan bahwa ada ketidakseimbangan dalam hubungan antara kategori.
Perhitungan menggunakan R:
# Data Observasi
observed <- matrix(c(50, 20, 30, 50), nrow = 2, byrow = TRUE)
colnames(observed) <- c("Sukses", "Gagal")
rownames(observed) <- c("Grup A", "Grup B")
# Hitung nilai ekspektasi
expected <- chisq.test(observed)$expected
# Pearson Residual
pearson_residual <- (observed- expected) / sqrt(expected)
# Standardized Residual
row_sum <- rowSums(observed)
col_sum <- colSums(observed)
total_sum <- sum(observed)
standardized_residual <- (observed- expected) / sqrt(expected * (1- row_sum / total_sum) * (1- col_sum / total_sum))
# Menampilkan hasil
list(
Observed = observed,
Expected = expected,
Pearson_Residual = pearson_residual,
Standardized_Residual = standardized_residual
)
## $Observed
## Sukses Gagal
## Grup A 50 20
## Grup B 30 50
##
## $Expected
## Sukses Gagal
## Grup A 37.33333 32.66667
## Grup B 42.66667 37.33333
##
## $Pearson_Residual
## Sukses Gagal
## Grup A 2.073070 -2.216205
## Grup B -1.939179 2.073070
##
## $Standardized_Residual
## Sukses Gagal
## Grup A 4.155384 -4.442293
## Grup B -3.887006 4.155384
• Deteksi outlier menggunakan residual membantu mengidentifikasi
kategori dalam tabel kontingensi yang sangat menyimpang dari
ekspektasi.
• Jika |r| > 3, maka sel tersebut dapat dianggap sebagai outlier
signifikan yang mungkin mempengaruhi kesimpulan analisis.
• Residual besar menunjukkan hubungan signifikan antara variabel,
sedangkan residual mendekati nol menunjukkan tidak adanya
hubungan.
Analisis residual dalam tabel kontingensi membantu memahami kontribusi masing-masing sel terhadap hubungan antara variabel kategori. Pearson residual digunakan untuk melihat seberapa jauh nilai observasi menyimpang dari ekspektasi, sementara standardized residual mempertimbangkan efek margin baris dan kolom untuk menghindari bias dalam interpretasi.
Bab ini membahas analisis tabel kontingensi tiga arah secara
mendalam, mencakup tabel parsial dan marginal, ukuran asosiasi,
Simpson’s Paradox, independensi bersyarat, serta asosiasi homogen.
Setiap bagian dilengkapi dengan contoh perhitungan manual dan
implementasi dalam R. Tabel kontingensi tiga arah adalah perpanjangan
dari tabel kontingensi dua arah yang digunakan untuk menganalisis
hubungan antara tiga variabel kategori secara simultan. Dalam banyak
situasi, hubungan antara dua variabel (misalnya 𝑋 dan 𝑌) dapat
dipengaruhi oleh variabel ketiga 𝑍, yang disebut sebagai variabel
kontrol atau kovariat. Tabel ini sering digunakan dalam analisis data
ketika ada potensi faktor pengganggu yang dapat mempengaruhi hubungan
antara dua variabel utama. Misalnya:
• Dalam studi epidemiologi, untuk meneliti hubungan antara merokok
(𝑋) dan kanker paru-paru (𝑌) dengan mengendalikan efek usia (𝑍).
• Dalam penelitian sosial, untuk mengevaluasi hubungan antara ras
tersangka (𝑋) dan keputusan hukuman mati (𝑌) dengan mempertimbangkan ras
korban (𝑍).
Tabel kontingensi tiga arah dapat dipecah menjadi:
• Tabel Parsial: Tabel yang menyajikan hubungan antara 𝑋 dan 𝑌 pada
setiap kategori 𝑍. Ini memungkinkan analisis hubungan bersyarat, di mana
efek 𝑍 dikendalikan.
• Tabel Marginal: Tabel yang diperoleh dengan mengabaikan 𝑍, yaitu
dengan menjumlahkan semua kategori 𝑍. Ini memberikan gambaran umum
hubungan antara 𝑋 dan 𝑌 tanpa mempertimbangkan 𝑍,yang bisa menyebabkan
distorsi interpretasi, seperti dalam Simpson’s Paradox.
Kegunaan tabel marginal adalah untuk melihat pola asosiasi secara agregat, tetapi sering kali mengabaikan efek kovariat yang dapat memberikan pemahaman lebih mendalam. Oleh karena itu, analisis yang mempertimbangkan tabel parsial biasanya lebih diutamakan untuk mendapatkan kesimpulan yang lebih akurat dalam penelitian ilmiah.
Tabel parsial adalah tabel yang mengelompokkan𝑋dan𝑌berdasarkan setiap level Z, sedangkan tabel marginal adalah tabel yang mengabaikan Z,dengan menjumlahkan data dari semua level Z.
Struktur Tabel Kontingensi Tiga Arah
\[ \begin{array}{|c|c|c|c|c|c|} \hline Z & X & Y = 1 & Y = 2 & \ldots & Y = J \\ \hline Z = 1 & X = 1 & n_{111} & n_{121} & \ldots & n_{1J1} \\ & X = 2 & n_{211} & n_{221} & \ldots & n_{2J1} \\ & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline Z = 2 & X = 1 & n_{112} & n_{122} & \ldots & n_{1J2} \\ & X = 2 & n_{212} & n_{222} & \ldots & n_{2J2} \\ & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline Z = K & X = 1 & n_{11K} & n_{12K} & \ldots & n_{1JK} \\ & X = 2 & n_{21K} & n_{22K} & \ldots & n_{2JK} \\ & \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline \end{array} \]
Tabel berikut menggambarkan hubungan antara jenis kelamin (Z), aktivitas fisik (X), dan status obesitas (Y), dengan jumlah total individu dalam setiap kelompok.
Z (Jenis Kelamin) | X (Aktivitas Fisik) | Y (Obesitas) | Tidak Obesitas | Jumlah |
---|---|---|---|---|
Laki-laki | Aktif | 15 | 35 | 50 |
Laki-laki | Tidak Aktif | 25 | 25 | 50 |
Perempuan | Aktif | 10 | 40 | 50 |
Perempuan | Tidak Aktif | 30 | 20 | 50 |
Tabel Frekuensi Parsial
Tabel frekuensi parsial menyajikan hubungan antara dua variabel kategori dalam tabel kontingensi tiga arah dengan mempertahankan satu variabel sebagai kontrol. Tabel ini membantu dalam memahami hubungan bersyarat antara variabel dalam analisis data kategori.
Tabel Frekuensi Parsial untuk Z (Jenis Kelamin) = Laki-laki:
X (Aktivitas Fisik) | Y (Obesitas) | Tidak Obesitas | Jumlah |
---|---|---|---|
Aktif | 15 | 35 | 50 |
Tidak Aktif | 25 | 25 | 50 |
Tabel Frekuensi Parsial untuk Z (Jenis Kelamin) = Perempuan:
X (Aktivitas Fisik) | Y (Obesitas) | Tidak Obesitas | Jumlah |
---|---|---|---|
Aktif | 10 | 40 | 50 |
Tidak Aktif | 30 | 20 | 50 |
Tabel Marginal
Tabel marginal diperoleh dengan menjumlahkan data dari semua kategori Z (jenis kelamin):
X (Aktivitas Fisik) | Y (Obesitas) | Tidak Obesitas | Jumlah |
---|---|---|---|
Aktif | 25 | 75 | 100 |
Tidak Aktif | 55 | 45 | 100 |
Peluang bersama didefinisikan sebagai:
\[ P(Z, X, Y) = \frac{f(Z, X, Y)}{N} \]
Sebagai contoh, peluang seseorang berusia tua, merokok, dan menderita kanker paru:
\[ P(Tua, Ya, Kanker) = \frac{50}{300} = 0.1667 \]
Implementasi dalam R:
data <- data.frame(
Usia = rep(c("Muda", "Dewasa", "Tua"), each = 2),
Merokok = rep(c("Ya", "Tidak"), 3),
Kanker = c(10, 5, 40, 10, 50, 20),
Total = c(50, 50, 50, 50, 50, 50)
)
data$P_ZXY <- data$Kanker / sum(data$Total)
data
Peluang bersyarat dihitung berdasarkan jumlah total dalam setiap kategori.
Tabel Peluang Bersyarat untuk Usia Muda:
X (Merokok) | P(Y | X) |
---|---|---|
Ya | 0.20 | 0.80 |
Tidak | 0.10 | 0.90 |
Tabel Peluang Bersyarat untuk Usia Dewasa:
X (Merokok) | P(Y | X) |
---|---|---|
Ya | 0.80 | 0.20 |
Tidak | 0.20 | 0.80 |
Tabel Peluang Bersyarat untuk Usia Tua:
X (Merokok) | P(Y | X) |
---|---|---|
Ya | 1.00 | 0.00 |
Tidak | 0.40 | 0.60 |
Implementasi dalam R
# Buat array 3 dimensi untuk Merokok x Kanker x Usia
data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
dim = c(2, 2, 3),
dimnames = list(
Merokok = c("Ya", "Tidak"),
Kanker = c("Ya", "Tidak"),
Usia = c("Muda", "Dewasa", "Tua")
))
# Tampilkan data dalam bentuk tabel silang
ftable(data3)
## Usia Muda Dewasa Tua
## Merokok Kanker
## Ya Ya 10 10 0
## Tidak 50 40 40
## Tidak Ya 40 20 45
## Tidak 5 10 30
Kesimpulan: • Peluang bersama dihitung dengan membagi frekuensi
dengan total populasi.
• Peluang marginal diperoleh dengan menjumlahkan probabilitas
bersama.
• Peluang bersyarat dihitung menggunakan rumus Bayes.
Analisis ini dapat diperluas untuk memahami hubungan antara variabel
yang lebih kompleks
1. Beda Peluang (BP)
\[ BP = P(Y|X_1, Z) - P(Y|X_2, Z) \]
2. Risiko Relatif (RR)
\[ RR = \frac{P(Y|X_1, Z)}{P(Y|X_2, Z)} \]
3. Odds Ratio (OR)
\[ OR = \frac{P(Y|X_1, Z)/(1 - P(Y|X_1, Z))}{P(Y|X_2, Z)/(1 - P(Y|X_2, Z))} \]
Ukuran asosiasi dalam tabel kontingensi digunakan untuk mengukur kekuatan hubungan antara dua variabel kategori. Tiga ukuran asosiasi yang umum digunakan adalah Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR). Dokumen ini menjelaskan rumus masing-masing ukuran asosiasi, perhitungan secara manual langkah demi langkah, implementasi dalam R, serta interpretasi dari hasil yang diperoleh.
Perhitungan Ukuran Asosiasi
1. Risk Difference (RD)
Risk Difference mengukur perbedaan probabilitas kejadian antara dua kelompok.
Perhitungan Manual:
\[ RD = \frac{10}{50} - \frac{5}{50} = 0.2 - 0.1 = 0.1 \]
Interpretasi RD: Risk Difference sebesar 0.1 (10%) menunjukkan bahwa probabilitas terkena kanker paru-paru lebih tinggi 10% pada kelompok perokok dibandingkan dengan kelompok non-perokok.
2. Relative Risk (RR)
Relative Risk membandingkan probabilitas kejadian antara dua kelompok.
Perhitungan Manual:
\[ RR = \frac{10/50}{5/50} = \frac{0.2}{0.1} = 2.0 \]
Interpretasi RR: Relative Risk sebesar 2.0 menunjukkan bahwa perokok memiliki risiko terkena kanker paru-paru 2 kali lebih tinggi dibandingkan dengan non-perokok.
3. Odds Ratio (OR)
Odds Ratio membandingkan odds kejadian antara dua kelompok.
Perhitungan Manual:
\[ OR = \frac{(10 \times 45)}{(5 \times 40)} = \frac{450}{200} = 2.25 \]
Interpretasi OR: Odds Ratio sebesar 2.25 menunjukkan bahwa odds terkena kanker paru-paru pada perokok adalah 2.25 kali lebih besar dibandingkan dengan non-perokok.
Implementasi dalam R
data <- matrix(c(10, 40, 5, 45), nrow = 2, byrow = TRUE)
rownames(data) <- c("Merokok", "Tidak")
colnames(data) <- c("Kanker", "Tidak Kanker")
data
## Kanker Tidak Kanker
## Merokok 10 40
## Tidak 5 45
# Hitung Risk Difference
p1 <- data[1, 1] / sum(data[1, ])
p2 <- data[2, 1] / sum(data[2, ])
RD <- p1- p2
RD
## [1] 0.1
# Hitung Relative Risk
RR <- p1 / p2
RR
## [1] 2
# Hitung Odds Ratio
odds1 <- data[1, 1] / data[1, 2]
odds2 <- data[2, 1] / data[2, 2]
OR <- odds1 / odds2
OR
## [1] 2.25
Kesimpulan
Ukuran asosiasi seperti Risk Difference, Relative Risk, dan Odds Ratio
sangat berguna dalam mengukur hubungan antara variabel dalam tabel
kontingensi.
Hasil analisis menunjukkan bahwa:
• Risk Difference sebesar 0.1 (10%) mengindikasikan bahwa perokok
memiliki peluang terkena kanker paru-paru yang lebih tinggi sebesar 10%
dibandingkan non-perokok.
• Relative Risk sebesar 2.0 menunjukkan bahwa perokok memiliki risiko 2
kali lebih tinggi terkena kanker paru-paru dibandingkan
non-perokok.
• Odds Ratio sebesar 2.25 menunjukkan bahwa odds terkena kanker
paru-paru pada perokok adalah 2.25 kali lebih besar dibandingkan dengan
non-perokok.
Ketiga ukuran ini memberikan gambaran bahwa terdapat hubungan positif antara kebiasaan merokok dan risiko kanker paru-paru. Namun, perlu diperhatikan bahwa hubungan ini tidak selalu bersifat kausal, dan faktor lain juga dapat berkontribusi terhadap risiko penyakit.
Rumus: \[
RD = \frac{a}{a + b} - \frac{c}{c + d}
\] Perhitungan Manual:
Misalkan kita menghitung RD untuk tersangka kulit putih dibandingkan
dengan kulit hitam (untuk korban kulit putih):
Tabel data:
Victims.Race | Defendant.s.Race | Yes | No |
---|---|---|---|
White | White | 53 | 414 |
Black | 11 | 37 | |
Black | White | 0 | 16 |
Black | 4 | 139 | |
Total | White | 53 | 430 |
Black | 15 | 176 |
Tersangka White:
\[ RD_W = \frac{53}{53 + 414}
\]
Tersangka Black:
\[ RD_B = \frac{11}{11 + 37}
\]
Maka:
\[ RD = \left( \frac{53}{467} \right) - \left( \frac{11}{48} \right) \]
Jika diperoleh RD = -0.1156, artinya risiko
putusan hukuman mati bagi tersangka kulit hitam lebih tinggi 11.56%
dibandingkan tersangka kulit putih
(nilai negatif menunjukkan bahwa kelompok referensi — kulit putih —
memiliki risiko lebih rendah).
Perhitungan dengan R:
RD_white <- 53 / (53 + 414)
RD_black <- 11 / (11 + 37)
RD <- RD_white - RD_black
RD
## [1] -0.1156763
\[ RR = \frac{\frac{a}{a + b}}{\frac{c}{c + d}} \]
Perhitungan Manual:
\[ RR = \left( \frac{53}{467} \right) \div \left( \frac{11}{48} \right) \]
Jika diperoleh RR = 0.495, artinya tersangka kulit putih memiliki risiko hanya 49.5% dibandingkan tersangka kulit hitam untuk mendapatkan putusan hukuman mati.
Karena nilai RR kurang dari 1, ini menunjukkan bahwa tersangka kulit putih memiliki risiko lebih rendah dibandingkan tersangka kulit hitam.
Perhitungan dengan R:
RR <- RD_white / RD_black
RR
## [1] 0.4952307
\[ OR = \frac{a \times d}{b \times c} \]
Perhitungan Manual: \[ OR = \frac{53 \times 37}{414 \times 11} \]
Jika diperoleh OR = 0.431, artinya peluang (odds) tersangka kulit putih untuk mendapatkan putusan hukuman mati hanya 43.1% dibandingkan dengan tersangka kulit hitam.
Karena nilai OR < 1, ini menunjukkan bahwa tersangka kulit putih memiliki peluang lebih kecil dibandingkan tersangka kulit hitam untuk menerima hukuman mati.
Perhitungan dengan R:
OR <- (53 * 37) / (414 * 11)
OR
## [1] 0.4306105
Interpretasi Hasil: 1. Risk Difference (RD =-0.1156): Risiko hukuman
mati bagi tersangka kulit hitam lebih tinggi 11.56% dibandingkan dengan
tersangka kulit putih.
2. Relative Risk (RR = 0.495): Tersangka kulit putih memiliki risiko
50.5% lebih rendah dibandingkan dengan tersangka kulit hitam untuk
menerima hukuman mati.
3. Odds Ratio (OR = 0.431): Peluang tersangka kulit putih untuk dihukum
mati hanya 43.1% dibandingkan dengan tersangka kulit hitam.
Kesimpulan dari hasil ini adalah bahwa tersangka kulit hitam memiliki kemungkinan lebih besar untuk dijatuhi hukuman mati dibandingkan dengan tersangka kulit putih dalam kasus ini.
Conditional independence (kemandirian bersyarat) dalam tabel kontingensi terjadi ketika dua variabel menjadi independen setelah dikendalikan oleh variabel ketiga.
Matematis, dua variabel X dan Y dikatakan independen secara kondisional terhadap variabel Z jika:
\[ P(X,Y|Z) = P(X|Z)P(Y|Z) \]
atau dalam bentuk frekuensi:
\[ \frac{n_{ijk}}{n_{k++}} = \frac{n_{i+k}}{n_{k++}} \times \frac{n_{+jk}}{n_{k++}} \] Contoh Kasus:
Misalkan kita memiliki data tentang kebiasaan olahraga (X), kesehatan jantung (Y), dan usia (Z):
Tabel untuk Usia = Muda
Sehat | Tidak Sehat | |
---|---|---|
Olahraga Rutin | 30 | 20 |
Tidak Rutin | 10 | 40 |
Tabel untuk Usia = Tua
Sehat | Tidak Sehat | |
---|---|---|
Olahraga Rutin | 5 | 10 |
Tidak Rutin | 15 | 50 |
Implementasi dalam R
# Membuat array 3 dimensi: Olahraga x Kesehatan x Usia
data4 <- array(c(30, 20, 10, 40, # Usia Muda
5, 10, 15, 50), # Usia Tua
dim = c(2, 2, 2),
dimnames = list(
Olahraga = c("Rutin", "Tidak Rutin"),
Kesehatan = c("Sehat", "Tidak Sehat"),
Usia = c("Muda", "Tua")
))
# Tampilkan data
ftable(data4)
## Usia Muda Tua
## Olahraga Kesehatan
## Rutin Sehat 30 5
## Tidak Sehat 10 15
## Tidak Rutin Sehat 20 10
## Tidak Sehat 40 50
Pengujian Conditional Independence
Untuk menguji apakah kesehatan dan olahraga independen secara kondisional terhadap usia, kita gunakan uji chi-square dalam setiap strata usia.
Teori dan Rumus
Perhitungan Manual:
Untuk setiap kategori Usia (Z), kita uji apakah:
\[ P(X, Y \mid Z) \approx P(X \mid Z) \cdot P(Y \mid Z) \] Misalkan untuk usia muda:
\[ P(\text{Sehat} \mid \text{OlahragaRutin}, \text{Muda}) = \frac{30}{30 + 10} = 0.75 \] \[ P(\text{Sehat} \mid \text{TidakOlahraga}, \text{Muda}) = \frac{20}{20 + 40} = 0.333 \] \[ P(\text{Sehat} \mid \text{Muda}) = \frac{30 + 20}{100} = 0.5 \] Jika nilai \(P(\text{Sehat} \mid \text{OlahragaRutin}, \text{Muda})\) tidak jauh berbeda dari \(P(\text{Sehat} \mid \text{Muda})\), maka conditional independence berlaku.
Perhitungan dengan R
# Contoh array data tiga dimensi (Health x Olahraga x Usia)
sports_health <- array(
c(30, 10, 20, 40, # Muda
25, 25, 10, 40), # Tua
dim = c(2, 2, 2),
dimnames = list(
Kesehatan = c("Sehat", "TidakSehat"),
Olahraga = c("Rutin", "Tidak"),
Usia = c("Muda", "Tua")
)
)
# Uji Chi-Square untuk masing-masing strata usia
chisq_muda <- chisq.test(sports_health[, , "Muda"])
chisq_tua <- chisq.test(sports_health[, , "Tua"])
# Tampilkan hasil
chisq_muda
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: sports_health[, , "Muda"]
## X-squared = 15.042, df = 1, p-value = 0.0001052
chisq_tua
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: sports_health[, , "Tua"]
## X-squared = 8.6154, df = 1, p-value = 0.003333
Interpretasi Hasil:
• Jika nilai p-value > 0.05, maka tidak ada hubungan signifikan
antara olahraga dan kesehatan setelah dikendalikan oleh usia
(kondisional independen).
• Jika p-value < 0.05, maka masih ada hubungan signifikan, artinya
olahraga dan kesehatan tetap bergantung meskipun usia
dikendalikan.
margin_YX <- matrix(c(65, 65,
30, 45),
nrow = 2,
byrow = TRUE)
colnames(margin_YX) <- c("Obat A", "Obat B")
rownames(margin_YX) <- c("Sembuh", "Tidak Sembuh")
kable(margin_YX, format = "latex", booktabs = TRUE)
Perhitungan Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR) Kita menghitung RD, RR, dan OR untuk setiap tingkat Z (Laki-laki dan Perempuan).
Tabel kontingensi tiga arah digunakan untuk menganalisis hubungan antara dua variabel kategorik dengan mempertimbangkan variabel kontrol. Contohnya adalah hubungan antara kebiasaan merokok (\(X\)) dan kanker paru-paru (\(Y\)) dengan variabel kontrol usia (\(Z\)).
Tabel ini terdiri dari beberapa tabel parsial (2×2) untuk setiap tingkat \(Z\), serta tabel marginal yang mengabaikan \(Z\). Ukuran asosiasi yang digunakan adalah odds ratio:
\[ \text{OR} = \frac{a \cdot d}{b \cdot c} \]
dengan:
- \(a\) = jumlah kasus kanker yang
merokok
- \(b\) = jumlah kasus kanker yang
tidak merokok
- \(c\) = jumlah tidak kanker yang
merokok
- \(d\) = jumlah tidak kanker yang
tidak merokok
Jika odds ratio parsial relatif konstan, kita dapat menghitung odds ratio bersama menggunakan estimasi Mantel-Haenszel.
Independensi bersyarat adalah konsep penting dalam analisis tabel kontingensi tiga arah. Ini merujuk pada kondisi di mana dua variabel, \(X\) dan \(Y\), independen dalam setiap level variabel ketiga, \(Z\). Pengujian independensi bersyarat dilakukan dengan metode statistik seperti uji Cochran-Mantel-Haenszel (CMH).
Definisi Independensi Bersyarat
Independensi Bersyarat: Dua variabel, \(X\) dan \(Y\), dikatakan independen bersyarat terhadap variabel ketiga, \(Z\), jika rasio odds mereka dalam setiap strata \(Z\) sama dengan 1.
Secara matematis, ini dapat dituliskan sebagai:
\[ OR(X, Y \mid Z) = 1 \] Artinya, setelah mengendalikan pengaruh \(Z\), tidak ada hubungan antara \(X\) dan \(Y\) dalam setiap strata.
Hal yang Perlu Diperhatikan:
Metode Cochran-Mantel-Haenszel: Tujuan Uji CMH
Uji Cochran-Mantel-Haenszel (CMH) digunakan untuk menguji hubungan antara dua variabel kategori dengan mempertimbangkan efek dari variabel perancu (confounder). Uji ini berguna dalam:
Ide Dasar Uji CMH
Uji CMH berangkat dari konsep tabel kontingensi berlapis (stratified \(2 \times 2\) tables), di mana dua variabel utama dipecah menjadi beberapa strata berdasarkan variabel perancu.
Sebagai contoh, jika kita ingin melihat hubungan antara merokok (\(X\)) dan kanker paru-paru (\(Y\)), namun juga ingin mempertimbangkan pengaruh polusi udara (\(Z\)), maka kita membuat beberapa tabel \(2 \times 2\) berdasarkan tingkat polusi udara. CMH kemudian menguji hubungan antara \(X\) dan \(Y\) setelah mengontrol efek \(Z\).
Hipotesis
Statistik Uji
Statistik uji Cochran-Mantel-Haenszel (CMH) dirumuskan sebagai:
\[ CMH = \frac{\left[\sum_k (n_{11k} - \mu_{11k})\right]^2}{\sum_k \text{var}(n_{11k})} \]
Keterangan
\[ \mu_{11k} = E(n_{11k}) = \frac{n_{1.k} \cdot n_{.1k}}{n_{..k}} \]
\[ \text{var}(n_{11k}) = \frac{n_{1.k} \cdot n_{2.k} \cdot n_{.1k} \cdot n_{.2k}}{n_{..k}^2 (n_{..k} - 1)} \]
Contoh Kasus 1
Penaksir (Khusus Tabel \(2 \times 2 \times K\))
Rumus Odds Ratio Bersama
Odds ratio bersama ditaksir menggunakan rumus:
\[ \hat{\theta}_{MH} = \frac{\sum_{k=1}^{K} \left( \frac{n_{11k} n_{22k}}{n_{..k}} \right)}{\sum_{k=1}^{K} \left( \frac{n_{12k} n_{21k}}{n_{..k}} \right)} \]
Dengan: - \(n_{11k}\): Frekuensi sel
baris 1 kolom 1 pada tabel parsial ke-\(k\)
- \(n_{12k}\): Frekuensi sel baris 1
kolom 2
- \(n_{21k}\): Frekuensi sel baris 2
kolom 1
- \(n_{22k}\): Frekuensi sel baris 2
kolom 2
- \(n_{..k}\): Total observasi dalam
tabel parsial ke-\(k\)
Standard Error log Odds Ratio Bersama
Standard error untuk log odds ratio bersama dihitung dengan rumus:
\[ \hat{\sigma}^2[\log(\hat{\theta}_{MH})] = \frac{\sum(n_{11k} + n_{12k})(n_{11k}n_{22k})/n_{..k}^2}{2(\sum n_{11k}n_{12k}/n_{..k})^2} + \frac{[(n_{11k} + n_{22k})(n_{11k} + n_{12k}) + (n_{12k} + n_{21k})(n_{11k} + n_{22k})]/n_{..k}^2}{2(\sum n_{12k}n_{21k}/n_{..k})^2} + \frac{(n_{12k} + n_{21k})(n_{12k}n_{21k})/n_{..k}^2}{2(\sum n_{12k}n_{21k}/n_{..k})^2} \]
Interval Kepercayaan log Odds Ratio Bersama
\[
\log(\hat{\theta}_{MH}) \pm Z_{\alpha/2}
\hat{\sigma}[\log(\hat{\theta}_{MH})]
\]
Contoh Odds Ratio Bersama
Dari data sebelumnya mengenai kebiasaan merokok dan kanker paru-paru di 8 kota di China, kita akan menentukan odds ratio bersama, standard error, dan interval kepercayaan 95%.
Solusi:
1. Penaksir Odds Ratio Bersama
\[ \hat{\theta}_{MH} = \frac{(126)(61) + \cdots + (104)(36)/250}{(35)(100) + \cdots + (21)(89)/250} = 2.17 \]
2. Standard Error
\[ SE(\log \hat{\theta}_{MH}) = 0.04 \] 3. Interval Kepercayaan 95% log Odds Ratio
\[ \log(2.17) \pm 1.96 \times (0.04) \] 4. Interval Kepercayaan 95% Odds Ratio
\[ 1.98 \leq \theta \leq 2.38 \] Interpretasi Hasil
Kesimpulan
Odds ratio bersama digunakan untuk menyimpulkan hubungan antara dua variabel setelah mempertimbangkan efek dari variabel ketiga. Statistik Mantel-Haenszel adalah metode yang andal untuk mengestimasi dan menguji hubungan ini.
Homogenitas Asosiasi dalam Tabel Kontingensi Tiga Arah
Definisi Asosiasi Homogen
\[ \theta_{xy(1)} = \theta_{xy(2)} = \cdots = \theta_{xy(K)} \]
Pengujian Homogenitas dengan Statistik Breslow-Day
Hipotesis
Statistik Uji Breslow-Day
Statistik uji Breslow-Day (BD) digunakan untuk menguji homogenitas odds ratio:
\[ X^2_{HBD} = \sum_{j=1}^K \frac{(a_j - \tilde{a}_j)^2}{\text{Var}(a_j|\hat{OR}_{MH})} \] Dengan:
Catatan:
Perhitungan Manual Step-by-Step
Pendahuluan
Fungsi Breslow-Day Test digunakan untuk menguji homogenitas rasio odds (\(\theta\)) di seluruh strata dalam tabel kontingensi \(2 \times 2 \times K\).
Hipotesis nol (\(H_0\)) menyatakan bahwa rasio odds (\(\theta_{XY(k)}\)) adalah sama di semua strata:
\[ H_0 : \theta_{XY(1)} = \theta_{XY(2)} = \cdots = \theta_{XY(K)} \]
Jika hipotesis nol ditolak, berarti odds ratio berbeda di beberapa strata.
Generalized Linear Model (GLM) adalah perluasan dari model regresi linear yang memungkinkan respon (variabel dependen) memiliki distribusi selain distribusi normal. GLM digunakan untuk menganalisis data dengan berbagai tipe distribusi seperti binomial, Poisson, Gamma, dan lainnya.
Komponen GLM
GLM terdiri dari tiga komponen utama:
Notasi dan Rumus GLM
\[ g(\mu_i) = \eta_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \]
Distribusi Respon | Fungsi Link | Notasi Fungsi Link |
---|---|---|
Normal | Identitas | \(g(\mu) = \mu\) |
Binomial | Logit | \(g(\mu) = \log\left(\frac{\mu}{1-\mu}\right)\) |
Poisson | Log | \(g(\mu) = \log(\mu)\) |
Contoh Kasus: Regresi Logistik
Model ini digunakan untuk respon biner (misal: sukses/gagal). Fungsi link yang digunakan adalah logit.
Rumus:
\[ \log\left(\frac{\pi}{1 - \pi}\right) = \beta_0 + \beta_1 x_1 + \cdots + \beta_p x_p \] di mana \(\pi = P(Y = 1)\) adalah probabilitas kejadian sukses.
Implementasi GLM di R
# Contoh regresi logistik pada data biner
data(mtcars)
# Misal: prediksi apakah mobil adalah otomatis (am = 1) atau manual (am = 0)
# Berdasarkan variabel mpg dan hp
model_logit <- glm(am ~ mpg + hp, data = mtcars, family = binomial)
# Ringkasan hasil model
summary(model_logit)
##
## Call:
## glm(formula = am ~ mpg + hp, family = binomial, data = mtcars)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -33.60517 15.07672 -2.229 0.0258 *
## mpg 1.25961 0.56747 2.220 0.0264 *
## hp 0.05504 0.02692 2.045 0.0409 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 43.230 on 31 degrees of freedom
## Residual deviance: 19.233 on 29 degrees of freedom
## AIC: 25.233
##
## Number of Fisher Scoring iterations: 7
# Visualisasi probabilitas prediksi
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
mtcars$predicted_prob <- predict(model_logit, type = "response")
ggplot(mtcars, aes(x = mpg, y = predicted_prob, color = factor(am))) +
geom_point() +
labs(title = "Prediksi Probabilitas Transmisi Otomatis",
y = "Probabilitas (am = 1)", color = "Transmisi")
Salah satu syarat utama dalam Generalized Linear Model (GLM) adalah bahwa distribusi dari variabel respon harus berasal dari keluarga eksponensial (exponential family). Banyak distribusi umum yang digunakan dalam statistik termasuk dalam keluarga ini, seperti Normal, Binomial, Poisson, Gamma, dan lainnya.
Bentuk Umum Distribusi Keluarga Eksponensial
Distribusi keluarga eksponensial dapat dituliskan dalam bentuk umum sebagai berikut:
\[ f_Y(y; \theta, \phi) = \exp\left\{ \frac{y \cdot \theta - b(\theta)}{a(\phi)} + c(y, \phi) \right\} \]
Keterangan: - \(\theta\): parameter natural (canonical parameter) - \(\phi\): parameter skala (scale/dispersion) - \(a(\phi)\): fungsi skala - \(b(\theta)\): fungsi log-partisi (cumulant function) - \(c(y, \phi)\): fungsi normalisasi - \(y\): nilai respon
Komponen Penting
\[ \mathbb{E}(Y) = b'(\theta) \]
\[ \operatorname{Var}(Y) = a(\phi) \cdot b''(\theta) \]
Fungsi varians sering kali ditulis dalam bentuk:
\[ \operatorname{Var}(Y) = \phi V(\mu) \] di mana \(V(\mu)\) disebut fungsi varians.
Contoh Distribusi dalam Exponential Family
Distribusi | \(\theta\) (Canonical) | \(b(\theta)\) | \(a(\phi)\) | Varians |
---|---|---|---|---|
Normal | \(\mu\) | \(\frac{\theta^2}{2}\) | \(\sigma^2\) | \(\sigma^2\) |
Binomial | \(\log\left(\frac{\pi}{1 - \pi}\right)\) | \(\log(1 + e^\theta)\) | \(1\) | \(n\pi(1 - \pi)\) |
Poisson | \(\log(\lambda)\) | \(e^\theta\) | \(1\) | \(\lambda\) |
Kaitan dengan GLM
GLM menggunakan distribusi dari keluarga eksponensial, dan menghubungkan nilai harapan \(\mu\) dengan prediktor linear melalui fungsi link:
\[ g(\mu) = \eta = X\beta \]
Implementasi di R
# Contoh GLM dengan distribusi dari exponential family
# Data: Poisson regression (jumlah kejadian)
counts <- c(18, 17, 15, 20, 10, 20, 25, 13, 12)
outcome <- gl(3, 1, 9)
treatment <- gl(3, 3)
# Model GLM Poisson
model_pois <- glm(counts ~ outcome + treatment, family = poisson())
summary(model_pois)
##
## Call:
## glm(formula = counts ~ outcome + treatment, family = poisson())
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.045e+00 1.709e-01 17.815 <2e-16 ***
## outcome2 -4.543e-01 2.022e-01 -2.247 0.0246 *
## outcome3 -2.930e-01 1.927e-01 -1.520 0.1285
## treatment2 1.217e-15 2.000e-01 0.000 1.0000
## treatment3 8.438e-16 2.000e-01 0.000 1.0000
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 10.5814 on 8 degrees of freedom
## Residual deviance: 5.1291 on 4 degrees of freedom
## AIC: 56.761
##
## Number of Fisher Scoring iterations: 4
Model regresi logistik digunakan ketika variabel respon (Y) bersifat biner (hanya memiliki dua kategori, misalnya 0 dan 1). Tujuannya adalah untuk memodelkan probabilitas kejadian dari salah satu kategori (biasanya kategori “1”) berdasarkan satu atau lebih variabel prediktor.
Fungsi Logistik
Model regresi logistik memodelkan log odds dari probabilitas sukses (\(\pi\)) sebagai fungsi linier dari prediktor:
\[ \text{logit}(\pi) = \log\left( \frac{\pi}{1 - \pi} \right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p \] Dari persamaan ini, kita bisa menurunkan bentuk probabilitas:
\[ \pi = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p)}} \] Interpretasi Koefisien
Estimasi Parameter
Parameter model (\(\beta\)) diestimasi menggunakan Maximum Likelihood Estimation (MLE), bukan OLS seperti pada regresi linier biasa.
Statistik Uji
Implementasi Regresi Logistik di R
# Data dummy: apakah seseorang diterima berdasarkan nilai dan pengalaman
data <- data.frame(
diterima = c(0, 0, 1, 1, 1, 0, 1, 1, 0, 0),
nilai = c(60, 65, 80, 85, 90, 58, 78, 82, 62, 67),
pengalaman = c(1, 2, 4, 5, 6, 1, 3, 4, 1, 2)
)
# Model regresi logistik
model <- glm(diterima ~ nilai + pengalaman, family = binomial, data = data)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# Ringkasan hasil model
summary(model)
##
## Call:
## glm(formula = diterima ~ nilai + pengalaman, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.709e+02 2.288e+06 0 1
## nilai 5.582e+00 4.216e+04 0 1
## pengalaman -1.310e+01 2.794e+05 0 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1.3863e+01 on 9 degrees of freedom
## Residual deviance: 3.6660e-10 on 7 degrees of freedom
## AIC: 6
##
## Number of Fisher Scoring iterations: 24
Misalkan kita ingin memprediksi kemungkinan seseorang membeli produk
berdasarkan umur
dan pendapatan
.
# Simulasi Data
set.seed(123)
n <- 200
umur <- runif(n, 18, 60)
pendapatan <- rnorm(n, mean = 5000 + umur*50, sd = 1000)
log_odds <- -10 + 0.1 * umur + 0.002 * pendapatan
prob <- 1 / (1 + exp(-log_odds))
beli <- rbinom(n, size = 1, prob = prob)
data <- data.frame(umur, pendapatan, beli = factor(beli))
head(data)
# Fit model
model <- glm(beli ~ umur + pendapatan, data = data, family = binomial)
summary(model)
##
## Call:
## glm(formula = beli ~ umur + pendapatan, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -9.572371 5.743597 -1.667 0.0956 .
## umur 0.024163 0.162870 0.148 0.8821
## pendapatan 0.002325 0.001511 1.539 0.1238
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 22.401 on 199 degrees of freedom
## Residual deviance: 13.603 on 197 degrees of freedom
## AIC: 19.603
##
## Number of Fisher Scoring iterations: 9
model2 <- glm(beli ~ umur, data = data, family = binomial)
# Buat prediksi
umur_seq <- seq(min(data$umur), max(data$umur), length.out = 100)
pred_data <- data.frame(umur = umur_seq)
pred_data$prob <- predict(model2, newdata = pred_data, type = "response")
# Plot
library(ggplot2)
ggplot(data, aes(x = umur, y = as.numeric(beli) - 1)) +
geom_point(alpha = 0.5) +
geom_line(data = pred_data, aes(x = umur, y = prob), color = "blue", size = 1) +
labs(title = "Kurva Logit - Probabilitas Membeli Berdasarkan Umur",
y = "Probabilitas Membeli", x = "Umur") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
exp(coef(model))
## (Intercept) umur pendapatan
## 6.962609e-05 1.024457e+00 1.002328e+00
# Confusion matrix dan akurasi
pred_class <- ifelse(predict(model, type = "response") > 0.5, 1, 0)
table(Predicted = pred_class, Actual = data$beli)
## Actual
## Predicted 0 1
## 0 1 0
## 1 1 198
# Akurasi
mean(pred_class == as.numeric(data$beli) - 1)
## [1] 0.995
Regresi Poisson digunakan ketika variabel respons adalah data cacah
(count data), yaitu bilangan bulat non-negatif.
Model ini merupakan bagian dari Generalized Linear Model
(GLM) dengan asumsi bahwa distribusi variabel respons adalah
distribusi Poisson.
Distribusi Poisson memiliki fungsi probabilitas:
\[ P(Y = y) = \frac{e^{-\lambda} \lambda^y}{y!} \] Kita dapat menuliskan bentuk ini dalam format exponential family:
\[ f(y; \theta) = \exp \left\{ y \log(\lambda) - \lambda - \log(y!) \right\} \] Dengan:
Maka distribusi Poisson termasuk dalam exponential family.
Fungsi Link
Fungsi link kanonik untuk distribusi Poisson adalah fungsi logaritma: \[ g(\mu) = \log(\mu) \]
Sehingga modelnya menjadi: \[ \log(\mu_i) = x_i^\top \beta \]
dan fungsi inverse link: \[ \mu_i = \exp(x_i^\top \beta) \]
Estimasi Parameter
Estimasi parameter \(\beta\)
dilakukan dengan metode Maximum Likelihood Estimation
(MLE).
Fungsi log-likelihood untuk regresi Poisson:
\[ l(\beta) = \sum_{i=1}^n \left[ y_i x_i^\top \beta - \exp(x_i^\top \beta) - \log(y_i!) \right] \] Nilai \(\beta\) dapat diperoleh melalui metode numerik seperti iterasi Newton-Raphson atau algoritma IRLS.
Contoh 1 Misalnya kita memiliki data simulasi sebagai berikut
set.seed(45)
n <- 200
x <- rnorm(n)
lambda <- exp(0.3 + 0.6 * x)
y <- rpois(n, lambda)
data <- data.frame(y, x)
data
Estimasi Regresi Poisson
poisson_model <- glm(y ~ x, data = data, family = poisson)
summary(poisson_model)
##
## Call:
## glm(formula = y ~ x, family = poisson, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.12040 0.07089 1.699 0.0894 .
## x 0.72465 0.04319 16.777 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 442.89 on 199 degrees of freedom
## Residual deviance: 198.62 on 198 degrees of freedom
## AIC: 544.09
##
## Number of Fisher Scoring iterations: 5
Plot Hasil Prediksi
plot(data$x,data$y,pch=16, col="pink", main= "Data dan Hasil Prediksi")
newdata<-data.frame(x = seq(min(x), max(x), length.out=100))
pred <-predict(poisson_model,newdata= newdata,type= "response")
lines(newdata$x,pred, col="blue",lwd= 2)
Diagnostik dan Overdispersion
Salah satu asumsi penting dari model Poisson adalah bahwa mean dan varians dari variabel respons adalah sama: \[ E[Y] = Var[Y] \] Jika varians lebih besar dari mean,maka terjadi overdispersion.
Untuk mendeteksi overdispersion:
dispersion<-sum(residuals(poisson_model, type="pearson")^2) /poisson_model$df.residual
dispersion
## [1] 0.868837
Dalam Generalized Linear Model (GLM), inferensi statistik membutuhkan pemahaman terhadap ekspek tasi dan varians dari estimator model, terutama untuk mengembangkan alat-alat uji seperti Wald test, Likelihood Ratio test, dan interval kepercayaan.
Ekspektasi dan Varians dalam GLM
Dalam konteks GLM, estimasi parameter \(\hat{\boldsymbol{\beta}}\) umumnya diperoleh melalui Maximum Likelihood Estimation (MLE).
Jika asumsi model terpenuhi, maka ekspektasi dari estimator adalah:
\[ \mathbb{E}(\hat{\boldsymbol{\beta}}) = \boldsymbol{\beta} \]
yang berarti estimator tersebut adalah tak bias (unbiased estimator).
Varians menunjukkan presisi dari estimasi parameter:
\[ \mathrm{Var}(\hat{\boldsymbol{\beta}}) \approx \left( \mathbf{X}^\top \mathbf{W} \mathbf{X} \right)^{-1} \]
di mana \(\mathbf{W}\) adalah matriks bobot yang tergantung pada distribusi dan fungsi link.
Distribusi Asimptotik Estimator
Dengan ukuran sampel besar:
\[ \hat{\boldsymbol{\beta}} \sim \mathcal{N} \left( \boldsymbol{\beta}, \mathrm{Var}(\hat{\boldsymbol{\beta}}) \right) \]
Distribusi ini adalah dasar dari:
Varians dalam GLM Tidak Konstan
Tidak seperti regresi linear (OLS) yang mengasumsikan homoskedastisitas:
\[ \mathrm{Var}(Y_i) = \sigma^2 \]
Dalam GLM:
\[ \mathrm{Var}(Y_i) = \phi V(\mu_i) \]
Dengan:
Contoh:
Contoh Regresi Poisson
# Simulasi data
set.seed(123)
x <- rnorm(100)
mu <- exp(0.5 + 0.8*x)
y <- rpois(100, mu)
model <- glm(y ~ x, family = poisson)
summary(model)
##
## Call:
## glm(formula = y ~ x, family = poisson)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.44950 0.08872 5.066 4.05e-07 ***
## x 0.86000 0.07463 11.523 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 245.05 on 99 degrees of freedom
## Residual deviance: 106.78 on 98 degrees of freedom
## AIC: 325.76
##
## Number of Fisher Scoring iterations: 5
Kesimpulan
• Ekspektasi digunakan untuk mengetahui ketakbiasan estimasi
• Varians digunakan untuk mengukur presisi dan menyusun uji
statistik
• Distribusi asimptotik dari \[ \hat{\beta}
\] sangat bergantung pada kedua konsep ini
• Dalam GLM, varians sangat tergantung pada bentuk distribusi
eksponensial dari data
Maximum Likelihood Estimation (MLE)
• Prinsip dasar: memaksimumkan fungsi
likelihood/log-likelihood.
• Langkah: – Turunan pertama = 0 – Turunan kedua < 0
Namun, karena bentuk GLM tidak eksplisit, digunakan metode numerik. Metode Optimisasi Newton-Raphson
• Menggunakan score vector (gradien)
• Menggunakan Hessian matrix
Iterasi:
\[ \boldsymbol{\beta}^{(t+1)} = \boldsymbol{\beta}^{(t)} + \left( \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X} \right)^{-1} \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{z}^{(t)} \]
dengan:
Fisher Scoring • Modifikasi Newton-Raphson, mengganti
Hessian dengan matriks informasi Fisher.
IRLS (Iteratively Reweighted Least Square) • Modifikasi dari
Fisher scoring, hasil estimasi mirip dengan Least Square.
Implementasi Newton-Raphson
Statistik score ke-j:
\[ U_j(\beta) = \frac{\partial \log L(\beta)}{\partial \beta_j} \]
Turunan kedua:
\[ H_{jk}(\beta) = \frac{\partial^2 \log L(\beta)}{\partial \beta_j \partial \beta_k} \]
Taylor expansion:
\[ U(\beta^*) \approx U(\beta) + H(\beta)(\beta^* - \beta) \]
Estimasi parameter:
\[ \hat{\beta} \approx \beta^{(t)} - H^{-1}(\beta^{(t)}) U(\beta^{(t)}) \]
Diagnostik digunakan untuk mengevaluasi apakah model sudah tepat.
• Uji formal • Grafik antara nilai prediksi vs nilai aktual
Statistik Devians
• Mengukur apakah ada model lain yang lebih baik. • Nilai devians besar → model tidak cocok. • Devians adalah:
\[
D = 2 \sum \left[ y_i \log \left( \frac{y_i}{\hat{\mu}_i} \right) - (y_i
- \hat{\mu}_i) \right]
\] • Devians membandingkan model terhadap saturated model.
• Devians kecil → model lebih cocok.
Statistik Chi-Kuadrat Pearson
• Menguji apakah model lebih baik daripada tidak ada model sama sekali. • Statistik:
\[ \chi^2 = \sum_{i=1}^{n} \frac{(y_i - \hat{\mu}_i)^2}{\hat{\mu}_i} \] • Jika signifikan → model lebih baik daripada tanpa model.
Catatan
• Untuk data yang dikelompokkan, statistik devians dan chi-kuadrat
Pearson mengikuti distribusi Chi-Square.
• Untuk data tidak dikelompokkan, tidak mengikuti distribusi
Chi-Square.
• Devians diminimalkan oleh MLE → cocok digunakan untuk evaluasi
model.
Analisis Residual
• Residual adalah selisih antara observasi dengan prediksi.
• Dapat digunakan untuk memeriksa penyimpangan sistematis.
• Dapat diplot untuk menilai asumsi model.
Regresi logistik digunakan saat variabel respon bersifat biner (contoh: 0 dan 1). Model ini memodelkan probabilitas kejadian sukses (Y=1) berdasarkan kovariat:
\[ P(Y_i = 1 \mid x_i) = \pi_i \]
Model logistik dengan fungsi link logit:
\[ \text{logit}(\pi_i) = \log \left( \frac{\pi_i}{1 - \pi_i} \right) = x_i^\top \beta \]
Sehingga probabilitas menjadi:
\[ \pi_i = \frac{\exp(x_i^\top \beta)}{1 + \exp(x_i^\top \beta)} \] Fungsi likelihood:
\[ L(\beta) = \prod_{i=1}^n \pi_i^{y_i} (1 - \pi_i)^{1 - y_i} \]
Fungsi log-likelihood:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i) \right] \]
Dengan \(\pi_i = \frac{e^{x_i^\top \beta}}{1 + e^{x_i^\top \beta}}\), log-likelihood dapat ditulis sebagai:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i x_i^\top \beta - \log(1 + e^{x_i^\top \beta}) \right] \] Estimasi Parameter: Maximum Likelihood Estimation (MLE)
Estimasi parameter \(\beta\) dilakukan dengan maksimisasi fungsi log-likelihood, secara numerik dengan metode seperti iterasi Newton-Raphson atau Fisher Scoring.
Inferensi Statistik
Setelah memperoleh \(\hat{\beta}\), kita lakukan inferensi:
\[ \text{Var}(\hat{\beta}) = (X^\top W X)^{-1} \] dengan:
\[ W_{ii} = \pi_i (1 - \pi_i) \] 2. Z-Statistik untuk Uji Hipotesis:
\[ z_j = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \] Digunakan untuk menguji \(H_0: \beta_j = 0\).
\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j) \] atau dalam bentuk odds ratio:
\[ \exp(\hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j)) \] Implementasi di R
Kita akan menggunakan dataset mtcars
untuk memodelkan
probabilitas mobil menggunakan transmisi otomatis (am
= 1)
atau manual (am
= 0):
# Dataset
data(mtcars)
mtcars$am <- factor(mtcars$am, labels = c("Manual", "Automatic"))
# Model logistik
logit_model <- glm(am ~ mpg + hp + wt, family = binomial(link = "logit"), data = mtcars)
# Ringkasan model
summary(logit_model)
##
## Call:
## glm(formula = am ~ mpg + hp + wt, family = binomial(link = "logit"),
## data = mtcars)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -15.72137 40.00281 -0.393 0.6943
## mpg 1.22930 1.58109 0.778 0.4369
## hp 0.08389 0.08228 1.020 0.3079
## wt -6.95492 3.35297 -2.074 0.0381 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 43.2297 on 31 degrees of freedom
## Residual deviance: 8.7661 on 28 degrees of freedom
## AIC: 16.766
##
## Number of Fisher Scoring iterations: 10
Metode Newton-Raphson memperbarui parameter dengan rumus iteratif:
\[ \beta^{(t+1)} = \beta^{(t)} - \left[ H(\beta^{(t)}) \right]^{-1} \nabla \ell(\beta^{(t)}) \] Gradien (First Derivative):
\[ \nabla \ell(\beta) = X^\top (y - \pi) \] Hesian (Second Derivative):
\[ H(\beta) = -X^\top W X \quad \text{dengan} \quad W = \text{diag}(\pi_i (1 - \pi_i)) \] Algoritma Newton-Raphson
Langkah-langkah:
Implementasi dalam R
# Contoh data simulasi
set.seed(123)
n <- 100
x <- rnorm(n)
X <- cbind(1, x) # dengan intercept
beta_true <- c(-1, 2)
eta <- X %*% beta_true
pi <- 1 / (1 + exp(-eta))
y <- rbinom(n, 1, pi)
# Newton-Raphson
beta <- rep(0, ncol(X)) # inisialisasi
tol <- 1e-6
max_iter <- 100
for (i in 1:max_iter) {
eta <- X %*% beta
p <- 1 / (1 + exp(-eta))
W <- diag(as.vector(p * (1 - p)))
z <- eta + (y - p) / (p * (1 - p))
beta_new <- solve(t(X) %*% W %*% X) %*% t(X) %*% W %*% z
if (max(abs(beta_new - beta)) < tol) break
beta <- beta_new
}
beta # hasil estimasi
## [,1]
## -0.9961379
## x 2.0261734
Perbandingan dengan GLM:
glm_model <- glm(y ~ x, family = binomial)
summary(glm_model)
##
## Call:
## glm(formula = y ~ x, family = binomial)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.9961 0.2887 -3.451 0.000559 ***
## x 2.0262 0.4205 4.819 1.44e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 131.79 on 99 degrees of freedom
## Residual deviance: 90.54 on 98 degrees of freedom
## AIC: 94.54
##
## Number of Fisher Scoring iterations: 5
Inferensi Parameter
1. Uji Wald
Tujuan Uji Wald
Untuk menguji signifikansi parameter \(\beta_j\) dalam model regresi logistik:
Teori Wald Test
Dari teori estimasi MLE, estimator \(\hat{\beta}_j\) mendekati distribusi normal:
\[ \hat{\beta}_j \sim \mathcal{N}(\beta_j, \text{Var}(\hat{\beta}_j)) \]
Jika \(H_0\) benar (yaitu \(\beta_j = 0\)), maka:
\[ Z = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim \mathcal{N}(0,1) \]
Dengan statistik Wald:
\[ W = Z^2 = \left( \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \right)^2 \sim \chi^2_1 \]
Simulasi dan Uji Wald Langkah demi Langkah
set.seed(130)
n <- 100
x <- rnorm(n)
log_odds <- -0.5 + 1.2 * x
p <- 1 / (1 + exp(-log_odds))
y <- rbinom(n, 1, p)
data <- data.frame(x, y)
model <- glm(y ~ x, data = data, family = binomial)
summary(model)
##
## Call:
## glm(formula = y ~ x, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.6688 0.2219 -3.014 0.00258 **
## x 0.6150 0.2286 2.691 0.00713 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 130.68 on 99 degrees of freedom
## Residual deviance: 122.46 on 98 degrees of freedom
## AIC: 126.46
##
## Number of Fisher Scoring iterations: 4
Langkah 1: Ambil nilai koefisien dan SE
beta_hat <- coef(model)["x"]
beta_hat
## x
## 0.6150327
se_beta <- summary(model)$coefficients["x", "Std. Error"]
se_beta
## [1] 0.2285923
Langkah 2: Hitung nilai statistik Z
Z <- beta_hat / se_beta
Z
## x
## 2.690522
Langkah 3: Hitung statistik Wald
Wald_stat <- Z^2
Wald_stat
## x
## 7.238908
Langkah 4: Hitung p-value
p_value <- 1- pchisq(Wald_stat, df = 1)
p_value
## x
## 0.007134037
Interpretasi:
• Jika p-value < 0.05, maka koefisien signifikan
→ variabel prediktor berpengaruh.
• Jika p-value > 0.05, maka tidak ada cukup bukti
untuk menolak H.
Kesimpulan
Uji Wald didasarkan pada rasio antara estimasi parameter dan standar error-nya. Dengan menaikkan nilai Z menjadi kuadrat (Z²), kita memperoleh distribusi Chi-Square untuk pengujian hipotesis parameter individual dalam model regresi logistik.
2. Uji Likelihood Ratio (Chi-Square)
Bandingkan model penuh dengan model tanpa prediktor.
# Model null
model_null <- glm(y ~ 1, data = data, family = binomial)
# Likelihood ratio test
anova(model_null, model, test = "Chisq")
Evaluasi Kebaikan Model
1. Akaike Information Criterion (AIC) Semakin kecil AIC, semakin baik model.
AIC(model)
## [1] 126.4607
2. Bayesian Information Criterion (BIC) Alternatif terhadap AIC, menghukum kompleksitas model.
BIC(model)
## [1] 131.6711
• Estimasi regresi logistik dilakukan dengan MLE melalui iterasi
Newton-Raphson.
• Inferensi parameter dapat dilakukan dengan uji Wald dan likelihood
ratio (uji Chi-Square).
• AIC dan BIC digunakan untuk mengevaluasi kompleksitas dan kecocokan
model.
Model Regresi Poisson
Model regresi Poisson digunakan untuk memodelkan data cacah (count data), di mana variabel respons \(Y\) mengikuti distribusi Poisson dengan parameter \(\mu\):
\[ Y_i \sim \text{Poisson}(\mu_i), \quad i = 1, 2, ..., n \] Hubungan antara rata-rata \(\mu_i\) dan kovariat \(x_i\) dilakukan dengan fungsi link logaritma:
\[ \log(\mu_i) = x_i^\top \beta \Rightarrow \mu_i = \exp(x_i^\top \beta) \] Fungsi Log-Likelihood
Fungsi likelihood untuk distribusi Poisson adalah:
\[ L(\beta) = \prod_{i=1}^n \frac{e^{-\mu_i} \mu_i^{y_i}}{y_i!} \] Dengan \(\mu_i = \exp(x_i^\top \beta)\), log-likelihood menjadi:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\mu_i) - \mu_i - \log(y_i!) \right] \] Substitusi \(\mu_i = \exp(x_i^\top \beta)\) menghasilkan:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i x_i^\top \beta - \exp(x_i^\top \beta) - \log(y_i!) \right] \] Estimasi Parameter (Maximum Likelihood Estimation)
Estimasi parameter \(\hat{\beta}\) diperoleh dengan maksimisasi fungsi log-likelihood. Ini dilakukan secara numerik, biasanya dengan iterasi Newton-Raphson atau Fisher scoring.
Estimasi dilakukan dengan metode iterasi (IRLS).
Estimasi parameter model regresi Poisson menggunakan pendekatan
Maximum Likelihood Estimation (MLE) dengan metode
Iteratively Reweighted Least Squares (IRLS) secara
manual, tanpa menggunakan glm()
.
Langkah 1: Definisikan Model Regresi Poisson
\[ \log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \quad \Rightarrow \quad \lambda_i = \exp(\mathbf{x}_i^\top \boldsymbol{\beta}) \] Langkah 2: Mencari Log-likelihood yang Dimaksimalkan
\[ \ell(\boldsymbol{\beta}) = \sum_{i=1}^{n} \left[ y_i \log(\lambda_i) - \lambda_i - \log(y_i!) \right] \] Langkah 3: Formulasi Iteratif
\[ \boldsymbol{\beta}^{(t+1)} = \left(\mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{X} \right)^{-1} \mathbf{X}^\top \mathbf{W}^{(t)} \mathbf{z}^{(t)} \]
Dengan:
dan:
\[ \eta_i = \log(\lambda_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \] Simulasi Data
# Simulasi data Poisson
set.seed(123)
n <- 100
x <- rnorm(n)
X <- model.matrix(~ x)
beta_true <- c(0.5, 0.3)
eta <- X %*% beta_true
lambda <- exp(eta)
y <- rpois(n, lambda)
IRLS Manual Step-by-Step
# Inisialisasi
beta <- c(0, 0)
tol <- 1e-6
max_iter <- 100
for (i in 1:max_iter) {
eta <- X %*% beta
lambda <- exp(eta)
W <- diag(as.numeric(lambda))
z <- eta + (y- lambda) / lambda
beta_new <- solve(t(X) %*% W %*% X) %*% t(X) %*% W %*% z
if (sum(abs(beta_new- beta)) < tol) {
cat("Konvergen pada iterasi ke-", i, "\n")
break
}
beta <- beta_new
}
## Konvergen pada iterasi ke- 6
## Konvergen pada iterasi ke- 8
beta # hasil estimasi
## [,1]
## (Intercept) 0.4285691
## x 0.3548355
Perbandingan dengan glm()
model_glm <- glm(y ~ x, family = poisson)
summary(model_glm)
##
## Call:
## glm(formula = y ~ x, family = poisson)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.4286 0.0840 5.102 3.36e-07 ***
## x 0.3548 0.0849 4.180 2.92e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 139.65 on 99 degrees of freedom
## Residual deviance: 122.18 on 98 degrees of freedom
## AIC: 322.96
##
## Number of Fisher Scoring iterations: 5
• IRLS memberikan cara iteratif untuk menghitung estimasi MLE dalam
regresi Poisson.
• Hasil manual IRLS sangat mendekati hasil glm() dari R.
• Metode ini memberikan pemahaman mendalam atas mekanisme di balik
fungsi glm().
Pengujian hipotesis Uji Wald Untuk menguji H0
# Koefisien dan standar error
coef_val <- coef(model)[2]
se_val <- summary(model)$coefficients[2, 2]
wald_z <- coef_val / se_val
wald_chisq <- wald_z^2
p_value <- 1- pchisq(wald_chisq, df = 1)
cat("Z:", wald_z, "\nChi-Square:", wald_chisq, "\np-value:", p_value)
## Z: 2.690522
## Chi-Square: 7.238908
## p-value: 0.007134037
Uji Likelihood Ratio (Chi-Square)
model_null <- glm(y ~ 1, family = poisson, data = data)
anova(model_null, model, test = "Chisq")
Evaluasi Model (AIC & BIC)
AIC(model)
## [1] 126.4607
BIC(model)
## [1] 131.6711
• Estimasi parameter regresi Poisson dilakukan menggunakan MLE
• Uji Wald dan Likelihood Ratio digunakan untuk pengujian
hipotesis
• AIC dan BIC digunakan untuk evaluasi dan pemilihan model terbaik
Inferensi Statistik
Setelah mendapatkan \(\hat{\beta}\), kita bisa melakukan inferensi:
\[
\text{Var}(\hat{\beta}) = (X^\top W X)^{-1}
\] Dengan \(W\) adalah matriks
bobot diagonal:
\[
W_{ii} = \mu_i = \exp(x_i^\top \hat{\beta})
\] 2. Z-Statistik untuk Uji Signifikansi:
\[ z_j = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \] Jika \(|z_j| > z_{\alpha/2}\), maka parameter signifikan.
\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j) \] atau pada skala \(\mu\):
\[ \exp(\hat{\beta}_j \pm z_{\alpha/2} \cdot \text{SE}(\hat{\beta}_j)) \]
Implementasi di R
Kita akan menggunakan dataset warpbreaks
:
# Dataset
data(warpbreaks)
head(warpbreaks)
# Model regresi Poisson
poisson_model <- glm(breaks ~ wool + tension, family = poisson(link = "log"), data = warpbreaks)
# Summary hasil model
summary(poisson_model)
##
## Call:
## glm(formula = breaks ~ wool + tension, family = poisson(link = "log"),
## data = warpbreaks)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.69196 0.04541 81.302 < 2e-16 ***
## woolB -0.20599 0.05157 -3.994 6.49e-05 ***
## tensionM -0.32132 0.06027 -5.332 9.73e-08 ***
## tensionH -0.51849 0.06396 -8.107 5.21e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 297.37 on 53 degrees of freedom
## Residual deviance: 210.39 on 50 degrees of freedom
## AIC: 493.06
##
## Number of Fisher Scoring iterations: 4
Regresi logistik digunakan ketika variabel dependen bersifat kategorik. Model ini memodelkan hubungan antara variabel independen (prediktor) dengan log odds terjadinya suatu kejadian.
Fungsi logit:
\[ \log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + \ldots + \beta_kX_k \]
Prediktor bisa berupa: - Nominal: tanpa urutan (misal: jenis kelamin). - Ordinal: ada urutan, jarak tidak mesti sama (misal: tingkat pendidikan). - Rasio: numerik dengan nol absolut (misal: usia, pendapatan).
Kita akan membuat data simulasi berisi: - Jenis Kelamin (Nominal) - Tingkat Pendidikan (Ordinal) - Usia (Rasio) - Status Sakit (0 = tidak sakit, 1 = sakit)
# Simulasi variabel
n <- 500
gender <- sample(c("Male", "Female"), n, replace = TRUE)
education <- sample(c("HighSchool", "Bachelor", "Master", "PhD"), n, replace = TRUE, prob = c(0.4, 0.3, 0.2, 0.1))
income <- rnorm(n, mean = 50, sd = 15)
# Membentuk probabilitas sukses
logit_p <- -2 +
0.5 * (gender == "Female") +
0.8 * as.numeric(factor(education, ordered = TRUE)) +
0.03 * income
p <- 1 / (1 + exp(-logit_p))
set.seed(123)
success <- rbinom(n, 1, p)
# Buat dataset
library(tibble)
## Warning: package 'tibble' was built under R version 4.3.3
sim_data <- tibble(success, gender, education, income)
# Tampilkan 6 data pertama
head(sim_data)
sim_data %>%
dplyr::group_by(success) %>%
dplyr::summarise(
Jumlah = dplyr::n(),
Rata2_Income = mean(income)
)
sim_data_nominal <- sim_data %>%
mutate(
education = factor(education, levels = c("HighSchool","Bachelor", "Master", "PhD"))
)
model_nominal <- glm(success ~ gender + education + income, data = sim_data_nominal, family = binomial)
summary(model_nominal)
##
## Call:
## glm(formula = success ~ gender + education + income, family = binomial,
## data = sim_data_nominal)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.594172 0.425706 -1.396 0.162794
## genderMale -0.048817 0.229659 -0.213 0.831669
## educationBachelor -0.896055 0.248818 -3.601 0.000317 ***
## educationMaster 1.334624 0.413217 3.230 0.001239 **
## educationPhD 1.266342 0.633203 2.000 0.045511 *
## income 0.039382 0.008029 4.905 9.35e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 536.85 on 499 degrees of freedom
## Residual deviance: 467.28 on 494 degrees of freedom
## AIC: 479.28
##
## Number of Fisher Scoring iterations: 5
sim_data_numeric <- sim_data %>%
mutate(
education_numeric = case_when(
education == "HighSchool" ~ 1,
education == "Bachelor" ~ 2,
education == "Master" ~ 3,
education == "PhD" ~ 4
)
)
model_numeric <- glm(success ~ gender + education_numeric + income, data = sim_data_numeric, family = binomial)
summary(model_numeric)
##
## Call:
## glm(formula = success ~ gender + education_numeric + income,
## family = binomial, data = sim_data_numeric)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.099086 0.457804 -2.401 0.01636 *
## genderMale -0.052597 0.220118 -0.239 0.81115
## education_numeric 0.372889 0.122763 3.037 0.00239 **
## income 0.033720 0.007569 4.455 8.39e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 536.85 on 499 degrees of freedom
## Residual deviance: 506.19 on 496 degrees of freedom
## AIC: 514.19
##
## Number of Fisher Scoring iterations: 4
Dalam analisis regresi logistik, pemilihan model sangat krusial untuk mendapatkan model yang baik dalam memprediksi probabilitas kejadian suatu peristiwa (respon biner). Dua pendekatan utama dalam memban gun model adalah pendekatan Confirmatory dan Exploratory.
Pendekatan ini digunakan ketika peneliti telah memiliki teori atau hipotesis yang jelas mengenai efek atau hubungan antara variabel prediktor dan respon.
Ciri-ciri:
• Model dibangun berdasarkan teori atau hasil penelitian
sebelumnya.
• Tujuan utamanya adalah menguji apakah efek tersebut benar-benar
signifikan, bukan sekadar mencari model terbaik.
• Peneliti biasanya menyusun model penuh terlebih dahulu, lalu menguji
apakah penambahan atau pengurangan suatu efek (misalnya, interaksi)
memberikan peningkatan model secara signifikan.
• Uji signifikansi dilakukan dengan membandingkan model dengan efek
tertentu dan model tanpa efek tersebut, misalnya dengan Likelihood Ratio
Test.
Contoh penggunaan: Misalnya, teori menyatakan bahwa faktor x1 dan x2 mempengaruhi probabilitas seseorang membeli produk. Maka model logistik dibangun langsung dengan x1 dan x2, lalu diuji apakah kontribusi x2 benar-benar signifikan.
Pendekatan ini digunakan ketika peneliti belum memiliki teori yang pasti atau ingin mengeksplorasi hubungan potensial antarvariabel.
Ciri-ciri:
• Model dibangun secara bertahap dengan tujuan menemukan kombinasi
prediktor terbaik.
• Pemilihan variabel dilakukan berdasarkan kriteria statistik, seperti
AIC, deviance, atau log-likelihood. Proses seleksi dilakukan
melalui:
• Forward Selection: Mulai dari model kosong, satu per satu variabel
dimasukkan jika signifikan.
• Backward Elimination: Mulai dari model penuh, variabel yang tidak
signifikan dikeluarkan.
• Stepwise Selection: Gabungan dari keduanya, variabel dapat masuk dan
keluar secara dinamis.
Tujuan: Menemukan model yang parsimonious, yaitu cukup sederhana namun memiliki performa prediksi yang baik. Pemilihan antara pendekatan Confirmatory dan Exploratory bergantung pada tujuan penelitian. Jika ingin menguji hipotesis tertentu, gunakan pendekatan Confirmatory. Jika ingin menemukan model terbaik berdasarkan data, gunakan pendekatan Exploratory. Dalam praktiknya, kedua pendekatan ini sering di gunakan secara komplementer: teori digunakan sebagai dasar, dan seleksi eksploratori dilakukan untuk menyempurnakan model.
Simulasi Data
set.seed(123)
n <- 200
ipk <- rnorm(n, 3, 0.5)
belajar <- rnorm(n, 5, 1)
lulus <- rbinom(n, 1, plogis(-4 + 1.5*ipk + 0.3*belajar))
data1 <- data.frame(lulus = factor(lulus), ipk, belajar)
Pemilihan Model
# Model null (tanpa prediktor)
model.null <- glm(lulus ~ 1, data = data1, family = "binomial")
# Model full (semua prediktor)
model.full <- glm(lulus ~ ipk + belajar, data = data1, family = "binomial")
# Forward
model.forward <- step(model.null,
scope = list(lower = model.null, upper = model.full),
direction = "forward")
## Start: AIC=148.77
## lulus ~ 1
##
## Df Deviance AIC
## + ipk 1 142.69 146.69
## <none> 146.77 148.77
## + belajar 1 145.51 149.51
##
## Step: AIC=146.69
## lulus ~ ipk
##
## Df Deviance AIC
## <none> 142.69 146.69
## + belajar 1 141.13 147.13
# Backward
model.backward <- step(model.full, direction = "backward")
## Start: AIC=147.13
## lulus ~ ipk + belajar
##
## Df Deviance AIC
## - belajar 1 142.69 146.69
## <none> 141.13 147.13
## - ipk 1 145.51 149.51
##
## Step: AIC=146.69
## lulus ~ ipk
##
## Df Deviance AIC
## <none> 142.69 146.69
## - ipk 1 146.77 148.77
# Both
model.both <- step(model.null,
scope = list(lower = model.null, upper = model.full),
direction = "both")
## Start: AIC=148.77
## lulus ~ 1
##
## Df Deviance AIC
## + ipk 1 142.69 146.69
## <none> 146.77 148.77
## + belajar 1 145.51 149.51
##
## Step: AIC=146.69
## lulus ~ ipk
##
## Df Deviance AIC
## <none> 142.69 146.69
## + belajar 1 141.13 147.13
## - ipk 1 146.77 148.77
summary(model.forward)
##
## Call:
## glm(formula = lulus ~ ipk, family = "binomial", data = data1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8864 1.4544 -0.609 0.542
## ipk 0.9871 0.5058 1.951 0.051 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 146.77 on 199 degrees of freedom
## Residual deviance: 142.69 on 198 degrees of freedom
## AIC: 146.69
##
## Number of Fisher Scoring iterations: 5
summary(model.backward)
##
## Call:
## glm(formula = lulus ~ ipk, family = "binomial", data = data1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8864 1.4544 -0.609 0.542
## ipk 0.9871 0.5058 1.951 0.051 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 146.77 on 199 degrees of freedom
## Residual deviance: 142.69 on 198 degrees of freedom
## AIC: 146.69
##
## Number of Fisher Scoring iterations: 5
summary(model.both)
##
## Call:
## glm(formula = lulus ~ ipk, family = "binomial", data = data1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8864 1.4544 -0.609 0.542
## ipk 0.9871 0.5058 1.951 0.051 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 146.77 on 199 degrees of freedom
## Residual deviance: 142.69 on 198 degrees of freedom
## AIC: 146.69
##
## Number of Fisher Scoring iterations: 5
library(pROC)
## Warning: package 'pROC' was built under R version 4.3.3
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
prob <- predict(model.full, type = "response")
roc_obj <- roc(data1$lulus, prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj)
auc(roc_obj)
## Area under the curve: 0.6423
\[ R^2 = 1 - \frac{\log L_{model}}{\log L_{null}} \]
library(pscl)
## Warning: package 'pscl' was built under R version 4.3.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
model.null <- glm(lulus ~ 1, family = "binomial", data = data1)
pR2(model.full)
## fitting null model for pseudo-r2
## llh llhNull G2 McFadden r2ML r2CU
## -70.56511914 -73.38499825 5.63975822 0.03842583 0.02780492 0.05347688
pred <- ifelse(prob > 0.5, 1, 0)
actual <- as.numeric(as.character(data1$lulus))
conf <- table(Prediksi = pred, Aktual = actual)
conf
## Aktual
## Prediksi 0 1
## 1 24 176
Tujuan
Dokumen ini menyajikan cara membandingkan model regresi logistik menggunakan ukuran:- Deviance AIC (Akaike Information Criterion)- Likelihood-Ratio serta menjelaskan prinsip Parsimony dalam pemilihan model.
Pembuatan Model
Perbandingan AIC dan Deviance
AIC(model.full, model.null)
\[ G^2 = -2(\log L_0 - \log L_1) \]
anova(model.null, model.full, test = "Chisq")
Model yang kompleks sering memiliki AIC dan deviance. Namun:
- Model Sederhana lebih mudah diinterpretasikan.
- Jika penurunan AIC tidak signifikan, pilih model lebih
sederhana.
- Parsimony mencegah overfitting
Rumus dan Penjelasan
Rumus AIC
\[ \text{AIC} = -2(\log L - k) = -2 \log L + 2k \]
Penjelasan:
AIC adalah ukuran untuk menilai model berdasarkan kombinasi antara
goodness-of-fit (melalui log-likelihood) dan kompleksitas
(melalui jumlah parameter \(k\)).
Semakin kecil AIC, semakin baik model tersebut secara keseluruhan karena
AIC menghukum model yang terlalu kompleks meskipun memiliki likelihood
tinggi.
Rumus Deviance
\[ D = -2 \left[ \log L(\text{model}) - \log L(\text{model saturasi}) \right] \]
Penjelasan:
Deviance mengukur seberapa jauh model saat ini dibandingkan dengan model
sempurna (model saturasi). Nilai deviance yang kecil menunjukkan bahwa
model memberikan prediksi yang mendekati data aktual.
Rumus Likelihood-Ratio
\[ G^2 = -2 (\log L_0 - \log L_1) \]
Penjelasan:
Statistik Likelihood Ratio digunakan untuk menguji apakah penambahan
variabel dalam model secara signifikan meningkatkan kecocokan model.
Jika \(G^2\) besar dan p-value
kecil, maka model kompleks lebih baik dari model sederhana secara
statistik.
\[ \text{Sensitivity} = \frac{\text{TP}}{\text{TP} + \text{FN}} \]
\[ \text{Specificity} = \frac{\text{TN}}{\text{TN} + \text{FP}} \]
Kesimpulan:
• Deviance yang kecil menunjukkan kecocokan model yang
lebih baik.
• AIC yang rendah menunjukkan keseimbangan antara
kecocokan dan kompleksitas.
• Likelihood Ratio Test mengevaluasi apakah model
kompleks secara signifikan lebih baik.
• Tabel klasifikasi membantu menilai kinerja prediksi
aktual vs prediksi model.
• Prinsip Parsimony mengutamakan model sederhana jika
performanya mirip.
Kurva ROC adalah alat visual yang digunakan untuk mengevaluasi performa model klasifikasi biner. Kurva ini menunjukkan trade-off antara True Positive Rate (Sensitivity) dan False Positive Rate (1- Specificity) pada berbagai threshold klasifikasi.
Kurva ideal memiliki bentuk:
- Naik tajam secara vertikal hingga mencapai sensitivitas = 1
- Lalu bergerak secara horizontal menuju \(1 -
\text{Specificity} = 1\)
- Area under the curve (AUC) mendekati 1
AUC juga dikenal sebagai concordance index, yaitu probabilitas bahwa model memberikan skor probabilitas yang lebih tinggi untuk kasus positif daripada negatif.
pROC
:Penjelasan Precision-Recall Curve
Kurva Precision-Recall (PR) adalah alat evaluasi performa model klasifikasi, khususnya sangat berguna saat bekerja dengan data yang tidak seimbang (class imbalance).
Distribusi multinomial adalah generalisasi dari distribusi binomial untuk lebih dari dua kategori. Distribusi ini digunakan untuk memodelkan jumlah kejadian dalam beberapa kategori dari sejumlah percobaan tetap. Jika \(X_1, X_2, \ldots, X_k\) menyatakan banyaknya kejadian dalam masing-masing dari \(k\) kategori, maka:
\[ P(X_1 = x_1, \ldots, X_k = x_k) = \frac{n!}{x_1!x_2! \ldots x_k!} p_1^{x_1} p_2^{x_2} \ldots p_k^{x_k} \] dengan \(\sum_{i=1}^{k} x_i = n\) dan \(\sum_{i=1}^{k} p_i = 1\).
Misalkan sebuah survei meminta responden memilih satu dari tiga jenis buah favorit: Apel, Pisang, Jeruk. Dari 100 responden, kita ingin mengetahui probabilitas kombinasi hasil seperti 40 memilih Apel, 35 Pisang, dan 25 Jeruk.
Hasil survei yang ingin dihitung probabilitasnya:
Probabilitas teoretik preferensi:
Pertanyaannya: Berapa peluang bahwa dalam 100 orang akan ada 40 yang memilih Apel, 35 memilih Pisang, dan 25 memilih Jeruk?
Rumus Distribusi Multinomial
Distribusi peluang multinomial:
\[ P(X_1 = x_1, \ldots, X_k = x_k) = \frac{n!}{x_1! x_2! \ldots x_k!} \cdot p_1^{x_1} p_2^{x_2} \ldots p_k^{x_k} \]
dengan:
Perhitungan Manual di R
n <- 100
x <- c(40, 35, 25)
p <- c(0.3, 0.35, 0.35)
# Hitung komponen-koefisien
faktorial_total <- factorial(n)
faktorial_x <- prod(factorial(x))
koefisien <- faktorial_total / faktorial_x
# Hitung peluang
peluang <- koefisien * prod(p^x)
peluang
## [1] 0.0003823078
Berdasarkan perhitungan menggunakan distribusi multinomial, didapatkan bahwa probabilitas tepat 40 orang memilih Apel, 35 orang memilih Pisang, dan 25 orang memilih Jeruk dari 100 responden adalah sebesar 0.0003823. Nilai probabilitas ini sangat kecil, yang berarti bahwa kombinasi hasil tersebut tidak terlalu mungkin terjadi jika preferensi teoretik buah masing-masing adalah 30% untuk Apel, dan 35% untuk Pisang dan Jeruk. Hal ini menunjukkan bahwa meskipun kombinasi tersebut masih mungkin secara teoritis, namun tergolong jarang terjadi dalam praktik, mengingat banyaknya kombinasi lain yang juga mungkin muncul dari distribusi tersebut.
Model logit kategori dasar atau Baseline Category Logit Model digunakan untuk menganalisis variabel respon kategori nominal dengan lebih dari dua kategori. Model ini termasuk dalam keluarga generalized logit models, dan merupakan dasar dari regresi logistik multinomial.
Tujuan Model Untuk memodelkan log odds (rasio peluang logaritmik) dari setiap kategori terhadap satu kategori referensi (baseline). Biasanya, kategori referensi dipilih secara arbitrer, tetapi umumnya dipilih kategori terakhir.
Notasi dan Struktur Model
Misalkan \(Y\) adalah variabel kategori dengan \(K\) kategori, dan \(x = (x_1, x_2, \dots, x_p)\) adalah vektor prediktor.
Model logit dasar untuk kategori \(j\) terhadap kategori referensi \(K\) adalah: \[ \log \left( \frac{P(Y = j \mid x)}{P(Y = K \mid x)} \right) = \beta_{j0} + \beta_{j1} x_1 + \beta_{j2} x_2 + \cdots + \beta_{jp} x_p, \quad \text{untuk } j = 1, 2, \dots, K - 1 \]
Probabilitas Kategori
Dari model di atas, probabilitas setiap kategori dapat dihitung sebagai:
\[ P(Y = j \mid x) = \frac{\exp(\beta_{j0} + \beta_{j1} x_1 + \cdots + \beta_{jp} x_p)}{1 + \sum_{k=1}^{K-1} \exp(\beta_{k0} + \beta_{k1} x_1 + \cdots + \beta_{kp} x_p)} \]
\[ P(Y = K \mid x) = \frac{1}{1 + \sum_{k=1}^{K-1} \exp(\beta_{k0} + \beta_{k1} x_1 + \cdots + \beta_{kp} x_p)} \]
Contoh Aplikasi: Pemilihan Mode Transportasi Misalkan seseorang dapat memilih salah satu dari tiga moda transportasi untuk ke kampus:
Prediktor: waktu tempuh dalam menit dan status kepemilikan kendaraan (punya/tidak).
a. Simulasi Data
set.seed(123)
n <- 200
waktu <- rnorm(n, mean = 30, sd = 5)
kepemilikan <- sample(c("Punya", "Tidak"), n, replace = TRUE)
# Simulasi variabel respon
transport <- sample(c("Mobil", "Motor", "Umum"), n, replace = TRUE)
data <- data.frame(transport = factor(transport),
waktu = waktu,
kepemilikan = factor(kepemilikan))
library(nnet)
model <- multinom(transport ~ waktu + kepemilikan, data = data)
## # weights: 12 (6 variable)
## initial value 219.722458
## iter 10 value 215.848829
## iter 10 value 215.848829
## iter 10 value 215.848829
## final value 215.848829
## converged
summary(model)
## Call:
## multinom(formula = transport ~ waktu + kepemilikan, data = data)
##
## Coefficients:
## (Intercept) waktu kepemilikanTidak
## Motor -2.5230186 0.08387636 -0.08750534
## Umum -0.4154727 0.02493556 -0.47222858
##
## Std. Errors:
## (Intercept) waktu kepemilikanTidak
## Motor 1.189597 0.03909618 0.3623746
## Umum 1.124475 0.03798017 0.3472448
##
## Residual Deviance: 431.6977
## AIC: 443.6977
Interpretasi Koefisien Koefisien untuk “Mobil” dan “Motor” dihitung terhadap referensi “Umum”. Jika koefisien waktu negatif untuk “Mobil”, maka semakin lama waktu tempuh, peluang memilih mobil semakin kecil dibanding “Umum”.
Uji Signifikansi
z <- summary(model)$coefficients / summary(model)$standard.errors
pval <- 2 * (1 - pnorm(abs(z)))
pval
## (Intercept) waktu kepemilikanTidak
## Motor 0.03393012 0.03192209 0.8091850
## Umum 0.71176876 0.51147575 0.1738521
Kelebihan: Cocok untuk kategori nominal (tidak berurutan) Interpretasi sederhana sebagai perbandingan dengan kategori referensi
Kekurangan: Interpretasi dapat bergantung pada pilihan referensi Tidak mempertimbangkan struktur ordinal (jika ada)
Estimasi dilakukan menggunakan metode maximum likelihood dengan algoritma iteratif seperti Newton-Raphson.
Log-likelihood: \[ \ell(\beta) = \sum_{i=1}^{n} \sum_{j=1}^{K} y_{ij} \log(\pi_{ij}) \] dengan \(\pi_{ij} = P(Y_i = j \mid x_i)\) dan \(y_{ij} = 1\) jika \(Y_i = j\).
Siswa SMA memilih jurusan antara IPA, IPS, atau Bahasa berdasarkan nilai matematika dan status sekolah (negeri/swasta).
set.seed(123)
n <- 300
nilai <- rnorm(n, 70, 10)
status <- factor(sample(c("Negeri", "Swasta"), n, replace = TRUE))
jurusan <- sample(c("IPA", "IPS", "Bahasa"), n, replace = TRUE)
data <- data.frame(jurusan = factor(jurusan), nilai, status)
head(data)
library(nnet)
model <- multinom(jurusan ~ nilai + status, data = data)
## # weights: 12 (6 variable)
## initial value 329.583687
## iter 10 value 326.021220
## iter 10 value 326.021220
## iter 10 value 326.021220
## final value 326.021220
## converged
summary(model)
## Call:
## multinom(formula = jurusan ~ nilai + status, data = data)
##
## Coefficients:
## (Intercept) nilai statusSwasta
## IPA -0.48989716 0.006739655 -0.3296327
## IPS -0.07166585 -0.002764858 0.3588150
##
## Std. Errors:
## (Intercept) nilai statusSwasta
## IPA 1.073083 0.01508280 0.2874710
## IPS 1.049033 0.01478655 0.2795287
##
## Residual Deviance: 652.0424
## AIC: 664.0424
z <- summary(model)$coefficients / summary(model)$standard.errors
pval <- 2 * (1 - pnorm(abs(z)))
pval
## (Intercept) nilai statusSwasta
## IPA 0.648007 0.6549879 0.2515203
## IPS 0.945534 0.8516726 0.1992670
Interpretasi: Jika \(\beta > 0\), maka kenaikan variabel prediktor meningkatkan peluang kategori dibanding referensi.
prediksi <- predict(model, newdata = data)
table(Predicted = prediksi, Actual = data$jurusan)
## Actual
## Predicted Bahasa IPA IPS
## Bahasa 38 37 29
## IPA 18 18 14
## IPS 52 37 57
mean(prediksi == data$jurusan) # akurasi
## [1] 0.3766667
Model logistik multinomial sangat cocok untuk variabel kategori nominal. Model baseline-category logit membandingkan setiap kategori dengan referensi.
# Simulasi kasus baru
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
kelas <- sample(c("A", "B", "C"), 200, replace = TRUE)
df2 <- data.frame(kelas = factor(kelas), x1, x2)
mod2 <- multinom(kelas ~ x1 + x2, data = df2)
## # weights: 12 (6 variable)
## initial value 219.722458
## iter 10 value 218.471769
## iter 10 value 218.471769
## iter 10 value 218.471769
## final value 218.471769
## converged
summary(mod2)
## Call:
## multinom(formula = kelas ~ x1 + x2, data = df2)
##
## Coefficients:
## (Intercept) x1 x2
## B 0.10969079 -0.09624713 0.110971624
## C 0.04694174 -0.20743047 0.007175174
##
## Std. Errors:
## (Intercept) x1 x2
## B 0.2574311 0.1707369 0.3475489
## C 0.2617516 0.1760712 0.3574962
##
## Residual Deviance: 436.9435
## AIC: 448.9435
Perhitungan Manual Probabilitas (2 kategori)
Jika:
Hitung probabilitas untuk A dan B:
\[ \eta_A = 1 + 0.5(2) = 2 \\ \eta_B = 0.5 + 0.3(2) = 1.1 \\ P(A) = \frac{e^{2}}{1 + e^{2} + e^{1.1}} \approx 0.55 \\ P(B) = \frac{e^{1.1}}{1 + e^{2} + e^{1.1}} \approx 0.30 \\ P(C) = \frac{1}{1 + e^{2} + e^{1.1}} \approx 0.15 \]
Regresi logistik ordinal digunakan untuk menganalisis hubungan antara variabel respon berskala ordinal (berjenjang) dengan satu atau lebih variabel prediktor. Contoh variabel ordinal: tingkat kepuasan (Rendah, Sedang, Tinggi).
Model paling umum dalam regresi logistik ordinal adalah Cumulative Logit Model atau Proportional Odds Model.
\[ \log \left( \frac{P(Y \leq j)}{P(Y > j)} \right) = \alpha_j + \beta x \]
Untuk \(c\) kategori, terdapat \((c - 1)\) model logit kumulatif.
Koefisien \(\beta\) menjelaskan efek \(x\) terhadap kemungkinan berada pada kategori yang lebih rendah atau sama.
Jika \(\beta > 0\): semakin besar
\(x\), semakin tinggi peluang berada di
kategori rendah.
Jika \(\beta < 0\): semakin besar
\(x\), semakin besar peluang berada di
kategori tinggi.
Odds ratio:
\[ \text{OR} = e^{\beta} \]
Misalnya: tingkat kepuasan pelanggan (1 = Tidak Puas, 2 = Cukup Puas, 3 = Puas) dipengaruhi oleh lama layanan (menit) dan status pelanggan (lama/baru).
Simulasi Data
set.seed(123)
n <- 300
lama <- rnorm(n, mean = 15, sd = 5)
status <- factor(sample(c("Lama", "Baru"), n, replace = TRUE))
cutoff <- c(-Inf, 1.5, 3, Inf)
skor_linear <- 0.1 * lama + ifelse(status == "Lama", 0.5, 0)
y_star <- 1 + skor_linear + rnorm(n)
kepuasan <- cut(y_star, breaks = cutoff, labels = c("Tidak Puas", "Cukup Puas", "Puas"), ordered_result = TRUE)
data <- data.frame(kepuasan, lama, status)
head(data)
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
model <- polr(kepuasan ~ lama + status, data = data, method = "logistic")
summary(model)
##
## Re-fitting to get Hessian
## Call:
## polr(formula = kepuasan ~ lama + status, data = data, method = "logistic")
##
## Coefficients:
## Value Std. Error t value
## lama 0.1719 0.02701 6.365
## statusLama 0.6166 0.23046 2.675
##
## Intercepts:
## Value Std. Error t value
## Tidak Puas|Cukup Puas 0.8401 0.4234 1.9840
## Cukup Puas|Puas 3.2277 0.4619 6.9878
##
## Residual Deviance: 547.8578
## AIC: 555.8578
Gunakan z-statistik untuk menghitung p-value dari estimasi:
(ctable <- coef(summary(model)))
##
## Re-fitting to get Hessian
## Value Std. Error t value
## lama 0.1719467 0.02701299 6.365332
## statusLama 0.6165771 0.23046076 2.675410
## Tidak Puas|Cukup Puas 0.8401191 0.42344469 1.984011
## Cukup Puas|Puas 3.2277231 0.46190649 6.987828
pval <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
cbind(ctable, "p value" = pval)
## Value Std. Error t value p value
## lama 0.1719467 0.02701299 6.365332 1.948673e-10
## statusLama 0.6165771 0.23046076 2.675410 7.463785e-03
## Tidak Puas|Cukup Puas 0.8401191 0.42344469 1.984011 4.725457e-02
## Cukup Puas|Puas 3.2277231 0.46190649 6.987828 2.791744e-12
predict(model, newdata = data.frame(lama = 10, status = "Baru"), type = "probs")
## Tidak Puas Cukup Puas Puas
## 0.2933130 0.5254897 0.1811973
Gunakan AIC, pseudo R² atau deviance model:
AIC(model)
## [1] 555.8578
Jika asumsi paralelisme tidak terpenuhi, gunakan:
- Partial Proportional Odds Model
- Adjacent Categories Logit Model
- Continuation Ratio Model
Regresi logistik ordinal cocok digunakan untuk data dengan urutan tetapi tanpa interval tetap antar kategori. Model cumulative logit adalah model utama dengan asumsi odds yang proporsional antar kategori. Jika asumsi ini tidak terpenuhi, alternatif model harus dipertimbangkan.
Model ini mengasumsikan bahwa efek prediktor \(\beta\) sama untuk semua batas kumulatif. Ini disebut asumsi paralelisme.
Gunakan VGAM::vglm()
dan bandingkan dengan model
non-paralel:
# library(VGAM)
# m1 <- vglm(kepuasan ~ lama + status, family = cumulative(parallel = TRUE), data = data)
# m2 <- vglm(kepuasan ~ lama + status, family = cumulative(parallel = FALSE), data = data)
# lrtest(m1, m2) # LRT untuk asumsi paralelisme
Analisis data kategorik merupakan bagian penting dalam statistika terapan karena banyak fenomena di dunia nyata yang menghasilkan data dalam bentuk kategori, seperti jenis kelamin, status pekerjaan, tingkat pendidikan, preferensi konsumen, atau hasil diagnosis medis. Data kategori ini umumnya dianalisis menggunakan tabel kontingensi, model log-linier, dan model regresi logistik. Masing-masing pendekatan memiliki kekuatan dan kelemahan tergantung pada tujuan analisis dan struktur data.
Tabel kontingensi digunakan sebagai langkah awal eksplorasi untuk melihat hubungan antara dua atau lebih variabel kategorik. Misalnya, dalam studi tentang efek obat terhadap serangan jantung, tabel kontingensi dapat menyajikan jumlah pasien yang mengalami atau tidak mengalami serangan jantung, berdasarkan jenis obat yang dikonsumsi. Tabel ini membantu mengidentifikasi pola awal dan menghitung ukuran asosiasi seperti odds ratio, risk ratio, dan chi-square statistic untuk menguji independensi antar variabel.
Namun, ketika ingin membangun model statistik yang dapat mengendalikan efek dari banyak variabel dan interaksinya secara simultan, maka model log-linier menjadi sangat berguna. Model log-linier adalah bentuk khusus dari Generalized Linear Model (GLM) yang digunakan pada frekuensi sel dalam tabel kontingensi dan mengasumsikan distribusi Poisson. Tidak seperti regresi logistik, model log-linier tidak menetapkan variabel mana yang dependen dan mana yang independen, karena seluruh variabel diperlakukan secara simetris. Model ini lebih cocok ketika tujuan analisis adalah untuk memahami struktur asosiasi atau independensi antar variabel, bukan untuk prediksi.
Struktur model log-linier ditentukan berdasarkan efek utama dari masing-masing variabel serta interaksi di antara variabel-variabel tersebut. Misalnya, dalam tabel kontingensi tiga arah (misalnya: jenis kelamin, status merokok, dan penyakit paru), model log-linier dapat membedakan apakah interaksi dua variabel cukup menjelaskan data, ataukah diperlukan interaksi tiga arah untuk menangkap struktur asosiasinya. Penyesuaian model dapat dilakukan menggunakan metode likelihood ratio test untuk membandingkan model sederhana dengan model lebih kompleks.
Di sisi lain, regresi logistik adalah pendekatan paling umum ketika terdapat satu variabel kategorik yang secara eksplisit dianggap sebagai variabel dependen (misalnya, kejadian penyakit: ya/tidak), dan satu atau lebih variabel kategorik atau numerik sebagai prediktor. Model ini memodelkan logit dari probabilitas kejadian (yaitu log odds), dan sangat berguna dalam studi observasional dan eksperimental untuk menjelaskan atau memprediksi peluang suatu outcome. Regresi logistik juga memiliki ekstensi untuk outcome kategorik lebih dari dua kelas, seperti regresi logistik multinomial dan regresi logistik ordinal.
Dengan demikian, meskipun ketiganya beroperasi pada data kategorik, tabel kontingensi bersifat deskriptif, model log-linier bersifat eksploratif terhadap hubungan simetris, sedangkan regresi logistik bersifat prediktif terhadap outcome kategorik. Pemilihan metode tergantung pada apakah fokus utama analisis adalah deskripsi, eksplorasi struktur, atau prediksi hasil berdasarkan variabel penjelas. Kombinasi dari ketiganya sering digunakan dalam praktik untuk memperoleh pemahaman komprehensif dari data kategorik yang dianalisis.
Ringkasan Dalam analisis data kategorik, terdapat beberapa pendekatan statistik yang umum digunakan, antara lain:
Tabel Kontingensi: penyajian frekuensi gabungan dari dua atau lebih variabel kategorik.
Model Loglinear: digunakan untuk memodelkan struktur asosiasi di dalam tabel kontingensi tanpa menganggap ada variabel dependen.
Model Regresi Logistik: digunakan untuk memodelkan probabilitas dari kategori variabel dependen berdasarkan variabel independen.
Meskipun ketiganya dapat digunakan pada data kategorik, pendekatan dan interpretasinya sangat berbeda.
Tabel Kontingensi
Tabel kontingensi menyajikan jumlah frekuensi dari kombinasi kategori antar variabel.
Contoh:
table_data <- matrix(c(30, 20, 50, 70), nrow=2,
dimnames = list(Obat = c("Timolol", "Placebo"),
Serangan = c("Ya", "Tidak")))
table_data
## Serangan
## Obat Ya Tidak
## Timolol 30 50
## Placebo 20 70
Tabel kontingensi bersifat deskriptif dan tidak melibatkan pemodelan probabilitas.
Model Loglinear
Model loglinear memodelkan logaritma dari ekspektasi frekuensi sel dalam tabel kontingensi.
\[ \log(\mu_{ij}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]
library(MASS)
loglm(~ Obat * Serangan, data = table_data)
## Call:
## loglm(formula = ~Obat * Serangan, data = table_data)
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
Model Regresi Logistik
Model regresi logistik biner:
\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 x \]
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
Aspek | Tabel Kontingensi | Model Loglinear | Regresi Logistik |
---|---|---|---|
Tujuan | Deskripsi frekuensi | Deteksi asosiasi | Prediksi probabilitas |
Variabel Dependen | Tidak ada | Tidak ada (simetris) | Ada (eksplisit) |
Distribusi | Tidak diasumsikan | Poisson (frekuensi sel) | Binomial (probabilitas) |
Bentuk Model | Tidak ada | GLM: log(μ) ~ efek | GLM: logit(p) ~ prediktor |
Cocok untuk | Eksplorasi awal | Tabel > 2 variabel | Studi prediktif |
Tabel kontingensi 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:
Contoh formulasi untuk tabel 2x2:
# Data
library(MASS)
data <- matrix(c(35, 65, 45, 55), nrow=2, byrow=TRUE)
dimnames(data) <- list(Obat = c("Timolol", "Placebo"), Serangan = c("Ya", "Tidak"))
ftable(data)
## Serangan Ya Tidak
## Obat
## Timolol 35 65
## Placebo 45 55
Model saturated dapat dipasang dengan loglm dari package {MASS}:
model_saturated <- loglm(~ Obat * Serangan, data = data)
summary(model_saturated)
## Formula:
## ~Obat * Serangan
## attr(,"variables")
## list(Obat, Serangan)
## attr(,"factors")
## Obat Serangan Obat:Serangan
## Obat 1 0 1
## Serangan 0 1 1
## attr(,"term.labels")
## [1] "Obat" "Serangan" "Obat:Serangan"
## attr(,"order")
## [1] 1 1 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
Model 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
Seorang peneliti ingin mempelajari hubungan antara jenis kelamin
(Gender
), status merokok (Smoking
), dan status
kesehatan (Health
) pada sekelompok orang dewasa.
Tujuannya adalah untuk melihat apakah ada interaksi yang signifikan antara tiga variabel kategori tersebut.
Data Simulasi
# Simulasi data kontingensi 3 arah
data <- expand.grid(
Gender = c("Male", "Female"),
Smoking = c("Smoker", "NonSmoker"),
Health = c("Good", "Poor")
)
# Tambahkan frekuensi
set.seed(123)
data$Freq <- c(40, 15, 25, 10, 35, 20, 30, 12)
head(data)
Model Log-Linear Log-linear model digunakan untuk menganalisis frekuensi sel dalam tabel kontingensi.
Model paling kompleks (saturasi) adalah: \[ \log(F_{ijk}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^C_k + \lambda^{AB}_{ij} + \lambda^{AC}_{ik} + \lambda^{BC}_{jk} + \lambda^{ABC}_{ijk} \]
Model yang kita bangun bertujuan untuk menyederhanakan interaksi antar variabel.
Analisis Model dengan R
# Load package
library(MASS)
# Model saturasi
model_sat <- loglm(Freq ~ Gender * Smoking * Health, data = data)
# Model tanpa interaksi 3 arah
model_no_3way <- loglm(Freq ~ (Gender + Smoking + Health)^2, data = data)
# Model independen murni (tanpa interaksi)
model_indep <- loglm(Freq ~ Gender + Smoking + Health, data = data)
Evaluasi Model
summary(model_sat)
## Formula:
## Freq ~ Gender * Smoking * Health
## attr(,"variables")
## list(Freq, Gender, Smoking, Health)
## attr(,"factors")
## Gender Smoking Health Gender:Smoking Gender:Health Smoking:Health
## Freq 0 0 0 0 0 0
## Gender 1 0 0 1 1 0
## Smoking 0 1 0 1 0 1
## Health 0 0 1 0 1 1
## Gender:Smoking:Health
## Freq 0
## Gender 1
## Smoking 1
## Health 1
## attr(,"term.labels")
## [1] "Gender" "Smoking" "Health"
## [4] "Gender:Smoking" "Gender:Health" "Smoking:Health"
## [7] "Gender:Smoking:Health"
## attr(,"order")
## [1] 1 1 1 2 2 2 3
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
## attr(,"predvars")
## list(Freq, Gender, Smoking, Health)
## attr(,"dataClasses")
## Freq Gender Smoking Health
## "numeric" "factor" "factor" "factor"
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
summary(model_no_3way)
## Formula:
## Freq ~ (Gender + Smoking + Health)^2
## attr(,"variables")
## list(Freq, Gender, Smoking, Health)
## attr(,"factors")
## Gender Smoking Health Gender:Smoking Gender:Health Smoking:Health
## Freq 0 0 0 0 0 0
## Gender 1 0 0 1 1 0
## Smoking 0 1 0 1 0 1
## Health 0 0 1 0 1 1
## attr(,"term.labels")
## [1] "Gender" "Smoking" "Health" "Gender:Smoking"
## [5] "Gender:Health" "Smoking:Health"
## attr(,"order")
## [1] 1 1 1 2 2 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
## attr(,"predvars")
## list(Freq, Gender, Smoking, Health)
## attr(,"dataClasses")
## Freq Gender Smoking Health
## "numeric" "factor" "factor" "factor"
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0.4151195 1 0.5193824
## Pearson 0.4162923 1 0.5187930
summary(model_indep)
## Formula:
## Freq ~ Gender + Smoking + Health
## attr(,"variables")
## list(Freq, Gender, Smoking, Health)
## attr(,"factors")
## Gender Smoking Health
## Freq 0 0 0
## Gender 1 0 0
## Smoking 0 1 0
## Health 0 0 1
## attr(,"term.labels")
## [1] "Gender" "Smoking" "Health"
## attr(,"order")
## [1] 1 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
## attr(,"predvars")
## list(Freq, Gender, Smoking, Health)
## attr(,"dataClasses")
## Freq Gender Smoking Health
## "numeric" "factor" "factor" "factor"
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 1.651671 4 0.7994768
## Pearson 1.651082 4 0.7995833
Interpretasi: - Model saturasi akan selalu cocok sempurna (p-value besar). - Model dengan interaksi 2 arah (\(Gender*Smoking\), dll) masih cukup baik jika p-value > 0.05. - Model independen akan buruk jika ada hubungan nyata antar variabel.
Perbandingan Model
anova(model_indep, model_no_3way, model_sat)
## LR tests for hierarchical log-linear models
##
## Model 1:
## Freq ~ Gender + Smoking + Health
## Model 2:
## Freq ~ (Gender + Smoking + Health)^2
## Model 3:
## Freq ~ Gender * Smoking * Health
##
## Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1 1.6516710 4
## Model 2 0.4151195 1 1.2365515 3 0.74425
## Model 3 0.0000000 0 0.4151195 1 0.51938
## Saturated 0.0000000 0 0.0000000 0 1.00000
Pilih model yang tidak terlalu kompleks tetapi masih punya goodness-of-fit yang baik (nilai deviance kecil, p-value besar).
Visualisasi Frekuensi Observasi
library(ggplot2)
ggplot(data, aes(x = Smoking, y = Freq, fill = Health)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ Gender) +
labs(title = "Distribusi Merokok dan Kesehatan menurut Gender")
Kesimpulan Log-linear model memungkinkan kita memodelkan hubungan dan interaksi antara tiga atau lebih variabel kategori. Model interaksi dua arah mungkin sudah cukup jika interaksi tiga arah tidak signifikan.