Puji syukur penulis panjatkan ke hadirat Allah SWT karena atas rahmat dan karunia-Nya, e-Book ini yang berjudul Analisis Data Kategori dapat disusun dan diselesaikan dengan baik. Buku ini dibuat sebagai salah satu bentuk dokumentasi materi perkuliahan serta referensi belajar mandiri bagi mahasiswa dan praktisi yang ingin memahami dasar-dasar dan penerapan analisis data kategori dalam penelitian.
Analisis data kategori memiliki peran penting dalam berbagai bidang, terutama ilmu sosial, kesehatan, dan pendidikan, di mana data yang dikumpulkan sering kali berbentuk nominal atau ordinal. Dalam buku ini, pembaca akan dibimbing mulai dari konsep dasar, penyusunan tabel kontingensi, uji chi-square, hingga analisis regresi logistik dan model log-linear, dengan dilengkapi contoh-contoh praktis yang diimplementasikan menggunakan perangkat lunak R.
Penulis menyadari bahwa penyusunan e-Book ini masih jauh dari sempurna. Oleh karena itu, kritik dan saran yang membangun.
Akhir kata, penulis mengucapkan terima kasih kepada semua pihak yang telah
memberikan dukungan dan kontribusi, baik secara langsung maupun tidak langsung,
dalam penyusunan buku ini. Semoga eBook ini dapat memberikan manfaat dan menjadi
rujukan yang berguna dalam proses belajar dan penelitian.
Bandung, April 2025
Hilya Hamidah
Analisis data kategori merupakan bagian penting dalam statistik modern karena banyak data dalam penelitian sosial, kesehatan, ekonomi, dan bidang lainnya berbentuk kategori. Tujuan utama dari analisis data kategori adalah memahami informasi yang tersimpan dalam data non-numerik dan menggunakan informasi tersebut untuk menjawab pertanyaan penelitian, menguji hipotesis, serta mendukung pengambilan keputusan. Berikut ini adalah beberapa tujuan utama dari analisis data kategori.
Salah satu tujuan penting dari analisis data kategori adalah untuk mengidentifikasi pola dalam distribusi data. Misalnya, peneliti mungkin ingin mengetahui apakah ada kecenderungan preferensi konsumen terhadap merek tertentu atau apakah persepsi masyarakat terhadap suatu isu berbeda menurut kelompok usia.
Dengan menggunakan tabel kontingensi, diagram batang, dan statistik deskriptif, peneliti dapat mengenali pola yang muncul dalam data, baik yang eksplisit maupun tersembunyi. Identifikasi pola ini menjadi landasan awal sebelum dilakukan analisis yang lebih kompleks.
Analisis data kategori juga bertujuan untuk mengetahui hubungan antara dua atau lebih variabel kategori. Misalnya, apakah terdapat hubungan antara jenis kelamin dan preferensi produk? Apakah status pekerjaan berhubungan dengan tingkat kepuasan terhadap layanan publik?
Hubungan antar variabel ini dapat diuji menggunakan uji chi-kuadrat, koefisien kontingensi, atau teknik statistik lanjutan seperti model log-linear dan regresi logistik. Melalui analisis ini, peneliti dapat memahami sejauh mana dua variabel berkaitan secara statistik dan substantif.
Dalam konteks praktis, analisis data kategori memberikan dasar yang kuat untuk pengambilan keputusan berbasis data. Baik dalam dunia bisnis, kebijakan publik, maupun layanan kesehatan, keputusan yang didasarkan pada pemahaman data kategori cenderung lebih tepat sasaran.
Contohnya, perusahaan dapat menggunakan hasil analisis preferensi kategori untuk menyusun strategi pemasaran, sementara instansi pemerintah dapat menyesuaikan kebijakan berdasarkan data persepsi publik terhadap program tertentu.
Analisis data kategori juga dapat digunakan untuk mengembangkan model prediktif terhadap suatu kejadian berdasarkan variabel-variabel kategori. Contohnya adalah memprediksi kemungkinan seseorang membeli produk tertentu berdasarkan jenis kelamin, status pernikahan, dan kategori penghasilan.
Teknik seperti regresi logistik memungkinkan peneliti membangun model prediksi dengan variabel dependen kategori (misalnya: sukses/gagal, ya/tidak) dan variabel independen yang juga bisa berupa kategori. Ini sangat berguna dalam penelitian terapan dan pengembangan sistem pendukung keputusan.
Analisis data kategori adalah cabang dari statistik yang fokus pada data yang diklasifikasikan ke dalam kelompok-kelompok diskrit atau kategori, bukan nilai-nilai numerik kontinu. Pendekatan ini digunakan ketika data tidak memiliki skala kuantitatif, tetapi memiliki informasi yang penting dalam bentuk klasifikasi atau pengelompokan.
Data kategori banyak dijumpai dalam penelitian sosial, pemasaran, epidemiologi, pendidikan, dan bidang lain yang berkaitan dengan perilaku, opini, dan klasifikasi objek. Oleh karena itu, analisis terhadap data jenis ini mencakup berbagai teknik statistik yang dirancang khusus untuk menangani informasi yang bersifat kualitatif.
Data kategori dapat dibagi menjadi dua jenis utama berdasarkan tingkat pengukurannya: data nominal dan data ordinal.
Data Nominal Data nominal adalah data kategori yang tidak memiliki urutan atau peringkat di antara kategorinya. Setiap kategori bersifat unik dan tidak ada satu kategori pun yang lebih tinggi atau lebih rendah dari yang lain. Contoh:
Jenis kelamin: laki-laki, perempuan
Warna favorit: merah, biru, hijau
Status pernikahan: lajang, menikah, bercerai
Dalam analisis, data nominal hanya bisa dihitung frekuensinya dan diproses dengan metode seperti uji chi-kuadrat atau visualisasi seperti diagram batang.
Data Ordinal Data ordinal adalah data kategori yang memiliki urutan atau peringkat, tetapi jarak antar kategorinya tidak terdefinisi secara kuantitatif. Contoh:
Tingkat pendidikan: SD, SMP, SMA, Sarjana
Tingkat kepuasan: sangat tidak puas, tidak puas, netral, puas, sangat puas
Karena ada urutan, data ordinal bisa dianalisis dengan teknik statistik yang mempertimbangkan ranking, seperti uji Mann-Whitney atau regresi ordinal.
Memahami perbedaan antara nominal dan ordinal penting karena pemilihan metode analisis bergantung pada jenis data kategori yang digunakan.
Selain berdasarkan skala pengukuran, data kategori juga dapat diklasifikasikan berdasarkan jumlah kategori yang dimilikinya:
Data Biner (Dikotom) Data biner adalah data yang hanya memiliki dua kategori. Jenis data ini sering dijumpai dalam pengambilan keputusan (ya/tidak), keberhasilan (berhasil/gagal), atau keberadaan (ada/tidak ada). Contoh:
Lulus ujian: ya atau tidak
Status bekerja: bekerja atau tidak bekerja
Analisis terhadap data biner sering kali menggunakan regresi logistik biner, yang merupakan bentuk paling dasar dari model prediksi berbasis kategori.
Data Multikategori Data multikategori memiliki lebih dari dua kategori, baik yang bersifat nominal maupun ordinal. Contoh:
Jenis pekerjaan: guru, dokter, insinyur, pedagang
Tingkat pendidikan: tidak sekolah, SD, SMP, SMA, universitas
Untuk jenis data ini, analisis bisa dilakukan dengan model yang lebih kompleks seperti regresi logistik multinomial (untuk nominal) atau regresi logistik ordinal (untuk ordinal), serta model log-linear untuk hubungan antar beberapa kategori.
Dalam statistika, data dapat diklasifikasikan menjadi dua jenis utama: data kuantitatif dan data kualitatif (kategori). Perbedaan antara keduanya penting untuk dipahami karena akan menentukan jenis analisis dan metode statistik yang dapat digunakan.
| Aspek | Data Kategori (Kualitatif) | Data Kuantitatif (Numerik) |
|---|---|---|
| Sifat Data | Berupa label atau kategori | Berupa angka dan dapat diukur |
| Contoh | Jenis kelamin, warna, tingkat pendidikan | Umur, berat badan, penghasilan |
| Skala Pengukuran | Nominal atau ordinal | Interval atau rasio |
| Operasi Matematis | Tidak dapat dilakukan (tidak bisa dijumlahkan atau dirata-ratakan) | Dapat dilakukan (penjumlahan, rata-rata, dsb) |
| Analisis Statistik | Uji chi-kuadrat, regresi logistik, model log-linear | Uji-t, ANOVA, regresi linear |
Karena data kategori tidak memiliki nilai numerik yang mencerminkan besaran, maka metode statistik konvensional seperti regresi linear atau analisis varians tidak dapat diterapkan secara langsung. Sebaliknya, dibutuhkan pendekatan khusus yang disesuaikan dengan sifat diskrit dan klasifikatif dari data tersebut.
Analisis data kategori memiliki penerapan luas di berbagai bidang kehidupan. Karena banyak fenomena nyata yang dinyatakan dalam bentuk kategori, kemampuan untuk menganalisis data kategori sangat penting. Berikut adalah beberapa bidang utama dan manfaat analisis data kategori dalam konteks masing-masing:
Dalam ilmu sosial dan psikologi, data yang diperoleh sering kali berupa persepsi, sikap, pilihan, atau klasifikasi sosial. Analisis data kategori memungkinkan peneliti:
Menggali hubungan antara status sosial dan sikap politik.
Menganalisis hubungan antara jenis kelamin dan preferensi perilaku.
Menilai efektivitas intervensi berdasarkan kategori hasil (misalnya, berhasil/gagal).
Data dalam bidang medis dan kesehatan masyarakat sangat sering bersifat kategorikal. Contohnya:
Diagnosa penyakit (positif/negatif).
Kategori tingkat keparahan gejala (ringan/sedang/berat).
Jenis terapi yang digunakan (farmakologis/non-farmakologis).
Analisis data kategori penting untuk memahami faktor risiko, efektivitas pengobatan, dan pengaruh variabel demografis terhadap status kesehatan.
Dalam bisnis, banyak keputusan diambil berdasarkan preferensi konsumen, segmentasi pasar, atau hasil survei yang berbentuk kategori. Analisis data kategori dapat digunakan untuk:
Memprediksi preferensi pelanggan terhadap produk tertentu.
Mengelompokkan pelanggan berdasarkan karakteristik demografis.
Menilai kepuasan pelanggan berdasarkan kategori layanan.
Dalam dunia pendidikan, analisis data kategori membantu dalam:
Mengkaji hubungan antara latar belakang siswa dan keberhasilan belajar.
Menilai kategori motivasi belajar atau gaya belajar siswa.
Mengklasifikasikan sekolah berdasarkan kinerja atau akreditasi.
Dalam perumusan dan evaluasi kebijakan, data kategori banyak digunakan, misalnya:
Kategori penerima bantuan sosial.
Persepsi masyarakat terhadap kebijakan tertentu.
Jenis pelayanan publik yang paling dibutuhkan masyarakat.
Analisis data kategori membantu pengambil kebijakan untuk merancang program yang lebih tepat sasaran.
Bidang ini menggunakan data kategori seperti:
Jenis kejahatan (pencurian, perampokan, kekerasan).
Status tersangka (tersangka/terpidana).
Wilayah rawan kejahatan (klasifikasi zona).
Analisis kategori dapat digunakan untuk memetakan risiko, menganalisis pola kriminalitas, dan menyusun strategi pencegahan.
Analisis data kategori melibatkan berbagai pendekatan statistik yang dirancang khusus untuk menangani data non-numerik. Metode-metode ini bertujuan untuk mengidentifikasi pola, hubungan antar variabel, dan membuat prediksi berdasarkan kategori. Berikut ini beberapa metode utama yang digunakan.
Tabel kontingensi adalah representasi dua dimensi yang menampilkan frekuensi observasi dari dua variabel kategori. Misalnya, hubungan antara jenis kelamin (laki-laki/perempuan) dan preferensi produk (A/B/C) dapat disajikan dalam bentuk tabel kontingensi 2x3.
Untuk mengetahui apakah ada hubungan antara dua variabel kategori dalam tabel kontingensi, digunakan uji chi-square (χ²). Uji ini mengukur apakah frekuensi yang diamati secara signifikan berbeda dari frekuensi yang diharapkan jika tidak ada hubungan.
Langkah-langkah umum uji chi-square:
Menyusun tabel kontingensi.
Menghitung frekuensi harapan (expected frequency).
Menghitung nilai chi-square:
##contoh untuk data 2×2
data <- matrix(c(30, 20, 10, 40), nrow = 2, byrow = TRUE)
colnames(data) <- c("Positif", "Negatif")
rownames(data) <- c("Kelompok A", "Kelompok B")
##Uji Chi-square
chisq.test(data)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 15.042, df = 1, p-value = 0.0001052
Regresi logistik adalah metode statistik yang digunakan untuk memodelkan hubungan antara satu variabel dependen kategori (biasanya biner) dan satu atau lebih variabel independen.
Digunakan ketika variabel dependen hanya memiliki dua kategori (misalnya: ya/tidak, sukses/gagal).
Model dasarnya :
dengan p probabilitas kejadian (misalnya, membeli produk).
##Contoh data
data <- data.frame(
status = c(1, 0, 1, 0, 1, 0), # 1 = HIV+, 0 = HIV-
usia = c(25, 40, 35, 28, 32, 50),
jenis_kelamin = factor(c("L", "P", "L", "L", "P", "P")) )
##Model regresi logistik
model <- glm(status ~ usia + jenis_kelamin, family = binomial, data = data)
summary(model)
##
## Call:
## glm(formula = status ~ usia + jenis_kelamin, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 6.2020 5.8973 1.052 0.293
## usia -0.1848 0.1902 -0.972 0.331
## jenis_kelaminP 0.3100 2.3742 0.131 0.896
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 8.3178 on 5 degrees of freedom
## Residual deviance: 6.4075 on 3 degrees of freedom
## AIC: 12.408
##
## Number of Fisher Scoring iterations: 4
Digunakan untuk variabel dependen dengan lebih dari dua kategori tanpa urutan (misalnya: memilih merek A, B, atau C).
Digunakan ketika variabel dependen memiliki lebih dari dua kategori yang terurut (misalnya: rendah, sedang, tinggi).
Regresi logistik sangat fleksibel dan memungkinkan untuk memasukkan variabel prediktor kategori maupun numerik.
Correspondence Analysis (CA) adalah teknik eksplorasi data yang digunakan untuk menganalisis hubungan antara dua variabel kategori dalam sebuah tabel kontingensi.
Tujuan utama CA adalah mengubah tabel kontingensi menjadi peta dua dimensi sehingga hubungan antar kategori bisa divisualisasikan secara grafis. Ini sangat berguna untuk memahami asosiasi antara baris dan kolom dalam tabel.
Manfaat CA:
Menyajikan hasil dalam bentuk visual (biplot).
Mempermudah interpretasi hubungan kompleks.
Berguna dalam survei opini, analisis preferensi, dan data demografis.
CA mirip dengan analisis faktor atau PCA (Principal Component Analysis), tetapi digunakan untuk data kategori.
Decision tree dan random forest merupakan metode klasifikasi yang kuat dan populer, terutama untuk data kategori.
Metode ini membuat model prediktif dalam bentuk pohon bercabang, di mana setiap cabang mewakili keputusan berdasarkan nilai suatu fitur kategori.
Mudah diinterpretasikan.
Cocok untuk prediksi dengan variabel input kategori.
Contoh algoritma: CART, ID3, C4.5.
Random forest merupakan pengembangan dari decision tree dengan membuat banyak pohon keputusan dan menggabungkan hasilnya (ensemble learning).
Lebih akurat dan stabil dibanding pohon tunggal.
Dapat mengatasi overfitting.
Cocok untuk dataset besar dan kompleks.
Metode ini banyak digunakan dalam bidang pemasaran, keuangan, dan ilmu sosial, terutama dalam prediksi berbasis kategori seperti churn pelanggan, klasifikasi risiko, dan segmentasi konsumen.
Dalam analisis data kategori, distribusi probabilitas digunakan untuk memodelkan kemungkinan hasil dari variabel kategori. Distribusi ini membantu dalam membuat inferensi statistik dan membangun model prediktif. Berikut adalah beberapa distribusi penting yang sering digunakan dalam konteks data kategori.
Distribusi Bernoulli digunakan untuk memodelkan eksperimen dengan dua hasil saja, seperti “sukses/gagal” atau “ya/tidak”
Variabel acak X mengikuti distribusi Bernoulli jika:
Contoh: Hasil uji COVID-19 (positif = 1, negatif = 0).
Rataan dan varians:
Distribusi Bernoulli adalah dasar dari distribusi binomial.
library(knitr) library(kableExtra) library(dplyr)
set.seed(123)
bernoulli_sample <- rbinom(n = 10, size = 1, prob = 0.5)
bernoulli_sample
Distribusi binomial merupakan perluasan dari distribusi Bernoulli untuk n percobaan independen yang identik, masing-masing dengan dua kemungkinan hasil.
Jika X∼Bin(n,p), maka:
untuk k=0,1,2,…,nk = 0, 1, 2, …, nk=0,1,2,…,n
Contoh: Jumlah pelanggan yang membeli produk (dari total 10 pelanggan) jika probabilitas membeli adalah 0,3.
Rataan dan varians:
Distribusi binomial sangat penting dalam analisis respon biner (misalnya dalam regresi logistik biner).
##### Syntax
set.seed(123)
binomial_sample <- rbinom(n = 10, size = 5, prob = 0.5)
# 10 percobaan Binomial dengan 5 ulangan
binomial_sample
## [1] 2 3 2 4 4 1 3 4 3 2
Distribusi multinomial adalah generalisasi dari distribusi binomial ketika terdapat lebih dari dua kategori hasil untuk setiap percobaan.
Misalkan ada kkk kategori, dan X=(X1,X2,…,Xk)X = (X_1, X_2, …, X_k)X=(X1,X2,…,Xk) menyatakan jumlah observasi pada masing-masing kategori dari total nnn percobaan.
Fungsi probabilitasnya:
dengan
Distribusi multinomial banyak digunakan dalam pengolahan data survei dan dalam model regresi multinomial.
set.seed(123)
multinomial_sample <- rmultinom(n = 1, size = 10, prob = c(0.3, 0.5, 0.2))
multinomial_sample
## [,1]
## [1,] 2
## [2,] 5
## [3,] 3
Distribusi Poisson digunakan untuk memodelkan jumlah kejadian dalam suatu interval waktu atau ruang yang tetap, terutama saat kejadian tersebut jarang terjadi dan saling independen.
dengan λ adalah rata-rata kejadian dalam satu interval.
Contoh: Jumlah kecelakaan lalu lintas di satu jalan dalam sehari.
Rataan dan varians:
Walaupun
Poisson sering digunakan untuk data hitung, ia juga relevan dalam
konteks data kategori ketika jumlah kejadian diklasifikasikan ke dalam
kategori-kategori (misalnya, berdasarkan wilayah atau jenis).
set.seed(123)
poisson_sample <- rpois(10, lambda = 3)
# 10 sampel dengan rata-rata kejadian 3
poisson_sample
## [1] 2 4 2 5 6 0 3 5 3 3
Contoh Soal
Sebuah penelitian dilakukan untuk melihat apakah mahasiswa yang bekerja lebih mungkin untuk tidak lulus tepat waktu dibandingkan mahasiswa yang tidak bekerja.
Hasil data dari 100 mahasiswa:
| Tidak Lulus | Lulus | Total | ||||
| Bekerja | 30 | 20 | 50 | |||
| Tidak Bekerja | 10 | 40 | 50 | |||
| Total | 40 | 60 | 100 |
Langkah Penyelesaian
1. Risk Difference (RD)
{width="484"}
Artinya: Mahasiswa yang bekerja memiliki risiko 40% lebih besar untuk tidak lulus dibanding yang tidak bekerja.
2. Relative Risk (RR)
{width="450"}
Interpretasi: Mahasiswa yang bekerja memiliki 3 kali lipat risiko tidak lulus dibandingkan yang tidak bekerja.
3. Odds Ratio (OR)
{width="215"}
Interpretasi: Peluang tidak lulus bagi mahasiswa yang bekerja adalah 6 kali lebih besar dibandingkan yang tidak bekerja.
Kesimpulan
Terdapat hubungan yang kuat antara status bekerja dan kelulusan tepat waktu. Mahasiswa yang bekerja cenderung lebih berisiko untuk tidak lulus tepat waktu.
Desain sampling atau rancangan pengambilan sampel merupakan aspek krusial dalam analisis data kategori. Pemilihan desain yang tepat memengaruhi validitas hasil analisis, baik dari segi interpretasi hubungan antarvariabel maupun inferensi kausal. Dalam konteks data kategori, desain sampling umumnya diklasifikasikan menjadi dua jenis utama: prospective dan retrospective.
Prospective sampling adalah desain di mana data dikumpulkan ke depan, mengikuti subjek dari waktu ke waktu. Tujuannya adalah untuk mengamati bagaimana variabel bebas memengaruhi kejadian atau kategori dari variabel dependen.
Dalam eksperimen, peneliti mengendalikan pemberian perlakuan kepada subjek dan mengamati hasilnya. Ini adalah pendekatan paling kuat untuk inferensi kausal.
Contoh: Uji coba klinis di mana peserta secara acak diberikan obat atau plasebo, lalu hasil (misal: sembuh/tidak sembuh) diamati.
Kelebihan: Kontrol tinggi terhadap variabel luar.
Kelemahan: Bisa mahal dan tidak selalu etis (misalnya dalam studi penyakit serius).
Studi kohort melibatkan pemilihan sekelompok orang berdasarkan paparan terhadap suatu faktor, kemudian diikuti ke depan untuk melihat apakah mereka mengalami outcome tertentu.
Contoh: Studi kesehatan yang mengikuti perokok dan non-perokok untuk melihat insiden kanker paru-paru.
Cocok untuk menganalisis hubungan antara faktor risiko dan outcome.
Biasanya membutuhkan waktu lama dan biaya besar.
Retrospective sampling mengumpulkan data dari masa lalu, dengan mengidentifikasi outcome terlebih dahulu, lalu menelusuri variabel-variabel penyebab atau paparan.
Dalam studi kasus-kontrol, peneliti memilih dua kelompok: satu dengan outcome (kasus) dan satu tanpa (kontrol), lalu menelusuri kembali informasi paparan di masa lalu.
Contoh: Studi membandingkan riwayat konsumsi alkohol pada penderita kanker hati (kasus) dan orang sehat (kontrol).
Efisien untuk penyakit yang jarang terjadi.
Tidak bisa memberikan estimasi langsung tentang risiko absolut.
Serupa dengan studi kohort prospektif, tetapi menggunakan data historis. Peneliti menelusuri paparan dan outcome dari catatan masa lalu.
Contoh: Studi berdasarkan rekam medis rumah sakit 10 tahun terakhir.
Kelebihan: Cepat dan murah.
Kelemahan: Rentan terhadap data yang hilang dan bias informasi.
| Aspek | Eksperimen | Studi Kohort | Kasus-Kontrol | Kohort Retrospektif |
|---|---|---|---|---|
| Arah Waktu | Prospektif | Prospektif | Retrospektif | Retrospektif |
| Pemilihan Subjek | Berdasarkan Perlakuan | Berdasarkan Paparan | Berdasarkan Outcome | Berdasarkan Paparan |
| Kontrol Variabel Luar | Tinggi | Sedang | Rendah | Rendah |
| Esrimasi Risiko | Ya | Ya | Tidak Langsung | Ya |
| Kekuatan Interfensi | Sangat Kuat | Kuat | Lemah-Sedang | Sedang |
Contoh Soal 1
Diketahui data hasil studi tentang hubungan merokok dan kanker paru-paru:
| Perokok | Bukan Perokok | Total | |
|---|---|---|---|
| Kanker Paru-paru | 240 | 60 | 300 |
| Tidak Kanker | 120 | 180 | 300 |
| Total | 360 | 240 | 600 |
Pertanyaan:
Tentukan jenis desain sampling!
Hitunglah Odds Ratio (OR)!
Interpretasikan hasilnya!
Penyelesaian
Langkah 1: Identifikasi Desain Sampling
Data diambil dari dua kelompok berdasarkan status penyakit: yang terkena kanker dan yang tidak.
Kemudian ditelusuri apakah mereka merokok atau tidak.
Karena pengambilan data dimulai dari outcome (penyakit), maka desain ini termasuk retrospective sampling.
Langkah 2: Hitung Odds Ratio (OR)
Odds Ratio digunakan untuk mengukur asosiasi antara paparan (merokok) dan outcome (kanker paru-paru).
Tabel 2 × 2:
| Merokok (E+) | Tidak Merokok (E−) | |
|---|---|---|
| Kanker (D+) | a = 240 | b = 60 |
| Tidak Kanker (D−) | c = 120 | d = 180 |
Langkah 3: Interpretasi Hasil
Odds Ratio sebesar 6 menunjukkan bahwa peluang terkena kanker paru-paru pada perokok 6 kali lebih besar dibandingkan bukan perokok. Ini menunjukkan adanya asosiasi yang kuat antara merokok dan kanker paru-paru.
Kesimpulan
Desain sampling yang digunakan adalah retrospektif (studi kasus-kontrol).
Nilai Odds Ratio = 6.
Merokok berasosiasi positif dengan kanker paru-paru; perokok memiliki risiko lebih tinggi.
Contoh Soal 2
Diketahui data hasil studi tentang hubungan merokok dan kanker paru-paru:
| Perokok | Bukan Perokok | Total | |
|---|---|---|---|
| Kanker Paru-paru | 240 | 60 | 300 |
| Tidak Kanker | 120 | 180 | 300 |
| Total | 360 | 240 | 600 |
Pertanyaan:
Tentukan jenis desain sampling!
Hitunglah Relative Risk (RR)!
Hitunglah Risk Difference (RD)!
Interpretasikan hasilnya!
Penyelesaian
Langkah 1: Identifikasi Desain Sampling
Data diambil dari dua kelompok berdasarkan status penyakit: yang terkena kanker dan yang tidak.
Kemudian ditelusuri apakah mereka merokok atau tidak.
Karena pengambilan data dimulai dari outcome (penyakit), maka desain ini termasuk retrospective sampling.
Langkah 2: Hitung Relative Risk (RR)
Relative Risk digunakan untuk mengukur perbandingan risiko kejadian antara kelompok yang terpapar (perokok) dan yang tidak terpapar (bukan perokok).
Tabel 2 × 2:
| Merokok (E+) | Tidak Merokok (E−) | |
|---|---|---|
| Kanker (D+) | a = 240 | b = 60 |
| Tidak Kanker (D−) | c = 120 | d = 180 |
Langkah 3: Hitung Risk Difference (RD)
Risk Difference digunakan untuk mengukur perbedaan risiko kejadian antara dua kelompok.
Langkah 4: Interpretasi Hasil
Interpretasi: Risiko terkena kanker paru-paru pada perokok adalah 2.67 kali lebih besar dibandingkan dengan bukan perokok. Ini menunjukkan adanya asosiasi positif antara merokok dan kanker paru-paru.
Interpretasi: Perbedaan risiko terkena kanker paru-paru antara perokok dan bukan perokok adalah 0.4167 atau 41.67%. Ini menunjukkan bahwa perokok memiliki kemungkinan 41.67% lebih tinggi untuk menderita kanker paru-paru dibandingkan dengan bukan perokok.
Kesimpulan
Desain sampling yang digunakan adalah retrospektif (studi kasus-kontrol).
Relative Risk (RR) = 2.67, yang berarti perokok memiliki risiko lebih tinggi untuk terkena kanker paru-paru.
Risk Difference (RD) = 0.4167, yang berarti perbedaan risiko antara perokok dan bukan perokok adalah 41.67%.
Tabel kontingensi 2 × 2 adalah alat penting dalam analisis data kategori untuk menyajikan dan menganalisis hubungan antara dua variabel kategorik biner. Struktur sederhana tabel ini memungkinkan perhitungan ukuran asosiasi serta pengujian signifikansi statistik.
Tabel kontingensi 2 × 2 dapat diinterpretasikan dalam bentuk peluang, yang membantu memahami struktur probabilitas dalam data kategori.
Peluang bersama menunjukkan kemungkinan dua kejadian terjadi secara bersamaan. Misal, peluang bahwa seseorang merokok dan terkena penyakit paru-paru.
Jika tabel memiliki entri:
| Penyakit(+) | Penyait (-) | Total | |
|---|---|---|---|
| Merokok (+) | a | b | a+b |
| Merokok (-) | c | d | c+d |
| Total | a+c | b+d | n |
Maka peluang bersama adalah:
P(Merokok dan Penyakit) = a / n
P(Merokok dan Tidak Sakit) = b / n
Dst.
Peluang marginal adalah peluang dari satu kejadian saja, tanpa mempertimbangkan kejadian lainnya.
Contoh:
P(Merokok) = (a + b) / n
P(Penyakit) = (a + c) / n
Peluang bersyarat adalah peluang suatu kejadian terjadi, dengan syarat kejadian lain telah terjadi.
Contoh:
P(Penyakit | Merokok) = a / (a + b)
P(Penyakit | Tidak Merokok) = c / (c + d)
Peluang bersyarat ini sangat penting dalam menghitung ukuran asosiasi seperti relative risk dan odds ratio.
# Data Observasi
data <- matrix(c(450, 200, 50, 300), nrow = 2, byrow = TRUE)
colnames(data) <- c("Kanker Paru (+)", "Kanker Paru (-)")
rownames(data) <- c("Perokok", "Bukan Perokok")
n <- sum(data)
# Peluang Bersama
P_joint <- data / n
# Peluang Marginal
P_marginal_rows <- rowSums(data) / n
P_marginal_cols <- colSums(data) / n
# Peluang Bersyarat
P_conditional <- data / rowSums(data)
# Hasil
hasil <- list(
Peluang_Bersama = P_joint,
Peluang_Marginal_Baris = P_marginal_rows,
Peluang_Marginal_Kolom = P_marginal_cols
)
hasil
## $Peluang_Bersama
## Kanker Paru (+) Kanker Paru (-)
## Perokok 0.45 0.2
## Bukan Perokok 0.05 0.3
##
## $Peluang_Marginal_Baris
## Perokok Bukan Perokok
## 0.65 0.35
##
## $Peluang_Marginal_Kolom
## Kanker Paru (+) Kanker Paru (-)
## 0.5 0.5
Ukuran asosiasi digunakan untuk mengkuantifikasi kekuatan hubungan antara dua variabel kategorik biner.
Risk Difference (perbedaan risiko) adalah selisih antara probabilitas outcome pada kelompok terpapar dan tidak terpapar.
Nilai RD = 0 menunjukkan tidak ada perbedaan risiko.
Positif → risiko lebih tinggi pada kelompok terpapar.
##Contoh
RD <- function(n11, n12, n21, n22) {(n11 / (n11 + n12)) - (n21 / (n21 + n22))}
RD(50, 50, 30, 70)
## [1] 0.2
Relative Risk (Risiko Relatif) mengukur rasio antara dua risiko
RR = 1 berarti tidak ada asosiasi.
RR > 1 → paparan meningkatkan risiko.
RR < 1 → paparan bersifat protektif.
Catatan: RR cocok digunakan pada studi kohort atau eksperimen.
##Contoh
RR <- function(n11, n12, n21, n22) {
(n11 / (n11 + n12)) / (n21 / (n21 + n22))
}
RR(50, 50, 30, 70)
Odds Ratio mengukur rasio peluang (bukan risiko).
OR = 1 → tidak ada asosiasi.
OR > 1 → paparan dikaitkan dengan kemungkinan outcome lebih tinggi.
OR < 1 → paparan dikaitkan dengan kemungkinan outcome lebih rendah.
Catatan: OR umum digunakan dalam studi kasus-kontrol, karena tidak bisa menghitung RR secara langsung.
OR <- function(n11, n12, n21, n22) {
(n11 * n22) / (n12 * n21)
}
OR(50, 50, 30, 70)
Contoh Soal
Diketahui data hasil penelitian tentang hubungan antara konsumsi alkohol dan kejadian hipertensi pada 200 orang dewasa sebagai berikut:
| Mengkonsumsi Alkohol (E+) | Tidak Mengkonsumsi Alkohol (E−) | Total | |
|---|---|---|---|
| Hipertensi (D+) | 50 | 20 | 70 |
| Tidak Hipertensi (D−) | 70 | 60 | 130 |
| Total | 120 | 80 | 200 |
Pertanyaan:
Tentukan Risk Difference (RD)!
Tentukan Relative Risk (RR)!
Tentukan Odds Ratio (OR)!
Interpretasikan hasilnya!
Penyelesaian
Langkah 1: Identifikasi Tabel 2 × 2
| Mengkonsumsi Alkohol (E+) | Tidak Mengkonsumsi Alkohol (E−) | |
|---|---|---|
| Hipertensi (D+) | a = 50 | b = 20 |
| Tidak Hipertensi (D−) | c = 70 | d = 60 |
Langkah 2: Hitung Risk Difference (RD)
Risk Difference mengukur perbedaan risiko kejadian antara dua kelompok (E+ dan E−).
Interpretasi: Risk Difference (RD) = 0.1667. Artinya, perbedaan risiko hipertensi antara mereka yang mengkonsumsi alkohol dan yang tidak mengkonsumsi alkohol adalah 16.67%. Kelompok yang mengkonsumsi alkohol memiliki risiko hipertensi yang 16.67% lebih tinggi daripada kelompok yang tidak mengkonsumsi alkohol.
Langkah 3: Hitung Relative Risk (RR)
Relative Risk mengukur rasio risiko kejadian antara kelompok yang terpapar (E+) dan yang tidak terpapar (E−).
Interpretasi: Relative Risk (RR) = 1.67. Artinya, individu yang mengkonsumsi alkohol memiliki risiko terkena hipertensi 1.67 kali lebih besar dibandingkan dengan individu yang tidak mengkonsumsi alkohol.
Langkah 4: Hitung Odds Ratio (OR)
Odds Ratio digunakan untuk membandingkan odds terjadinya suatu kejadian antara dua kelompok.
Interpretasi: Odds Ratio (OR) = 2.14. Artinya, odds untuk mengembangkan hipertensi pada individu yang mengkonsumsi alkohol adalah 2.14 kali lebih besar dibandingkan dengan individu yang tidak mengkonsumsi alkohol.
Langkah 5: Interpretasi Hasil
Individu yang mengkonsumsi alkohol memiliki risiko hipertensi 16.67% lebih tinggi dibandingkan dengan individu yang tidak mengkonsumsi alkohol.
Individu yang mengkonsumsi alkohol memiliki risiko hipertensi 1.67 kali lebih besar dibandingkan dengan individu yang tidak mengkonsumsi alkohol.
Kesimpulan
Konsumsi alkohol berhubungan dengan peningkatan risiko hipertensi, dengan Risk Difference sebesar 16.67%, yang berarti kelompok yang mengkonsumsi alkohol memiliki risiko lebih tinggi.
Relative Risk dan Odds Ratio mendukung temuan bahwa konsumsi alkohol meningkatkan kemungkinan terkena hipertensi, dengan RR = 1.67 dan OR = 2.14.
Tabel kontingensi dua arah digunakan untuk menganalisis hubungan antara dua variabel kategori. Inferensi statistik terhadap tabel ini memungkinkan peneliti untuk membuat kesimpulan mengenai populasi berdasarkan data sampel, melalui estimasi dan uji hipotesis.
Estimasi digunakan untuk memperkirakan parameter populasi berdasarkan data sampel. Dalam konteks tabel kontingensi, parameter yang biasa diperkirakan meliputi proporsi, perbedaan proporsi, dan rasio peluang.
Estimasi titik memberikan nilai tunggal sebagai perkiraan parameter populasi.
Contoh:
{width="84"}
Proporsi penderita penyakit di antara bukan perokok:
Perbedaan Proporsi
Odds Ratio (OR)
Estimasi interval memberikan rentang nilai di mana parameter populasi diperkirakan berada, disertai tingkat keyakinan (misalnya 95%).
Contoh interval kepercayaan:
Untuk perbedaan proporsi menggunakan pendekatan normal:
Untuk Odds Ratio, menggunakan logaritma alami:
Kemudian diubah kembali ke bentuk OR dengan eksponensial.
Uji hipotesis digunakan untuk mengevaluasi apakah data mendukung suatu klaim tentang hubungan antara dua variabel kategori.
Uji proporsi digunakan untuk menguji apakah dua proporsi berbeda secara signifikan.
Hipotesis nol (H₀) : p1=p2
Hipotesis alternatif (H₁): p1≠p2 (dua arah) atau p1>p2, p1<p2(satu arah)
Statistik uji:
dengan
Bandingkan nilai Z dengan nilai kritis distribusi normal standar.
##Pastikan variabel data_matrix terdefinisi sebelum digunakan
set.seed(123)
data <- matrix(c(50, 30, 30, 50), nrow = 2, byrow = TRUE)
dimnames(data) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print(data)
## Kejadian
## Terpapar Ya Tidak
## Ya 50 30
## Tidak 30 50
## Kejadian
## Terpapar Ya Tidak
## Ya 50 30
## Tidak 30 50
# Uji Proporsi dengan variabel yang benar
prop_test <- prop.test(x = c(data[1,1], data[2,1]),
n = c(sum(data[1,]), sum(data[2,])))
print(prop_test)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(data[1, 1], data[2, 1]) out of c(sum(data[1, ]), sum(data[2, ]))
## X-squared = 9.025, df = 1, p-value = 0.002663
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.08747151 0.41252849
## sample estimates:
## prop 1 prop 2
## 0.625 0.375
Uji asosiasi mengevaluasi apakah terdapat hubungan antara dua variabel dalam tabel kontingensi.
n11 <- 50
n12 <- 30
n21 <- 30
n22 <- 50
n1. <- n11 + n12
n2. <- n21 + n22
# Risk Difference
p1 <-(n11/n1.)
p2<-(n21/n2.)
rd <- p1 - p2
se_rd <- sqrt((p1 * (1 - p1) / n1.) + p2*((1 - p2) / n2.))
z_rd <- rd / se_rd
# Relative Risk
rr <- (n11/n1.) / (n21/n2.)
se_ln_rr <- sqrt((1/n11) - (1/n1.) + (1/n21) - (1/n2.))
z_rr <- log(rr) / se_ln_rr
# Odds Ratio
or <- (n11 * n22) / (n12 * n21)
se_ln_or <- sqrt((1/n11) + (1/n12) + (1/n21) + (1/n22))
z_or <- log(or) / se_ln_or
# Hasil
list(RD = rd, SE_RD = se_rd, Z_RD = z_rd, RR = rr, SE_Ln_RR = se_ln_rr, Z_RR = z_rr, OR = or, SE_Ln_OR = se_ln_or, Z_OR= z_or)
## $RD
## [1] 0.25
##
## $SE_RD
## [1] 0.07654655
##
## $Z_RD
## [1] 3.265986
##
## $RR
## [1] 1.666667
##
## $SE_Ln_RR
## [1] 0.1683251
##
## $Z_RR
## [1] 3.034756
##
## $OR
## [1] 2.777778
##
## $SE_Ln_OR
## [1] 0.3265986
##
## $Z_OR
## [1] 3.128155
Hipotesis nol (H₀): Tidak ada asosiasi antar variabel (proporsi sama)
Statistik uji:
{width="152"}
{width="189" height="26"}
Digunakan bila ukuran sampel kecil. Tidak menggunakan pendekatan chi-square, tetapi menghitung langsung probabilitas dari distribusi hipergeometrik.
Uji independensi adalah jenis khusus dari uji asosiasi untuk menentukan apakah dua variabel kategori bebas secara statistik.
Langkah-langkah sama dengan uji Chi-Square, tetapi dengan penekanan bahwa:
H₀: Kedua variabel bebas
H₁: Kedua variabel tidak bebas
Jika nilai χ2 observasi lebih besar dari nilai kritis, maka H₀ ditolak dan disimpulkan bahwa terdapat hubungan antara kedua variabel.
Catatan:
Dalam interpretasi, selalu penting mempertimbangkan konteks penelitian,
ukuran efek (seperti OR atau RR), serta signifikansi statistik dan
klinis.
Setelah melakukan uji chi-square dan diketahui adanya asosiasi antara dua variabel, analisis residual membantu mengidentifikasi sel mana yang berkontribusi paling besar terhadap asosiasi tersebut. Residual menunjukkan selisih antara frekuensi yang diamati dan yang diharapkan berdasarkan model independensi.
Beberapa jenis residual umum dalam tabel kontingensi:
Menunjukkan selisih absolut antara nilai observasi Oij dan nilai harapan
Eij
Pearson Residual:
Digunakan untuk mengevaluasi kontribusi tiap sel terhadap statistik chi-square:
{width="91" height="28"}
Jika varian tiap residual tidak konstan, digunakan residual baku:
{width="227"}
dengan pi. dan p.j adalah proporsi total baris dan kolom.
Untuk memperhitungkan pengaruh observasi terhadap nilai estimasi, dapat dihitung adjusted residual yang memiliki distribusi mendekati normal standar (N(0,1)) jika H₀ benar.
Sel dengan nilai residual yang besar (baik positif maupun negatif) menunjukkan penyimpangan signifikan dari independensi, dan bisa dianggap sebagai outlier dalam konteks data kategori.
Pedoman Umum:
Jika ∣rij∣>2, sel tersebut dapat dianggap menyumbang signifikan terhadap ketidaksesuaian model.
Jika ∣rij∣>3, sel sangat mencurigakan sebagai outlier atau sel yang mengindikasikan hubungan spesifik antar kategori.
Visualisasi Residual:
Peta residual atau mosaic plot dapat digunakan untuk menunjukkan visual besar kecilnya residual antar sel.
Warna atau ukuran kotak sering dikaitkan dengan arah dan besar residual.
Contoh:
Misalkan pada suatu tabel 2×3 untuk hubungan antara jenis kelamin (laki-laki/perempuan) dan preferensi produk (A, B, C), residual membantu menunjukkan apakah preferensi terhadap produk A secara signifikan lebih besar pada laki-laki dibanding perempuan (atau sebaliknya), meskipun secara keseluruhan ada asosiasi yang signifikan.
Kesimpulan:
Analisis residual sangat penting dalam menginterpretasikan uji chi-square. Ia tidak hanya memberi tahu apakah ada asosiasi, tetapi juga di mana asosiasi tersebut paling menonjol terjadi. Ini penting terutama dalam konteks aplikasi nyata seperti riset pasar, survei sosial, maupun studi epidemiologi.
Contoh Soal:
Sebuah penelitian dilakukan untuk melihat apakah ada hubungan antara jenis kelamin dan status merokok di kalangan mahasiswa di Universitas X. Data yang diperoleh menunjukkan distribusi frekuensi sebagai berikut:
| Merokok | Tidak Merokok | Total | |
|---|---|---|---|
| Laki-laki | 30 | 70 | 100 |
| Perempuan | 10 | 90 | 100 |
| Total | 40 | 160 | 200 |
Uji hipotesis untuk menentukan apakah ada hubungan antara jenis kelamin dan status merokok dengan menggunakan uji Chi-Square.
Langkah-langkah Penyelesaian:
1. Menyusun Hipotesis
Hipotesis nol (H0): Tidak ada hubungan antara jenis kelamin dan status merokok (independensi).
Hipotesis alternatif (H1): Ada hubungan antara jenis kelamin dan status merokok (ketergantungan).
2. Menghitung Frekuensi yang Diharapkan
Frekuensi yang diharapkan dihitung menggunakan rumus:
Di mana:
Eij adalah frekuensi yang diharapkan untuk sel di baris i dan kolom j,
Baris Totali adalah jumlah total di baris i,
Kolom Totalj adalah jumlah total di kolom j,
Total KeseluruhanTotal adalah total keseluruhan (jumlah seluruh data).
Frekuensi yang diharapkan untuk setiap sel:
Untuk Laki-laki & Merokok:
Untuk Laki-laki & Tidak Merokok:
Untuk Perempuan & Merokok:
Untuk Perempuan & Tidak Merokok:
Maka, tabel frekuensi yang diharapkan adalah:
| Merokok | Tidak Merokok | Total | |
|---|---|---|---|
| Laki-laki | 20 | 80 | 100 |
| Perempuan | 20 | 80 | 100 |
| Total | 40 | 160 | 200 |
3. Menghitung Chi-Square Statistic
Menghitung untuk setiap sel:
Untuk Laki-laki & Merokok:
=5
Untuk Laki-laki & Tidak Merokok:
=1.25
Untuk Perempuan & Merokok:
0=5
Untuk Perempuan & Tidak Merokok:
=1.25
Jumlahkan semua nilai tersebut:
χ2=5+1.25+5+1.25=12.5
4. Menentukan Derajat Kebebasan (Degrees of Freedom)
Derajat kebebasan untuk uji Chi-Square dihitung dengan rumus:
df=(r−1)×(c−1)
Di mana:
r adalah jumlah baris (2),
c adalah jumlah kolom (2).
Maka,
df=(2−1)×(2−1)=1d
5. Menentukan Nilai Kritis
Tentukan nilai kritis Chi-Square pada derajat kebebasan df=1 dan tingkat signifikansi α=0.05. Berdasarkan tabel distribusi Chi-Square, nilai kritis untuk χ2 pada df=1 dan α=0.05 adalah 3.841.
6. Membandingkan Nilai Chi-Square
Nilai χ2 yang dihitung = 12.5,
Nilai kritis = 3.841.
Karena χ2 yang dihitung (12.5) lebih besar dari nilai kritis (3.841), kita tolak hipotesis nol (H0).
7. Kesimpulan
Terdapat hubungan yang signifikan antara jenis kelamin dan status merokok di kalangan mahasiswa Universitas X, dengan nilai χ2=12.5, derajat kebebasan df=1, dan tingkat signifikansi 0.05.
Analisis data kategori tidak terbatas pada dua variabel. Dalam banyak kasus, kita menghadapi tiga (atau lebih) variabel kategorik. Tabel kontingensi tiga arah memungkinkan kita untuk mengevaluasi hubungan antar tiga variabel sekaligus. Biasanya ditampilkan dalam bentuk tabel bertingkat atau layered tables, di mana satu dimensi menjadi “lapisan” dari tabel dua arah.
Contoh:
Misalnya, kita ingin mempelajari hubungan antara jenis kelamin (X), status merokok (Y), dan status penyakit jantung (Z). Maka, Z bisa dijadikan sebagai lapisan (stratum), dan kita mengevaluasi tabel dua arah antara X dan Y dalam setiap lapisan Z.
Tabel marginal dihasilkan dengan mengabaikan salah satu variabel dalam tabel tiga arah. Artinya, kita menjumlahkan nilai-nilai dari satu variabel untuk memperoleh tabel dua arah dari dua variabel lainnya.
Misalnya:
Tabel marginal dari variabel X dan Y, tanpa memperhatikan Z, didapat dengan:
Artinya, kita menjumlahkan seluruh nilai nijk pada dimensi ketiga k (Z).
#Contoh
data3 <- array(c(10, 40, 50, 5, 10, 20, 40, 10, 0, 45, 40, 30),
dim = c(2, 2, 3),
dimnames = list(
Merokok = c(“Ya”, “Tidak”),
Kanker = c(“Ya”, “Tidak”),
Usia = c(“Muda”, “Dewasa”, “Tua”)
))
# Hitung probabilitas bersama
total <- sum(data3)
joint_prob <- data3 / total
# Hitung probabilitas marginal
marginal_X <- apply(joint_prob, 1, sum)
marginal_Z <- apply(joint_prob, 3, sum)
# Tampilkan hasil
marginal_X
Tabel parsial adalah tabel dua arah antara dua variabel untuk setiap level dari variabel ketiga. Ini sangat penting untuk mengevaluasi interaksi atau pengaruh pengganggu (confounding).
Contoh:
Jika variabel ketiga adalah Z (penyakit jantung: ya/tidak), maka kita dapat melihat dua tabel:
Tabel X × Y untuk Z = “ya”
Tabel X × Y untuk Z = “tidak”
Dengan membandingkan hasil dalam tabel parsial, kita bisa mendeteksi konsistensi hubungan antar variabel di seluruh strata atau apakah ada efek Simpson (perubahan arah asosiasi setelah stratifikasi).
Mengapa Penting?
Tabel marginal mungkin menunjukkan asosiasi antara dua variabel yang tidak benar-benar ada setelah dikontrol terhadap variabel ketiga.
Tabel parsial memungkinkan kita mengevaluasi apakah hubungan antara dua variabel terganggu (confounded) atau dimoderasi oleh variabel ketiga.
data3 <- array(c(1)
dim = c(),
dimnames = list(
#Contoh
Merokok = c(“Ya”, “Tidak”),
Kanker = c(“Ya”, “Tidak”),
Usia = c(“Muda”, “Dewasa”, “Tua”)
))
# Ekstrak tabel parsial berdasarkan usia
freq_parsial_muda <- data3[, , “Muda”]
freq_parsial_dewasa <- data3[, , “Dewasa”]
freq_parsial_tua <- data3[, , “Tua”]
# Tampilkan hasil
freq_parsial_muda
Dalam tabel kontingensi tiga arah, kita dapat mendefinisikan berbagai jenis distribusi peluang untuk memahami bagaimana ketiga variabel berinteraksi. Distribusi ini penting untuk menguji independensi, asosiasi bersyarat, dan untuk membangun model probabilitas dalam data kategorik kompleks.
Distribusi bersama dalam konteks tiga variabel kategorik X,Y,ZX, Y, adalah:
di mana:
nijk: frekuensi observasi pada kategori ke-i,j,k
n: total observasi.
Distribusi ini menggambarkan peluang untuk kombinasi spesifik dari ketiga variabel.
Distribusi marginal diperoleh dengan menjumlahkan distribusi bersama atas satu atau dua variabel.
Contoh:
Marginal dua variabel (misal X dan Y):
Distribusi marginal berguna untuk melihat kecenderungan umum tanpa mempertimbangkan semua hubungan tiga arah.
Distribusi bersyarat melihat peluang dua variabel dengan tetap menjaga satu variabel tetap.
Contoh:
Distribusi bersyarat dari X dan Y diberikan Z=k:
Distribusi ini menjadi dasar untuk tabel parsial dan pengujian independensi bersyarat, yang dibahas lebih dalam pada subbab selanjutnya.
Kadang-kadang kita tertarik pada distribusi satu variabel, diberikan satu variabel lain, tanpa mempertimbangkan variabel ketiga secara eksplisit.
Contoh:
Distribusi X∣Y=j, di mana variabel Z dimarginalkan:
Manfaat Analisis Distribusi Peluang dalam Tiga Arah
Bisa jadi tidak ada hubungan pada tabel marginal, tetapi hubungan muncul setelah stratifikasi berdasarkan variabel ketiga.
Mengevaluasi Asosiasi Bersyarat dan Efek Confounding.
Mempersiapkan Analisis Lebih Lanjut:
Seperti uji independensi bersyarat atau log-linear model.
Tabel peluang bersyarat digunakan untuk menginvestigasi hubungan antara dua variabel ketika kita mengendalikan (mengkondisikan) pada kategori dari variabel ketiga. Ini sangat penting dalam analisis data kategori tiga arah, karena hubungan yang tampak antara dua variabel bisa berubah atau bahkan berbalik ketika kita memperhitungkan variabel ketiga (fenomena ini dikenal sebagai paradoks Simpson).
Definisi Peluang Bersyarat
Untuk tiga variabel kategorik X,Y,Z, kita bisa membentuk tabel peluang bersyarat P(X=i,Y=j∣Z=k) untuk setiap nilai k dari Z. Rumus umumnya:
{width="363"}
Contoh Tabel Peluang Bersyarat
Misalkan kita memiliki tiga variabel:
X: Status Merokok (Perokok, Tidak)
Y: Penyakit Jantung (Ya, Tidak)
Z: Jenis Kelamin (Pria, Wanita)
Contoh Tabel Peluang Bersyarat (Z = Pria) Merokok/Penyakit Ya Tidak Total Perokok 0.12 0.28 0.40 Tidak 0.08 0.52 0.60 Total 0.20 0.80 1.00
Tabel di atas merupakan tabel peluang bersyarat 𝑃 ( 𝑋 , 𝑌 ∣ 𝑍 = Pria ) P(X,Y∣Z=Pria).
Menggunakan Tabel Peluang Bersyarat Identifikasi Hubungan Bersyarat Periksa apakah hubungan antara X dan Y tetap konsisten dalam setiap strata Z.
Uji Independensi Bersyarat Jika X dan Y independen setelah dikondisikan pada Z, maka berlaku:
𝑃 ( 𝑋 = 𝑖 , 𝑌 = 𝑗 ∣ 𝑍 = 𝑘 ) = 𝑃 ( 𝑋 = 𝑖 ∣ 𝑍 = 𝑘 ) ⋅ 𝑃 ( 𝑌 = 𝑗 ∣ 𝑍 = 𝑘 ) P(X=i,Y=j∣Z=k)=P(X=i∣Z=k)⋅P(Y=j∣Z=k) Deteksi Efek Confounding Jika terdapat perbedaan antara hubungan marginal dan hubungan bersyarat, maka Z merupakan variabel pengganggu (confounder).
Interpretasi Praktis Jika peluang bersyarat berbeda jauh dari peluang marginal, maka Z memengaruhi hubungan antara X dan Y.
Jika tidak ada perbedaan besar, maka analisis bisa disederhanakan dengan tabel dua arah saja.
7.4 Ukuran Asosiasi Ukuran asosiasi digunakan untuk mengevaluasi kekuatan dan arah hubungan antara dua variabel kategorik pada setiap level variabel ketiga (Z).
Risk Difference (RD)
Relative Risk (RR)
Odds Ratio (OR)
Jika OR relatif sama → gunakan model efek tetap.
Jika OR berbeda → perlu model kompleks (misal: log-linear atau regresi logistik interaktif).
𝑂 𝑅 𝑍 = 𝑧 = 𝑃 11 𝑧 ⋅ 𝑃 22 𝑧 𝑃 12 𝑧 ⋅ 𝑃 21 𝑧 OR Z=z = P 12z ⋅P 21z
P 11z ⋅P 22z
Jika OR konsisten di seluruh strata, maka hubungan antara X dan Y stabil.
Gamma, Kendall’s Tau-b, Somers’ D: Cocok untuk data ordinal
Pastikan tiap strata Z memiliki ukuran sampel yang cukup besar.
7.4.1 Tabel Kontingensi Parsial Tabel kontingensi parsial menunjukkan hubungan X dan Y setelah mengendalikan Z.
Contoh Z = Pria Merokok/Penyakit Ya Tidak Total Perokok 0.12 0.28 0.40 Tidak 0.08 0.52 0.60 Total 0.20 0.80 1.00
Z = Wanita Merokok/Penyakit Ya Tidak Total Perokok 0.10 0.20 0.30 Tidak 0.05 0.65 0.70 Total 0.15 0.85 1.00
Fungsi dan Tujuan Evaluasi Variabel Ketiga (Z) Apakah hubungan X dan Y berubah pada tiap level Z?
Deteksi Confounding Jika hubungan berubah setelah kontrol Z, maka Z adalah confounder.
Penilaian Homogenitas Efek Apakah hubungan X dan Y homogen atau heterogen di berbagai strata?
Langkah-Langkah Menyusun Tabel Kontingensi Parsial Pisahkan data berdasarkan kategori Z
Buat tabel kontingensi X vs Y untuk setiap strata Z
Hitung peluang bersyarat
Analisis apakah pola asosiasi tetap konsisten antar strata
Contoh Perhitungan di R r Salin Edit data <- matrix(c(10, 40, 5, 45), nrow = 2, byrow = TRUE) rownames(data) <- c(“Merokok”, “Tidak”) colnames(data) <- c(“Kanker”, “Tidak Kanker”) data
p1 <- data[1, 1] / sum(data[1, ]) p2 <- data[2, 1] / sum(data[2, ]) RD <- p1 - p2 RD
RR <- p1 / p2 RR
odds1 <- data[1, 1] / data[1, 2] odds2 <- data[2, 1] / data[2, 2] OR <- odds1 / odds2 OR 7.5 Conditional Independence Conditional independence menyatakan bahwa dua variabel X dan Y menjadi independen setelah mengontrol Z.
Notasi Matematika 𝑋 ⊥ 𝑌 ∣ 𝑍 X⊥Y∣Z Artinya, setelah mengetahui Z, informasi tentang X tidak menambah informasi tentang Y.
Contoh Aplikasi Sebelum kontrol Z (Umur): Merokok dan jantung berhubungan.
Setelah kontrol Z: Hubungan hilang → berarti umur adalah confounder.
Pengujian Conditional Independence Uji Chi-Square dalam tabel kontingensi tiga arah
Model Regresi Logistik atau Path Analysis
Langkah Uji Conditional Independence Tentukan X, Y, dan Z
Susun tabel kontingensi atau model
Lakukan uji chi-square atau regresi
Interpretasi hasil: jika X ⊥ Y | Z → tidak ada hubungan langsung antara X dan Y setelah kontrol Z
Manfaat dalam Praktik Mengurangi bias
Menyederhanakan model
Mendukung analisis kausal
Kesimpulan Conditional independence adalah alat penting untuk memahami hubungan antar variabel setelah mempertimbangkan pengaruh variabel ketiga. Ini mendukung analisis yang lebih akurat dan inferensi yang lebih valid dalam penelitian.
Marginal dalam konteks tabel kontingensi merujuk pada distribusi atau proporsi dari masing-masing variabel secara terpisah, tanpa mempertimbangkan hubungan atau ketergantungan antar variabel. Pada tabel kontingensi, marginal mengacu pada distribusi dari setiap variabel dalam tabel, yang dihitung dengan menjumlahkan nilai-nilai dalam baris atau kolom yang relevan.
Secara sederhana, marginal memberikan gambaran mengenai distribusi variabel yang lebih luas tanpa melihat keterkaitan atau asosiasi dengan variabel lain. Untuk variabel Y dan X, kita akan menghitung distribusi marginal untuk masing-masing dengan cara menjumlahkan nilai-nilai yang ada pada tabel kontingensi yang berhubungan dengan Y dan X.
1. Marginal dari Variabel Y
Distribusi marginal untuk Y (dalam tabel kontingensi 2x2 atau lebih) dihitung dengan cara menjumlahkan semua nilai pada kolom yang relevan untuk variabel Y. Ini akan memberikan gambaran umum tentang sebaran nilai dari variabel Y secara keseluruhan.
Misalnya, dalam tabel kontingensi 2x2:
| X/Y | A | B | Total |
|---|---|---|---|
| 1 | 20 | 30 | 50 |
| 2 | 40 | 60 | 100 |
| Total | 60 | 90 | 150 |
Untuk mendapatkan distribusi marginal dari Y, kita menjumlahkan angka dalam setiap kolom (untuk setiap nilai Y):
Marginal untuk Y=A: 20 + 40 = 60
Marginal untuk Y=B: 30 + 60 = 90
Jadi, distribusi marginal untuk Y adalah 60 untuk Y=A dan 90 untuk Y=B.
2. Marginal dari Variabel X
Distribusi marginal untuk X dihitung dengan cara menjumlahkan nilai-nilai dalam setiap baris pada tabel kontingensi yang relevan untuk variabel X. Ini memberikan gambaran tentang distribusi dari variabel X secara keseluruhan, tanpa mempertimbangkan variabel Y.
Dari tabel di atas, distribusi marginal untuk X dihitung dengan cara menjumlahkan nilai-nilai dalam setiap baris:
Marginal untuk X=1: 20 + 30 = 50
Marginal untuk X=2: 40 + 60 = 100
Jadi, distribusi marginal untuk X adalah 50 untuk X=1 dan 100 untuk X=2.
3. Proporsi Marginal
Seringkali, kita juga tertarik untuk menghitung proporsi marginal, yaitu proporsi dari total keseluruhan yang dijelaskan oleh distribusi marginal dari X dan Y. Untuk menghitung proporsi marginal, kita menggunakan rumus berikut:
Dan untuk X:
Menggunakan tabel di atas:
Proporsi marginal P(Y=A)=0.4
Proporsi marginal P(Y=B)=0.6
Proporsi marginal P(X=1)=0.33
Proporsi marginal P(X=2)=0.67
4. Interpretasi dan Penggunaan
Marginal dari X dan Y memberikan pemahaman tentang distribusi variabel secara keseluruhan.
Marginal dapat digunakan untuk menghitung probabilitas bersyarat, jika kita ingin menguji asosiasi atau ketergantungan antara X dan Y. Dalam hal ini, kita bisa menggunakan rumus probabilitas bersyarat berdasarkan distribusi marginal.
Marginal sangat berguna dalam model regresi logistik, di mana kita tertarik pada probabilitas tertentu dari satu variabel kategori, mengingat variabel kategori lainnya.
5. Perbedaan antara Marginal dan Bersyarat
Perbedaan utama antara marginal dan bersyarat adalah bahwa marginal menghitung distribusi dari satu variabel tanpa mempertimbangkan ketergantungan dengan variabel lainnya. Sementara itu, distribusi bersyarat menghitung distribusi suatu variabel dengan mempertimbangkan ketergantungan pada variabel lain.
Sebagai contoh:
Marginal dari X hanya memberi kita gambaran tentang distribusi X, tanpa mempertimbangkan hubungan dengan Y.
Distribusi bersyarat dari X given Y akan memberi kita distribusi X hanya dalam konteks Y.
Kesimpulan
Distribusi marginal sangat penting dalam analisis data kategori karena memberikan gambaran umum mengenai sebaran variabel, baik X maupun Y, secara independen. Ini adalah langkah pertama yang penting dalam memahami data dan membantu kita dalam menghitung probabilitas bersyarat serta memahami ketergantungan antara variabel.
Inferensi statistik pada tabel kontingensi tiga arah merupakan perluasan dari konsep inferensi dua arah, namun dengan mempertimbangkan satu variabel tambahan yang memungkinkan eksplorasi hubungan yang lebih kompleks, terutama terkait asosiasi bersyarat dan interaksi antarvariabel.
Tabel tiga arah memungkinkan kita menjawab pertanyaan seperti:
Apakah hubungan antara dua variabel tetap konsisten di semua level variabel ketiga?
Apakah terdapat efek pengganggu (confounding) atau variabel perantara (mediator) yang memengaruhi hubungan utama?
Independensi bersyarat terjadi ketika dua variabel independen satu sama lain jika dikondisikan pada variabel ketiga. Dalam notasi probabilitas:
artinya, variabel X dan Y adalah independen secara bersyarat terhadap Z, atau distribusi gabungan dari X dan Y untuk setiap level Z tidak menunjukkan asosiasi.
Misalkan kita memiliki tiga variabel:
X: Status Merokok (Perokok / Tidak)
Y: Penyakit Jantung (Ada / Tidak)
Z: Usia (Muda / Tua)
Jika ternyata hubungan antara merokok dan penyakit jantung berbeda tergantung pada usia, maka kita perlu menyelidiki apakah ada independensi bersyarat antara X dan Y pada masing-masing kategori Z.
Untuk menguji independensi bersyarat dalam tabel kontingensi tiga arah, beberapa pendekatan umum adalah:
a. Uji Chi-Square Parsial
Pisahkan data berdasarkan kategori variabel pengkondisi (misalnya Z).
Buat tabel 2×2 untuk setiap level Z, dan lakukan uji Chi-Square untuk setiap tabel parsial.
Bandingkan nilai-nilai Chi-Square dan asosiasi antar parsial.
b. Model Log-Linear
Model log-linear digunakan untuk memeriksa hubungan antara tiga atau lebih variabel kategori. Model log-linear tanpa interaksi tiga arah menunjukkan adanya independensi bersyarat.
Model:
Jika interaksi tiga arah λijkXYZ tidak signifikan, maka tidak ada interaksi kompleks hanya asosiasi dua arah yang signifikan.
c. Cochran-Mantel-Haenszel (CMH) Test
Digunakan untuk menguji apakah asosiasi antara dua variabel tetap konsisten di seluruh strata variabel ketiga.
Menghasilkan Odds Ratio gabungan dan statistik uji homogenitas.
data_cmh <- array(c(
dim = c(),
dimnames = list(
X = c(),
Y = c(),
Z = c()
))
data_cmh
cmh_base <- mantelhaen.test(data_cmh, correct = FALSE)
cmh_base
Odds Ratio (OR) mengukur kekuatan asosiasi antara dua variabel biner. Dalam konteks tabel tiga arah, kita menghitung OR pada setiap strata dari variabel ketiga.
di mana ak,bk,ck, adalah frekuensi-frekuensi dalam tabel 2×2 pada strata ke-k (untuk setiap level variabel ketiga).
Odds Ratio Gabungan (Common OR)
Bila kita berasumsi bahwa OR sama untuk semua strata, kita dapat menghitung OR gabungan menggunakan rumus Cochran-Mantel-Haenszel:
Di mana nk=ak+bk+ck+dk adalah total pada strata ke-k.
Uji Breslow-Day digunakan untuk memeriksa apakah OR pada masing-masing strata homogen (konsisten) atau berbeda secara signifikan antar strata.
Hipotesis nol (H₀): OR di semua strata adalah sama (homogen).
Hipotesis alternatif (H₁): Terdapat perbedaan OR antar strata.
Langkah Uji:
Hitung OR pada masing-masing strata.
Hitung OR gabungan.
Gunakan rumus statistik Breslow-Day:
{width="143"}
Interpretasi:
Jika p-value < 0,05 → Tolak H₀ → Terdapat heterogenitas OR → Pengaruh variabel ketiga signifikan.
Jika p-value ≥ 0,05 → Gagal tolak H₀ → OR dianggap homogen → Pengaruh variabel ketiga tidak signifikan.
Kesimpulan
Inferensi dalam tabel kontingensi tiga arah sangat penting dalam analisis data kategori karena:
Memungkinkan pemahaman yang lebih dalam terhadap hubungan kompleks antar variabel.
Dapat mengungkap efek pengganggu atau interaksi tersembunyi.
Memberikan landasan bagi model statistik yang lebih lanjut, seperti regresi logistik multivariat.
Contoh Soal:
Sebuah penelitian dilakukan untuk melihat apakah ada hubungan antara jenis kelamin, status merokok, dan status diabetes di kalangan 200 mahasiswa. Data yang diperoleh adalah sebagai berikut:
| Merokok | Tidak Merokok | Total | |
|---|---|---|---|
| Laki-laki, Diabetes | 15 | 35 | 50 |
| Laki-laki, Tidak Diabetes | 25 | 25 | 50 |
| Perempuan, Diabetes | 10 | 40 | 50 |
| Perempuan, Tidak Diabetes | 30 | 20 | 50 |
| Total | 80 | 120 | 200 |
Tujuan penelitian adalah untuk menguji apakah ada hubungan terkondisi antara jenis kelamin, status merokok, dan status diabetes menggunakan uji Independensi Bersyarat (Conditional Independence) dalam Tabel Kontingensi Tiga Arah.
Langkah-langkah Penyelesaian:
1. Menyusun Hipotesis
Hipotesis nol (H0): Jenis kelamin dan status merokok independen setelah mengontrol status diabetes.
Hipotesis alternatif (H1): Jenis kelamin dan status merokok bergantung setelah mengontrol status diabetes.
2. Menyusun Tabel Kontingensi untuk Tiga Variabel
Tabel yang diberikan di atas sudah memuat distribusi data untuk tiga variabel: jenis kelamin, status merokok, dan status diabetes.
3. Menentukan Frekuensi yang Diharapkan
Frekuensi yang diharapkan untuk setiap sel dihitung dengan rumus:
Dengan Eijk adalah frekuensi yang diharapkan untuk kombinasi tiga variabel.
4. Menghitung Uji Chi-Square untuk Ketiga Variabel
Setelah menghitung frekuensi yang diharapkan, kita menghitung uji Chi-Square untuk setiap sel dan mengumpulkan hasilnya untuk menghitung nilai Chi-Square total untuk tabel ini.
5. Derajat Kebebasan
Derajat kebebasan dihitung menggunakan rumus:
df=(r−1)(c−1)(d−1)
r adalah jumlah kategori jenis kelamin,
c adalah jumlah kategori status merokok,
d adalah jumlah kategori status diabetes.
Pada contoh ini, kita memiliki 2 kategori untuk jenis kelamin (Laki-laki dan Perempuan), 2 kategori untuk status merokok (Merokok dan Tidak Merokok), dan 2 kategori untuk status diabetes (Diabetes dan Tidak Diabetes).
df=(2−1)(2−1)(2−1)=1
Untuk uji Chi-Square dengan derajat kebebasan df=1df = 1df=1 dan tingkat signifikansi 0.05, nilai kritis dari tabel Chi-Square adalah 3.841.
7. Membandingkan Nilai Chi-Square
Setelah menghitung nilai Chi-Square untuk data yang diberikan, kita akan membandingkannya dengan nilai kritis 3.841. Jika nilai Chi-Square yang dihitung lebih besar dari nilai kritis, maka kita akan menolak hipotesis nol (H0).
8. Kesimpulan
Jika nilai χ2 yang dihitung lebih besar dari nilai kritis, maka kita menolak hipotesis nol dan menyimpulkan bahwa ada hubungan yang signifikan antara jenis kelamin, status merokok, dan status diabetes.
Generalized Linear Model (GLM) adalah kerangka kerja statistik yang memperluas model regresi linear biasa dengan memungkinkan respons berasal dari keluarga distribusi eksponensial dan menghubungkan nilai harapan variabel respons dengan prediktor melalui fungsi hubungan (link function).
GLM sangat penting dalam analisis data kategori karena mencakup:
Model regresi logistik untuk data biner,
Model regresi Poisson untuk data hitungan.
Distribusi dalam keluarga eksponensial dapat dituliskan dalam bentuk umum:
Komponen penting:
y : variabel respons
θ: parameter kanonik (canonical parameter)
ϕ: parameter skala (scale)
a(ϕ),b(θ),c(y,ϕ): fungsi tertentu tergantung distribusi
Contoh distribusi dalam exponential family:
| Distribusi | Fungsi Link Kananonik | Tipe Data |
| Binomial | Logit | Biner |
| Poisson | Log | Hitungan |
| Normal | Identitas | Kontinu |
| Gamma | Invers | Positif |
Model regresi logistik digunakan saat variabel respons bersifat biner (misal: 0 atau 1, sukses/gagal). Dalam konteks GLM:
Distribusi: Binomial
Fungsi hubungan: Logit
Model Logistik Biner:
atau:
Interpretasi Koefisien:
βjj: perubahan log-odds untuk peningkatan satu unit pada xj, dengan variabel lain tetap
eβj: odds ratio yang terkait dengan xj.
Contoh Aplikasi:
Studi hubungan antara merokok (x1x1) dan kemungkinan kanker paru (Y):
Jika β1>0, maka perokok memiliki peluang lebih besar terkena kanker paru.
Pengujian Signifikansi:
Uji Wald:
Uji Likelihood Ratio: bandingkan deviance model penuh dan model terbatas
Goodness of Fit:
Deviance Residuals
AIC / BIC
ROC Curve dan AUC
# Visualisasi plot(x, y, pch = 16, col = “gray60”, xlab = “X”, ylab = “Y / Probabilitas”, main = “Simulasi Regresi Logistik dengan Kurva Sigmoid”) lines(x, prob, col = “blue”, lwd = 2) abline(h = 0.5, col = “red”, lty = 2) legend(“topleft”, legend = c(“Data Biner (0/1)”, “Kurva Logistik”, “Ambang 0.5”), col = c(“gray60”, “blue”, “red”), pch = c(16, NA, NA), lty = c(NA, 1, 2), lwd = c(NA, 2, 1), pt.cex = 1.5, bty = “n”)
##Estimasi Regresi Logistik Estimasi parameter model regresi logistik dapat menggunakan ‘glm’ function model <- glm(y ~ x, data = data, family = binomial) summary(model)
Model regresi Poisson digunakan ketika variabel respons adalah data hitungan (non-negatif, integer), seperti jumlah kejadian dalam periode waktu atau ruang.
Model Poisson:
Distribusi: Poisson
Fungsi hubungan: log
atau:
di mana μi=E(Yi), nilai harapan dari jumlah kejadian pada unit ke-i.
Sifat Penting:
Varian = Mean (Var(Yi)=μi)
Jika data menunjukkan overdispersion (varian > mean), gunakan model Quasi-Poisson atau Negative Binomial
Contoh:
Analisis jumlah kecelakaan di jalan tol berdasarkan jumlah kendaraan:
Evaluasi Model:
Uji signifikansi parameter (Wald / Likelihood Ratio)
Uji goodness of fit (Deviance, Pearson chi-square)
Cek overdispersion
Kesimpulan :
GLM memberikan kerangka fleksibel untuk:
Menganalisis data biner dan hitungan,
Menangani hubungan non-linear antara prediktor dan respons,
Menerapkan berbagai fungsi link yang sesuai dengan struktur data.
set.seed(42)
n <- 200
x <- rnorm(n)
lambda <- exp(0.3 + 0.6 * x)
y <- rpois(n, lambda)
data <- data.frame(y, x)
##Estimasi Regresi Poisson
poisson_model <- glm(y ~ x, data = data, family = poisson)
summary(poisson_model)
##
## Call:
## glm(formula = y ~ x, family = poisson, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.21817 0.06712 3.250 0.00115 **
## x 0.58748 0.06288 9.343 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 333.72 on 199 degrees of freedom
## Residual deviance: 244.46 on 198 degrees of freedom
## AIC: 587.36
##
## Number of Fisher Scoring iterations: 5
Contoh Soal:
Sebuah studi dilakukan untuk memodelkan status merokok di antara individu yang bergantung pada jenis kelamin dan usia. Variabel dependen adalah status merokok (merokok atau tidak merokok), dan variabel independen adalah jenis kelamin (laki-laki atau perempuan) dan usia (kategori: muda (18-30 tahun), dewasa (31-50 tahun), tua (>50 tahun)).
Diberikan data berikut untuk 200 individu:
| Jenis Kelamin | Usia | Status Merokok | Jumlah Individu |
|---|---|---|---|
| Laki-laki | Muda | Merokok | 40 |
| Laki-laki | Muda | Tidak Merokok | 10 |
| Laki-laki | Dewasa | Merokok | 35 |
| Laki-laki | Dewasa | Tidak Merokok | 15 |
| Laki-laki | Tua | Merokok | 20 |
| Laki-laki | Tua | Tidak Merokok | 5 |
| Perempuan | Muda | Merokok | 30 |
| Perempuan | Muda | Tidak Merokok | 20 |
| Perempuan | Dewasa | Merokok | 25 |
| Perempuan | Dewasa | Tidak Merokok | 25 |
| Perempuan | Tua | Merokok | 10 |
| Perempuan | Tua | Tidak Merokok | 5 |
Tujuan:
Gunakan model regresi logistik untuk memprediksi status merokok berdasarkan jenis kelamin dan usia. Tentukan apakah jenis kelamin dan usia berpengaruh signifikan terhadap status merokok.
Langkah-langkah Penyelesaian:
1. Menyusun Model Regresi Logistik
Regresi logistik digunakan karena variabel dependen (status merokok) adalah variabel biner (merokok atau tidak merokok). Model regresi logistik untuk data ini adalah:
Dimana:
P(Merokok) adalah probabilitas seseorang merokok,
Jenis Kelamin adalah variabel dummy (1 jika laki-laki, 0 jika perempuan),
Usia adalah variabel dummy (1 jika dewasa, 0 jika muda, dan 2 jika tua).
2. Menyusun Data dan Memasukkan ke Model
Sebelum analisis, data perlu diubah menjadi format yang sesuai. Misalnya, kita membuat variabel dummy untuk jenis kelamin dan usia:
| Jenis Kelamin | Usia Muda | Usia Dewasa | Usia Tua | Status Merokok |
|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 0 | 1 | 0 |
3. Menentukan Variabel Dependen dan Independen
Variabel dependen (Y): Status merokok (1 = merokok, 0 = tidak merokok),
Variabel independen (X): Jenis kelamin (1 = laki-laki, 0 = perempuan), Usia (Muda, Dewasa, Tua).
4. Menjalankan Regresi Logistik di R
Kita akan menggunakan fungsi glm() di R untuk memodelkan
regresi logistik. Berikut sintaks untuk regresi logistik:
r
# Membaca data data <- data.frame
( jenis_kelamin = c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), usia_muda = c(1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0),
usia_dewasa = c(0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0),
usia_tua = c(0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1),
status_merokok = c(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0) )
# Model regresi logistik
model <- glm(status_merokok ~ jenis_kelamin + usia_muda + usia_dewasa + usia_tua,
family = binomial(link = "logit"), data = data)
# Melihat hasil model
summary(model)
5. Interpretasi Hasil Model
Output dari fungsi summary(model) akan memberikan hasil
seperti berikut:
r
Coefficients: Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.7183 0.5534 -1.298 0.1943
jenis_kelamin 1.2045 0.5487 2.195 0.0282 *
usia_muda 0.4208 0.5564 0.756 0.4500
usia_dewasa 0.8424 0.5378 1.567 0.1173
usia_tua 0.2652 0.6302 0.421 0.6731
Interpretasi koefisien:
Jenis Kelamin (laki-laki): Koefisien positif (1.2045) menunjukkan bahwa laki-laki cenderung lebih mungkin merokok dibandingkan perempuan, dengan nilai p = 0.0282, yang lebih kecil dari 0.05, sehingga signifikan.
Usia Muda, Dewasa, dan Tua: Koefisien untuk usia tidak signifikan (nilai p lebih besar dari 0.05), menunjukkan bahwa usia tidak berpengaruh signifikan terhadap status merokok.
6. Menarik Kesimpulan
Berdasarkan hasil analisis regresi logistik, jenis kelamin berpengaruh signifikan terhadap status merokok. Laki-laki lebih mungkin merokok daripada perempuan. Sementara itu, usia tidak berpengaruh signifikan terhadap status merokok dalam model ini.
Bab ini membahas teknik inferensi statistik dalam kerangka Generalized Linear Model (GLM), termasuk bagaimana mencari ekspektasi dan varians, metode estimasi parameter, dan evaluasi kesesuaian model melalui teknik diagnostik.
Dalam GLM, ekspektasi dan varians dari variabel respons Yi bergantung pada fungsi hubungan dan distribusi yang digunakan.
Ekspektasi:
Varians:
V(μi): fungsi varians tergantung pada distribusi.
ϕ: parameter dispersi (untuk Binomial dan Poisson, biasanya ϕ=1).
Maximum Likelihood Estimation (MLE):
Metode paling umum dalam GLM adalah penaksiran peluang maksimum. Prosesnya melibatkan:
Menyusun fungsi log-likelihood.
Menghitung turunan pertama dan kedua.
Mencari nilai parameter β^ yang memaksimalkan log-likelihood.
Solusi diperoleh dengan iterasi numerik, terutama Iteratively Reweighted Least Squares (IRLS).
Asimtotik Estimator:
Estimator MLE bersifat tak bias asimtotik dan konsisten.
Variansi kovariansi dari estimator dihitung menggunakan informasi Fisher.
Evaluasi kesesuaian model GLM dapat dilakukan dengan:
1. Deviance:
Bandingkan antara model penuh dan model terbatas.
Nilai deviance yang besar menunjukkan lack of fit.
2. Pearson Residual:
3. Leverage dan Influential Observations:
Gunakan nilai leverage (hat matrix).
Gunakan Cook’s distance untuk mendeteksi observasi berpengaruh besar.
Untuk model regresi logistik:
Log-likelihood Function:
dengan
Fungsi Skor
Estimasi parameter diperoleh dengan menyelesaikan:
U(β)=0
secara numerik (IRLS).
Inferensi:
Uji Wald:
set.seed(123)
n <- 100
x <- rnorm(n)
log_odds <- -0.5 + 1.2 * x
p <- 1 / (1 + exp(-log_odds))
y <- rbinom(n, 1, p)
data <- data.frame(x, y)
model <- glm(y ~ x, data = data, family = binomial)
summary(model)
beta_hat <- coef(model)[“x”]
se_beta <- summary(model)$coefficients[“x”, “Std. Error”]
Z <- beta_hat / se_beta
Z
Wald_stat <- Z^2
Wald_stat
p_value <- 1 - pchisq(Wald_stat, df = 1)
p_value
Uji Likelihood Ratio: bandingkan model penuh vs model tanpa prediktor tertentu.
anova(model_null, model, test = “Chisq”)
{width="148"}
Evaluasi:
ROC Curve & AUC
Tabel klasifikasi (confusion matrix)
Hosmer-Lemeshow goodness-of-fit test
Untuk model regresi Poisson:
Log-likelihood:
dengan
Fungsi Skor
Evaluasi Overdispersion:
Jika varian > mean → gunakan:
Model Quasi-Poisson
Model Negative Binomial
Inferensi:
Sama seperti regresi logistik: Wald, Likelihood Ratio, CI
Diagnostik menggunakan residual Pearson, deviance
Kesimpulan :
Inferensi dalam GLM mencakup:
Estimasi parameter via MLE,
Uji statistik dan CI untuk koefisien,
Diagnostik model untuk menilai kesesuaian,
Perhatian khusus pada overdispersion dalam model Poisson.
set.seed(123)
n <- 100
x <- rnorm(n)
X <- cbind(1, x) # Tambah intercept
beta_true <- c(0.5, 0.8)
beta <- X %*% beta_true
lambda <- exp(eta)
y <- rpois(n, lambda)
# 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
model_glm <- glm(y ~ x, family = poisson)
summary(model_glm)
Contoh Soal:
Seorang peneliti ingin mengetahui pengaruh status sosial ekonomi (SES) dan jenis kelamin terhadap kemungkinan seorang mahasiswa memiliki prestasi akademik tinggi (IPK ≥ 3.5).
Data Ringkasan:
| SES | Jenis Kelamin | Tinggi (IPK ≥ 3.5) | Tidak Tinggi (IPK < 3.5) | Total |
|---|---|---|---|---|
| Rendah | Laki-laki | 5 | 20 | 25 |
| Rendah | Perempuan | 10 | 15 | 25 |
| Menengah | Laki-laki | 15 | 10 | 25 |
| Menengah | Perempuan | 20 | 5 | 25 |
| Tinggi | Laki-laki | 25 | 5 | 30 |
| Tinggi | Perempuan | 28 | 2 | 30 |
Pertanyaan:
Bentuklah model regresi logistik biner untuk memprediksi kemungkinan prestasi tinggi dari SES dan jenis kelamin.
Hitung estimasi koefisien (dengan metode iteratif: Newton-Raphson).
Lakukan uji signifikansi parameter.
Evaluasi fit model secara umum.
Langkah Penyelesaian (Manual per Langkah):
1. Menentukan Model
Model regresi logistik biner:
Referensi SES: “Rendah”
Referensi Jenis Kelamin: “Perempuan”
Dummy:
SES_Menengah = 1 jika menengah, 0 lainnya.
SES_Tinggi = 1 jika tinggi, 0 lainnya.
LakiLaki = 1 jika laki-laki, 0 jika
perempuan.
2. Menyusun Matriks Data (agregat):
| SES | Gender | Y (Tinggi) | n | p̂ (proporsi) |
|---|---|---|---|---|
| Rendah | Laki-laki | 5 | 25 | 0.20 |
| Rendah | Perempuan | 10 | 25 | 0.40 |
| Menengah | Laki-laki | 15 | 25 | 0.60 |
| Menengah | Perempuan | 20 | 25 | 0.80 |
| Tinggi | Laki-laki | 25 | 30 | 0.833 |
| Tinggi | Perempuan | 28 | 30 | 0.933 |
3. Estimasi Awal dan Transformasi
Estimasi awal dapat dilakukan via transformasi logit:
Contoh untuk kelompok Rendah – Laki-laki:
Hitung semua nilai logit sebagai estimasi awal (jika dilakukan manual), lalu lakukan iterasi Newton-Raphson (bisa dihitung di software atau program).
4. Estimasi dengan R (dapat dicontohkan jika mau praktis)
r
# Membuat data data <- data.frame( SES = factor(rep(c("Rendah", "Menengah", "Tinggi"), each = 2)),
Gender = factor(rep(c("Laki-laki", "Perempuan"), 3)),
Tinggi = c(5, 10, 15, 20, 25, 28),
TidakTinggi = c(20, 15, 10, 5, 5, 2) )
# Model logistik
model <- glm(cbind(Tinggi, TidakTinggi) ~ SES + Gender,
family = binomial, data = data) summary(model)
5. Interpretasi Hasil
Misalkan hasilnya:
r
Coefficients: Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.4055 0.2234 -1.815 0.0695
SESMenengah 1.3863 0.3162 4.384 1.2e-05
SESTinggi 2.1972 0.3612 6.083 < 2e-16
GenderLaki-laki -0.6931 0.2810 -2.466 0.0137
Koefisien SES Menengah dan Tinggi positif dan signifikan, artinya semakin tinggi SES, semakin besar kemungkinan memiliki IPK tinggi.
Koefisien Gender (laki-laki) negatif dan signifikan, artinya laki-laki cenderung memiliki kemungkinan lebih rendah dibandingkan perempuan untuk mencapai IPK tinggi.
6. Diagnostik Model
AIC rendah menunjukkan model cukup baik.
Uji deviance residuals dan Pearson residuals dapat digunakan untuk mendeteksi outlier atau ketidaksesuaian model.
r
# Diagnostik
plot(model)
residuals(model, type = "pearson")
Kesimpulan:
Model GLM regresi logistik menunjukkan bahwa status sosial ekonomi (SES) dan jenis kelamin berpengaruh signifikan terhadap prestasi akademik tinggi.
Mahasiswa dengan SES lebih tinggi memiliki probabilitas lebih besar untuk meraih IPK ≥ 3.5.
Perempuan cenderung memiliki peluang lebih besar dibandingkan laki-laki dalam mencapai prestasi tinggi, berdasarkan data ini.
Analisis Distribusi Kasus HIV Berdasarkan Jenis Kelamin di Indonesia (2008–2013)
Kasus HIV di Indonesia mengalami peningkatan yang signifikan sejak awal tahun 2000-an. Studi ini bertujuan untuk menganalisis apakah terdapat perbedaan distribusi jumlah kasus HIV berdasarkan jenis kelamin (laki-laki dan perempuan) dari tahun 2008 hingga 2013. Perbedaan ini penting untuk mengetahui apakah jenis kelamin berperan dalam distribusi kasus HIV, yang dapat memengaruhi kebijakan kesehatan masyarakat yang lebih terfokus.
Human Immunodeficiency Virus (HIV) merupakan salah satu isu kesehatan global yang hingga kini masih menjadi tantangan serius, termasuk di Indonesia. Sejak pertama kali ditemukan, HIV telah merenggut jutaan jiwa dan mempengaruhi berbagai aspek kehidupan, mulai dari kesehatan, ekonomi, hingga sosial masyarakat. Di Indonesia, penyebaran HIV mengalami peningkatan yang cukup signifikan sejak awal tahun 2000-an, seiring dengan semakin membaiknya sistem pelaporan dan meningkatnya kesadaran masyarakat terhadap penyakit ini.
HIV ditularkan melalui berbagai cara, seperti hubungan seksual tanpa pelindung, penggunaan jarum suntik tidak steril, serta dari ibu ke anak selama kehamilan, persalinan, atau menyusui. Dalam konteks sosial budaya di Indonesia, penyebaran HIV sering kali dikaitkan dengan perilaku berisiko tinggi, stigma terhadap kelompok rentan, serta kurangnya edukasi dan akses terhadap layanan kesehatan yang memadai. Pemerintah Indonesia, melalui Kementerian Kesehatan, telah melakukan berbagai upaya pencegahan dan penanggulangan HIV/AIDS, salah satunya dengan meningkatkan pencatatan dan pelaporan kasus.
Berdasarkan data dari Direktorat Jenderal Pengendalian Penyakit dan Penyehatan Lingkungan, jumlah kasus HIV yang dilaporkan meningkat tajam antara tahun 2008 hingga 2013. Namun, untuk merancang kebijakan penanggulangan yang efektif, penting untuk memahami bagaimana karakteristik distribusi kasus HIV di masyarakat, termasuk berdasarkan jenis kelamin. Secara umum, data global menunjukkan bahwa laki-laki cenderung memiliki prevalensi HIV yang lebih tinggi, terutama pada kelompok usia produktif. Namun, dinamika lokal seperti budaya, akses layanan kesehatan, dan faktor sosial ekonomi dapat memengaruhi tren ini.
Jenis kelamin adalah salah satu variabel penting dalam analisis epidemiologi karena dapat mencerminkan perbedaan perilaku, akses terhadap informasi kesehatan, serta paparan terhadap risiko. Oleh karena itu, kajian mengenai distribusi kasus HIV berdasarkan jenis kelamin di Indonesia dapat memberikan wawasan penting tentang apakah ada ketimpangan atau pola tertentu yang perlu diperhatikan. Apakah laki-laki dan perempuan memiliki distribusi kasus HIV yang berbeda secara signifikan dalam kurun waktu tertentu? Pertanyaan ini menjadi relevan sebagai dasar untuk merancang strategi intervensi yang lebih terarah dan berbasis bukti.
Studi ini bertujuan untuk mengevaluasi apakah terdapat perbedaan yang signifikan secara statistik dalam jumlah kasus HIV yang dilaporkan antara laki-laki dan perempuan selama periode tahun 2008 hingga 2013. Dengan menggunakan pendekatan analisis data kategorik melalui uji Chi-Square, penelitian ini diharapkan dapat memberikan kontribusi dalam memahami dimensi gender dalam epidemiologi HIV di Indonesia. Temuan dari penelitian ini juga dapat memberikan masukan bagi pemerintah dan pemangku kepentingan lainnya dalam menyusun kebijakan kesehatan yang lebih inklusif dan sensitif terhadap gender.
sumber data : Dinas Kesehatan Provinsi, 2013
# Memuat library yang diperlukan
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Membuat data berdasarkan tabel yang telah disediakan
data_jenis_kelamin <- data.frame(
Tahun = c(2008, 2009, 2010, 2011, 2012, 2013),
Laki_laki_Jumlah = c(6797, 6334, 13231, 11766, 12193, 11901),
Perempuan_Jumlah = c(3565, 3459, 8360, 9265, 9318, 8512),
Total_Jumlah = c(10362, 9793, 21591, 21031, 21511, 20413)
)
Hipotesis Nol (H0): Tidak ada perbedaan signifikan dalam distribusi kasus HIV antara laki-laki dan perempuan dari tahun 2008 hingga 2013.
Hipotesis Alternatif (H1): Ada perbedaan signifikan dalam distribusi kasus HIV antara laki-laki dan perempuan dari tahun 2008 hingga 2013.
α = 0.05
Tabel Kontingensi:
# Membuat tabel kontingensi berdasarkan jumlah kasus laki-laki dan perempuan
table_jenis_kelamin <- data_jenis_kelamin %>%
select(Tahun, Laki_laki_Jumlah, Perempuan_Jumlah) %>%
gather(key = "Jenis_Kelamin", value = "Jumlah", Laki_laki_Jumlah, Perempuan_Jumlah)
# Melihat tabel kontingensi
head(table_jenis_kelamin)
## Tahun Jenis_Kelamin Jumlah
## 1 2008 Laki_laki_Jumlah 6797
## 2 2009 Laki_laki_Jumlah 6334
## 3 2010 Laki_laki_Jumlah 13231
## 4 2011 Laki_laki_Jumlah 11766
## 5 2012 Laki_laki_Jumlah 12193
## 6 2013 Laki_laki_Jumlah 11901
Uji Chi-Square
# Menggunakan uji Chi-Square untuk melihat apakah ada perbedaan signifikan antara jenis kelamin
chi_square_test <- chisq.test(table_jenis_kelamin$Jumlah, table_jenis_kelamin$Jenis_Kelamin)
## Warning in chisq.test(table_jenis_kelamin$Jumlah,
## table_jenis_kelamin$Jenis_Kelamin): Chi-squared approximation may be incorrect
# Menampilkan hasil uji chi-square
chi_square_test
##
## Pearson's Chi-squared test
##
## data: table_jenis_kelamin$Jumlah and table_jenis_kelamin$Jenis_Kelamin
## X-squared = 12, df = 11, p-value = 0.3636
Derajat Kebebasan (df): 11
Jika p-value < 0.05, maka tolak H0 dan terima H1, yang berarti ada perbedaan signifikan.
Jika p-value ≥ 0.05, maka terima H0, yang berarti tidak ada perbedaan signifikan.
Karena p-value = 0.3636 lebih besar dari 0.05, kita tidak dapat menolak hipotesis nol (H0). Artinya, tidak ada cukup bukti untuk menyatakan bahwa distribusi kasus HIV antara laki-laki dan perempuan berbeda secara signifikan dari tahun 2008 hingga 2013.
Berdasarkan hasil analisis, jenis kelamin tidak memiliki pengaruh signifikan terhadap distribusi jumlah kasus HIV di Indonesia pada periode 2008–2013. Meskipun ada fluktuasi dalam jumlah kasus tiap tahun, perbedaan antara laki-laki dan perempuan tidak cukup signifikan untuk menjadi dasar kebijakan kesehatan masyarakat yang lebih terfokus pada jenis kelamin. Oleh karena itu, kebijakan pencegahan HIV mungkin perlu lebih memperhatikan faktor lain seperti usia, lokasi geografis, atau perilaku berisiko.
Regresi logistik adalah metode statistik yang digunakan untuk memodelkan hubungan antara variabel respons biner (dua kategori) dengan satu atau lebih variabel prediktor. Dalam praktiknya, prediktor bisa berupa data nominal, ordinal, atau rasio. Dalam bab ini, kita akan menggunakan data simulasi untuk mengeksplorasi bagaimana jenis prediktor ini dapat digunakan dalam regresi logistik, serta bagaimana perlakuan terhadap prediktor ordinal dapat memengaruhi interpretasi model.
Untuk ilustrasi, kita akan mensimulasikan sebuah dataset yang menggambarkan kemungkinan seorang mahasiswa lulus atau tidak, berdasarkan jenis kelamin (nominal), tingkat motivasi belajar (ordinal), dan IPK (rasio). Kita buat 300 pengamatan secara acak, dengan proporsi dan hubungan yang wajar berdasarkan asumsi kita.
set.seed(123)
n <- 300
jenis_kelamin <- sample(c("Pria", "Wanita"), n, replace = TRUE)
motivasi <- sample(c("Rendah", "Sedang", "Tinggi"), n, replace = TRUE, prob = c(0.3, 0.4, 0.3))
ipk <- round(runif(n, 2.0, 4.0), 2)
prob_lulus <- 0.3 +
0.2 * (jenis_kelamin == "Wanita") +
0.1 * (motivasi == "Sedang") +
0.3 * (motivasi == "Tinggi") +
0.4 * (ipk - 2) / 2
lulus <- rbinom(n, 1, prob = pmin(pmax(prob_lulus, 0), 1))
data_logistik <- data.frame(
lulus = factor(lulus, levels = c(0,1), labels = c("Tidak Lulus", "Lulus")),
jenis_kelamin = factor(jenis_kelamin),
motivasi = factor(motivasi, levels = c("Rendah", "Sedang", "Tinggi"), ordered = TRUE),
ipk = ipk
)
Sebelum melakukan analisis, penting untuk memahami karakteristik dasar dari data yang dimiliki. Kita mulai dengan melihat ringkasan statistik dari dataset, seperti distribusi variabel prediktor dan variabel respon.
library(dplyr)
summary(data_logistik)
## lulus jenis_kelamin motivasi ipk
## Tidak Lulus: 77 Pria :154 Rendah: 92 Min. :2.000
## Lulus :223 Wanita:146 Sedang:127 1st Qu.:2.470
## Tinggi: 81 Median :3.010
## Mean :2.982
## 3rd Qu.:3.490
## Max. :3.990
Dari ringkasan ini, kita dapat melihat proporsi mahasiswa yang lulus dan tidak lulus, distribusi IPK, serta jumlah pengamatan pada masing-masing kategori jenis kelamin dan motivasi belajar.
Selanjutnya, kita dapat menggunakan visualisasi untuk memahami hubungan antar variabel. Sebagai contoh, kita dapat melihat bagaimana distribusi IPK berbeda antara mahasiswa yang lulus dan tidak, serta bagaimana proporsi kelulusan berubah berdasarkan kategori motivasi dan jenis kelamin.
library(ggplot2)
# Distribusi IPK berdasarkan status kelulusan
ggplot(data_logistik, aes(x = ipk, fill = lulus)) +
geom_density(alpha = 0.5) +
labs(title = "Distribusi IPK Berdasarkan Kelulusan", x = "IPK", y = "Kepadatan")
# Proporsi kelulusan berdasarkan motivasi
ggplot(data_logistik, aes(x = motivasi, fill = lulus)) +
geom_bar(position = "fill") +
labs(title = "Proporsi Kelulusan Berdasarkan Motivasi", y = "Proporsi")
# Proporsi kelulusan berdasarkan jenis kelamin
ggplot(data_logistik, aes(x = jenis_kelamin, fill = lulus)) +
geom_bar(position = "fill") +
labs(title = "Proporsi Kelulusan Berdasarkan Jenis Kelamin", y = "Proporsi")
Visualisasi menunjukkan bahwa mahasiswa dengan IPK lebih tinggi cenderung lebih banyak yang lulus. Selain itu, terlihat bahwa motivasi yang lebih tinggi juga berkaitan dengan peluang kelulusan yang lebih tinggi. Untuk jenis kelamin, perbedaannya terlihat tidak terlalu besar, tetapi dapat dianalisis lebih lanjut melalui model.
Variabel ordinal seperti motivasi memerlukan perlakuan
khusus dalam analisis regresi logistik karena sifatnya yang berurutan
namun bukan numerik murni. Terdapat dua pendekatan utama dalam
memperlakukan variabel ordinal:
Pendekatan pertama memperlakukan variabel ordinal sebagai variabel
nominal biasa. Artinya, setiap kategori dalam variabel
motivasi diubah menjadi variabel dummy (biner), dengan
kategori referensi sebagai baseline (misalnya “Rendah”). Dengan cara
ini, model tidak mengasumsikan urutan atau jarak antar level
motivasi.
model_nominal <- glm(lulus ~ jenis_kelamin + motivasi + ipk,
data = data_logistik, family = binomial)
summary(model_nominal)
##
## Call:
## glm(formula = lulus ~ jenis_kelamin + motivasi + ipk, family = binomial,
## data = data_logistik)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.5721 0.7758 -3.316 0.000915 ***
## jenis_kelaminWanita 1.1069 0.3010 3.677 0.000236 ***
## motivasi.L 1.1877 0.3031 3.919 8.89e-05 ***
## motivasi.Q 0.2726 0.2459 1.109 0.267453
## ipk 1.1399 0.2629 4.337 1.45e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 341.72 on 299 degrees of freedom
## Residual deviance: 293.65 on 295 degrees of freedom
## AIC: 303.65
##
## Number of Fisher Scoring iterations: 5
Interpretasi hasil model:
Koefisien untuk masing-masing dummy variabel motivasiSedang dan motivasiTinggi menunjukkan perubahan log-odds kelulusan relatif terhadap kelompok referensi (“Rendah”).
Koefisien positif dan signifikan menandakan peluang kelulusan yang lebih besar pada kelompok tersebut dibandingkan dengan “Rendah”.
Kelebihan model ini adalah fleksibilitasnya karena tidak mengharuskan asumsi linieritas efek antar kategori.
Pendekatan kedua mengonversi variabel ordinal menjadi numerik berdasarkan urutan kategorinya, misalnya “Rendah” = 1, “Sedang” = 2, dan “Tinggi” = 3. Model regresi logistik kemudian memperlakukan motivasi sebagai variabel numerik kontinu.
data_logistik$motivasi_rank <- as.numeric(data_logistik$motivasi)
model_rank <- glm(lulus ~ jenis_kelamin + motivasi_rank + ipk,
data = data_logistik, family = binomial)
summary(model_rank)
##
## Call:
## glm(formula = lulus ~ jenis_kelamin + motivasi_rank + ipk, family = binomial,
## data = data_logistik)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.1758 0.9082 -4.598 4.27e-06 ***
## jenis_kelaminWanita 1.0880 0.3007 3.618 0.000297 ***
## motivasi_rank 0.7823 0.1993 3.926 8.64e-05 ***
## ipk 1.1402 0.2626 4.342 1.41e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 341.72 on 299 degrees of freedom
## Residual deviance: 294.89 on 296 degrees of freedom
## AIC: 302.89
##
## Number of Fisher Scoring iterations: 4
Interpretasi hasil model:
Koefisien motivasi_rank mengindikasikan perubahan log-odds kelulusan untuk setiap kenaikan satu tingkat motivasi.
Koefisien positif dan signifikan berarti semakin tinggi motivasi, semakin besar peluang kelulusan.
Model ini mengasumsikan hubungan linier antar level motivasi, yang mungkin tidak selalu sesuai dengan kenyataan.
Model regresi logistik seringkali memerlukan proses pemilihan model yang tepat agar hasil yang diperoleh akurat dan dapat diinterpretasikan dengan baik. Proses ini melibatkan pendekatan confirmatory dan exploratory dalam membangun model, serta evaluasi kinerja model menggunakan berbagai metrik dan teknik.
Dalam membangun model regresi logistik, terdapat dua pendekatan utama, yaitu:
Pendekatan Confirmatory: Model dibangun berdasarkan hipotesis atau teori yang sudah ada sebelumnya. Variabel-variabel yang akan dimasukkan ke dalam model sudah dipilih berdasarkan literatur atau pengetahuan domain. Model ini bertujuan untuk menguji hipotesis tersebut secara formal.
Pendekatan Exploratory: Model dibangun dengan tujuan menemukan pola atau hubungan yang mungkin tidak diduga sebelumnya. Pendekatan ini biasanya menggunakan teknik pemilihan variabel otomatis seperti backward elimination, forward selection, atau stepwise selection.
Sebagai ilustrasi, kita gunakan dataset simulasi yang sama seperti
bab sebelumnya, dengan variabel lulus sebagai respons
biner, dan variabel prediktor jenis_kelamin,
motivasi, dan ipk.
Misalkan berdasarkan teori, kita ingin menguji apakah semua prediktor berpengaruh terhadap kelulusan mahasiswa. Maka model yang dibangun adalah:
model_confirmatory <- glm(lulus ~ jenis_kelamin + motivasi + ipk,
data = data_logistik, family = binomial)
summary(model_confirmatory)
##
## Call:
## glm(formula = lulus ~ jenis_kelamin + motivasi + ipk, family = binomial,
## data = data_logistik)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.5721 0.7758 -3.316 0.000915 ***
## jenis_kelaminWanita 1.1069 0.3010 3.677 0.000236 ***
## motivasi.L 1.1877 0.3031 3.919 8.89e-05 ***
## motivasi.Q 0.2726 0.2459 1.109 0.267453
## ipk 1.1399 0.2629 4.337 1.45e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 341.72 on 299 degrees of freedom
## Residual deviance: 293.65 on 295 degrees of freedom
## AIC: 303.65
##
## Number of Fisher Scoring iterations: 5
Hasil summary model ini memberikan informasi koefisien, nilai p, dan statistik lain untuk menguji pengaruh masing-masing variabel prediktor.
Membangun Model Exploratory dengan Stepwise Selection Untuk menemukan model terbaik berdasarkan data, kita dapat menggunakan metode stepwise selection yang mengkombinasikan forward dan backward selection berdasarkan kriteria AIC (Akaike Information Criterion).
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
model_null <- glm(lulus ~ 1, data = data_logistik, family = binomial)
model_full <- glm(lulus ~ jenis_kelamin + motivasi + ipk, data = data_logistik, family = binomial)
model_step <- stepAIC(model_null, scope = list(lower = model_null, upper = model_full),
direction = "both", trace = FALSE)
summary(model_step)
##
## Call:
## glm(formula = lulus ~ ipk + motivasi + jenis_kelamin, family = binomial,
## data = data_logistik)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.5721 0.7758 -3.316 0.000915 ***
## ipk 1.1399 0.2629 4.337 1.45e-05 ***
## motivasi.L 1.1877 0.3031 3.919 8.89e-05 ***
## motivasi.Q 0.2726 0.2459 1.109 0.267453
## jenis_kelaminWanita 1.1069 0.3010 3.677 0.000236 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 341.72 on 299 degrees of freedom
## Residual deviance: 293.65 on 295 degrees of freedom
## AIC: 303.65
##
## Number of Fisher Scoring iterations: 5
Model stepwise akan memilih kombinasi variabel terbaik yang menyeimbangkan kompleksitas dan kecocokan model terhadap data.
Setelah membangun model regresi logistik, langkah penting berikutnya adalah mengevaluasi kinerjanya. Salah satu metode evaluasi yang populer adalah menggunakan kurva ROC (Receiver Operating Characteristic) dan menghitung nilai AUC (Area Under the Curve).
Kurva ROC menunjukkan trade-off antara sensitivitas (true positive rate) dan 1 - spesifisitas (false positive rate) pada berbagai threshold klasifikasi. Sedangkan AUC mengukur kemampuan model dalam membedakan kelas positif dan negatif; nilai AUC berkisar antara 0.5 (model tidak lebih baik dari tebak-tebakan) sampai 1 (model sempurna).
Berikut contoh evaluasi model menggunakan paket pROC
dengan model regresi logistik yang sudah dibangun:
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
# Prediksi probabilitas kelulusan dari model
prob_pred <- predict(model_confirmatory, type = "response")
# Membuat objek ROC
roc_obj <- roc(data_logistik$lulus, prob_pred, levels = c("Tidak Lulus", "Lulus"))
## Setting direction: controls < cases
# Plot kurva ROC
plot(roc_obj, main = "Kurva ROC Model Regresi Logistik")
# Hitung AUC
auc_value <- auc(roc_obj)
print(paste("Nilai AUC:", round(auc_value, 3)))
## [1] "Nilai AUC: 0.75"
Interpretasi:
Kurva ROC yang lebih mendekati sudut kiri atas menunjukkan model dengan performa yang baik.
Nilai AUC yang mendekati 1 menandakan kemampuan klasifikasi yang sangat baik.
Jika nilai AUC sekitar 0.5, model tidak memiliki kemampuan prediksi lebih baik dari acak.
Dengan menggunakan ROC dan AUC, kita dapat menilai seberapa efektif model regresi logistik dalam memprediksi hasil klasifikasi dan membandingkan berbagai model jika diperlukan.
Berbeda dengan regresi linier, model regresi logistik tidak memiliki koefisien determinasi \(R^2\) yang langsung dapat diartikan sebagai proporsi variansi yang dijelaskan oleh model. Oleh karena itu, beberapa versi Pseudo R-Squared dikembangkan untuk mengukur kekuatan model regresi logistik.
Beberapa jenis Pseudo R-Squared yang umum digunakan adalah: - McFadden’s R² - Cox & Snell R² - Nagelkerke R²
Pseudo R-Squared ini memberikan gambaran seberapa baik model dibandingkan dengan model nol (tanpa prediktor).
Kita bisa menggunakan paket pscl untuk menghitung
beberapa jenis Pseudo R-Squared dari model regresi logistik.
library(pscl)
## 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.
pR2_values <- pR2(model_confirmatory)
## fitting null model for pseudo-r2
print(pR2_values)
## llh llhNull G2 McFadden r2ML r2CU
## -146.8257114 -170.8624199 48.0734169 0.1406787 0.1480647 0.2177783
Interpretasi:
Nilai McFadden’s R² antara 0.2 - 0.4 sudah menunjukkan model dengan kecocokan yang cukup baik.
Nilai ini tidak sama dengan R² pada regresi linier, sehingga tidak dapat dibandingkan langsung.
Pseudo R-Squared digunakan sebagai salah satu indikator kekuatan model, namun evaluasi juga harus didukung dengan pengujian statistik lain dan validasi model.
Setelah membangun model regresi logistik, penting untuk mengevaluasi kemampuan model dalam mengklasifikasikan data. Salah satu cara evaluasi adalah dengan membuat tabel klasifikasi (confusion matrix) yang membandingkan prediksi model dengan nilai sebenarnya.
Tabel klasifikasi akan menunjukkan: - True Positive (TP): data yang benar diprediksi positif - True Negative (TN): data yang benar diprediksi negatif - False Positive (FP): data negatif yang salah diprediksi positif - False Negative (FN): data positif yang salah diprediksi negatif
Dari tabel ini, kita dapat menghitung berbagai metrik evaluasi seperti akurasi, sensitivitas, spesifisitas, dan lain-lain.
Berikut contoh membuat tabel klasifikasi dan menghitung metrik evaluasi dari model regresi logistik:
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
# Prediksi kelas dengan threshold 0.5
predicted_class <- ifelse(predict(model_confirmatory, type = "response") > 0.5, "Lulus", "Tidak Lulus")
predicted_class <- factor(predicted_class, levels = c("Tidak Lulus", "Lulus"))
# Membuat confusion matrix
conf_matrix <- confusionMatrix(predicted_class, data_logistik$lulus)
print(conf_matrix)
## Confusion Matrix and Statistics
##
## Reference
## Prediction Tidak Lulus Lulus
## Tidak Lulus 19 16
## Lulus 58 207
##
## Accuracy : 0.7533
## 95% CI : (0.7005, 0.8011)
## No Information Rate : 0.7433
## P-Value [Acc > NIR] : 0.3742
##
## Kappa : 0.213
##
## Mcnemar's Test P-Value : 1.878e-06
##
## Sensitivity : 0.24675
## Specificity : 0.92825
## Pos Pred Value : 0.54286
## Neg Pred Value : 0.78113
## Prevalence : 0.25667
## Detection Rate : 0.06333
## Detection Prevalence : 0.11667
## Balanced Accuracy : 0.58750
##
## 'Positive' Class : Tidak Lulus
##
Interpretasi:
Akurasi tinggi menunjukkan model secara umum dapat memprediksi dengan baik.
Sensitivitas dan spesifisitas membantu menilai keseimbangan kemampuan model mendeteksi masing-masing kelas.
Threshold 0.5 adalah default, namun bisa disesuaikan untuk mendapatkan trade-off yang lebih baik sesuai konteks aplikasi.
Dalam regresi logistik, seringkali kita membangun beberapa model dengan kombinasi variabel prediktor yang berbeda. Untuk menentukan model terbaik, kita perlu melakukan perbandingan menggunakan beberapa metode dan kriteria.
Beberapa metode perbandingan model yang umum digunakan adalah:
Likelihood Ratio Test (LRT)
Menguji apakah model yang lebih kompleks (model penuh) memberikan
perbaikan yang signifikan dibandingkan model yang lebih sederhana (model
terbatas).
Jika p-value < 0.05, model yang lebih kompleks dianggap signifikan
lebih baik.
Akaike Information Criterion (AIC)
Mengukur kualitas model dengan memperhitungkan kecocokan dan
kompleksitas model. Model dengan nilai AIC lebih rendah lebih
baik.
Bayesian Information Criterion (BIC)
Mirip AIC, namun penalti untuk kompleksitas model lebih berat, sehingga
cenderung memilih model yang lebih sederhana.
Misalkan kita memiliki dua model:
model_full <- glm(lulus ~ jenis_kelamin + motivasi + ipk,
data = data_logistik, family = binomial)
model_reduced <- glm(lulus ~ jenis_kelamin + ipk,
data = data_logistik, family = binomial)
Kita dapat melakukan Likelihood Ratio Test untuk menguji apakah penambahan variabel motivasi meningkatkan model secara signifikan.
anova(model_reduced, model_full, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: lulus ~ jenis_kelamin + ipk
## Model 2: lulus ~ jenis_kelamin + motivasi + ipk
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 297 311.62
## 2 295 293.65 2 17.965 0.0001256 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Untuk membandingkan AIC dan BIC kedua model:
AIC(model_reduced, model_full)
## df AIC
## model_reduced 3 317.6163
## model_full 5 303.6514
BIC(model_reduced, model_full)
## df BIC
## model_reduced 3 328.7277
## model_full 5 322.1703
Interpretasi:
Jika hasil anova() menunjukkan p-value < 0.05, maka model model_full lebih baik secara statistik dibanding model_reduced.
Model dengan nilai AIC dan BIC lebih rendah dianggap lebih baik.
Biasanya, AIC digunakan untuk pemilihan model dengan fokus pada prediksi, sedangkan BIC lebih konservatif dan mengutamakan kesederhanaan model.
Likelihood-Ratio Test (LRT) digunakan untuk membandingkan dua model regresi logistik yang bersarang (nested models), yaitu model yang lebih sederhana (model terbatas) dan model yang lebih kompleks (model penuh). Tujuannya adalah menguji apakah tambahan variabel prediktor dalam model penuh secara signifikan meningkatkan kecocokan model terhadap data.
Statistik uji LRT dihitung sebagai:
\[ \text{LR} = -2 \times (\log L_{\text{model terbatas}} - \log L_{\text{model penuh}}) \]
dimana \(\log L\) adalah log-likelihood dari masing-masing model. Nilai LR mengikuti distribusi chi-square dengan derajat kebebasan sama dengan selisih jumlah parameter antara kedua model.
Misalkan kita memiliki dua model regresi logistik:
jenis_kelamin dan
ipkjenis_kelamin, motivasi, dan
ipkmodel_reduced <- glm(lulus ~ jenis_kelamin + ipk,
data = data_logistik, family = binomial)
model_full <- glm(lulus ~ jenis_kelamin + motivasi + ipk,
data = data_logistik, family = binomial)
#Untuk melakukan Likelihood-Ratio Test antara kedua model:
anova(model_reduced, model_full, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: lulus ~ jenis_kelamin + ipk
## Model 2: lulus ~ jenis_kelamin + motivasi + ipk
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 297 311.62
## 2 295 293.65 2 17.965 0.0001256 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretasi Jika nilai p-value < 0.05, maka model penuh memberikan perbaikan yang signifikan dibanding model terbatas, sehingga variabel tambahan (misalnya motivasi) penting untuk dimasukkan.
Jika p-value ≥ 0.05, model tambahan tidak signifikan meningkatkan kecocokan, sehingga model sederhana lebih disarankan.
Prinsip parsimony, atau prinsip kesederhanaan, adalah konsep penting dalam pemodelan statistik termasuk regresi logistik. Prinsip ini menyatakan bahwa model yang lebih sederhana, yang dapat menjelaskan data dengan baik, lebih disukai daripada model yang kompleks dan rumit.
Mengapa Prinsip Parsimony Penting?
Dalam praktik, prinsip parsimony biasanya diaplikasikan dengan cara:
Misalkan dari dua model regresi logistik:
Jika perbedaan performa kedua model tidak signifikan, maka sesuai prinsip parsimony, model A lebih dipilih.
# Membandingkan AIC kedua model
AIC(model_reduced, model_full)
## df AIC
## model_reduced 3 317.6163
## model_full 5 303.6514
Model dengan AIC lebih rendah dan lebih sederhana biasanya menjadi pilihan utama.Dengan menerapkan prinsip parsimony, kita mendapatkan model yang efisien, dapat diandalkan, dan mudah diinterpretasikan.
Tabel klasifikasi (confusion matrix) adalah alat penting untuk mengevaluasi performa model regresi logistik dalam mengklasifikasikan data ke dalam kelas yang benar. Dari tabel ini, kita dapat menghitung beberapa metrik evaluasi utama seperti akurasi, sensitivitas, spesifisitas, dan lain-lain.
Untuk evaluasi yang lebih komprehensif, kita perlu melihat metrik lain yang lebih spesifik.
Sensitivitas (Recall atau True Positive Rate)
mengukur kemampuan model untuk mengenali kasus positif yang sebenarnya
benar-benar positif.
\[
\text{Sensitivitas} = \frac{TP}{TP + FN}
\]
Spesifisitas (True Negative Rate) mengukur
kemampuan model untuk mengenali kasus negatif yang sebenarnya
benar-benar negatif.
\[
\text{Spesifisitas} = \frac{TN}{TN + FP}
\]
caretlibrary(caret)
# Membuat prediksi kelas dengan threshold 0.5
predicted_class <- ifelse(predict(model_confirmatory, type = "response") > 0.5, "Lulus", "Tidak Lulus")
predicted_class <- factor(predicted_class, levels = c("Tidak Lulus", "Lulus"))
# Membuat confusion matrix dan menghitung metrik
conf_matrix <- confusionMatrix(predicted_class, data_logistik$lulus)
# Menampilkan tabel klasifikasi dan metrik
print(conf_matrix)
## Confusion Matrix and Statistics
##
## Reference
## Prediction Tidak Lulus Lulus
## Tidak Lulus 19 16
## Lulus 58 207
##
## Accuracy : 0.7533
## 95% CI : (0.7005, 0.8011)
## No Information Rate : 0.7433
## P-Value [Acc > NIR] : 0.3742
##
## Kappa : 0.213
##
## Mcnemar's Test P-Value : 1.878e-06
##
## Sensitivity : 0.24675
## Specificity : 0.92825
## Pos Pred Value : 0.54286
## Neg Pred Value : 0.78113
## Prevalence : 0.25667
## Detection Rate : 0.06333
## Detection Prevalence : 0.11667
## Balanced Accuracy : 0.58750
##
## 'Positive' Class : Tidak Lulus
##
# Mengambil sensitivitas dan spesifisitas
sensitivity <- conf_matrix$byClass["Sensitivity"]
specificity <- conf_matrix$byClass["Specificity"]
cat("Sensitivitas:", round(sensitivity, 3), "\n")
## Sensitivitas: 0.247
cat("Spesifisitas:", round(specificity, 3), "\n")
## Spesifisitas: 0.928
Interpretasi:
Sensitivitas tinggi berarti model mampu mendeteksi hampir semua kasus positif.
Spesifisitas tinggi berarti model mampu menghindari kesalahan mengklasifikasikan kasus negatif sebagai positif.
Dalam konteks tertentu, misalnya diagnosis penyakit, seringkali sensitivitas lebih diutamakan untuk menghindari missed diagnosis.
Kurva ROC adalah alat penting dalam evaluasi model klasifikasi, termasuk regresi logistik. ROC mengilustrasikan kemampuan model dalam membedakan antara kelas positif dan negatif pada berbagai nilai ambang (threshold).
library(pROC)
# Probabilitas prediksi kelas positif dari model
probabilities <- predict(model_confirmatory, type = "response")
# Membuat objek ROC
roc_obj <- roc(data_logistik$lulus, probabilities, levels = c("Tidak Lulus", "Lulus"))
## Setting direction: controls < cases
# Plot kurva ROC
plot(roc_obj, main = "Kurva ROC Model Regresi Logistik")
# Menghitung AUC
auc_value <- auc(roc_obj)
cat("Nilai AUC:", round(auc_value, 3), "\n")
## Nilai AUC: 0.75
Interpretasi:
Kurva ROC yang lebih mendekati sudut kiri atas menunjukkan model yang lebih baik.
AUC memberikan ukuran tunggal untuk membandingkan performa model.
Nilai AUC di atas 0.7 dianggap baik, di atas 0.8 sangat baik, dan di atas 0.9 luar biasa.
Pada regresi logistik, konsep \(R^2\) seperti pada regresi linear tidak dapat digunakan secara langsung karena modelnya non-linear dan menggunakan fungsi logit. Sebagai gantinya, digunakan beberapa jenis Pseudo R-squared yang mengukur kualitas kecocokan model secara relatif.
McFadden’s R-squared
Didefinisikan sebagai:
\[
R^2_{\text{McFadden}} = 1 - \frac{\ln L_{\text{model}}}{\ln
L_{\text{null}}}
\]
dimana \(\ln L_{\text{model}}\) adalah
log-likelihood model dengan prediktor, dan \(\ln L_{\text{null}}\) adalah log-likelihood
model tanpa prediktor (hanya intercept).
Cox & Snell R-squared
Berdasarkan likelihood ratio, namun tidak dapat mencapai nilai maksimum
1.
Nagelkerke R-squared
Modifikasi dari Cox & Snell yang menyesuaikan sehingga maksimum
nilainya bisa
pscllibrary(pscl)
# Menghitung Pseudo R-squared untuk model regresi logistik
pR2_values <- pR2(model_confirmatory)
## fitting null model for pseudo-r2
print(pR2_values)
## llh llhNull G2 McFadden r2ML r2CU
## -146.8257114 -170.8624199 48.0734169 0.1406787 0.1480647 0.2177783
Interpretasi Nilai Pseudo R-squared tidak dapat langsung dibandingkan dengan R-squared pada regresi linear.
Sebagai gambaran, McFadden’s R-squared antara 0.2 - 0.4 sudah menunjukkan model yang baik.
Pseudo R-squared membantu mengevaluasi peningkatan kecocokan model dibanding model dasar (null model).
Distribusi multinomial adalah perluasan dari distribusi binomial untuk lebih dari dua kategori hasil. Jika dalam binomial hasilnya hanya dua (misalnya sukses dan gagal), maka dalam distribusi multinomial bisa ada tiga atau lebih kategori yang saling eksklusif.
Distribusi ini sering digunakan untuk memodelkan probabilitas sejumlah hasil dari percobaan yang menghasilkan salah satu dari beberapa kategori pada setiap percobaan.
Distribusi ini umum digunakan dalam analisis data kategori, misalnya untuk memodelkan preferensi pilihan politik, jenis pekerjaan, atau kategori penyakit.
Misalkan kita ingin menganalisis preferensi mahasiswa terhadap tiga jenis metode pembelajaran: Tatap Muka, Daring, dan Campuran.
Kita akan menyimulasikan data 300 mahasiswa yang masing-masing hanya memilih satu jenis metode pembelajaran favorit.
set.seed(123)
# Probabilitas untuk tiap kategori
probs <- c(Tatap_Muka = 0.4, Daring = 0.3, Campuran = 0.3)
# Simulasi hasil pilihan 300 mahasiswa
pilihan <- sample(
x = names(probs),
size = 300,
replace = TRUE,
prob = probs
)
# Konversi ke data frame
data_multinom <- data.frame(
metode_preferensi = factor(pilihan, levels = names(probs))
)
# Lihat ringkasan data
table(data_multinom$metode_preferensi)
##
## Tatap_Muka Daring Campuran
## 121 84 95
Dari data simulasi di atas, kita dapat melihat sebaran jumlah mahasiswa berdasarkan pilihan metode pembelajaran mereka. Distribusi kategori ini bisa dianalisis lebih lanjut menggunakan regresi logistik multinomial jika ingin mengetahui faktor-faktor yang memengaruhi pilihan mereka.
Regresi logistik multinomial digunakan untuk memodelkan hubungan antara satu variabel respon kategorik dengan lebih dari dua kategori (nominal), terhadap satu atau lebih prediktor numerik atau kategorik.
Model ini memperluas regresi logistik biner dengan membandingkan setiap kategori terhadap satu kategori referensi.
Model ini disebut juga multinomial logit model, dan bekerja dengan memilih satu kategori sebagai baseline (referensi). Probabilitas setiap kategori lainnya dimodelkan relatif terhadap kategori referensi.
Secara matematis, jika ada \(J\) kategori dan kategori \(J\) sebagai baseline, maka:
\[ \log\left(\frac{P(Y = j)}{P(Y = J)}\right) = \beta_{0j} + \beta_{1j}X_1 + \dots + \beta_{pj}X_p \]
Untuk setiap kategori \(j = 1, \dots, J-1\).
Kita lanjutkan dari data simulasi sebelumnya dan tambahkan beberapa prediktor, seperti IPK dan jenis kelamin mahasiswa:
set.seed(123)
n <- 300
data_multinom <- data.frame(
metode_preferensi = factor(pilihan, levels = names(probs)),
ipk = round(runif(n, 2.5, 4.0), 2),
gender = factor(sample(c("Pria", "Wanita"), size = n, replace = TRUE))
)
Untuk mengestimasi model logit multinomial di R, kita dapat menggunakan fungsi multinom() dari paket nnet. Kita akan memodelkan metode pembelajaran berdasarkan IPK dan gender mahasiswa:
library(nnet)
# Fit model multinomial
model_multinom <- multinom(metode_preferensi ~ ipk + gender, data = data_multinom)
## # weights: 12 (6 variable)
## initial value 329.583687
## iter 10 value 55.771235
## iter 20 value 20.173560
## iter 30 value 16.065944
## iter 40 value 14.388752
## iter 50 value 13.766814
## iter 60 value 12.551457
## iter 70 value 12.181717
## iter 80 value 11.737754
## iter 90 value 11.393397
## iter 100 value 11.018752
## final value 11.018752
## stopped after 100 iterations
# Ringkasan hasil estimasi
summary(model_multinom)
## Call:
## multinom(formula = metode_preferensi ~ ipk + gender, data = data_multinom)
##
## Coefficients:
## (Intercept) ipk genderWanita
## Daring -531.2535 159.5960 1.11415630
## Campuran -247.3709 79.8303 0.06441547
##
## Std. Errors:
## (Intercept) ipk genderWanita
## Daring 127.8785 38.33589 1.692739
## Campuran 83.7359 27.03969 1.023625
##
## Residual Deviance: 22.0375
## AIC: 34.0375
Interpretasi Koefisien: Output akan memberikan koefisien log-odds untuk setiap kategori terhadap kategori referensi (default: kategori terakhir). Misalnya, jika referensinya adalah “Campuran”, maka hasil akan menunjukkan bagaimana IPK dan gender memengaruhi kemungkinan memilih “Tatap Muka” atau “Daring” dibandingkan “Campuran”. Nilai positif pada koefisien menunjukkan peningkatan log-odds untuk memilih kategori tersebut terhadap referensi ketika nilai prediktor meningkat.
exp(coef(model_multinom))
## (Intercept) ipk genderWanita
## Daring 1.903411e-231 2.049557e+69 3.046996
## Campuran 3.699692e-108 4.675814e+34 1.066535
Model regresi logistik multinomial sangat berguna ketika kategori respon bersifat nominal dan tidak dapat diurutkan. Model ini dapat diperluas untuk memasukkan interaksi atau prediktor tambahan sesuai kebutuhan.
Misalkan seorang peneliti pendidikan ingin mengetahui faktor-faktor yang memengaruhi preferensi mahasiswa terhadap metode pembelajaran: Tatap Muka, Daring, atau Campuran.
Peneliti mengumpulkan data dari 300 mahasiswa, mencatat variabel:
metode_preferensi: pilihan metode pembelajaran
(respon)ipk: indeks prestasi kumulatifgender: jenis kelamin mahasiswaPenelitian ini bertujuan untuk mengetahui apakah IPK dan gender berpengaruh secara signifikan terhadap pemilihan metode pembelajaran.
Berikut ini kita simulasikan data yang akan digunakan untuk analisis regresi logistik multinomial. Data mencakup variabel kategori dan numerik:
set.seed(2025)
n <- 300
# Simulasi variabel prediktor
ipk <- round(runif(n, 2.5, 4.0), 2)
gender <- factor(sample(c("Pria", "Wanita"), size = n, replace = TRUE))
# Probabilitas pilihan metode pembelajaran tergantung IPK dan gender
prob_tatap <- plogis(0.5 + 0.8 * (ipk - 3.0) + ifelse(gender == "Pria", 0.3, -0.3))
prob_daring <- plogis(-0.2 - 0.5 * (ipk - 3.0) + ifelse(gender == "Pria", -0.2, 0.2))
# Normalisasi probabilitas agar total 1
prob_campuran <- 1 - (prob_tatap + prob_daring)
prob_campuran[prob_campuran < 0] <- 0.01
total_prob <- prob_tatap + prob_daring + prob_campuran
prob_tatap <- prob_tatap / total_prob
prob_daring <- prob_daring / total_prob
prob_campuran <- prob_campuran / total_prob
# Simulasi pemilihan berdasarkan probabilitas masing-masing
pilihan <- mapply(function(p1, p2, p3) {
sample(c("Tatap Muka", "Daring", "Campuran"), 1, prob = c(p1, p2, p3))
}, prob_tatap, prob_daring, prob_campuran)
# Gabungkan jadi data frame
data_multinom2 <- data.frame(
metode_preferensi = factor(pilihan, levels = c("Tatap Muka", "Daring", "Campuran")),
ipk = ipk,
gender = gender
)
# Tampilkan ringkasan
summary(data_multinom2)
## metode_preferensi ipk gender
## Tatap Muka:179 Min. :2.510 Pria :157
## Daring :118 1st Qu.:2.848 Wanita:143
## Campuran : 3 Median :3.250
## Mean :3.261
## 3rd Qu.:3.650
## Max. :4.000
Simulasi ini merefleksikan situasi nyata di mana mahasiswa dengan IPK lebih tinggi cenderung memilih metode pembelajaran tertentu, dan perbedaan preferensi juga bisa dipengaruhi oleh gender.
Setelah data disiapkan, langkah selanjutnya adalah melakukan
estimasi model regresi logistik multinomial. Kita akan
menggunakan fungsi multinom() dari paket nnet
untuk memodelkan metode_preferensi berdasarkan
ipk dan gender.
library(nnet)
# Estimasi model regresi logistik multinomial
model_multinom2 <- multinom(metode_preferensi ~ ipk + gender, data = data_multinom2)
## # weights: 12 (6 variable)
## initial value 329.583687
## iter 10 value 208.772451
## iter 20 value 208.546659
## iter 30 value 208.539938
## iter 40 value 208.539733
## final value 208.539713
## converged
# Ringkasan model
summary(model_multinom2)
## Call:
## multinom(formula = metode_preferensi ~ ipk + gender, data = data_multinom2)
##
## Coefficients:
## (Intercept) ipk genderWanita
## Daring 0.3484051 -0.3525748 0.7647162
## Campuran -1.1952786 -0.7411528 -7.5336066
##
## Std. Errors:
## (Intercept) ipk genderWanita
## Daring 0.8971951 0.2730996 0.2424788
## Campuran 4.3907394 1.3883751 30.5355766
##
## Residual Deviance: 417.0794
## AIC: 429.0794
Interpretasi Output model menunjukkan koefisien log-odds dari setiap kategori terhadap kategori referensi (default: kategori terakhir, yaitu “Campuran”).
Menghitung Nilai p dan Odds Ratio Untuk menginterpretasikan signifikansi koefisien, kita bisa menghitung nilai z dan p-value secara manual:
# Koefisien dan standar error
coefs <- summary(model_multinom2)$coefficients
se <- summary(model_multinom2)$standard.errors
# Z dan p-value
z <- coefs / se
p_values <- 2 * (1 - pnorm(abs(z)))
# Odds ratio
odds_ratio <- exp(coefs)
# Tampilkan hasil lengkap
list(
Coefficients = coefs,
StdError = se,
Z = z,
P_value = p_values,
Odds_Ratio = odds_ratio
)
## $Coefficients
## (Intercept) ipk genderWanita
## Daring 0.3484051 -0.3525748 0.7647162
## Campuran -1.1952786 -0.7411528 -7.5336066
##
## $StdError
## (Intercept) ipk genderWanita
## Daring 0.8971951 0.2730996 0.2424788
## Campuran 4.3907394 1.3883751 30.5355766
##
## $Z
## (Intercept) ipk genderWanita
## Daring 0.3883270 -1.2910116 3.1537442
## Campuran -0.2722272 -0.5338275 -0.2467157
##
## $P_value
## (Intercept) ipk genderWanita
## Daring 0.6977740 0.1966997 0.001611903
## Campuran 0.7854474 0.5934609 0.805128243
##
## $Odds_Ratio
## (Intercept) ipk genderWanita
## Daring 1.4168061 0.7028760 2.1483845708
## Campuran 0.3026196 0.4765642 0.0005348059
Koefisien yang signifikan secara statistik (misalnya p-value < 0.05) menunjukkan adanya hubungan yang berarti antara prediktor dan kemungkinan memilih kategori tertentu dibandingkan referensi. Odds ratio lebih dari 1 menunjukkan efek positif, kurang dari 1 menunjukkan efek negatif terhadap peluang memilih kategori tersebut dibanding referensi.
Setelah model regresi logistik multinomial diestimasi, penting untuk mengevaluasi signifikansi statistik dari setiap koefisien. Ini dilakukan dengan melihat nilai p-value dari setiap koefisien regresi.
Nilai p diperoleh dengan menghitung statistik z:
\[ z = \frac{\hat{\beta}}{\text{SE}(\hat{\beta})} \]
Kemudian p-value dihitung dari distribusi normal standar:
# Koefisien dan standard error sudah dihitung sebelumnya
z_scores <- coefs / se
p_values <- 2 * (1 - pnorm(abs(z_scores)))
# Gabungkan dalam satu tabel
pval_table <- data.frame(
Koefisien = round(coefs, 3),
Std_Error = round(se, 3),
Z = round(z_scores, 3),
P_value = round(p_values, 4)
)
pval_table
## Koefisien..Intercept. Koefisien.ipk Koefisien.genderWanita
## Daring 0.348 -0.353 0.765
## Campuran -1.195 -0.741 -7.534
## Std_Error..Intercept. Std_Error.ipk Std_Error.genderWanita
## Daring 0.897 0.273 0.242
## Campuran 4.391 1.388 30.536
## Z..Intercept. Z.ipk Z.genderWanita P_value..Intercept. P_value.ipk
## Daring 0.388 -1.291 3.154 0.6978 0.1967
## Campuran -0.272 -0.534 -0.247 0.7854 0.5935
## P_value.genderWanita
## Daring 0.0016
## Campuran 0.8051
Interpretasi P-value < 0.05: Koefisien signifikan secara statistik, artinya variabel prediktor berpengaruh secara signifikan terhadap pilihan kategori tersebut dibanding kategori referensi.
P-value ≥ 0.05: Tidak ada cukup bukti untuk menyatakan bahwa variabel tersebut berpengaruh terhadap pilihan kategori (tidak signifikan).
Setelah model regresi logistik multinomial dibangun dan dievaluasi, langkah selanjutnya adalah melakukan prediksi terhadap data dan mengevaluasi akurasi model.
Fungsi predict() dari model multinomial dapat digunakan
untuk memprediksi kategori respon maupun
probabilitas tiap kategori.
# Prediksi kategori kelas
pred_class <- predict(model_multinom2, newdata = data_multinom2)
# Prediksi probabilitas tiap kategori
pred_prob <- predict(model_multinom2, newdata = data_multinom2, type = "probs")
# Lihat beberapa hasil pertama
head(data.frame(Actual = data_multinom2$metode_preferensi, Predicted = pred_class))
## Actual Predicted
## 1 Tatap Muka Tatap Muka
## 2 Daring Tatap Muka
## 3 Tatap Muka Tatap Muka
## 4 Tatap Muka Tatap Muka
## 5 Tatap Muka Tatap Muka
## 6 Tatap Muka Tatap Muka
Matriks Konfusi Untuk mengevaluasi performa klasifikasi, kita bandingkan hasil prediksi dengan kelas sebenarnya menggunakan confusion matrix.
# Matriks konfusi
table(Actual = data_multinom2$metode_preferensi, Predicted = pred_class)
## Predicted
## Actual Tatap Muka Daring Campuran
## Tatap Muka 154 25 0
## Daring 86 32 0
## Campuran 3 0 0
#Akurasi Model
# Hitung akurasi prediksi
accuracy <- mean(pred_class == data_multinom2$metode_preferensi)
accuracy
## [1] 0.62
Akurasi menunjukkan proporsi observasi yang berhasil diprediksi dengan benar oleh model.
Validasi Silang (Cross-Validation) Sederhana Untuk validasi yang lebih robust, kita bisa membagi data menjadi data latih dan data uji:
set.seed(2025)
n <- nrow(data_multinom2)
train_index <- sample(1:n, size = 0.7 * n)
# Data latih dan uji
train_data <- data_multinom2[train_index, ]
test_data <- data_multinom2[-train_index, ]
# Latih model pada data latih
model_train <- multinom(metode_preferensi ~ ipk + gender, data = train_data)
## # weights: 12 (6 variable)
## initial value 230.708581
## iter 10 value 145.404054
## iter 20 value 145.118791
## final value 145.114726
## converged
# Prediksi pada data uji
pred_test <- predict(model_train, newdata = test_data)
# Akurasi pada data uji
mean(pred_test == test_data$metode_preferensi)
## [1] 0.5444444
Dengan melakukan prediksi dan validasi seperti ini, kita bisa menilai seberapa baik model generalisasi ke data baru, yang merupakan aspek penting dalam setiap model prediktif.
Regresi logistik multinomial merupakan perluasan dari regresi logistik biner yang memungkinkan respon dengan lebih dari dua kategori. Model ini sangat berguna ketika kategori bersifat nominal dan tidak berurutan.
Poin-poin penting: - Model baseline-category logit membandingkan setiap kategori terhadap satu kategori referensi. - Interpretasi koefisien dilakukan dalam bentuk log-odds atau odds ratio. - Evaluasi model melibatkan nilai p, pseudo R-squared, matriks klasifikasi, serta akurasi prediksi. - Model dapat digunakan untuk klasifikasi, prediksi, dan penjelasan pengaruh variabel bebas terhadap kategori respon.
Regresi logistik multinomial memberikan fleksibilitas tinggi dalam analisis data kategori, terutama saat banyak pilihan jawaban tersedia.
Berikut adalah contoh tambahan menggunakan data simulasi lain, misalnya tentang preferensi makanan.
set.seed(200)
n <- 300
data_makan <- data.frame(
preferensi = factor(sample(c("Manis", "Asin", "Pedas"), n, replace = TRUE)),
umur = rnorm(n, mean = 30, sd = 10),
jenis_kelamin = factor(sample(c("Pria", "Wanita"), n, replace = TRUE))
)
# Estimasi Model
library(nnet)
model_makan <- multinom(preferensi ~ umur + jenis_kelamin, data = data_makan)
## # weights: 12 (6 variable)
## initial value 329.583687
## iter 10 value 325.207113
## final value 325.207046
## converged
summary(model_makan)
## Call:
## multinom(formula = preferensi ~ umur + jenis_kelamin, data = data_makan)
##
## Coefficients:
## (Intercept) umur jenis_kelaminWanita
## Manis 0.02775326 -0.01138700 0.1243190
## Pedas 0.80369913 -0.02235252 -0.3516853
##
## Std. Errors:
## (Intercept) umur jenis_kelaminWanita
## Manis 0.5207571 0.01587308 0.2907537
## Pedas 0.4868309 0.01514084 0.2752149
##
## Residual Deviance: 650.4141
## AIC: 662.4141
#Evaluasi Koefisien
coef_makan <- summary(model_makan)$coefficients
se_makan <- summary(model_makan)$standard.errors
z_makan <- coef_makan / se_makan
pval_makan <- 2 * (1 - pnorm(abs(z_makan)))
exp(coef_makan) # Odds Ratio
## (Intercept) umur jenis_kelaminWanita
## Manis 1.028142 0.9886776 1.1323771
## Pedas 2.233789 0.9778954 0.7035015
#Prediksi dan Akurasi
pred_makan <- predict(model_makan, newdata = data_makan)
mean(pred_makan == data_makan$preferensi) # Akurasi
## [1] 0.3933333
Contoh ini menunjukkan bahwa kita dapat mengaplikasikan regresi logistik multinomial ke berbagai situasi, termasuk preferensi makanan, dengan pendekatan yang sama: simulasi data, estimasi model, evaluasi hasil, dan interpretasi. Model ini sangat berguna dalam penelitian sosial, pemasaran, pendidikan, dan bidang lain yang melibatkan respon kategorik lebih dari dua pilihan.
Regresi logistik ordinal digunakan ketika variabel respon bersifat kategori berurutan, seperti tingkat kepuasan (rendah, sedang, tinggi) atau frekuensi (jarang, kadang-kadang, sering). Model ini mempertimbangkan urutan kategori tersebut dan lebih tepat dibanding regresi logistik multinomial.
Model regresi logistik ordinal yang paling umum adalah cumulative logit model atau proportional odds model. Model ini bekerja dengan cara memodelkan probabilitas kumulatif bahwa respon berada pada atau di bawah suatu kategori.
Misalkan \(Y\) adalah variabel kategorik ordinal dengan \(J\) kategori berurutan, maka untuk setiap kategori \(j = 1, 2, ..., J-1\):
\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \theta_j - \mathbf{x}^T \boldsymbol{\beta} \]
Jika model menghasilkan \(\beta_{umur} = -0.05\), artinya kenaikan satu unit pada umur menurunkan log odds bahwa seseorang memilih kategori yang lebih rendah (misalnya “kurang puas”) dibanding kategori yang lebih tinggi, secara konsisten di seluruh level kategori.
Model ini lebih efisien dibanding model multinomial karena mempertimbangkan informasi urutan antar kategori.
Pada subbab berikutnya, kita akan mensimulasikan data dan membangun
model cumulative logit dengan fungsi polr() dari package
MASS.
Setelah membangun model cumulative logit (proportional odds model), kita dapat menginterpretasikan koefisien regresi sebagaimana pada regresi logistik biasa, tetapi dengan memperhatikan konteks kategori berurutan.
library(MASS)
set.seed(131)
n <- 500
data_ordinal <- data.frame(
kepuasan = factor(sample(c("Rendah", "Sedang", "Tinggi"), n, replace = TRUE, prob = c(0.3, 0.5, 0.2)),
ordered = TRUE, levels = c("Rendah", "Sedang", "Tinggi")),
umur = rnorm(n, mean = 35, sd = 10),
gender = factor(sample(c("Pria", "Wanita"), n, replace = TRUE))
)
# Estimasi model cumulative logit
model_polr <- polr(kepuasan ~ umur + gender, data = data_ordinal, Hess = TRUE)
summary(model_polr)
## Call:
## polr(formula = kepuasan ~ umur + gender, data = data_ordinal,
## Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## umur -0.003774 0.008909 -0.4236
## genderWanita 0.024173 0.172044 0.1405
##
## Intercepts:
## Value Std. Error t value
## Rendah|Sedang -1.0182 0.3416 -2.9806
## Sedang|Tinggi 1.4779 0.3461 4.2707
##
## Residual Deviance: 990.433
## AIC: 998.433
Interpretasi Koefisien dari model cumulative logit menggambarkan log odds kumulatif dari berada pada atau di bawah kategori tertentu.
Misal, hasil koefisien dari model_polr adalah:
Value Std. Error t value
umur -0.045 0.012 -3.75 genderWanita 0.300 0.150 2.00
Interpretasi:
Umur: setiap tambahan satu tahun umur menurunkan odds untuk memilih kategori lebih rendah secara kumulatif. Odds ratio = exp(-0.045) ≈ 0.96, artinya peluang pindah ke kategori lebih tinggi meningkat seiring bertambahnya umur.
Gender (Wanita): memiliki odds 1.35 kali lebih besar (exp(0.30)) dibanding pria untuk berada di kategori kepuasan yang lebih rendah, jika kategori rendah = lebih negatif.
Namun karena kategori ordinal bersifat “berjenjang”, maka koefisien ini berlaku konsisten untuk semua batas kategori, misalnya:
Odds untuk “Rendah” vs “Sedang atau Tinggi”
Odds untuk “Rendah atau Sedang” vs “Tinggi”
Uji Signifikansi
# Nilai p dari uji z
ctable <- coef(summary(model_polr))
pval <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
ctable <- cbind(ctable, "p value" = pval)
ctable
## Value Std. Error t value p value
## umur -0.003774225 0.008908953 -0.4236440 6.718254e-01
## genderWanita 0.024173321 0.172044181 0.1405065 8.882598e-01
## Rendah|Sedang -1.018158569 0.341600016 -2.9805577 2.877240e-03
## Sedang|Tinggi 1.477919954 0.346063761 4.2706580 1.948971e-05
Koefisien yang signifikan secara statistik (p < 0.05) menunjukkan pengaruh variabel prediktor terhadap kategori ordinal secara signifikan. Interpretasi koefisien pada regresi logistik ordinal harus memperhatikan arah dan urutan kategori, serta mempertimbangkan bahwa efek variabel bersifat kumulatif dan proporsional di seluruh batas kategori.
Sebagai alternatif dari studi kepuasan pelanggan, kita gunakan data
simulasi mengenai persepsi risiko kesehatan dari
individu terhadap penyakit tertentu. Respon diberikan dalam tiga level
ordinal: Rendah, Sedang, dan
Tinggi. Beberapa prediktor yang diasumsikan berpengaruh
adalah: - usia: usia responden -
tingkat_pendidikan: jenjang pendidikan terakhir (SMA, S1,
S2) - merokok: apakah individu perokok atau tidak
set.seed(42)
n <- 500
data_risiko <- data.frame(
risiko = factor(sample(c("Rendah", "Sedang", "Tinggi"), n, replace = TRUE,
prob = c(0.35, 0.4, 0.25)),
ordered = TRUE, levels = c("Rendah", "Sedang", "Tinggi")),
usia = round(rnorm(n, mean = 40, sd = 12)),
tingkat_pendidikan = factor(sample(c("SMA", "S1", "S2"), n, replace = TRUE),
levels = c("SMA", "S1", "S2"), ordered = TRUE),
merokok = factor(sample(c("Ya", "Tidak"), n, replace = TRUE))
)
head(data_risiko)
## risiko usia tingkat_pendidikan merokok
## 1 Tinggi 27 S1 Ya
## 2 Tinggi 41 S1 Ya
## 3 Sedang 26 S1 Ya
## 4 Tinggi 42 S1 Tidak
## 5 Rendah 56 S1 Ya
## 6 Rendah 28 S1 Tidak
Model cumulative logit dibangun dengan fungsi polr() dari package MASS menggunakan prediktor usia, tingkat_pendidikan, dan merokok.
library(MASS)
model_risiko <- polr(risiko ~ usia + tingkat_pendidikan + merokok,
data = data_risiko, Hess = TRUE)
summary(model_risiko)
## Call:
## polr(formula = risiko ~ usia + tingkat_pendidikan + merokok,
## data = data_risiko, Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## usia 0.003767 0.007134 0.5280
## tingkat_pendidikan.L 0.223904 0.140589 1.5926
## tingkat_pendidikan.Q -0.145347 0.148933 -0.9759
## merokokYa -0.259927 0.167050 -1.5560
##
## Intercepts:
## Value Std. Error t value
## Rendah|Sedang -0.6707 0.3086 -2.1734
## Sedang|Tinggi 1.1486 0.3118 3.6834
##
## Residual Deviance: 1069.689
## AIC: 1081.689
Value Std. Error t value
usia 0.035 0.010 3.5 tingkat_pendidikan.S1 -0.400 0.180 -2.2 tingkat_pendidikan.S2 -0.850 0.210 -4.0 merokok.Tidak -0.600 0.140 -4.3 Interpretasi:
Usia: Semakin tua usia responden, semakin tinggi kemungkinan mereka menilai risiko kesehatannya sebagai tinggi. Odds ratio = exp(0.035) ≈ 1.036.
Tingkat pendidikan: Responden dengan pendidikan lebih tinggi cenderung mempersepsikan risiko kesehatan lebih rendah, dibandingkan SMA sebagai baseline.
Merokok: Responden yang tidak merokok memiliki peluang lebih rendah untuk menilai risiko kesehatannya sebagai tinggi dibandingkan perokok (karena koefisien negatif).
Fungsi summary() pada model polr() tidak
secara langsung memberikan nilai p-value. Oleh karena itu, kita perlu
menghitungnya secara manual dari nilai t-value dengan asumsi
distribusi normal.
ctable <- coef(summary(model_risiko))
p_values <- 2 * (1 - pnorm(abs(ctable[, "t value"])))
ctable <- cbind(ctable, "p value" = round(p_values, 4))
ctable
## Value Std. Error t value p value
## usia 0.00376678 0.007133678 0.5280277 0.5975
## tingkat_pendidikan.L 0.22390412 0.140588898 1.5926159 0.1112
## tingkat_pendidikan.Q -0.14534711 0.148932635 -0.9759252 0.3291
## merokokYa -0.25992693 0.167050413 -1.5559790 0.1197
## Rendah|Sedang -0.67073695 0.308614898 -2.1733784 0.0298
## Sedang|Tinggi 1.14864342 0.311839713 3.6834418 0.0002
Interpretasi:
P-value < 0.05 menandakan bahwa prediktor tersebut signifikan dalam model.
Misalnya, jika usia memiliki p-value 0.0005, berarti usia signifikan dalam mempengaruhi persepsi risiko.
Koefisien tingkat_pendidikan.S2 dengan p-value < 0.001 mengindikasikan bahwa responden dengan pendidikan S2 secara signifikan berbeda persepsinya dibandingkan baseline (SMA).
Setelah model terbentuk, kita bisa memprediksi probabilitas setiap individu termasuk dalam kategori Rendah, Sedang, atau Tinggi.
Misalnya, kita ambil 5 data pertama dari dataset:
newdata <- data_risiko[1:5, ]
predict(model_risiko, newdata = newdata, type = "probs")
## Rendah Sedang Tinggi
## 1 0.3472411 0.4191764 0.2335825
## 2 0.3353862 0.4214584 0.2431554
## 3 0.3480954 0.4189958 0.2329088
## 4 0.2793643 0.4257482 0.2948875
## 5 0.3229112 0.4233850 0.2537038
Output akan memberikan probabilitas kumulatif untuk setiap level kategori ordinal.
Jika ingin mengetahui kategori dengan probabilitas tertinggi (prediksi kelas):
predict(model_risiko, newdata = newdata)
## [1] Sedang Sedang Sedang Sedang Sedang
## Levels: Rendah Sedang Tinggi
Interpretasi:
Misalnya baris pertama memunculkan probabilitas: Rendah = 0.20, Sedang = 0.55, Tinggi = 0.25. Maka kategori Sedang diprediksi sebagai kelas paling mungkin bagi individu tersebut. Prediksi ini berguna untuk membuat klasifikasi berdasarkan persepsi risiko, untuk keperluan kebijakan atau strategi intervensi kesehatan.
Model regresi logistik ordinal, khususnya model cumulative logit, mengasumsikan bahwa efek dari prediktor adalah konstan di seluruh batasan kategori (proportional odds assumption).
Untuk menguji asumsi tersebut, kita dapat menggunakan fungsi
nominal_test() dari paket ordinal atau
pendekatan alternatif dengan membandingkan model polr()
terhadap model multinomial menggunakan VGAM::vglm().
Contoh uji asumsi dengan brant package:
library(brant)
brant(model_risiko)
## ----------------------------------------------------
## Test for X2 df probability
## ----------------------------------------------------
## Omnibus 7.49 4 0.11
## usia 0.58 1 0.45
## tingkat_pendidikan.L 1.57 1 0.21
## tingkat_pendidikan.Q 2.83 1 0.09
## merokokYa 2.82 1 0.09
## ----------------------------------------------------
##
## H0: Parallel Regression Assumption holds
Namun, brant() hanya bekerja dengan model dari glm() dan tidak mendukung semua fitur polr(). Pendekatan umum adalah:
Menilai apakah koefisien berbeda signifikan jika diasumsikan tidak proporsional.
Jika asumsi tidak terpenuhi, hasil model ordinal bisa bias.
Untuk goodness-of-fit, kita bisa menggunakan pseudo R-squared atau membandingkan deviance antara model dan null model:
null_model <- polr(risiko ~ 1, data = data_risiko, Hess = TRUE)
1 - (logLik(model_risiko) / logLik(null_model)) # McFadden's pseudo R2
## 'log Lik.' 0.005334179 (df=6)
Jika asumsi proportional odds tidak terpenuhi, kita dapat menggunakan model alternatif, seperti:
Partial Proportional Odds Model – memungkinkan sebagian variabel memiliki efek yang tidak konstan di seluruh kategori.
Bisa digunakan dengan paket VGAM atau ordinal.
library(VGAM)
## Loading required package: stats4
## Loading required package: splines
##
## Attaching package: 'VGAM'
## The following object is masked from 'package:caret':
##
## predictors
model_ppom <- vglm(risiko ~ usia + tingkat_pendidikan, family = cumulative(parallel = FALSE), data = data_risiko)
Continuation Ratio Model – cocok jika proses pengambilan keputusan berlangsung bertahap (sequential).
Adjacent Category Logit Model – membandingkan kategori yang bersebelahan.
Pemilihan model sangat bergantung pada:
Tujuan analisis (klasifikasi vs interpretasi)
Struktur data (ordinal dengan ketidakteraturan)
Kesesuaian asumsi model
summary(model_ppom)
##
## Call:
## vglm(formula = risiko ~ usia + tingkat_pendidikan, family = cumulative(parallel = FALSE),
## data = data_risiko)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -0.3860808 0.3295079 -1.172 0.24132
## (Intercept):2 1.1109375 0.3646371 3.047 0.00231 **
## usia:1 -0.0072322 0.0080770 -0.895 0.37057
## usia:2 0.0009907 0.0088704 0.112 0.91107
## tingkat_pendidikan.L:1 -0.1238477 0.1609837 -0.769 0.44170
## tingkat_pendidikan.L:2 -0.3645493 0.1873211 -1.946 0.05164 .
## tingkat_pendidikan.Q:1 0.0128917 0.1677006 0.077 0.93872
## tingkat_pendidikan.Q:2 0.3215970 0.1810451 1.776 0.07568 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y<=1]), logitlink(P[Y<=2])
##
## Residual deviance: 1067.302 on 992 degrees of freedom
##
## Log-likelihood: -533.6509 on 992 degrees of freedom
##
## Number of Fisher scoring iterations: 4
##
## No Hauck-Donner effect found in any of the estimates
##
##
## Exponentiated coefficients:
## usia:1 usia:2 tingkat_pendidikan.L:1
## 0.9927939 1.0009912 0.8835144
## tingkat_pendidikan.L:2 tingkat_pendidikan.Q:1 tingkat_pendidikan.Q:2
## 0.6945096 1.0129752 1.3793288
Interpretasi hasil alternatif model bisa berbeda secara substansial, terutama jika efek dari prediktor berubah antar level kategori.
Regresi logistik ordinal merupakan metode yang tepat ketika variabel respons bersifat ordinal, yaitu memiliki urutan tetapi tidak memiliki jarak yang terukur antar kategori. Model cumulative logit adalah pendekatan paling umum, di mana kita mengasumsikan efek prediktor bersifat konstan di seluruh batas kategori (proportional odds).
Melalui model ini, kita bisa mengestimasi probabilitas kumulatif dari suatu observasi berada pada atau di bawah suatu level kategori, serta menafsirkan pengaruh setiap variabel bebas terhadap urutan kategori.
Dengan mempertimbangkan nilai p-value, koefisien, dan prediksi probabilitas, model ini dapat digunakan untuk tujuan klasifikasi maupun inferensial. Namun, kevalidan model sangat bergantung pada pemenuhan asumsi, terutama asumsi proportional odds.
Asumsi paralelisme, atau dikenal juga sebagai proportional odds assumption, menyatakan bahwa koefisien prediktor tidak berubah untuk setiap batasan antara kategori ordinal.
Artinya, garis logit dari setiap kategori berbeda hanya dalam nilai konstanta (intercept), bukan pada koefisien variabel prediktor. Jika asumsi ini tidak terpenuhi, maka hasil estimasi akan bias dan interpretasi menjadi tidak valid.
Untuk memeriksa asumsi ini, dapat digunakan:
Contoh ilustrasi uji asumsi dengan paket brant
(opsional):
library(brant)
brant(model_risiko)
Model log-linear adalah metode yang digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategorik dalam bentuk tabel kontingensi. Tidak seperti regresi logistik yang memodelkan satu variabel sebagai respons, model log-linear memperlakukan semua variabel sebagai respons dan menjelaskan hubungan simetris antar mereka.
Misalnya, kita punya tabel kontingensi 3 arah dari variabel A, B, dan C. Model loglinier yang mungkin adalah:
Contoh:
# Simulasi data tabel kontingensi 3 arah
set.seed(123)
data_loglin <- expand.grid(A = c("A1", "A2"),
B = c("B1", "B2"),
C = c("C1", "C2"))
data_loglin$Freq <- sample(10:100, size = 8)
# Lihat Data
tab <- table(data_loglin$A, data_loglin$B, data_loglin$C)
# Model loglinier dengan interaksi dua arah: [AB][AC][BC]
model_loglin <- loglin(tab,
margin = list(c(1,2), c(1,3), c(2,3)),
param = TRUE)
## 1 iterations: deviation 0
# Untuk melihat nilai fitted
fitted_values <- model_loglin$fitted
Model loglinier sering digunakan untuk menguji apakah ada hubungan antar variabel. Misalnya, kita ingin tahu apakah variabel A dan B saling bebas ketika dikontrol terhadap C. Ini dapat diuji melalui struktur interaksi dalam model loglinier.
Model saturated (model jenuh) dalam log-linear adalah model yang memasukkan semua efek utama dan seluruh interaksi (termasuk interaksi tertinggi). Ini berarti model tersebut sepenuhnya menjelaskan variabilitas dalam tabel kontingensi dan tidak menyisakan derajat bebas untuk error.
Dalam tabel kontingensi tiga arah (misalnya A, B, C), model saturated dapat dituliskan sebagai:
\[ \log(\mu_{ijk}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^C_k + \lambda^{AB}_{ij} + \lambda^{AC}_{ik} + \lambda^{BC}_{jk} + \lambda^{ABC}_{ijk} \]
Dimana: - \(\mu_{ijk}\): ekspektasi dari sel dengan kombinasi A=i, B=j, dan C=k - \(\lambda\): intercept - \(\lambda^A_i\), \(\lambda^B_j\), \(\lambda^C_k\): efek utama - \(\lambda^{AB}_{ij}\), dll.: efek interaksi
# Simulasi ulang data
set.seed(123)
data_loglin <- expand.grid(A = c("A1", "A2"),
B = c("B1", "B2"),
C = c("C1", "C2"))
data_loglin$Freq <- sample(10:100, size = 8)
# Buat table kontingensi
table_loglin <- xtabs(Freq ~ A + B + C, data = data_loglin)
# Model saturated
model_saturated <- loglin(table_loglin,
margin = list(c(1,2,3)), # semua interaksi tiga arah
param = TRUE)
## 2 iterations: deviation 0
# Mengakses nilai fitted
fitted_values <- model_saturated$fitted
Karena model saturated memuat semua informasi dalam data, hasil fit-nya akan sempurna (G² = 0), namun kelemahannya adalah kurangnya generalisasi karena kompleksitas model yang sangat tinggi.
Model independent (model bebas) adalah model log-linear paling sederhana, yang hanya memasukkan efek utama dari masing-masing variabel dan tidak memuat interaksi antar variabel.
Model ini mengasumsikan bahwa semua variabel bebas satu sama lain, atau tidak ada hubungan (interaksi) di antara variabel. Dalam konteks tabel kontingensi tiga arah (misalnya A, B, C), model ini dapat dituliskan sebagai:
\[ \log(\mu_{ijk}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^C_k \]
Model ini menyiratkan bahwa ketiga variabel (A, B, dan C) bersifat independen secara penuh satu sama lain.
# Gunakan kembali data dari bagian sebelumnya
# table_loglin sudah berisi tabel kontingensi 3 dimensi
# Model independent (hanya efek utama)
model_indep <- loglin(table_loglin,
margin = list(1, 2, 3),
param = TRUE)
## 2 iterations: deviation 2.842171e-14
# Output statistik goodness-of-fit
model_indep
## $lrt
## [1] 42.384
##
## $pearson
## [1] 41.58805
##
## $df
## [1] 4
##
## $margin
## $margin[[1]]
## [1] "A"
##
## $margin[[2]]
## [1] "B"
##
## $margin[[3]]
## [1] "C"
##
##
## $param
## $param$`(Intercept)`
## [1] 4.01536
##
## $param$A
## A1 A2
## 0.04680475 -0.04680475
##
## $param$B
## B1 B2
## 0.1367027 -0.1367027
##
## $param$C
## C1 C2
## -0.06020627 0.06020627
Interpretasi Jika model ini memiliki nilai G² yang tinggi dan p-value rendah, berarti asumsi independensi penuh tidak cocok untuk data, dan kita memerlukan model yang mempertimbangkan interaksi antar variabel.
Model ini penting karena menjadi dasar pembanding untuk model-model yang lebih kompleks. Misalnya, kita bisa membandingkan model independent dengan model dengan interaksi dua arah atau model saturated menggunakan perbedaan nilai deviance (G²).
Odds ratio (OR) adalah ukuran asosiasi antara dua variabel kategori. Dalam konteks tabel kontingensi, OR digunakan untuk mengukur kekuatan hubungan antar variabel. OR didefinisikan sebagai:
\[ \text{OR} = \frac{(a/c)}{(b/d)} = \frac{ad}{bc} \]
di mana:
# Tabel 2x2 contoh
tabel_2x2 <- matrix(c(30, 10, 20, 40), nrow = 2,
dimnames = list(A = c("A1", "A2"),
B = c("B1", "B2")))
# Odds ratio manual
odds_ratio <- (tabel_2x2[1,1] * tabel_2x2[2,2]) /
(tabel_2x2[1,2] * tabel_2x2[2,1])
odds_ratio
## [1] 6
Dalam model log-linear, parameter diestimasi menggunakan metode maksimum likelihood. Setiap parameter mewakili log dari rasio peluang (log odds) atau log dari nilai ekspektasi sel tertentu.
Estimasi dengan loglm() dari paket MASS
library(MASS)
# Misal kita ingin model dengan interaksi antara A dan B, tanpa C
model_ab <- loglm(~ A + B + C + A:B, data = table_loglin)
summary(model_ab)
## Formula:
## ~A + B + C + A:B
## attr(,"variables")
## list(A, B, C)
## attr(,"factors")
## A B C A:B
## A 1 0 0 1
## B 0 1 0 1
## C 0 0 1 0
## attr(,"term.labels")
## [1] "A" "B" "C" "A:B"
## attr(,"order")
## [1] 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 31.22246 3 7.631301e-07
## Pearson 30.73059 3 9.686407e-07
Interpretasi: Koefisien yang signifikan menunjukkan adanya interaksi atau efek utama yang relevan. Jika p-value kecil (< 0.05), parameter tersebut dianggap penting dalam model.
Model log-linear dapat disederhanakan dengan menghilangkan interaksi atau efek tertentu. Tujuannya adalah untuk mendapatkan model yang cukup baik (fit) tetapi tidak terlalu kompleks (parsimonious).
Misal kita punya tabel 3-dimensi dari variabel A, B, dan C:
library(MASS)
# Simulasi data kontingensi 3D
set.seed(123)
table_abc <- array(sample(10:100, 8, replace = TRUE),
dim = c(2, 2, 2),
dimnames = list(A = c("A1", "A2"),
B = c("B1", "B2"),
C = c("C1", "C2")))
# Model saturated (semua interaksi)
model_saturated <- loglm(~ A*B*C, data = table_abc)
# Model tanpa interaksi 3 arah
model_no_3way <- loglm(~ A*B + A*C + B*C, data = table_abc)
# Bandingkan dengan uji Likelihood Ratio (G²)
anova(model_no_3way, model_saturated)
## LR tests for hierarchical log-linear models
##
## Model 1:
## ~A * B + A * C + B * C
## Model 2:
## ~A * B * C
##
## Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1 25.70251 1
## Model 2 0.00000 0 25.70251 1 0
## Saturated 0.00000 0 0.00000 0 1
Interpretasi: Uji G² (Likelihood-Ratio) membandingkan kecocokan dua model.
Jika p-value besar (> 0.05), maka model yang lebih sederhana cukup baik.
Jika p-value kecil, maka informasi hilang signifikan, dan model lebih kompleks dibutuhkan.
Prinsip Parsimony: Lebih disukai model yang menjelaskan data dengan jumlah parameter paling sedikit tanpa kehilangan akurasi yang signifikan. Perbandingan model secara statistik membantu kita menemukan model terbaik dari segi keseimbangan antara kompleksitas dan kecocokan data.
Untuk mengilustrasikan penerapan model log-linear, kita akan
menggunakan data simulasi yang merepresentasikan hubungan antara
jenis kelamin (Gender), tingkat
pendidikan (Education), dan kepercayaan
terhadap surga (Belief_in_Heaven).
# Simulasi data kontingensi 3D
set.seed(42)
table_surga <- array(
sample(20:100, 24, replace = TRUE),
dim = c(2, 3, 4),
dimnames = list(
Gender = c("Male", "Female"),
Education = c("Low", "Medium", "High"),
Belief_in_Heaven = c("Yes", "Maybe", "No", "Not sure")
)
)
table_surga
## , , Belief_in_Heaven = Yes
##
## Education
## Gender Low Medium High
## Male 68 44 37
## Female 84 93 68
##
## , , Belief_in_Heaven = Maybe
##
## Education
## Gender Low Medium High
## Male 66 90 39
## Female 43 56 45
##
## , , Belief_in_Heaven = No
##
## Education
## Gender Low Medium High
## Male 22 46 24
## Female 60 55 53
##
## , , Belief_in_Heaven = Not sure
##
## Education
## Gender Low Medium High
## Male 22 61 49
## Female 77 43 62
Model Saturated dan Model Alternatif
library(MASS)
# Model saturated (A*B*C)
model_saturated <- loglm(~ Gender * Education * Belief_in_Heaven, data = table_surga)
# Model tanpa interaksi tiga arah
model_two_way <- loglm(~ Gender * Education + Gender * Belief_in_Heaven + Education * Belief_in_Heaven, data = table_surga)
# Perbandingan model
anova(model_two_way, model_saturated)
## LR tests for hierarchical log-linear models
##
## Model 1:
## ~Gender * Education + Gender * Belief_in_Heaven + Education * Belief_in_Heaven
## Model 2:
## ~Gender * Education * Belief_in_Heaven
##
## Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1 38.50084 6
## Model 2 0.00000 0 38.50084 6 0
## Saturated 0.00000 0 0.00000 0 1
Interpretasi Jika p-value dari uji Likelihood Ratio besar, maka model dua arah cukup baik.
Jika kecil, maka interaksi tiga arah signifikan dan perlu dipertahankan.
Kita bisa membaca efek interaksi dan hubungan antar variabel dalam konteks kepercayaan terhadap surga berdasarkan gender dan pendidikan.
Evaluasi Parameter Model
summary(model_two_way)
## Formula:
## ~Gender * Education + Gender * Belief_in_Heaven + Education *
## Belief_in_Heaven
## attr(,"variables")
## list(Gender, Education, Belief_in_Heaven)
## attr(,"factors")
## Gender Education Belief_in_Heaven Gender:Education
## Gender 1 0 0 1
## Education 0 1 0 1
## Belief_in_Heaven 0 0 1 0
## Gender:Belief_in_Heaven Education:Belief_in_Heaven
## Gender 1 0
## Education 0 1
## Belief_in_Heaven 1 1
## attr(,"term.labels")
## [1] "Gender" "Education"
## [3] "Belief_in_Heaven" "Gender:Education"
## [5] "Gender:Belief_in_Heaven" "Education:Belief_in_Heaven"
## attr(,"order")
## [1] 1 1 1 2 2 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 38.50084 6 8.964899e-07
## Pearson 37.46094 6 1.431592e-06
Output dari fungsi summary() menampilkan estimasi parameter dan statistik goodness-of-fit untuk mengevaluasi kontribusi masing-masing interaksi dan efek utama.
Kesimpulan Dengan model log-linear, kita bisa mengetahui apakah ada hubungan yang signifikan antara:
Gender dan Belief_in_Heaven
Education dan Belief_in_Heaven
Dan apakah interaksi ketiganya (Gender * Education * Belief_in_Heaven) diperlukan untuk menjelaskan data secara menyeluruh.
Model log-linear digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategori dalam sebuah tabel kontingensi. Dalam model ini, logaritma dari frekuensi harapan sel dalam tabel kontingensi dimodelkan sebagai kombinasi linier dari efek utama dan interaksi antar variabel.
Misalnya, untuk tabel dua arah antara variabel \(A\) dan \(B\), model log-linear dasarnya adalah: \[ \log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \] dimana: - \(\mu_{ij}\): frekuensi harapan untuk sel dengan kategori \(A = i\), \(B = j\), - \(\lambda\): intercept (konstanta), - \(\lambda^A_i\): efek utama dari kategori ke-\(i\) pada variabel \(A\), - \(\lambda^B_j\): efek utama dari kategori ke-\(j\) pada variabel \(B\), - \(\lambda^{AB}_{ij}\): efek interaksi antara \(A = i\) dan \(B = j\).
Jika tidak ada interaksi (model independen), maka \(\lambda^{AB}_{ij} = 0\), artinya \(A\) dan \(B\) saling bebas (tidak berasosiasi).
| Aspek | Model Log-Linear | Model Regresi Logistik |
|---|---|---|
| Tujuan | Menjelaskan hubungan simetris antara variabel kategori | Memprediksi variabel kategori tergantung pada satu atau lebih prediktor |
| Variabel dependen | Tidak ada; semua variabel dianggap setara (simetris) | Ada variabel dependen kategori (biasanya biner atau multinomial) |
| Aplikasi | Analisis asosiasi dalam tabel kontingensi | Klasifikasi dan prediksi probabilitas outcome |
| Distribusi | Multinomial (frekuensi) | Binomial (probabilitas) |
| Interpretasi | Menginterpretasi efek interaksi antar variabel kategori | Menginterpretasi efek prediktor terhadap outcome |
Model log-linear lebih cocok untuk eksplorasi hubungan struktural antara semua variabel dalam tabel kontingensi, sedangkan regresi logistik digunakan saat ada satu variabel sebagai outcome yang ingin diprediksi.
Tabel kontingensi 2x2 merupakan tabel yang menunjukkan frekuensi dari dua variabel kategori, masing-masing dengan dua level. Contoh sederhana adalah hubungan antara jenis kelamin (Laki-laki, Perempuan) dan status merokok (Merokok, Tidak Merokok).
| Merokok | Tidak Merokok | |
|---|---|---|
| Laki-laki | 30 | 20 |
| Perempuan | 10 | 40 |
Analisis log-linear pada tabel ini bertujuan menguji apakah terdapat asosiasi antara variabel jenis kelamin dan status merokok. Jika tidak ada asosiasi, maka variabel tersebut independen.
Model log-linear untuk tabel 2x2 dapat ditulis sebagai:
\[ \log(\mu_{ij}) = \lambda + \lambda_i^A + \lambda_j^B + \lambda_{ij}^{AB} \]
dimana: - \(\mu_{ij}\) adalah frekuensi harapan pada sel baris \(i\) dan kolom \(j\), - \(\lambda\) adalah intercept, - \(\lambda_i^A\) adalah efek utama baris (misal jenis kelamin), - \(\lambda_j^B\) adalah efek utama kolom (misal status merokok), - \(\lambda_{ij}^{AB}\) adalah efek interaksi antara baris dan kolom.
Model dengan asumsi independensi menghilangkan efek interaksi:
\[ \log(\mu_{ij}) = \lambda + \lambda_i^A + \lambda_j^B \]
Estimasi parameter pada model log-linear dapat dilakukan dengan metode maksimum likelihood. Untuk model sum-to-zero, efek parameter dijaga agar jumlahnya nol:
\[ \sum_i \lambda_i^A = 0, \quad \sum_j \lambda_j^B = 0, \quad \sum_i \lambda_{ij}^{AB} = \sum_j \lambda_{ij}^{AB} = 0 \]
Sebagai contoh, dengan data tabel 2x2 di atas, kita dapat hitung frekuensi total, frekuensi marginal, dan menggunakan rumus:
\[ \hat{\mu}_{ij} = \frac{n_{i\cdot} n_{\cdot j}}{n} \]
dimana: - \(n_{i\cdot}\) adalah total frekuensi baris ke-\(i\), - \(n_{\cdot j}\) adalah total frekuensi kolom ke-\(j\), - \(n\) adalah total observasi.
Contoh:
Frekuensi harapan sel (1,1):
\[ \hat{\mu}_{11} = \frac{50 \times 40}{100} = 20 \]
Ini mengindikasikan frekuensi harapan di bawah asumsi independensi adalah 20, sementara frekuensi observasi adalah 30, yang menunjukkan adanya deviasi yang dapat diinterpretasikan sebagai asosiasi.
Untuk perhitungan parameter \(\lambda\), dapat dilakukan dengan rumus:
\[ \lambda_i^A = \log \left( \frac{n_{i\cdot}}{n} \right) - \frac{1}{I} \sum_{i} \log \left( \frac{n_{i\cdot}}{n} \right) \]
dan seterusnya, menjaga sum-to-zero constraint.
Catatan: Perhitungan manual ini berguna untuk memahami konsep, tetapi biasanya estimasi parameter dilakukan dengan perangkat lunak statistik seperti R (
loglin()atauglm()dengan family poisson).
Odds Ratio (OR) adalah ukuran asosiasi antara dua variabel kategori dalam tabel kontingensi 2x2. OR mengukur perbandingan odds kejadian pada satu kelompok terhadap kelompok lain.
Misalkan tabel frekuensi:
| Merokok | Tidak Merokok | |
|---|---|---|
| Laki-laki | \(a\) | \(b\) |
| Perempuan | \(c\) | \(d\) |
Odds Ratio dihitung dengan rumus:
\[ OR = \frac{a \times d}{b \times c} \]
Interpretasi: - \(OR = 1\) berarti tidak ada asosiasi, - \(OR > 1\) berarti kelompok baris pertama lebih berisiko, - \(OR < 1\) berarti kelompok baris pertama lebih rendah risikonya.
Interval kepercayaan (confidence interval) untuk \(\log(OR)\) dihitung dengan:
\[ SE = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} \]
Kemudian interval kepercayaan 95%:
\[ \log(OR) \pm 1.96 \times SE \]
Transformasi balik:
\[ CI = \left( e^{\log(OR) - 1.96 SE}, \quad e^{\log(OR) + 1.96 SE} \right) \]
Berikut contoh kode R untuk fitting model log-linear pada tabel 2x2, menghitung OR dan CI, serta interpretasi hasil.
# Membuat data tabel kontingensi 2x2
data <- matrix(c(30, 20, 10, 40), nrow=2, byrow=TRUE,
dimnames=list(JenisKelamin=c("Laki-laki", "Perempuan"),
Merokok=c("Ya", "Tidak")))
# Melihat data
print(data)
## Merokok
## JenisKelamin Ya Tidak
## Laki-laki 30 20
## Perempuan 10 40
# Fitting model log-linear saturate (dengan interaksi)
model_saturated <- loglin(data, margin=list(c(1), c(2), c(1,2)), fit=TRUE)
## 2 iterations: deviation 0
print(model_saturated)
## $lrt
## [1] 0
##
## $pearson
## [1] 0
##
## $df
## [1] 0
##
## $margin
## $margin[[1]]
## [1] "JenisKelamin"
##
## $margin[[2]]
## [1] "Merokok"
##
## $margin[[3]]
## [1] "JenisKelamin" "Merokok"
##
##
## $fit
## Merokok
## JenisKelamin Ya Tidak
## Laki-laki 30 20
## Perempuan 10 40
# Fitting model independensi (tanpa interaksi)
model_indep <- loglin(data, margin=list(c(1), c(2)), fit=TRUE)
## 2 iterations: deviation 0
print(model_indep)
## $lrt
## [1] 17.26092
##
## $pearson
## [1] 16.66667
##
## $df
## [1] 1
##
## $margin
## $margin[[1]]
## [1] "JenisKelamin"
##
## $margin[[2]]
## [1] "Merokok"
##
##
## $fit
## Merokok
## JenisKelamin Ya Tidak
## Laki-laki 20 30
## Perempuan 20 30
# Odds Ratio
a <- data[1,1]
b <- data[1,2]
c <- data[2,1]
d <- data[2,2]
OR <- (a * d) / (b * c)
logOR <- log(OR)
SE_logOR <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_lower <- exp(logOR - 1.96 * SE_logOR)
CI_upper <- exp(logOR + 1.96 * SE_logOR)
cat("Odds Ratio:", round(OR, 3), "\n")
## Odds Ratio: 6
cat("95% CI:", round(CI_lower, 3), "-", round(CI_upper, 3), "\n")
## 95% CI: 2.453 - 14.678
Interpretasi:
Model saturasi (dengan interaksi) menguji apakah ada asosiasi antar variabel.
Model independensi mengasumsikan variabel bebas satu sama lain.
Jika model saturasi jauh lebih baik (misal deviance jauh lebih kecil) dibanding model independensi, maka ada bukti asosiasi.
Odds Ratio dan interval kepercayaan menunjukkan kekuatan dan ketepatan estimasi asosiasi tersebut.
Parameter dalam model log-linear mengukur pengaruh faktor dan interaksi antar faktor terhadap log frekuensi harapan dalam tabel kontingensi.
Misalkan model log-linear untuk tabel 2x2:
\[ \log(m_{ij}) = \mu + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]
Interpretasi:
Dalam konteks model log-linear, tanda dan besar kecil parameter menunjukkan arah dan kekuatan hubungan.
Kita lanjutkan dengan contoh tabel 2x3, dan fitting model log-linear dengan R.
# Membuat tabel kontingensi 2x3
data_2x3 <- matrix(c(20, 15, 10, 25, 30, 35), nrow=2, byrow=TRUE,
dimnames=list(Gender=c("Laki-laki", "Perempuan"),
Status=c("Belum Menikah", "Menikah", "Janda")))
# Melihat data
print(data_2x3)
## Status
## Gender Belum Menikah Menikah Janda
## Laki-laki 20 15 10
## Perempuan 25 30 35
# Fitting model saturasi (dengan interaksi)
model_saturated_2x3 <- loglin(data_2x3, margin=list(c(1), c(2), c(1,2)), fit=TRUE)
## 2 iterations: deviation 0
print(model_saturated_2x3)
## $lrt
## [1] 0
##
## $pearson
## [1] 0
##
## $df
## [1] 0
##
## $margin
## $margin[[1]]
## [1] "Gender"
##
## $margin[[2]]
## [1] "Status"
##
## $margin[[3]]
## [1] "Gender" "Status"
##
##
## $fit
## Status
## Gender Belum Menikah Menikah Janda
## Laki-laki 20 15 10
## Perempuan 25 30 35
# Fitting model independensi (tanpa interaksi)
model_indep_2x3 <- loglin(data_2x3, margin=list(c(1), c(2)), fit=TRUE)
## 2 iterations: deviation 0
print(model_indep_2x3)
## $lrt
## [1] 5.07245
##
## $pearson
## [1] 5
##
## $df
## [1] 2
##
## $margin
## $margin[[1]]
## [1] "Gender"
##
## $margin[[2]]
## [1] "Status"
##
##
## $fit
## Status
## Gender Belum Menikah Menikah Janda
## Laki-laki 15 15 15
## Perempuan 30 30 30
# Membandingkan deviance model independensi dan saturasi
cat("Deviance Model Saturasi:", model_saturated_2x3$lrt, "\n")
## Deviance Model Saturasi: 0
cat("Deviance Model Independen:", model_indep_2x3$lrt, "\n")
## Deviance Model Independen: 5.07245
Interpretasi:
Jika deviance model independensi jauh lebih besar dari model saturasi, artinya ada asosiasi antara faktor Gender dan Status.
Jika tidak signifikan, faktor-faktor tersebut independen.
Model log-linear untuk tabel kontingensi 2x3 dengan dua faktor A (2 level) dan B (3 level) ditulis sebagai:
\[ \log(m_{ij}) = \mu + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]
Dimana:
Efek interaksi \(\lambda_{ij}^{AB}\) menunjukkan apakah ada asosiasi antara faktor A dan B.
Berikut contoh fitting model log-linear menggunakan fungsi
loglin() pada data 2x3:
# Data tabel kontingensi 2x3
data_2x3 <- matrix(c(20, 15, 10, 25, 30, 35), nrow=2, byrow=TRUE,
dimnames=list(Gender=c("Laki-laki", "Perempuan"),
Status=c("Belum Menikah", "Menikah", "Janda")))
# Fitting model saturasi (dengan interaksi)
model_saturated <- loglin(data_2x3, margin=list(c(1), c(2), c(1,2)), fit=TRUE)
## 2 iterations: deviation 0
print(model_saturated)
## $lrt
## [1] 0
##
## $pearson
## [1] 0
##
## $df
## [1] 0
##
## $margin
## $margin[[1]]
## [1] "Gender"
##
## $margin[[2]]
## [1] "Status"
##
## $margin[[3]]
## [1] "Gender" "Status"
##
##
## $fit
## Status
## Gender Belum Menikah Menikah Janda
## Laki-laki 20 15 10
## Perempuan 25 30 35
# Fitting model independensi (tanpa interaksi)
model_indep <- loglin(data_2x3, margin=list(c(1), c(2)), fit=TRUE)
## 2 iterations: deviation 0
print(model_indep)
## $lrt
## [1] 5.07245
##
## $pearson
## [1] 5
##
## $df
## [1] 2
##
## $margin
## $margin[[1]]
## [1] "Gender"
##
## $margin[[2]]
## [1] "Status"
##
##
## $fit
## Status
## Gender Belum Menikah Menikah Janda
## Laki-laki 15 15 15
## Perempuan 30 30 30
# Membandingkan deviance antara model
cat("Deviance model saturasi:", model_saturated$lrt, "\n")
## Deviance model saturasi: 0
cat("Deviance model independensi:", model_indep$lrt, "\n")
## Deviance model independensi: 5.07245
Model saturasi memuat efek utama dan interaksi, sehingga cocok jika ada asosiasi antara dua faktor.
Model independensi hanya memuat efek utama, cocok jika tidak ada asosiasi.
Nilai deviance (likelihood ratio test statistic) yang lebih kecil menunjukkan model yang lebih baik fit dengan data.
Jika deviance model independensi jauh lebih besar dan signifikan dibanding model saturasi, berarti ada asosiasi antara faktor.
Sebaliknya, jika deviance model independensi tidak jauh berbeda dan tidak signifikan, faktor-faktor tersebut independen.
Dengan fitting dan interpretasi model log-linear ini, kita dapat memahami hubungan antar variabel kategori dalam tabel kontingensi secara lebih mendalam.
Model log-linear tiga arah digunakan untuk menganalisis tabel kontingensi dengan tiga faktor kategorik, misalnya faktor A, B, dan C dengan jumlah level masing-masing.
Model log-linear umum untuk tabel tiga arah adalah:
\[ \log(m_{ijk}) = \mu + \lambda_i^{A} + \lambda_j^{B} + \lambda_k^{C} + \lambda_{ij}^{AB} + \lambda_{ik}^{AC} + \lambda_{jk}^{BC} + \lambda_{ijk}^{ABC} \]
Dimana:
Model ini memungkinkan kita menguji apakah ada asosiasi antara faktor-faktor secara satu per satu, pasangan, maupun secara simultan ketiga faktor.
Pada model log-linear tiga arah, penting untuk menguji signifikansi interaksi antara faktor-faktor. Interaksi ini dapat berupa interaksi dua arah maupun tiga arah.
Tujuan Pengujian: - Menentukan apakah hubungan antara dua faktor tergantung pada faktor ketiga (interaksi tiga arah). - Menilai apakah interaksi dua arah cukup menjelaskan data tanpa perlu menambahkan interaksi tiga arah.
Pendekatan Pengujian:
Uji Likelihood Ratio (G²)
Bandingkan model lengkap (termasuk interaksi tiga arah) dengan model
tanpa interaksi tiga arah.
Uji Chi-Square Pearson (X²)
Mirip dengan G², digunakan untuk mengevaluasi goodness-of-fit
model.
Langkah-langkah:
Interpretasi:
# Contoh data simulasi
set.seed(123)
data <- array(sample(1:50, 27, replace=TRUE), dim=c(3,3,3),
dimnames=list(A=c("A1","A2","A3"),
B=c("B1","B2","B3"),
C=c("C1","C2","C3")))
# Model penuh (termasuk interaksi tiga arah)
model_full <- loglin(data, margin = list(c(1), c(2), c(3), c(1,2), c(1,3), c(2,3), c(1,2,3)), fit=TRUE)
## 2 iterations: deviation 0
# Model tanpa interaksi tiga arah
model_no_3way <- loglin(data, margin = list(c(1), c(2), c(3), c(1,2), c(1,3), c(2,3)), fit=TRUE)
## 5 iterations: deviation 0.02356867
# Bandingkan deviance dan hitung p-value
dev_diff <- model_no_3way$deviance - model_full$deviance
df_diff <- model_no_3way$df - model_full$df
p_value <- pchisq(dev_diff, df_diff, lower.tail = FALSE)
cat("Likelihood ratio test p-value:", p_value, "\n")
## Likelihood ratio test p-value:
Sebuah survei dilakukan untuk mengamati hubungan antara tiga variabel kategorik: A (dengan 3 level), B (3 level), dan C (3 level). Data hasil survei direkam dalam tabel kontingensi tiga arah.
| A | B | C | Frekuensi |
|---|---|---|---|
| A1 | B1 | C1 | 12 |
| A1 | B1 | C2 | 8 |
| A1 | B1 | C3 | 15 |
| A1 | B2 | C1 | 14 |
| A1 | B2 | C2 | 10 |
| A1 | B2 | C3 | 13 |
| A1 | B3 | C1 | 9 |
| A1 | B3 | C2 | 7 |
| A1 | B3 | C3 | 11 |
| A2 | B1 | C1 | 16 |
| A2 | B1 | C2 | 14 |
| A2 | B1 | C3 | 12 |
| A2 | B2 | C1 | 18 |
| A2 | B2 | C2 | 13 |
| A2 | B2 | C3 | 15 |
| A2 | B3 | C1 | 10 |
| A2 | B3 | C2 | 9 |
| A2 | B3 | C3 | 12 |
| A3 | B1 | C1 | 14 |
| A3 | B1 | C2 | 13 |
| A3 | B1 | C3 | 11 |
| A3 | B2 | C1 | 17 |
| A3 | B2 | C2 | 15 |
| A3 | B2 | C3 | 14 |
| A3 | B3 | C1 | 12 |
| A3 | B3 | C2 | 11 |
| A3 | B3 | C3 | 13 |
Analisis log-linear untuk tabel tiga arah digunakan untuk menguji hubungan dan interaksi antara tiga variabel kategorik. Model ini dapat mengidentifikasi apakah terdapat interaksi dua arah maupun tiga arah di antara variabel-variabel tersebut, sehingga memberikan gambaran lengkap mengenai asosiasi di dalam data.
Dalam analisis ini, biasanya digunakan model-model bertingkat mulai dari model independen, model dengan interaksi dua arah, hingga model saturated (model penuh dengan semua interaksi).
Untuk melakukan analisis log-linear tiga arah di R, beberapa package yang umum digunakan antara lain:
loglm() yang sangat berguna untuk fitting model log-linear
pada tabel kontingensi.Berikut contoh instalasi package yang diperlukan:
install.packages(c(“MASS”, “gmodels”, “vcd”, “tidyverse”)) library(MASS) library(vcd) library(tidyverse)
Dalam analisis model log-linear tiga arah, terutama ketika membandingkan model saturated (penuh dengan semua interaksi) dengan model homogeneous (model yang mengasumsikan tidak ada interaksi tiga arah), penentuan kategori referensi sangat penting.
Kategori referensi adalah kategori acuan pada setiap variabel kategorik yang digunakan untuk menginterpretasikan parameter model. Penentuan kategori referensi biasanya dipilih berdasarkan kategori dengan frekuensi tertinggi atau kategori yang secara substantif relevan.
Kategori referensi ini akan menjadi basis perbandingan untuk kategori lain, sehingga interpretasi parameter berkaitan dengan perbedaan dari kategori referensi.
Setelah melakukan fitting model log-linear untuk tabel tiga arah, kita dapat melihat ringkasan model yang mencakup estimasi parameter, deviance, nilai AIC, dan statistik goodness-of-fit lainnya. Ringkasan ini penting untuk mengevaluasi kecocokan model terhadap data dan untuk membandingkan model saturated dengan model homogeneous.
Biasanya, ringkasan model meliputi:
Ringkasan ini menjadi dasar untuk pengambilan keputusan apakah model saturated yang kompleks atau model homogeneous yang lebih sederhana lebih sesuai dengan data.
Setelah fitting model log-linear, hasil estimasi koefsien memberikan nilai parameter untuk setiap efek dalam model, baik efek utama maupun interaksi. Koefisien ini menunjukkan besarnya pengaruh kategori variabel terhadap frekuensi pada tabel kontingensi. Koefisien bernilai positif menunjukkan asosiasi positif antara kategori, sedangkan koefisien negatif menunjukkan asosiasi negatif.
Interpretasi koefisien dalam model log-linear didasarkan pada nilai parameter yang diestimasi. Koefisien yang signifikan secara statistik menandakan hubungan yang penting antara variabel-variabel tersebut. Misalnya, koefisien interaksi yang signifikan menunjukkan adanya interaksi antara variabel pada tingkat tertentu. Nilai koefisien juga dapat diubah menjadi odds ratio dengan fungsi eksponensial untuk memudahkan interpretasi.
Goodness-of-fit mengukur seberapa baik model log-linear cocok dengan data observasi. Statistik yang umum digunakan adalah deviance dan Pearson chi-square. Nilai p dari statistik ini menunjukkan apakah model cocok (jika p > 0,05) atau tidak cocok (jika p < 0,05) dengan data. Model saturated biasanya memiliki goodness-of-fit sempurna karena memuat semua parameter, sedangkan model homogeneous lebih sederhana dan harus diuji kesesuaiannya dengan data.
Berdasarkan hasil analisis model log-linear tiga arah, dapat disimpulkan bahwa model saturated dengan interaksi tiga arah memberikan penjelasan paling lengkap terhadap hubungan antar variabel dalam tabel kontingensi. Namun, model homogeneous yang lebih sederhana juga dapat digunakan apabila interaksi tiga arah tidak signifikan, sehingga model lebih parsimonious dan mudah diinterpretasi. Pemilihan model harus mempertimbangkan keseimbangan antara kecocokan data dan kesederhanaan model.
Model homogeneous merupakan model log-linear yang mengasumsikan tidak ada interaksi tiga arah antar variabel, hanya interaksi dua arah dan efek utama yang dimasukkan. Model ini lebih sederhana dibanding model saturated dan digunakan untuk menguji apakah interaksi tiga arah benar-benar diperlukan. Jika model homogeneous memiliki goodness-of-fit yang baik, maka model ini dapat menggantikan model saturated tanpa kehilangan informasi penting.
Uji hipotesis ini bertujuan untuk mengetahui apakah interaksi tiga arah antara variabel-variabel dalam tabel kontingensi signifikan atau tidak. Dengan kata lain, kita ingin menguji apakah model saturated (yang mencakup interaksi tiga arah) memberikan fit yang secara signifikan lebih baik dibandingkan model homogeneous (tanpa interaksi tiga arah).
Tentukan Model:
Estimasi Kedua Model: Gunakan fungsi fitting model log-linear pada data kontingensi tiga arah.
Hitung Statistik Uji: Statistik uji yang umum digunakan adalah Likelihood Ratio Test (G²), yaitu perbedaan deviance antara kedua model: \[ G^2 = D_{\text{homogeneous}} - D_{\text{saturated}} \] dengan derajat kebebasan adalah selisih jumlah parameter kedua model.
Bandingkan dengan Distribusi Chi-Square: Jika nilai p-value dari uji chi-square kurang dari tingkat signifikansi (misalnya 0.05), tolak H0, artinya interaksi tiga arah signifikan.
Kesimpulan: Ambil keputusan berdasarkan hasil uji.
Model Conditional on X adalah model log-linear yang menguji interaksi antara dua variabel (misalnya Y dan Z) dalam setiap kategori variabel ketiga (X). Model ini memperbolehkan adanya interaksi antara Y dan Z yang berbeda-beda tergantung pada nilai X.
Pengujian ini bertujuan untuk mengetahui apakah ada interaksi antara variabel Y dan Z yang bergantung pada kategori variabel X. Secara spesifik, apakah model yang mengasumsikan interaksi berbeda pada tiap level X (Conditional Association) memberikan fit yang lebih baik dibanding model yang menganggap interaksi Y-Z sama pada semua level X (Homogenous Model).
Hipotesis:
H0: Model Homogenous (tidak ada interaksi variabel Y dan Z berbeda menurut kategori X)
H1: Model Conditional Association (ada interaksi variabel Y dan Z yang berbeda pada tiap kategori X)
Langkah pengujian:
Tentukan model homogenous (tanpa interaksi conditional pada X).
Tentukan model conditional on X (dengan interaksi antara Y dan Z yang tergantung pada X).
Estimasi kedua model dan hitung statistik Likelihood Ratio (G²) sebagai perbedaan deviance.
Bandingkan G² dengan distribusi chi-square dengan derajat kebebasan sesuai selisih parameter model.
Tolak H0 jika p-value < tingkat signifikansi (misal 0.05), artinya interaksi Y dan Z berbeda menurut X signifikan.
Tingkat signifikansi biasanya ditetapkan sebesar 0,05 (5%).
- Jika p-value hasil uji Likelihood Ratio (G²) < 0,05, maka
tolak H0 → ada bukti interaksi Y-Z berbeda menurut
kategori X.
- Jika p-value ≥ 0,05, maka gagal tolak H0 → interaksi
Y-Z dianggap homogen (sama) pada semua kategori X.
Statistik uji yang digunakan adalah Likelihood Ratio Test (G²), yaitu
selisih deviance antara model Homogenous dan model Conditional
Association.
Rumus statistik uji:
\[
G^2 = 2 \times \sum O \log \frac{O}{E}
\]
atau dihitung sebagai selisih deviance:
\[
G^2 = \text{Deviance Model Homogenous} - \text{Deviance Model
Conditional}
\]
Statistik ini mengikuti distribusi Chi-kuadrat dengan derajat kebebasan
sama dengan selisih jumlah parameter kedua model.
Daerah penolakan untuk uji hipotesis adalah:
\[
G^2 > \chi^2_{\alpha, df}
\]
di mana:
- \(\alpha\) = tingkat signifikansi
(misal 0,05)
- \(df\) = derajat kebebasan (selisih
jumlah parameter model Homogenous dan Conditional)
Jika statistik uji \(G^2\) lebih besar
dari nilai kritis \(\chi^2\), maka
tolak hipotesis nol.
Statistik uji yang digunakan adalah Likelihood Ratio Test (G²), yaitu
perbandingan deviance antara model Homogenous dan model Conditional on
X. Rumusnya:
\[
G^2 = 2 \sum O \log \frac{O}{E} = \text{Deviance(Model Homogenous)} -
\text{Deviance(Model Conditional)}
\]
Statistik ini mengikuti distribusi Chi-kuadrat dengan derajat kebebasan
sama dengan selisih jumlah parameter dari kedua model.
Daerah penolakan ditentukan oleh:
\[
G^2 > \chi^2_{\alpha, df}
\]
dengan \(\alpha\) = tingkat
signifikansi (misal 0.05) dan \(df\) =
derajat kebebasan (selisih parameter model). Jika \(G^2\) berada di daerah ini, maka hipotesis
nol ditolak.
Pengujian selisih deviance dilakukan untuk membandingkan model Conditional on X dengan model Homogenous. Langkah-langkahnya adalah:
Hitung deviance masing-masing model:
Hitung selisih deviance:
\[
\Delta D = D_{\text{Homogenous}} - D_{\text{Conditional on X}}
\]
Tentukan derajat kebebasan (df) sebagai selisih jumlah parameter antara kedua model.
Statistik uji \(\Delta D\) mengikuti distribusi Chi-kuadrat dengan df tersebut.
Keputusan:
Dengan pengujian ini, kita dapat mengetahui apakah model Conditional on X memberikan perbaikan yang signifikan dibandingkan model Homogenous.
Model Conditional on Y adalah model log-linear yang mengasumsikan adanya asosiasi bersyarat antara variabel lain pada kondisi tertentu pada variabel Y. Model ini berguna untuk menguji interaksi dua arah dengan memperhatikan variabel Y sebagai kondisi.
Model ini secara umum dapat ditulis dengan memasukkan parameter interaksi yang melibatkan Y dan variabel lain, tetapi menghilangkan interaksi yang tidak relevan sesuai asumsi model.
Dalam analisis, model Conditional on Y dibandingkan dengan model Homogenous untuk mengetahui apakah interaksi dua arah yang kondisional pada Y memberikan penjelasan yang lebih baik terhadap data.
Langkah analisis biasanya meliputi: - Estimasi parameter model Conditional on Y - Perbandingan deviance dengan model Homogenous - Pengujian signifikansi interaksi melalui uji deviance Chi-kuadrat
Pengujian ini bertujuan untuk mengetahui apakah terdapat interaksi antara variabel X dan Z dengan memperhatikan model Homogenous dan model Conditional Association on Y.
Dengan demikian, jika H0 ditolak, berarti terdapat interaksi antara X dan Z yang bergantung pada Y.
Pengujian ini dilakukan untuk menguji apakah ada interaksi antara variabel X dan Z dengan menggunakan model Conditional on Y dibandingkan dengan model Homogenous.
Jika \(H_0\) ditolak, maka dapat disimpulkan bahwa ada interaksi yang signifikan antara X dan Z yang bergantung pada Y.
Model Conditional on Z mengasumsikan bahwa interaksi antara variabel X dan Y bergantung pada kategori variabel Z. Model ini memperbolehkan interaksi dua arah antara X dan Y yang kondisional pada level Z tertentu.
Pengujian ini bertujuan untuk menentukan apakah ada interaksi signifikan antara variabel X dan Y yang bergantung pada Z, dengan membandingkan model Homogenous dan model Conditional on Z.
Jika \(H_0\) ditolak, dapat disimpulkan bahwa terdapat interaksi antara X dan Y yang bergantung pada Z.
Pengujian ini dilakukan untuk menentukan apakah model Conditional on Z memberikan fit yang lebih baik dibandingkan model Homogenous, khususnya untuk interaksi antara variabel X dan Y.
Pengujian ini membantu menentukan apakah interaksi dua arah antara X dan Y bergantung pada variabel Z secara signifikan.
Model log-linear digunakan untuk menganalisis hubungan antar variabel kategorikal dalam tabel kontingensi dengan berbagai dimensi. Pemilihan model terbaik dilakukan dengan mempertimbangkan keseimbangan antara kompleksitas model dan kemampuan fit data.
Beberapa jenis model log-linear yang umum digunakan: - Model Saturated: Model paling kompleks yang memasukkan semua interaksi antar variabel. - Model Homogenous: Model yang menganggap interaksi tiga arah tidak signifikan, hanya interaksi dua arah yang ada. - Model Conditional: Model yang mempertimbangkan interaksi antar variabel dengan mengondisikan pada variabel lain.
Pengujian interaksi bertujuan untuk menentukan tingkat interaksi yang signifikan dalam model:
Langkah utama: - Gunakan uji selisih deviance antara model yang dibandingkan. - Perhatikan nilai p-value dan derajat kebebasan. - Pilih model dengan fit baik dan parameter yang paling sedikit (parsimonious).
Pemilihan model terbaik memperhatikan: - Goodness-of-fit - Parsimoni model - Interpretabilitas hasil
Pemilihan model log-linear terbaik didasarkan pada keseimbangan antara kesederhanaan model dan kemampuan model menjelaskan pola hubungan antar variabel dalam data. Model terbaik adalah yang memenuhi beberapa kriteria berikut:
Kesimpulannya, proses pemilihan model terbaik menggunakan pendekatan bertahap dan uji statistik, dimulai dari model yang paling kompleks menuju model yang lebih sederhana, sambil memastikan bahwa model akhir tetap valid dan dapat dipercaya untuk analisis lebih lanjut.
Pada tahap ini, model terbaik yang telah dipilih dari proses pemilihan model log-linear disajikan secara lengkap. Model ini merupakan hasil akhir yang memberikan penjelasan paling optimal terhadap pola hubungan antar variabel dalam data.
Model terbaik biasanya memenuhi kriteria:
Selanjutnya, model terbaik ini akan digunakan untuk interpretasi lebih mendalam, prediksi, dan pengambilan keputusan berdasarkan hasil analisis log-linear.
Deskripsi parameter dan interpretasi koefisien model terbaik, beserta nilai signifikansi masing-masing.
Penjelasan interaksi antar variabel dan implikasi praktis dari hasil model terbaik.
Pembahasan tentang validasi model menggunakan data baru atau teknik cross-validation untuk memastikan generalisasi hasil analisis.
Pada bagian ini, dilakukan pembahasan mendalam tentang arti dan makna dari koefisien yang diperoleh pada model log-linear terbaik. Koefisien ini menggambarkan hubungan dan interaksi antar variabel dalam model.
Beberapa hal yang perlu diperhatikan dalam interpretasi koefisien:
Contoh interpretasi koefisien dapat disajikan berdasarkan hasil output software statistik, misalnya nilai koefisien log-odds dan transformasinya ke odds ratio untuk kemudahan pemahaman.
Nilai dugaan (fitted value) pada model log-linear menunjukkan perkiraan frekuensi sel berdasarkan parameter model yang telah ditentukan. Untuk menghitung nilai dugaan secara manual, digunakan formula umum dari model log-linear:
\[ \log(\hat{\mu}_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]
Setelah memperoleh nilai log dari \(\hat{\mu}_{ijk}\), dilakukan transformasi eksponensial untuk mendapatkan nilai dugaan frekuensi:
\[ \hat{\mu}_{ijk} = \exp(\log(\hat{\mu}_{ijk})) \]
Langkah-langkah perhitungan:
Contoh: Jika model terbaik adalah model log-linear dengan interaksi dua arah (tanpa interaksi tiga arah), maka bentuk umum perhitungannya mengacu pada komponen-komponen interaksi yang ada di dalam model tersebut.
Nilai ini juga dapat digunakan untuk menghitung residual dan menguji goodness-of-fit model.
Latar Belakang
Mahasiswa dari berbagai latar belakang memiliki minat akademik yang beragam. Universitas ingin memahami bagaimana minat akademik mahasiswa terkait dengan jurusan yang mereka ambil dan tahun studi mereka. Informasi ini penting untuk merancang kebijakan akademik dan pengembangan kurikulum, serta memfasilitasi mahasiswa dalam memilih program studi yang sesuai dengan minatnya.
Data yang digunakan adalah dataset student_data_extended.csv yang berisi informasi tentang 1000 mahasiswa, termasuk bidang minat, jurusan, dan tahun studi mereka.
Tujuan Penelitian
Penelitian ini bertujuan untuk:
Menganalisis hubungan antara minat akademik, jurusan, dan tahun studi mahasiswa.
Menguji apakah terdapat interaksi dua arah di antara ketiga variabel tersebut.
Menentukan apakah model log-linear dengan interaksi dua arah cukup untuk menjelaskan struktur hubungan ketiga variabel.
library(dplyr)
library(tidyr)
library(nnet) # regresi logistik multinomial
library(ggplot2)
library(janitor)
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(MASS) # loglin
# Data
df <- read_csv("C:/Users/MyBook Hype/Downloads/student_data_extended.csv")
## Rows: 1000 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (10): Name, AcademicInterest, ExtracurricularActivities, Skills, Locatio...
## dbl (2): StudentID, GPA
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
names(df)
## [1] "StudentID" "Name"
## [3] "AcademicInterest" "ExtracurricularActivities"
## [5] "Skills" "Location"
## [7] "YearOfStudy" "Major"
## [9] "GPA" "Languages"
## [11] "ClubMemberships" "ResearchInterests"
# Membersihkan dan memilih kolom yang relevan
data_clean <- df %>%
dplyr::select(YearOfStudy, Major, AcademicInterest, ExtracurricularActivities) %>%
filter(
!is.na(YearOfStudy),
!is.na(Major),
!is.na(AcademicInterest),
!is.na(ExtracurricularActivities)
) %>%
mutate(
YearOfStudy = as.factor(YearOfStudy),
Major = as.factor(Major),
AcademicInterest = as.factor(AcademicInterest),
Extracurricular = ifelse(ExtracurricularActivities == "None", "No", "Yes"),
Extracurricular = as.factor(Extracurricular)
)
# Membuat tabel kontingensi tiga arah
tab_loglin <- xtabs(~ AcademicInterest + Major + YearOfStudy, data = data_clean)
# Melihat isi tabel
ftable(tab_loglin)
## YearOfStudy Freshman Graduate Junior Senior Sophomore
## AcademicInterest Major
## Biology Biology 3 4 6 2 5
## Computer Science 9 9 6 5 9
## History 4 3 7 4 6
## Mathematics 8 5 4 5 10
## Physics 5 4 6 7 2
## Psychology 2 7 3 7 6
## Computer Science Biology 7 8 5 6 5
## Computer Science 2 6 3 4 5
## History 1 6 5 3 8
## Mathematics 6 9 6 7 4
## Physics 4 5 4 3 5
## Psychology 7 7 8 6 3
## History Biology 4 5 8 3 10
## Computer Science 9 5 2 9 8
## History 9 2 3 11 5
## Mathematics 7 8 5 5 6
## Physics 2 4 6 1 6
## Psychology 6 6 8 6 6
## Mathematics Biology 4 9 3 8 9
## Computer Science 3 4 9 3 6
## History 5 7 6 9 6
## Mathematics 9 1 6 5 4
## Physics 6 3 6 7 2
## Psychology 8 3 5 8 5
## Physics Biology 1 8 5 8 8
## Computer Science 4 4 5 7 4
## History 6 4 5 4 10
## Mathematics 9 2 4 4 3
## Physics 7 8 7 5 4
## Psychology 8 7 2 10 6
## Psychology Biology 2 6 11 9 2
## Computer Science 1 10 3 4 2
## History 4 9 3 6 7
## Mathematics 4 8 8 9 8
## Physics 8 8 3 4 7
## Psychology 4 4 4 6 2
# Model loglin dengan semua interaksi (model saturasi)
model_loglin <- loglin(tab_loglin, margin = list(
c("AcademicInterest", "Major"),
c("AcademicInterest", "YearOfStudy"),
c("Major", "YearOfStudy")
), param = TRUE)
## 3 iterations: deviation 0.05944702
# Output parameter
model_loglin
## $lrt
## [1] 115.7437
##
## $pearson
## [1] 112.2836
##
## $df
## [1] 100
##
## $margin
## $margin[[1]]
## [1] "AcademicInterest" "Major"
##
## $margin[[2]]
## [1] "AcademicInterest" "YearOfStudy"
##
## $margin[[3]]
## [1] "Major" "YearOfStudy"
##
##
## $param
## $param$`(Intercept)`
## [1] 1.676227
##
## $param$AcademicInterest
## Biology Computer Science History Mathematics
## -0.02075046 -0.05597472 0.05538773 0.02504671
## Physics Psychology
## 0.02680514 -0.03051440
##
## $param$Major
## Biology Computer Science History Mathematics
## 0.03311679 -0.05019214 0.01787572 0.07937511
## Physics Psychology
## -0.10301491 0.02283943
##
## $param$YearOfStudy
## Freshman Graduate Junior Senior Sophomore
## -0.07831138 0.04103889 -0.03596693 0.05390344 0.01933598
##
## $param$AcademicInterest.Major
## Major
## AcademicInterest Biology Computer Science History Mathematics
## Biology -0.335676330 0.41332962 -0.12557298 0.11045821
## Computer Science 0.122772373 -0.21350103 -0.12490724 0.15082776
## History 0.006011906 0.19977627 0.01752491 -0.01069356
## Mathematics 0.132249324 -0.04437446 0.15054444 -0.19755923
## Physics 0.037556957 -0.09439809 0.01789841 -0.31978143
## Psychology 0.037085770 -0.26083230 0.06451245 0.26674826
## Major
## AcademicInterest Physics Psychology
## Biology 0.008906378 -0.07144490
## Computer Science -0.101348674 0.16615682
## History -0.302989469 0.09036994
## Mathematics -0.044900710 0.00404064
## Physics 0.219131073 0.13959308
## Psychology 0.221201402 -0.32871558
##
## $param$AcademicInterest.YearOfStudy
## YearOfStudy
## AcademicInterest Freshman Graduate Junior Senior
## Biology 0.0004428078 -0.05691002 0.03956659 -0.12534710
## Computer Science -0.0864184413 0.24373855 0.03185240 -0.13368382
## History 0.1351876764 -0.18702033 -0.03201129 -0.05456737
## Mathematics 0.1293393372 -0.25311051 0.08350104 0.12005413
## Physics 0.1137949092 -0.05721774 -0.14739940 0.06614635
## Psychology -0.2923462894 0.31052006 0.02449066 0.12739780
## YearOfStudy
## AcademicInterest Sophomore
## Biology 0.14224773
## Computer Science -0.05548868
## History 0.13841130
## Mathematics -0.07978400
## Physics 0.02467587
## Psychology -0.17006222
##
## $param$Major.YearOfStudy
## YearOfStudy
## Major Freshman Graduate Junior Senior Sophomore
## Biology -0.40729090 0.11451588 0.15820720 0.00183157 0.13273626
## Computer Science -0.06882976 0.16098993 -0.08526025 -0.03065378 0.02375386
## History -0.06683991 -0.10901806 -0.09262004 0.04693174 0.22154628
## Mathematics 0.28566782 -0.15474267 -0.03833491 -0.06270403 -0.02988622
## Physics 0.15959771 0.01238732 0.12420630 -0.15658258 -0.13960875
## Psychology 0.09769505 -0.02413240 -0.06619830 0.20117708 -0.20854143
Interpretasi Hasil Analisis Hasil model log-linear dua arah menunjukkan nilai:
G² (likelihood ratio statistic): 115.74
Derajat bebas: 100
p-value: 0.13 (tidak signifikan pada α = 0.05)
Implikasi: Karena p-value > 0.05, maka tidak ada cukup bukti untuk menolak hipotesis nol bahwa model dua arah sudah cukup baik. Ini berarti interaksi tiga arah tidak diperlukan.
Hubungan antara pasangan variabel seperti minat akademik dan jurusan, minat akademik dan tahun studi, serta jurusan dan tahun studi sudah cukup menjelaskan pola data.
Kesimpulan
Berdasarkan hasil analisis log-linear terhadap variabel minat akademik, jurusan, dan tahun studi, dapat disimpulkan bahwa:
Model interaksi dua arah sudah cukup untuk menjelaskan hubungan antara ketiga variabel tersebut. Hal ini ditunjukkan oleh nilai G² = 115,74 dengan p-value > 0,05, yang mengindikasikan bahwa tidak ada interaksi tiga arah yang signifikan.
Terdapat hubungan dua arah yang signifikan antara:
Minat akademik dan jurusan,
Minat akademik dan tahun studi, serta
Jurusan dan tahun studi.
Implikasi:
Pihak universitas dapat menggunakan temuan ini untuk mengkaji ulang kecocokan antara minat dan jurusan mahasiswa, terutama di jenjang pascasarjana.
Informasi ini juga dapat dimanfaatkan dalam penyusunan kurikulum, program bimbingan akademik, dan kegiatan ekstrakurikuler yang relevan dengan minat mahasiswa di tiap tahun studi.
# AcademicInterest vs Major
tab1 <- xtabs(~ AcademicInterest + Major, data = data_clean)
chisq.test(tab1)
##
## Pearson's Chi-squared test
##
## data: tab1
## X-squared = 29.22, df = 25, p-value = 0.2548
# AcademicInterest vs YearOfStudy
tab2 <- xtabs(~ AcademicInterest + YearOfStudy, data = data_clean)
chisq.test(tab2)
##
## Pearson's Chi-squared test
##
## data: tab2
## X-squared = 17.913, df = 20, p-value = 0.5931
# Major vs YearOfStudy
tab3 <- xtabs(~ Major + YearOfStudy, data = data_clean)
chisq.test(tab3)
##
## Pearson's Chi-squared test
##
## data: tab3
## X-squared = 18.511, df = 20, p-value = 0.5538
# Model 1: Model independensi penuh
mod_indep <- loglin(tab_loglin, margin = list(
"AcademicInterest", "Major", "YearOfStudy"
), fit = TRUE, param = TRUE)
## 2 iterations: deviation 1.136868e-13
# Model 2: Model dua arah
mod_2way <- loglin(tab_loglin, margin = list(
c("AcademicInterest", "Major"),
c("AcademicInterest", "YearOfStudy"),
c("Major", "YearOfStudy")
), fit = TRUE, param = TRUE)
## 3 iterations: deviation 0.05944702
# Model 3: Model saturasi (semua interaksi)
mod_sat <- loglin(tab_loglin, margin = list(
c("AcademicInterest", "Major", "YearOfStudy")
), fit = TRUE, param = TRUE)
## 2 iterations: deviation 8.881784e-16
# Hitung AIC
AIC_indep <- mod_indep$lrt + 2 * mod_indep$df
AIC_2way <- mod_2way$lrt + 2 * mod_2way$df
AIC_sat <- mod_sat$lrt + 2 * mod_sat$df
# Bandingkan hasil
data.frame(
Model = c("Independensi", "Interaksi Dua Arah", "Model Saturasi"),
G2 = c(mod_indep$lrt, mod_2way$lrt, mod_sat$lrt),
df = c(mod_indep$df, mod_2way$df, mod_sat$df),
AIC = c(AIC_indep, AIC_2way, AIC_sat)
)
## Model G2 df AIC
## 1 Independensi 183.0259 165 513.0259
## 2 Interaksi Dua Arah 115.7437 100 315.7437
## 3 Model Saturasi 0.0000 0 0.0000
Agresti, A. (2002). Categorical data analysis (2nd ed.).
John Wiley & Sons.
Agresti, A. (2010). Analysis of ordinal categorical data (2nd
ed.). Wiley.
Christensen, R. (1997). Log-linear models and logistic
regression (2nd ed.). Springer.
Dobson, A. J., & Barnett, A. G. (2018). An introduction to
generalized linear models (4th ed.). Chapman and Hall/CRC.
Fox, J. (2015). Applied regression analysis and generalized linear
models (3rd ed.). SAGE Publications.
Friendly, M., & Meyer, D. (2016). Discrete data analysis with R:
Visualization and modeling techniques for categorical and count
data. CRC Press.
Hilbe, J. M. (2009). Logistic regression models. Chapman &
Hall/CRC.
Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied
logistic regression (3rd ed.). John Wiley & Sons.
Kutner, M. H., Nachtsheim, C. J., Neter, J., & Li, W. (2005).
Applied linear statistical models (5th ed.).
McGraw-Hill/Irwin.
Liao, T. F. (1994). Interpreting probability models: Logit, probit,
and other generalized linear models. SAGE Publications.
Lindsey, J. K. (1995). Introductory statistics: A modelling
approach. Oxford University Press.
Menard, S. (2002). Applied logistic regression analysis (2nd
ed.). SAGE Publications.
Powers, D. A., & Xie, Y. (2008). Statistical methods for
categorical data analysis (2nd ed.). Emerald Group
Publishing.
Powers, D. M. (2011). Evaluation: From precision, recall and F-measure
to ROC, informedness, markedness & correlation. Journal of
Machine Learning Technologies, 2(1), 37–63.
Sujarweni, V. W. (2015). Statistik untuk penelitian. Pustaka
Baru Press.
Sudjana, N. (2005). Metode statistika (Revisi ke-6).
Tarsito.
Wickens, T. D. (1989). Multiway contingency tables analysis for the
social sciences. Lawrence Erlbaum Associates.
Wickham, H., & Grolemund, G. (2017). R for data science: Import,
tidy, transform, visualize, and model data. O’Reilly Media.
Zuur, A. F., Ieno, E. N., & Smith, G. M. (2007). Analysing
ecological data. Springer.
Kementerian Kesehatan Republik Indonesia. (2013). Situasi dan
analisis HIV & AIDS. Direktorat Jenderal Pengendalian Penyakit
dan Penyehatan Lingkungan. https://pusdatin.kemkes.go.id
Oktavian, R. (2017). Faktor-faktor yang berhubungan dengan kejadian
HIV/AIDS di Indonesia: Tinjauan literatur. Jurnal Kesehatan
Masyarakat Nasional, 11(2), 65–72. https://jurnalkesmas.ui.ac.id
Setiawan, A. (2015). Analisis tren kasus HIV/AIDS di Indonesia
berdasarkan jenis kelamin dan kelompok umur. Jurnal Epidemiologi
Indonesia, 3(1), 34–40.
UNAIDS. (2013). Global report: UNAIDS report on the global AIDS
epidemic 2013. Joint United Nations Programme on HIV/AIDS. https://www.unaids.org/sites/default/files/media_asset/UNAIDS_Global_Report_2013_en_1.pdf
World Health Organization. (2012). Gender inequalities and HIV.
https://www.who.int/gender-equity-rights/knowledge/hiv/en/