Dalam penelitian dan analisis data, data kategori sering digunakan untuk mengelompokkan suatu fenomena berdasarkan kelompok tertentu. Data ini tidak berbentuk angka yang bisa dihitung secara numerik, melainkan berupa label atau kategori yang menggambarkan karakteristik suatu objek atau subjek. Data kategori banyak digunakan dalam berbagai bidang, seperti ilmu sosial, kesehatan, bisnis, dan teknologi.
Analisis data kategori penting untuk memahami pola, hubungan, dan tren dalam data yang bersifat kualitatif. Beberapa teknik yang sering digunakan meliputi tabel kontingensi, uji chi-square, analisis regresi logistik, serta analisis korespondensi. Dengan metode yang tepat, data kategori dapat membantu dalam pengambilan keputusan berdasarkan hubungan antarvariabel.
Analisis data kategori memiliki peranan penting dalam menggali informasi dari data yang bersifat diskrit. Tujuan utama dari analisis ini adalah untuk mendukung proses pengambilan keputusan yang lebih terarah. Beberapa tujuan utama dari analisis data kategori antara lain:
1.1.1 Menemukan Pola dan Kecenderungan
Salah satu manfaat utama dari analisis data kategori adalah kemampuannya dalam mengungkap pola atau kecenderungan tertentu dalam data. Contohnya, dalam studi perilaku konsumen, analisis ini dapat mengungkap preferensi kelompok pelanggan berdasarkan faktor-faktor seperti usia atau lokasi.
1.1.2 Menilai Keterkaitan Antarvariabel
Analisis ini juga berguna untuk mengevaluasi apakah terdapat hubungan antara dua variabel kategori atau lebih. Dalam bidang kesehatan, misalnya, hal ini dapat digunakan untuk mengetahui apakah terdapat hubungan antara kebiasaan merokok dan jenis penyakit tertentu.
1.1.3 Menunjang Proses Pengambilan Keputusan
Dengan memahami keterkaitan dan kecenderungan dalam data, para pengambil kebijakan atau pemimpin bisnis dapat merancang strategi yang lebih efektif. Sebagai contoh, lembaga pemerintah dapat menggunakan hasil analisis ini untuk menyusun kebijakan yang sesuai dengan kebutuhan kelompok masyarakat tertentu.
1.1.4 Menyusun Model Prediktif
Data kategori juga sering digunakan dalam pembangunan model prediktif, seperti dalam analisis regresi logistik. Model ini bermanfaat dalam memprediksi hasil biner, misalnya memproyeksikan apakah seseorang berisiko tinggi mengalami suatu kondisi kesehatan.
Analisis data kategori adalah proses mengolah dan mengevaluasi data yang berbentuk kategori untuk menemukan pola, hubungan, atau tren dalam suatu dataset. Analisis ini digunakan untuk memahami distribusi frekuensi kategori, mengidentifikasi asosiasi antarvariabel, serta menguji hipotesis terkait data yang bersifat kualitatif. Beberapa metode yang sering digunakan dalam analisis data kategori meliputi tabel kontingensi, uji chi-square, analisis regresi logistik, dan analisis korespondensi. Dengan pendekatan yang tepat, analisis ini dapat memberikan wawasan berharga dalam pengambilan keputusan berbasis data. Berikut adalah jenis-jenis data kategori :
1.2.1 Data Nominal dan Ordinal
Data Nominal: Merupakan data kategori yang tidak memiliki urutan atau peringkat antar nilainya. Setiap kategori bersifat unik tanpa hierarki. Contoh: warna favorit (merah, biru, hijau), jenis kelamin (laki-laki, perempuan).
Data Ordinal: Merupakan data kategori yang memiliki tingkatan atau urutan tertentu, meskipun jarak antar kategori tidak terukur secara pasti. Contoh: jenjang pendidikan (SD, SMP, SMA, Perguruan Tinggi), tingkat kepuasan (sangat puas, puas, netral, tidak puas, sangat tidak puas).
1.2.2 Data Biner dan Multikategori
Data Biner (Dikotomik): Jenis data kategori yang hanya memiliki dua kemungkinan nilai. Contoh: status ujian (lulus/gagal), kondisi kesehatan (sehat/sakit).
Data Multikategori: Data kategori yang memiliki lebih dari dua kemungkinan nilai. Contohnya: status pekerjaan (pegawai tetap, kontrak, freelance), tipe pelanggan (baru, aktif, tidak aktif).
Data kategorik memiliki karakteristik yang membedakannya secara jelas dari data kuantitatif. Perbedaan utamanya terletak pada sifat dan cara pengukurannya. Data kategorik merepresentasikan kelompok atau klasifikasi dan tidak dinyatakan dalam bentuk angka yang memiliki makna matematis. Artinya, data ini tidak memiliki nilai numerik yang dapat dihitung atau dioperasikan secara matematis seperti penjumlahan atau rata-rata. Sebaliknya, data kuantitatif adalah data yang bersifat numerik dan dapat diukur dalam skala kontinu. Data jenis ini memungkinkan dilakukannya operasi matematika, seperti menghitung total, mencari rata-rata, atau mengukur variasi. Contohnya termasuk tinggi badan, berat, pendapatan, dan waktu.
Analisis data kategorik memberikan kontribusi besar dalam berbagai bidang, baik dalam dunia akademik maupun praktik industri. Teknik ini digunakan untuk menggali wawasan dari data yang bersifat kualitatif, sehingga mendukung pengambilan keputusan yang lebih akurat dan berbasis bukti. Berikut adalah beberapa bidang yang secara luas memanfaatkan analisis data kategori:
1.4.1 Ilmu Sosial dan Psikologi
Di bidang ini, analisis kategori digunakan untuk menelusuri pola perilaku, opini publik, serta kondisi sosial.
1.4.2 Dunia Kesehatan dan Kedokteran
Dalam studi medis dan kesehatan masyarakat, data kategori digunakan untuk mengklasifikasikan pasien serta menganalisis pola penyakit.
1.4.3 Bidang Pemasaran dan Dunia Usaha
Analisis kategori dalam dunia bisnis sangat penting untuk memahami konsumen dan strategi pasar.
1.4.4 Sektor Pendidikan
Dalam dunia pendidikan, data kategorik dipakai untuk mengukur persepsi dan performa siswa atau mahasiswa serta menilai efektivitas pembelajaran.
1.4.5 Kebijakan Publik dan Pemerintahan
Pemerintah menggunakan data kategori untuk memahami kebutuhan masyarakat dan mengevaluasi keberhasilan program yang dijalankan.
1.4.6 Keamanan dan Kriminologi
Dalam bidang ini, analisis kategori membantu memahami tren kriminalitas dan menyusun kebijakan keamanan.
Berikut adalah beberapa metode yang umum digunakan dalam analisis data kategori:
Digunakan untuk menguji hubungan antara dua variabel kategori.
Digunakan untuk menganalisis hubungan antara variabel independen (bisa berupa kategori atau numerik) dan variabel dependen yang bersifat kategori.
Teknik eksplorasi yang membantu memvisualisasikan hubungan antara kategori dalam data dua dimensi.
Metode machine learning yang sering digunakan untuk klasifikasi berbasis kategori.
Analisis data kategori penting untuk memahami pola, hubungan, dan tren dalam data yang bersifat kualitatif. Dengan metode yang tepat, data kategori dapat membantu dalam pengambilan keputusan berdasarkan hubungan antarvariabel.
Tujuan dari analisis data kategori adalah mengidentifikasi perbedaan antar kelompok, menemukan keterkaitan antarvariabel, serta membuat prediksi berdasarkan pola yang ditemukan. Biasanya, data kategori dikumpulkan melalui survei, wawancara, atau pencatatan administratif, sehingga penting memastikan validitas dan reliabilitas data agar hasil analisis lebih akurat.
Distribusi probabilitas dalam data kategori mengacu pada peluang atau kemungkinan suatu kategori tertentu muncul dalam suatu dataset. Dalam analisis data kategori, distribusi probabilitas sering digunakan untuk memahami bagaimana data tersebar dan untuk membuat prediksi atau inferensi statistik. Beberapa jenis distribusi probabilitas yang umum digunakan dalam data kategori meliputi:
Digunakan untuk variabel kategori biner (dua kemungkinan, seperti sukses/gagal, ya/tidak).
Sebuah variabel acak \(X\) mengikuti distribusi Bernoulli dengan parameter \(p\), jika:
\[ P(X = x) = p^x (1 - p)^{1-x}, \quad x \in \{0,1\} \]
Ekspektasi (Mean): \[ E[X] = p \]
Varians: \[ Var(X) = p(1 - p) \]
Modus:
\[
mode(X) =
\begin{cases}
1, & \text{jika } p > 0.5 \\
0, & \text{jika } p \leq 0.5
\end{cases}
\]
library(knitr)
library(kableExtra)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# 10 percobaan bernoulli
set.seed(123)
contoh_bernoulli <- rbinom(n = 10, size = 1, prob = 0.5)
contoh_bernoulli
## [1] 0 1 0 1 1 0 1 1 1 0
Distribusi Binomial adalah distribusi probabilitas diskret yang menyatakan jumlah keberhasilan dalam \(n\) percobaan Bernoulli yang independen dengan probabilitas sukses \(p\).
Jika \(X\) adalah jumlah keberhasilan dalam \(n\) percobaan Bernoulli dengan peluang sukses \(p\), maka:
\[ P(X = k) = {n \choose k} p^k (1 - p)^{n-k}, \quad k = 0,1,2,\dots,n \]
dengan
\[ {n \choose k} = \frac{n!}{k!(n-k)!} \]
di mana:
- \(n\) = jumlah percobaan
- \(k\) = jumlah keberhasilan
- \(p\) = probabilitas sukses
- \(1 - p\) = probabilitas gagal
Ekspektasi (Mean): \[ E[X] = np \]
Varians: \[ Var(X) = np(1 - p) \]
Modus:
\[
mode(X) = \lfloor (n+1) p \rfloor
\]
# 10 percobaan Binomial dengan 5 ulangan
set.seed(123)
contoh_binomial <- rbinom(n = 10, size = 5, prob = 0.5)
contoh_binomial
## [1] 2 3 2 4 4 1 3 4 3 2
Distribusi Multinomial adalah generalisasi dari distribusi Binomial di mana setiap percobaan memiliki lebih dari dua kemungkinan hasil.
Jika \(X_1, X_2, ..., X_k\) adalah jumlah kejadian dari masing-masing kategori dalam \(n\) percobaan independen, dan setiap kategori memiliki probabilitas \(p_1, p_2, ..., p_k\), maka:
\[ P(X_1 = x_1, X_2 = x_2, ..., X_k = x_k) = \frac{n!}{x_1! x_2! ... x_k!} p_1^{x_1} p_2^{x_2} ... p_k^{x_k} \]
dengan syarat:
\[ \sum_{i=1}^{k} X_i = n, \quad \sum_{i=1}^{k} p_i = 1 \]
di mana:
- \(n\) = jumlah total percobaan
- \(X_i\) = jumlah kejadian kategori
ke-\(i\)
- \(p_i\) = probabilitas kejadian
kategori ke-\(i\)
Ekspektasi (Mean): \[ E[X_i] = n p_i \]
Varians:
\[
Var(X_i) = n p_i (1 - p_i)
\]
Kovarians:
\[
Cov(X_i, X_j) = -n p_i p_j, \quad i \neq j
\]
set.seed(123)
contoh_multinomial <- rmultinom(n = 1, size = 10, prob = c(0.2, 0.3, 0.5))
contoh_multinomial
## [,1]
## [1,] 1
## [2,] 5
## [3,] 4
Distribusi Poisson adalah distribusi probabilitas diskret yang menyatakan jumlah kejadian dalam suatu interval waktu atau ruang tertentu dengan rata-rata kejadian λ per interval.
Jika \(X\) menyatakan jumlah kejadian dalam interval dengan rata-rata kejadian \(\lambda\), maka:
\[ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0,1,2, \dots \]
di mana:
- \(k\) adalah jumlah kejadian
- \(\lambda\) adalah rata-rata jumlah
kejadian dalam interval
- \(e\) adalah bilangan Euler (\(\approx 2.718\))
Ekspektasi (Mean):
\[
E[X] = \lambda
\]
Varians: \[ Var(X) = \lambda \]
Modus:
\[
mode(X) = \lfloor \lambda \rfloor
\]
set.seed(123)
contoh_poisson <- rpois(n = 10, lambda = 4)
contoh_poisson
## [1] 3 6 3 6 7 1 4 7 4 4
Desain sampling sangat penting dalam analisis data kategori untuk menentukan validitas dan reliabilitas hasil penelitian. Tujuan penelitian dan jenis data yang dikumpulkan memengaruhi pemilihan desain sampling yang tepat. Dalam analisis data kategori, dua pendekatan utama untuk desain sampling adalah prospective dan retrospective.
Prospective Sampling adalah metode pengambilan sampel dalam penelitian di mana partisipan diikuti dan diamati dalam jangka waktu tertentu ke depan. Dalam metode ini, peneliti mengumpulkan data sejak awal penelitian dan terus memantau variabel yang diteliti hingga mencapai hasil yang diinginkan.
4.1.1 Eksperimen
Subjek dalam studi eksperimental dibagi secara acak ke dalam kelompok perlakuan dan kontrol. Teknik sampling yang biasa digunakan termasuk:
• Simple Random Sampling (SRS) : Setiap anggota populasi memiliki peluang yang sama untuk dipilih.
• Stratified Random Sampling : Populasi dibagi menjadi kelompok berdasarkan fitur tertentu, sampel diambil secara acak dari setiap kelompok.
• Cluster Sampling : Populasi dibagi menjadi kelompok-kelompok (cluster), kemudian beberapa cluster dipilih secara acak untuk dianalisis.
4.1.2 Studi Kohort Studi kohort adalah penelitian observasional di mana kelompok orang dengan atribut tertentu diikuti dari waktu ke waktu untuk mempelajari peristiwa. Studi kohort sering menggunakan jenis sampling seperti:
• Census Sampling : Penelitian melibatkan semua orang yang termasuk dalam populasi tertentu.
• Systematic Sampling : Subjek dipilih berdasarkan interval tertentu dari daftar populasi.
• Matched Sampling : Variabel tertentu digunakan untuk membandingkan setiap anggota kelompok kohort dengan anggota kelompok yang sebanding.
Retrospective sampling adalah metode dimana data dikumpulkan dari peristiwa yang telah terjadi sebelumnya. Teknik ini sering digunakan dalam studi observasional yang mencari hubungan antara faktor risiko dan hasil tertentu.
4.2.1 Studi kasus - kontrol
Dalam studi kasus-kontrol, sekelompok individu dengan kondisi tertentu (kasus) dibandingkan dengan kelompok tanpa kondisi tersebut (kontrol). Teknik sampling yang sering digunakan meliputi:
• Purposive Sampling : Pemilihan sampel berdasarkan karakteristik yang relevan dengan tujuan penelitian.
• Snowball Sampling: Responden awal membantu merekrut subjek lain yang memiliki karakteristik serupa.
• Incidence Density Sampling: Kasus dan kontrol dipilih dari populasi yang sama dengan memper hitungkan periode waktu kemunculan kasus.
4.2.2 Studi Kohort Retrospektif
Dalam studi kohort retrospektif, data historis digunakan untuk mengelompokkan orang berdasarkan paparan mereka, dan kemudian menganalisis hasilnya. Teknik sampling yang umum digunakan termasuk:
• Convenience Sampling: Subjek dipilih berdasarkan ketersediaan data yang sudah ada.
• Quota Sampling: Sampel dipilih untuk mencerminkan proporsi tertentu dalam populasi.
• Case-Based Sampling: Sampel dipilih berdasarkan karakteristik kasus yang telah terjadi.
Tabel Kontingensi adalah tabel yang menampilkan distribusi frekuensi dari dua variabel kategorikal, masing-masing dengan dua kategori, dalam format matriks 2x2.
Struktur Tabel Kontingensi 2×2 :
| Kategori 1 (+) | Kategori 2 (–) | Total | |
|---|---|---|---|
| Grup 1 | n11 | n12 | n1. |
| Grup 2 | n21 | n22 | n2. |
| Total | n.1 | n.2 | n |
Keterangan:
n11 = Jumlah kasus dalam Kategori 1 dari Grup 1
n12 = Jumlah kasus dalam Kategori 2 dari Grup 1
n21 = Jumlah kasus dalam Kategori 1 dari Grup 2
n22 = Jumlah kasus dalam Kategori 2 dari Grup 2
n1. = Total kasus di Grup 1 (n11 + n12)
n2. = Total kasus di Grup 2 (n21 + n22)
n.1 = Total kasus dalam Kategori 1 (n11 + n21)
n.2 = Total kasus dalam Kategori 2 (n12 + n22)
n = Total seluruh sampel (n11 + n12 + n21 + n22)
Tabel ini menjadi dasar dalam pengujian statistik seperti Chi-Square Test, Fisher’s Exact Test, dan perhitungan Odds Ratio, yang berguna untuk mengukur kekuatan serta signifikansi hubungan antara dua variabel kategori.
5.1.1 Peluang Bersama
Peluang bersama (joint probability) adalah peluang terjadinya dua kejadian secara bersamaan. Jika A dan B adalah dua kejadian, maka:
\[ P(A_i, B_j) = \frac{n_{ij}}{n} \] 5.1.2 Peluang Marginal
peluang marginal adalah peluang dari satu kejadian tanpa memperhatikan kejadian lainnya. Biasanya dihitung dengan menjumlahkan nilai-nilai pada baris atau kolom tertentu, lalu dibagi total observasi.
\[ P(A_i) = \frac{n_{i.}}{n} \]
\[ P(B_j) = \frac{n_{.j}}{n} \]
5.1.3 Peluang Bersyarat
Peluang bersyarat adalah peluang terjadinya suatu kejadian dengan syarat bahwa kejadian lain telah terjadi.
\[ P(B_j \mid A_i) = \frac{P(A_i, B_j)}{P(A_i)} = \frac{n_{ij}}{n_{i.}} \]
Misalkan kita memiliki studi tentang efektivitas suatu pengobatan terhadap suatu penyakit. Data dikumpulkan dalam tabel kontingensi berikut:
| Sembuh (Y=1) | Tidak Sembuh (Y=0) | Total | |
|---|---|---|---|
| Obat (X=1) | 30 | 10 | 40 |
| Plasebo(X=0) | 20 | 30 | 50 |
| Total | 50 | 40 | 90 |
# Data input
n11 <- 30 # Obat & sembuh
n12 <- 10 # Obat & tidak sembuh
n21 <- 20 # Plasebo & sembuh
n22 <- 30 # Plasebo & tidak sembuh
# Totals
n1. <- n11 + n12 # Total Obat
n2. <- n21 + n22 # Total Plasebo
n.1 <- n11 + n21 # Total Sembuh
n.2 <- n12 + n22 # Total Tidak Sembuh
n <- n11 + n12 + n21 + n22 # Total keseluruhan
• Peluang Bersama
\[ P(X=1, Y=1) = \frac{30}{90} = 0.333 \] \[ P(X=1, Y=0) = \frac{10}{90} = 0.111 \] \[ P(X=0, Y=1) = \frac{20}{90} = 0.222 \] \[ P(X=0, Y=0) = \frac{30}{90} = 0.333 \]
Menggunakan Rstudio :
p_A1B1 <- n11 / n
p_A1B2 <- n12 / n
p_A2B1 <- n21 / n
p_A2B2 <- n22 / n
Interpretasi :
Peluang bahwa seseorang mendapatkan obat dan sembuh adalah sekitar 33,3%.
Peluang bahwa seorang pasien mendapat plasebo dan sembuh adalah 22,2%
Peluang seorang pasien diberi obat tapi tidak sembuh adalah 11,1%
Peluang bahwa pasien menerima plasebo dan tidak sembuh adalah 33,3%
• Peluang Marginal
\[ P(X=1) = \frac{40}{90} \approx 0.444,\quad P(X=0) = \frac{50}{90} \approx 0.556 \] \[ P(Y=1) = \frac{50}{90} \approx 0.556,\quad P(Y=0) = \frac{40}{90} \approx 0.444 \]
Dilakukan perhitungan menggunakan Rstudio :
p_A1 <- n1. / n
p_A2 <- n2. / n
p_B1 <- n.1 / n
p_B2 <- n.2 / n
Interpretasi :
Sebanyak 44,4% dari pasien mendapatkan obat.
Sebanyak 55,6% pasien mendapatkan plasebo.
Peluang pasien sembuh, tanpa memperhatikan pengobatannya, adalah 55,6%.
Peluang pasien tidak sembuh, tanpa memperhatikan pengobatannya, adalah 44,4%
• Peluang Bersyarat
\[ P(Y=1 \mid X=1) = \frac{30}{40} = 0.75,\quad P(Y=1 \mid X=0) = \frac{20}{50} = 0.4 \]
Dilakukan perhitungan menggunakan Rstudio :
# P(Y=1 | X=1) dan P(Y=1 | X=0)
p_Y1_given_X1 <- n11 / n1.
p_Y1_given_X0 <- n21 / n2.
Interpretasi :
Jika diberi obat, peluang sembuh adalah 75%.
Jika diberi plasebo, peluang sembuh hanya 40%.
Dalam statistik inferensial, tabel kontingensi 2×2 merupakan alat yang umum digunakan untuk mengevaluasi hubungan antara dua variabel kategori yang masing-masing memiliki dua tingkat. Melalui tabel ini, peneliti dapat mengamati distribusi frekuensi dan menilai apakah terdapat asosiasi yang signifikan antara kedua variabel tersebut. Analisis asosiasi dalam tabel 2×2 banyak dimanfaatkan di berbagai ilmu, antara lain:
Epidemiologi: Menilai keterkaitan antara faktor risiko (misalnya, merokok) dan kejadian penyakit (seperti kanker paru-paru).
Eksperimen Klinis: Mengevaluasi perbedaan hasil antara kelompok yang menerima pengobatan dan kelompok kontrol.
Ilmu Sosial: Mengkaji hubungan antara karakteristik demografis, seperti tingkat pendidikan dan status pekerjaan.
Beberapa ukuran asosiasi yang dapat dihitung dari tabel 2×2 antara lain:
Risk Difference (RD): Mengukur selisih risiko kejadian antara dua kelompok.
Relative Risk (RR): Menunjukkan seberapa besar kemungkinan kejadian di satu kelompok dibandingkan dengan kelompok lainnya.
Odds Ratio (OR): Membandingkan peluang (odds) terjadinya suatu kejadian antar dua kelompok.
Uji Chi-Square dan Fisher’s Exact Test: Digunakan untuk menentukan signifikansi statistik dari asosiasi yang diamati.
Penggunaan ukuran-ukuran ini sangat penting dalam pengambilan keputusan berbasis data, baik dalam penelitian ilmiah maupun dalam praktik kebijakan publik dan medis. Mereka memberikan gambaran seberapa kuat hubungan antara dua variabel kategori.
5.2.1 Perbedaan Risiko (Risk Difference, RD)
Risk Difference (RD) atau perbedaan risiko adalah salah satu ukuran asosiasi absolut yang digunakan dalam epidemiologi untuk membandingkan risiko suatu kejadian (misalnya penyakit atau hasil tertentu) antara dua kelompok, biasanya kelompok terpapar dan tidak terpapar. RD dihitung dengan mengurangkan proporsi kejadian dalam kelompok terpapar dari proporsi kejadian dalam kelompok tidak terpapar. Rumusnya dituliskan sebagai berikut:
\[ RD = \frac{n_{11}}{n_{1.}} - \frac{n_{21}}{n_{2.}} \]
Contoh perhitungan menggunakan data studi kasus :
\[ RD = P(Y=1 \mid X=1) - P(Y=1 \mid X=0) = 0.75 - 0.4 = 0.35 \]
Dihitung menggunakan Rstudio :
# Risk Difference
risk_obat <- n11 / n1.
risk_plasebo <- n21 / n2.
RD <- risk_obat - risk_plasebo
Interpretasi : Obat meningkatkan peluang sembuh sebesar 35% dibandingkan plasebo.
5.2.2 Risiko Relatif (Relative Risk, RR):
Relative Risk (RR) atau Risiko Relatif adalah ukuran asosiasi yang digunakan untuk membandingkan kemungkinan terjadinya suatu kejadian (misalnya kesembuhan, penyakit, atau efek pengobatan) antara dua kelompok, yaitu kelompok yang terpapar (misalnya menerima pengobatan) dan kelompok tidak terpapar (misalnya menerima plasebo). RR menggambarkan seberapa besar risiko kejadian dalam kelompok terpapar dibandingkan dengan kelompok tidak terpapar. Rumus perhitungannya adalah sebagai berikut:
\[ RR = \frac{n_{11} / n_{1.}}{n_{21} / n_{2.}} = \frac{P(Y = 1 \mid X = 1)}{P(Y = 1 \mid X = 0)} \]
Jika RR>1: Risiko kejadian lebih tinggi di kelompok terpapar
Jika RR<1: Risiko kejadian lebih rendah di kelompok terpapar
Jika RR=1: Tidak ada perbedaan risiko antara dua kelompok
Contoh perhitungan menggunakan data studi kasus :
\[ RR = \frac{0.75}{0.4} = 1.875 \]
Dihitung menggunakan Rstudio :
RR <- risk_obat / risk_plasebo
Interpretasi : Peluang sembuh dengan obat hampir 1,88 kali lebih besar dibandingkan plasebo.
5.2.3 Odds Ratio (OR):
Odds Ratio (OR) atau rasio odds adalah ukuran asosiasi yang digunakan untuk membandingkan peluang (odds) terjadinya suatu kejadian antara dua kelompok, yaitu kelompok yang terpapar (misalnya menerima pengobatan) dan kelompok tidak terpapar (misalnya menerima plasebo). OR sering digunakan dalam studi kasus-kontrol, namun juga dapat diterapkan dalam studi kohort dan eksperimental.
Rumus Odds Ratio:
\[ OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} \]
Contoh perhitungan menggunakan data studi kasus :
\[ \text{Odds}_{X=1} = \frac{30}{10} = 3,\quad \text{Odds}_{X=0} = \frac{20}{30} = \frac{2}{3} \] \[ OR = \frac{3}{2/3} = 4.5 \]
Menggunakan Rstudio :
OR <- (n11 * n22) / (n12 * n21)
Interpretasi : Peluang relatif (odds) untuk sembuh setelah menerima obat adalah 4,5 kali dibandingkan plasebo.
Dari hasil analisis tabel kontingensi 2x2 ini, dapat disimpulkan bahwa penggunaan obat berhubungan dengan peningkatan peluang kesembuhan pasien dibandingkan dengan plasebo. Setelah didapatkan hasil dari perhitungannya, hasil ini menunjukkan bahwa obat yang diuji dalam penelitian ini lebih efektif dalam meningkatkan peluang kesembuhan dibandingkan dengan plasebo.
Inferensi dalam statistik merupakan proses menarik kesimpulan tentang karakteristik populasi berdasarkan informasi dari sampel. Dalam hal tabel kontingensi dua arah, inferensi bertujuan untuk menganalisis keterkaitan antara dua variabel kategorikal yang datanya disusun dalam bentuk tabel. Tabel kontingensi menyajikan distribusi frekuensi dari kombinasi kategori dua variabel dalam format matriks. Fokus utama dari inferensi di tabel ini adalah untuk mengevaluasi apakah ada hubungan antara kedua variabel tersebut melalui pendekatan estimasi dan pengujian hipotesis.
Secara umum, proses inferensi dalam tabel kontingensi dua arah dibedakan menjadi dua bagian utama :
Estimasi
Pengujian Hipotesis
Estimasi meliputi upaya untuk menghitung proporsi-proporsi tertentu, baik yang bersifat marjinal (total dari satu variabel), bersama (gabungan dua variabel), maupun kondisional (berdasarkan syarat variabel lain). Estimasi ini membantu menggambarkan pola hubungan yang ada dalam data.
6.1.1 Estimasi Titik
Estimasi titik adalah metode yang digunakan untuk menentukan satu nilai spesifik sebagai perkiraan terbaik dari suatu parameter populasi berdasarkan data sampel.
Dalam konteks proporsi, estimasi titik dihitung dengan rumus:
\[ \hat{p} = \frac{x}{n} \]
6.1.2 Estimasi Interval
Estimasi interval digunakan untuk menentukan rentang nilai yang kemungkinan besar mencakup parameter populasi, dengan tingkat keyakinan tertentu.
Rumus umum untuk estimasi interval proporsi adalah:
\[ \hat{p} \pm Z_{\alpha/2} \sqrt{ \frac{ \hat{p}(1 - \hat{p}) }{n} } \]
Keterangan:
\(Z_{\alpha/2}\) : skor dari distribusi normal standar yang sesuai dengan tingkat kepercayaan yang diinginkan
\(\hat{p}\) : estimasi titik untuk proporsi populasi
\(n\) : ukuran sampel.
6.2.1 Uji Proporsi
Uji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok dalam tabel kontingensi, terutama untuk menentukan apakah terdapat perbedaan yang signifikan dalam proporsi kejadian antara dua kelompok yang berbeda.
Struktur tabel kontingensi 2×2:
| Kejadian (+) | Tidak Kejadian (-) | Total | |
|---|---|---|---|
| Grup 1 | \(n_{11}\) | \(n_{12}\) | \(n_{1.}\) |
| Grup 2 | \(n_{21}\) | \(n_{22}\) | \(n_{2.}\) |
| Total | \(n_{.1}\) | \(n_{.2}\) | \(n\) |
Formulasi Uji Proporsi
Untuk menguji hipotesis bahwa tidak ada perbedaan proporsi antara dua kelompok, kita menggunakan uji z dua proporsi, dengan hipotesis:
Hipotesis Nol (\(H_0\)): Tidak ada perbedaan proporsi antara dua kelompok, yaitu \(p_1 = p_2\).
Hipotesis Alternatif (\(H_1\)): Terdapat perbedaan proporsi antara dua kelompok, yaitu \(p_1 \neq p_2\).
Estimasi proporsi masing-masing kelompok:
\[ \hat{p}_1 = \frac{n_{11}}{n_{1.}}, \quad \hat{p}_2 = \frac{n_{21}}{n_{2.}} \]
Estimasi proporsi gabungan (pooling proportion):
\[ \hat{p} = \frac{n_{11} + n_{21}}{n_{1.} + n_{2.}} \]
Statistik uji untuk uji proporsi dua sampel:
\[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p}) \left( \frac{1}{n_{1.}} + \frac{1}{n_{2.}} \right)}} \]
Statistik uji \(Z\) mengikuti distribusi normal baku \(N(0,1)\), dan p-value dihitung berdasarkan nilai kritis dari distribusi normal.
Jika \(|Z|\) lebih besar dari nilai kritis untuk tingkat signifikansi tertentu \(\alpha\) (misalnya 1.96 untuk \(\alpha=0.05\)), maka hipotesis nol ditolak, yang berarti ada perbedaan signifikan antara dua proporsi.
Uji ini cocok digunakan dalam studi kohort dan eksperimen klinis.
Perhitungan Manual Langkah Demi Langkah menggunakan studi kasus awal :
Hipotesis:
H0: Tidak ada perbedaan proporsi kesembuhan antara kelompok obat dan plasebo.
H1: Ada perbedaan proporsi kesembuhan antara kelompok obat dan plasebo.
Taraf Signifikansi • alpha = 5%
Statistik Uji:
\[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{p(1-p)(\frac{1}{n_1} + \frac{1}{n_2})}} \]
# Data
x1 <- 30 # sukses pada kelompok obat
n1 <- 40 # total kelompok obat
x2 <- 20 # sukses pada plasebo
n2 <- 50 # total plasebo
# Uji proporsi dua populasi (dua sisi)
prop.test(c(x1, x2), c(n1, n2), alternative = "two.sided", correct = FALSE)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(x1, x2) out of c(n1, n2)
## X-squared = 11.025, df = 1, p-value = 0.0008989
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.1590921 0.5409079
## sample estimates:
## prop 1 prop 2
## 0.75 0.40
Keputusan:
Karena P-Value < alpha maka keputusan tolak H0
Kesimpulan
Dengan taraf signifikansi 5% didapatkan keputusan Tolak H0, maka dapat disimpulkan ada perbedaan proporsi kesembuhan.
6.2.2 Uji Asosiasi
Uji asosiasi dalam tabel kontingensi 2×2 bertujuan untuk mengukur hubungan antara dua variabel kategori. Ada tiga ukuran utama yang digunakan, yaitu Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR).
Risk Difference (RD) mengukur selisih absolut antara proporsi kejadian pada dua kelompok.
Relative Risk (RR) mengukur seberapa besar risiko pada satu kelompok dibandingkan dengan kelompok lain.
Odds Ratio (OR) membandingkan peluang (odds) kejadian antara dua kelompok, bukan proporsi risiko.
Hipotesis Uji dalam Tabel Kontingensi 2 × 2
Dalam uji asosiasi untuk tabel kontingensi 2×2, tujuan utama adalah untuk menguji apakah terdapat hubungan antara dua variabel kategori.
Hipotesis yang diuji adalah:
Tidak ada asosiasi antara dua variabel. (Artinya, kejadian pada satu variabel tidak berhubungan dengan kejadian pada variabel lainnya.)
Terdapat asosiasi antara dua variabel. (Artinya, kejadian pada satu variabel berhubungan dengan kejadian pada variabel lainnya.)
Rumus Risk Difference (RD)
\[ RD = \left( \frac{n_{11}}{n_{1.}} \right) - \left( \frac{n_{21}}{n_{2.}} \right) \]
Keterangan:
Standard Error (SE) untuk RD
\[ SE(RD) = \sqrt{ \frac{ \hat{p}_1 (1 - \hat{p}_1) }{ n_{1.} } + \frac{ \hat{p}_2 (1 - \hat{p}_2) }{ n_{2.} } } \]
di mana :
Statistik Uji Z untuk RD
\[ Z_{RD} = \frac{RD}{SE(RD)} \]
Jika RD = 0, maka tidak ada perbedaan risiko antara dua kelompok.
Jika RD ≠ 0, maka ada perbedaan risiko antara dua kelompok.
6.2.2.2 Relative Risk (RR)
membandingkan kemungkinan kejadian antara dua kelompok.
Rumus Relative Risk (RR)
\[ RR = \frac{ \frac{n_{11}}{n_{1.}} }{ \frac{n_{21}}{n_{2.}} } \]
Keterangan:
\(n_{11}\) = jumlah kejadian di Grup 1
\(n_{1.}\) = total sampel di Grup 1
\(n_{21}\) = jumlah kejadian di Grup 2
\(n_{2.}\) = total sampel di Grup 2
Standard Error untuk log(RR)
\[ SE(\ln RR) = \sqrt{ \frac{1}{n_{11}} - \frac{1}{n_{1.}} + \frac{1}{n_{21}} - \frac{1}{n_{2.}} } \]
Statistik uji Z
\[ Z_{RR} = \frac{ \ln(RR) }{ SE(\ln RR) } \]
Keterangan:
\(\ln(RR)\) = logaritma natural dari RR
\(SE(\ln RR)\) = standard error dari log(RR)
Interpretasi
RR = 1: Risiko sama pada kedua kelompok.
RR > 1: Risiko di Grup 1 lebih besar dibanding Grup 2.
RR < 1: Risiko di Grup 1 lebih kecil dibanding Grup 2.
Relative Risk sering digunakan dalam studi kohort, studi prospektif, dan analisis risiko di bidang epidemiologi.
6.2.2.3 Odds Ratio (OR)
Odds Ratio (OR) membandingkan peluang kejadian antara dua kelompok.
Rumus Odds Ratio (OR)
\[ OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} \]
Keterangan:
\(n_{11}\) = jumlah kejadian di Grup 1
\(n_{12}\) = jumlah tidak kejadian di Grup 1
\(n_{21}\) = jumlah kejadian di Grup 2
\(n_{22}\) = jumlah tidak kejadian di Grup 2
Standard Error untuk log(OR)
\[ SE(\ln OR) = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} } \]
Statistik uji Z
\[ Z_{OR} = \frac{\ln(OR)}{SE(\ln OR)} \]
Keterangan :
\(\ln(OR)\) = logaritma natural dari OR
\(SE(\ln OR)\) = standard error dari log(OR)
Interpretasi
OR = 1: Tidak ada perbedaan odds antara dua kelompok.
OR > 1: Odds kejadian lebih besar di Grup 1.
OR < 1: Odds kejadian lebih kecil di Grup 1.
Odds Ratio sering digunakan dalam studi kasus-kontrol, karena odds lebih stabil untuk kejadian langka dibandingkan dengan risiko yang bisa lebih rentan terhadap variabilitas.
Contoh Perhitungan manual misalkan kita mempunyai data sebagai berikut :
Penelitian tentang efek vaksin terhadap infeksi:
| Infeksi (+) | Infeksi (−) | Total | |
|---|---|---|---|
| Vaksin | 10 | 90 | 100 |
| Tidak Vaksin | 30 | 70 | 100 |
1. Risk Difference (RD)
Rumus :
\[ RD = \left( \frac{n_{11}}{n_{1.}} \right) - \left( \frac{n_{21}}{n_{2.}} \right) \]
Perhitungan :
\[ RD = \left( \frac{10}{100} \right) - \left( \frac{30}{100} \right) = 0.1 - 0.3 = -0.2 \]
Standard Error (SE) RD:
\[ SE(RD) = \sqrt{ \frac{0.1(1-0.1)}{100} + \frac{0.3(1-0.3)}{100} } \]
\[ SE(RD) = \sqrt{ \frac{0.09}{100} + \frac{0.21}{100} } = \sqrt{0.003} \approx 0.0548 \]
Statistik Uji Z RD:
\[ Z_{RD} = \frac{-0.2}{0.0548} \approx -3.65 \]
2. Relative Risk (RR)
Rumus :
\[ RR = \frac{ \frac{n_{11}}{n_{1.}} }{ \frac{n_{21}}{n_{2.}} } \]
Perhitungan :
\[ RR = \frac{0.1}{0.3} = 0.333 \]
Standard Error (SE) log(RR):
\[ SE(\ln(RR)) = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{21}} } \]
\[ SE(\ln(RR)) = \sqrt{ \frac{1}{10} + \frac{1}{30} } = \sqrt{0.1333} \approx 0.365 \]
Statistik Uji Z RR:
\[ \ln(RR) = \ln(0.333) \approx -1.099 \]
\[ Z_{RR} = \frac{-1.099}{0.365} \approx -3.01 \]
3. Odds Ratio (OR)
Rumus :
\[ OR = \frac{n_{11} \times n_{22}}{n_{12} \times n_{21}} \]
Perhitungan :
\[ OR = \frac{10 \times 70}{90 \times 30} = \frac{700}{2700} \approx 0.259 \]
Standard Error (SE) log(OR):
\[ SE(\ln(OR)) = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} } \]
\[ SE(\ln(OR)) = \sqrt{0.1 + 0.0111 + 0.0333 + 0.0143} = \sqrt{0.1587} \approx 0.398 \]
Statistik Uji Z OR:
\[ \ln(OR) = \ln(0.259) \approx -1.349 \]
\[ Z_{OR} = \frac{-1.349}{0.398} \approx -3.39 \]
Perhitungan menggunakan Rstudio :
# Data tabel kontingensi
# Infeksi(+) Infeksi(-)
# Vaksin 10 90
# Tidak Vaksin 30 70
# Input data
n11 <- 10 # Vaksin, Infeksi (+)
n12 <- 90 # Vaksin, Infeksi (−)
n21 <- 30 # Tidak vaksin, Infeksi (+)
n22 <- 70 # Tidak vaksin, Infeksi (−)
n1. <- n11 + n12 # Total vaksin
n2. <- n21 + n22 # Total tidak vaksin
# 1. Risk Difference (RD)
p1_hat <- n11 / n1. # Proporsi infeksi di kelompok vaksin
p2_hat <- n21 / n2. # Proporsi infeksi di kelompok tidak vaksin
RD <- p1_hat - p2_hat
# Standard Error RD
SE_RD <- sqrt( (p1_hat * (1 - p1_hat)) / n1. + (p2_hat * (1 - p2_hat)) / n2. )
# Z statistik untuk RD
Z_RD <- RD / SE_RD
# 2. Relative Risk (RR)
RR <- p1_hat / p2_hat
# Standard Error log(RR)
SE_logRR <- sqrt( (1/n11) - (1/n1.) + (1/n21) - (1/n2.) )
# Z statistik untuk RR
logRR <- log(RR)
Z_RR <- logRR / SE_logRR
# 3. Odds Ratio (OR)
OR <- (n11 * n22) / (n12 * n21)
# Standard Error log(OR)
SE_logOR <- sqrt(1/n11 + 1/n12 + 1/n21 + 1/n22)
# Z statistik untuk OR
logOR <- log(OR)
Z_OR <- logOR / SE_logOR
# Tampilkan hasil
cat("=== Hasil Perhitungan ===\n")
## === Hasil Perhitungan ===
cat("\n-- Risk Difference (RD) --\n")
##
## -- Risk Difference (RD) --
cat("RD:", RD, "\n")
## RD: -0.2
cat("Standard Error RD:", SE_RD, "\n")
## Standard Error RD: 0.05477226
cat("Z_RD:", Z_RD, "\n")
## Z_RD: -3.651484
cat("\n-- Relative Risk (RR) --\n")
##
## -- Relative Risk (RR) --
cat("RR:", RR, "\n")
## RR: 0.3333333
cat("Standard Error log(RR):", SE_logRR, "\n")
## Standard Error log(RR): 0.3366502
cat("Z_RR:", Z_RR, "\n")
## Z_RR: -3.263365
cat("\n-- Odds Ratio (OR) --\n")
##
## -- Odds Ratio (OR) --
cat("OR:", OR, "\n")
## OR: 0.2592593
cat("Standard Error log(OR):", SE_logOR, "\n")
## Standard Error log(OR): 0.3984095
cat("Z_OR:", Z_OR, "\n")
## Z_OR: -3.388289
Kesimpulan
Risk Difference (RD) menghitung selisih probabilitas kejadian antara dua kelompok, sehingga menunjukkan perbedaan risiko secara absolut.
Relative Risk (RR) membandingkan tingkat risiko suatu kejadian pada satu kelompok dibandingkan dengan kelompok lain.
Odds Ratio (OR) membandingkan rasio peluang terjadinya kejadian antara dua kelompok yang diamati.
Standard Error dan statistik uji Z berperan dalam mengevaluasi apakah asosiasi yang ditemukan secara statistik bermakna atau tidak.
Uji independensi bertujuan untuk mengevaluasi apakah dua variabel kategorik memiliki hubungan atau tidak dalam suatu populasi.
6.2.3.1 Uji Chi-Square
Metode Chi-Square digunakan untuk melihat apakah distribusi pengamatan berbeda secara signifikan dari distribusi yang diharapkan jika kedua variabel tidak saling berhubungan.
Rumus Chi-Square:
\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
dimana:
\(O_{ij}\) = nilai aktual (observasi) pada sel ke-\(i,j\),
\(E_{ij}\) = nilai ekspektasi pada sel ke-\(i,j\).
Nilai harapan (\(E_{ij}\)) dihitung menggunakan rumus:
\[ E_{ij} = \frac{(\text{Total baris ke-}i) \times (\text{Total kolom ke-}j)}{N} \]
dengan:
Total baris ke-\(i\) = jumlah seluruh nilai dalam baris ke-\(i\),
Total kolom ke-\(j\) = jumlah seluruh nilai dalam kolom ke-\(j\),
\(N\) = total keseluruhan observasi.
Contoh perhitungan manual Chi-Square
Sebuah survei dilakukan untuk mengetahui hubungan antara Jenis Kelamin dan Preferensi Minuman. Data:
| Kopi | Teh | Total | |
|---|---|---|---|
| Pria | 30 | 10 | 40 |
| Wanita | 20 | 40 | 60 |
| Total | 50 | 50 | 100 |
Perhitungan Manual
\[ E_{ij} = \frac{(\text{Total baris ke-i}) \times (\text{Total kolom ke-j})}{\text{Total keseluruhan}} \]
Perhitungan:
Pria-Kopi: \(\frac{40 \times 50}{100} = 20\)
Pria-Teh: \(\frac{40 \times 50}{100} = 20\)
Wanita-Kopi: \(\frac{60 \times 50}{100} = 30\)
Wanita-Teh: \(\frac{60 \times 50}{100} = 30\)
\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]
Pria-Kopi: \(\frac{(30-20)^2}{20} = 5\)
Pria-Teh: \(\frac{(10-20)^2}{20} = 5\)
Wanita-Kopi: \(\frac{(20-30)^2}{30} \approx 3.33\)
Wanita-Teh: \(\frac{(40-30)^2}{30} \approx 3.33\)
Total:
\[ \chi^2 = 5 + 5 + 3.33 + 3.33 = 16.66 \]
\[ \text{df} = (\text{Jumlah Baris} - 1) \times (\text{Jumlah Kolom} - 1) = (2-1)\times(2-1) = 1 \]
Karena nilai \(\chi^2 = 16.66\) lebih besar dari \(\chi^2\) tabel (3.841 untuk α = 0.05, df = 1), maka:
Tolak H₀ — terdapat hubungan antara jenis kelamin dan preferensi minuman.
Dengan taraf signifikansi 5% didapatkan keputusan tolak H0, maka dapat disimpulkan terdapat hubungan antara jenis kelamin dan preferensi minuman.
# Membuat tabel kontingensi
tabel <- matrix(c(30, 10, 20, 40), nrow = 2, byrow = TRUE)
dimnames(tabel) <- list(
Jenis_Kelamin = c("Pria", "Wanita"),
Minuman = c("Kopi", "Teh")
)
# Menampilkan tabel kontingensi
tabel
## Minuman
## Jenis_Kelamin Kopi Teh
## Pria 30 10
## Wanita 20 40
# Melakukan uji Chi-Square
hasil_uji <- chisq.test(tabel)
# Menampilkan hasil uji Chi-Square
hasil_uji
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabel
## X-squared = 15.042, df = 1, p-value = 0.0001052
Kesimpulan :
Berdasarkan hasil uji Chi-Square, karena p-value yang sangat kecil (2.566 x 10⁻⁵) lebih kecil dari 0.05, kita menolak hipotesis nol. Ini berarti bahwa ada hubungan yang signifikan secara statistik antara jenis kelamin dan preferensi minuman dalam sampel yang diuji. Dengan demikian, dapat disimpulkan bahwa jenis kelamin mempengaruhi preferensi minuman (Kopi vs Teh) dalam data yang diberikan.
6.2.3.2 Partisi Chi-Square
Partisi Chi-Square digunakan untuk mengidentifikasi kategori mana dalam tabel kontingensi yang paling berpengaruh terhadap hubungan yang signifikan. Jika uji Chi-Square pada tabel kontingensi I × J signifikan, maka partisi Chi-Square memungkinkan kita untuk menguraikan efek hubungan dalam subkelompok yang lebih kecil.
Menurut Lancaster dan Irwin, statistik uji Chi-Square dapat dibagi menjadi komponen-komponen sebanyak derajat bebas dari tabel kontingensi, yang memungkinkan identifikasi kategori mana yang paling berkontribusi pada hubungan signifikan. Hal ini juga dikenal sebagai Simpson’s Paradox, di mana tren yang muncul dalam beberapa kelompok data dapat menghilang atau bahkan berbalik arah ketika data tersebut digabungkan.
Langkah-Langkah Partisi Chi-Square:
Menggunakan tabel I × J: Hitung uji Chi-Square untuk keseluruhan tabel.
Memecah Tabel Kontingensi: Pecah tabel menjadi subkelompok yang lebih kecil (tabel 2 × 2).
Hitung Statistik Chi-Square pada Subkelompok: Lakukan uji Chi-Square pada tabel 2 × 2.
Interpretasi Kategori yang Signifikan: Identifikasi kategori mana yang memberikan kontribusi signifikan terhadap hubungan yang ditemukan.
Contoh Perhitungan Manual :
Data :
| Jenis Kelamin | Engineer | Teacher | Doctor | Total |
|---|---|---|---|---|
| Female | 300 | 400 | 500 | 1200 |
| Male | 450 | 350 | 550 | 1350 |
| Total | 750 | 750 | 1050 | 2550 |
Hipotesis Uji
Hipotesis Nol (H₀): Tidak ada hubungan antara variabel Usia dan Preferensi Makanan.
Hipotesis Alternatif (H₁): Ada hubungan antara variabel Usia dan Preferensi Makanan.
Langkah-langkah Perhitungan Manual
Langkah 1: Menghitung Frekuensi Ekspektasi
Frekuensi ekspektasi dihitung menggunakan rumus :
Rumus:
\[ E_{ij} = \frac{(\text{Total Baris}_i \times \text{Total Kolom}_j)}{\text{Total Keseluruhan}} \]
\[ E_{11} = \frac{1200 \times 750}{2550} = \frac{900000}{2550} \approx 352.94 \]
\[ E_{12} = \frac{1200 \times 750}{2550} = \frac{900000}{2550} \approx 352.94 \]
\[ E_{13} = \frac{1200 \times 1050}{2550} = \frac{1260000}{2550} \approx 494.12 \]
\[ E_{21} = \frac{1350 \times 750}{2550} = \frac{1012500}{2550} \approx 397.06 \]
\[ E_{22} = \frac{1350 \times 750}{2550} = \frac{1012500}{2550} \approx 397.06 \]
\[ E_{23} = \frac{1350 \times 1050}{2550} = \frac{1417500}{2550} \approx 555.88 \]
Langkah 2: Hitung Statistik Uji Chi-Square
Statistik uji Chi-Square dihitung dengan rumus:
\[ X^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
dimana:
\(O_{ij}\) = frekuensi observasi pada sel ke-i,j
\(E_{ij}\) = frekuensi ekspektasi pada sel ke-i,j
Hitung Setiap Komponen
Female - Engineer:
\[ \frac{(300 - 352.94)^2}{352.94} = \frac{(-52.94)^2}{352.94} = \frac{2803.64}{352.94} \approx 7.95 \]
Female - Teacher:
\[ \frac{(400 - 352.94)^2}{352.94} = \frac{(47.06)^2}{352.94} = \frac{2214.64}{352.94} \approx 6.27 \]
Female - Doctor:
\[ \frac{(500 - 494.12)^2}{494.12} = \frac{(5.88)^2}{494.12} = \frac{34.57}{494.12} \approx 0.07 \]
Male - Engineer:
\[ \frac{(450 - 397.06)^2}{397.06} = \frac{(52.94)^2}{397.06} = \frac{2803.64}{397.06} \approx 7.06 \]
Male - Teacher:
\[ \frac{(350 - 397.06)^2}{397.06} = \frac{(-47.06)^2}{397.06} = \frac{2214.64}{397.06} \approx 5.58 \]
Male - Doctor:
\[ \frac{(550 - 555.88)^2}{555.88} = \frac{(-5.88)^2}{555.88} = \frac{34.57}{555.88} \approx 0.06 \]
Jumlahkan Semua Nilai
\[ \chi^2 = 7.95 + 6.27 + 0.07 + 7.06 + 5.58 + 0.06 = \boxed{26.99} \]
Hasil
Langkah 3: Bandingkan dengan Distribusi Chi-Square
Derajat bebas (df) dihitung menggunakan rumus:
\[ df = (banyak\ baris - 1) \times (banyak\ kolom - 1) \]
Tabel kita memiliki:
2 baris (Female, Male)
3 kolom (Engineer, Teacher, Doctor)
Sehingga:
\[ df = (2 - 1) \times (3 - 1) = 1 \times 2 = 2 \]
Menentukan Nilai Kritis
Untuk tingkat signifikansi \(\alpha = 0.05\) dan \(df = 2\), kita lihat di tabel chi-square atau menggunakan R:
# Nilai kritis dari distribusi chi-square
qchisq(0.95, df = 2)
## [1] 5.991465
Karena:
\[ X^2 = 26.99 > 5.991 \]
maka tolak H0.
Kesimpulan :
Dengan taraf signifikansi 5% didapatkan keputusan tolak H0 yang artinya Terdapat hubungan yang signifikan antara jenis kelamin dan jenis profesi. Dengan demikian, distribusi profesi tidak merata antara laki-laki dan perempuan.
Perhitungan menggunakan Rstudio
# Membuat tabel observasi
observed <- matrix(c(300, 400, 500,
450, 350, 550),
nrow = 2, byrow = TRUE)
# Menambahkan nama baris dan kolom
rownames(observed) <- c("Female", "Male")
colnames(observed) <- c("Engineer", "Teacher", "Doctor")
# Menampilkan tabel observasi
print("Tabel Observasi:")
## [1] "Tabel Observasi:"
print(observed)
## Engineer Teacher Doctor
## Female 300 400 500
## Male 450 350 550
# Menghitung uji chi-square
chi_result <- chisq.test(observed)
# Menampilkan hasil uji
print("Hasil Uji Chi-Square:")
## [1] "Hasil Uji Chi-Square:"
print(chi_result)
##
## Pearson's Chi-squared test
##
## data: observed
## X-squared = 26.984, df = 2, p-value = 1.382e-06
# Menampilkan nilai statistik chi-square saja
cat("\nNilai Chi-Square:", chi_result$statistic)
##
## Nilai Chi-Square: 26.98413
# Menampilkan nilai p-value
cat("\nP-value:", chi_result$p.value)
##
## P-value: 1.381883e-06
# Menampilkan frekuensi ekspektasi
cat("\n\nFrekuensi Ekspektasi:")
##
##
## Frekuensi Ekspektasi:
print(round(chi_result$expected, 2))
## Engineer Teacher Doctor
## Female 352.94 352.94 494.12
## Male 397.06 397.06 555.88
# Keputusan berdasarkan alpha 0.05
alpha <- 0.05
if (chi_result$p.value < alpha) {
cat("\nKeputusan: Tolak H0 - Terdapat hubungan signifikan antara jenis kelamin dan profesi.")
} else {
cat("\nKeputusan: Gagal tolak H0 - Tidak terdapat hubungan signifikan antara jenis kelamin dan profesi.")
}
##
## Keputusan: Tolak H0 - Terdapat hubungan signifikan antara jenis kelamin dan profesi.
Langkah 2: Lakukan Partisi Chi-Square
Partisi 1: Engineer vs Teacher
# Ambil kolom Engineer dan Teacher
obs_part1 <- observed[, c("Engineer", "Teacher")]
obs_part1
## Engineer Teacher
## Female 300 400
## Male 450 350
# Hitung chi-square untuk partisi 1
chi_part1 <- chisq.test(obs_part1)
chi_part1
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: obs_part1
## X-squared = 26.253, df = 1, p-value = 2.995e-07
Chi-Square : X² = 26.253, P-Value = 0.0000002995
Partisi 2: Doctor vs (Engineer + Teacher)
# Gabungkan Engineer + Teacher sebagai satu kolom
eng_teacher <- rowSums(observed[, c("Engineer", "Teacher")])
doctor <- observed[, "Doctor"]
# Buat matriks baru 2x2
obs_part2 <- cbind(eng_teacher, doctor)
colnames(obs_part2) <- c("Engineer_Teacher", "Doctor")
obs_part2
## Engineer_Teacher Doctor
## Female 700 500
## Male 800 550
# Hitung chi-square untuk partisi 2
chi_part2 <- chisq.test(obs_part2)
chi_part2
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: obs_part2
## X-squared = 0.18826, df = 1, p-value = 0.6644
Chi-Square : X² = 0.18826 , P-Value = 0.6644
cat("Partisi 1 (Engineer vs Teacher):", round(chi_part1$statistic, 2), "\n")
## Partisi 1 (Engineer vs Teacher): 26.25
cat("Partisi 2 (Doctor vs lainnya):", round(chi_part2$statistic, 2), "\n")
## Partisi 2 (Doctor vs lainnya): 0.19
cat("Total dari dua partisi:", round(chi_part1$statistic + chi_part2$statistic, 2), "\n")
## Total dari dua partisi: 26.44
Kesimpulan
Total nilai chi-square dari kedua partisi adalah χ² = 26.44, yang secara signifikan lebih tinggi dari nilai kritis pada α = 0.05 dan df = 2 (yakni 5.991). Oleh karena itu, keputusan uji adalah menolak H0. Dengan demikian, dapat disimpulkan bahwa terdapat hubungan yang signifikan antara jenis kelamin dan jenis profesi. Perbedaan ini terutama disumbangkan oleh perbedaan besar antara Engineer dan Teacher, sementara distribusi pada profesi Doctor relatif stabil.
6.2.3.3 Uji Likelihood Ratio (G²)
Uji Likelihood Ratio (G²) adalah alternatif dari uji Chi-Square Pearson yang digunakan untuk menguji independensi antara dua variabel kategorik dalam tabel kontingensi.
Statistik uji G² dihitung dengan rumus:
\[ G^2 = 2 \sum_{i} \sum_{j} n_{ij} \cdot \ln\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right) \]
Contoh Perhitungan Manual :
Data Observasi
| Pola Makan | Sehat (+) | Sakit (-) | Total |
|---|---|---|---|
| Vegetarian | 180 | 70 | 250 |
| Non-Vegetarian | 120 | 130 | 250 |
| Total | 300 | 200 | 500 |
Langkah 1 : Frekuensi Ekspektasi
Frekuensi ekspektasi dihitung dengan rumus:
\[ \hat{\mu}_{ij} = \frac{(\text{Jumlah baris ke-}i) \times (\text{Jumlah kolom ke-}j)}{\text{Total keseluruhan}} \]
Maka didapat:
\(\hat{\mu}_{11} = \frac{250 \times 300}{500} = 150\)
\(\hat{\mu}_{12} = \frac{250 \times 200}{500} = 100\)
\(\hat{\mu}_{21} = \frac{250 \times 300}{500} = 150\)
\(\hat{\mu}_{22} = \frac{250 \times 200}{500} = 100\)
Langkah 2 : Perhitungan Statistik G²
Gunakan rumus:
\[ G^2 = 2 \sum n_{ij} \cdot \ln\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right) \]
Hitung satu per satu:
\(180 \ln\left(\frac{180}{150}\right) = 180 \cdot \ln(1.2) = 180 \cdot 0.182 = 32.76\)
\(70 \ln\left(\frac{70}{100}\right) = 70 \cdot \ln(0.7) = 70 \cdot (-0.357) = -24.99\)
\(120 \ln\left(\frac{120}{150}\right) = 120 \cdot \ln(0.8) = 120 \cdot (-0.223) = -26.76\)
\(130 \ln\left(\frac{130}{100}\right) = 130 \cdot \ln(1.3) = 130 \cdot 0.262 = 34.06\)
Jumlah:
\[ G^2 = 2 \cdot (32.76 - 24.99 - 26.76 + 34.06) = 2 \cdot 15.07 = \boxed{30.14} \]
Langkah 3 : Bandingkan dengan Distribusi Chi-Square Derajat bebas
\[ df = (2 - 1)(2 - 1) = 1 \]
P-Value dan Keputusan
Nilai kritis chi-square pada \(df =
1\) dan \(\alpha = 0.05\) adalah
3.84.
Karena \(G^2 = 30.14 > 3.84\),
maka:
Kesimpulan
Berdasarkan uji likelihood ratio (G²), diperoleh \(G^2 = 30.14\) dengan p-value <
0.05.
Dengan demikian, terdapat hubungan yang signifikan
antara pola makan dan status
kesehatan. Orang dengan pola makan berbeda (vegetarian vs
non-vegetarian) menunjukkan proporsi yang berbeda terhadap kemungkinan
sehat atau sakit.
6.2.3.4 Uji Fisher’s Exact
Uji Fisher’s Exact digunakan untuk menganalisis hubungan antara dua variabel kategorikal dalam tabel kontingensi kecil, terutama ketika asumsi-asumsi dari uji Chi-square tidak dapat dipenuhi karena ukuran sampel yang terbatas. Uji ini pertama kali diperkenalkan oleh Sir Ronald A. Fisher, seorang ahli statistik terkemuka, yang mengembangkan uji ini untuk digunakan dalam penelitian biologi dan medis.
Keunggulan Uji Fisher’s Exact:
Ideal untuk ukuran sampel kecil: Uji ini sangat efektif pada data dengan ukuran sampel terbatas, di mana uji Chi-square mungkin tidak dapat memberikan hasil yang valid.
Tidak memerlukan asumsi distribusi normal: Berbeda dengan uji Chi-square yang mengharuskan data untuk memenuhi distribusi normal, Uji Fisher dapat digunakan pada data yang lebih kecil dan tidak terdistribusi secara normal.
Akurat pada frekuensi kecil: Pada data dengan frekuensi observasi yang rendah, hasil dari Uji Fisher’s Exact lebih tepat dan dapat diandalkan dibandingkan dengan uji Chi-square yang mungkin menghasilkan kesalahan penghitungan.
Keterbatasan Uji Fisher’s Exact:
Kompleksitas komputasi: Ketika ukuran tabel kontingensi semakin besar, perhitungan uji ini bisa menjadi sangat memakan waktu dan memerlukan sumber daya komputasi yang besar.
Terbatas pada tabel kontingensi kecil: Uji Fisher’s Exact hanya cocok untuk tabel 2x2 atau tabel 3x3, dan tidak bisa digunakan pada tabel kontingensi dengan banyak kategori atau tingkat lebih besar.
6.2.3.4.1 Distribusi Hipergeometrik
Distribusi hipergeometrik digunakan untuk menghitung probabilitas dalam pengambilan sampel acak tanpa pengembalian. Pada distribusi ini, kita menarik 𝑥 bola putih dari sebuah kumpulan yang terdiri dari 𝐾 bola putih dan 𝑁−𝐾 bola hitam. Total bola dalam kumpulan tersebut adalah 𝑁.
Rumus untuk menghitung probabilitas mengambil 𝑥 bola putih dalam pengambilan sampel adalah:
\[ P(X = x) = \frac{{\binom{K}{x} \cdot \binom{N-K}{n-x}}}{{\binom{N}{n}}} \]
Dimana:
\(\binom{K}{x}\) adalah jumlah cara memilih 𝑥 bola putih dari 𝐾 bola putih.
\(\binom{N-K}{n-x}\) adalah jumlah cara memilih 𝑛−𝑥 bola hitam dari 𝑁−𝐾 bola hitam yang tersisa.
\(\binom{N}{n}\) adalah jumlah cara memilih 𝑛 bola dari total 𝑁 bola.
6.2.3.4.2 Contoh Perhitungan
Misalkan kita memiliki data sebagai berikut:
N = 50 (total populasi)
K = 30 (jumlah bola putih dalam populasi)
n = 25 (jumlah sampel yang diambil)
x = 15 (jumlah bola putih dalam sampel)
Menggunakan rumus distribusi hipergeometrik:
\[ P(X = 15) = \frac{{\binom{30}{15} \cdot \binom{50-30}{25-15}}}{{\binom{50}{25}}} \]
\[ \binom{30}{15} = \frac{30!}{15!(30-15)!} \]
\[ \binom{20}{10} = \frac{20!}{10!(20-10)!} \]
\[ \binom{50}{25} = \frac{50!}{25!(50-25)!} \]
# Menghitung nilai probabilitas menggunakan fungsi dhyper()
probabilitas <- dhyper(15, 30, 20, 25)
probabilitas
## [1] 0.2267127
Contoh data :
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 16 | 4 | 20 |
| Grup Y | 13 | 7 | 20 |
| Total | 29 | 11 | 40 |
Langkah perhitungan manual: 1. Asumsikan hipotesis nol (tidak ada hubungan antara dua variabel). 2. Hitung probabilitas tabel yang diamati menggunakan distribusi hipergeometrik :
choose(29, 16) * choose(11, 4) / choose(40, 20)
## [1] 0.162464
Berikut semua kombinasi tabel 2x2 yang mungkin dengan total baris dan kolom sama :
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 20 | 0 | 20 |
| Grup Y | 9 | 11 | 20 |
| Total | 29 | 11 | 40 |
choose(29,20)*choose(11,0)/choose(40,20)
## [1] 7.26533e-05
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 19 | 1 | 20 |
| Grup Y | 10 | 10 | 20 |
| Total | 29 | 11 | 40 |
choose(29,19)*choose(11,1)/choose(40,20)
## [1] 0.001598373
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 18 | 2 | 20 |
| Grup Y | 11 | 9 | 20 |
| Total | 29 | 11 | 40 |
choose(29,18)*choose(11,2)/choose(40,20)
## [1] 0.01380413
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 17 | 3 | 20 |
| Grup Y | 12 | 8 | 20 |
| Total | 29 | 11 | 40 |
choose(29,17)*choose(11,3)/choose(40,20)
## [1] 0.06211857
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 16 | 4 | 20 |
| Grup Y | 13 | 7 | 20 |
| Total | 29 | 11 | 40 |
choose(29,16)*choose(11,4)/choose(40,20)
## [1] 0.162464
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 15 | 5 | 20 |
| Grup Y | 14 | 6 | 20 |
| Total | 29 | 11 | 40 |
choose(29,15)*choose(11,5)/choose(40,20)
## [1] 0.2599423
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 14 | 6 | 20 |
| Grup Y | 15 | 5 | 20 |
| Total | 29 | 11 | 40 |
choose(29,14)*choose(11,6)/choose(40,20)
## [1] 0.2599423
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 13 | 7 | 20 |
| Grup Y | 16 | 4 | 20 |
| Total | 29 | 11 | 40 |
choose(29,13)*choose(11,7)/choose(40,20)
## [1] 0.162464
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 12 | 8 | 20 |
| Grup Y | 17 | 3 | 20 |
| Total | 29 | 11 | 40 |
choose(29,12)*choose(11,8)/choose(40,20)
## [1] 0.06211857
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 11 | 9 | 20 |
| Grup Y | 18 | 2 | 20 |
| Total | 29 | 11 | 40 |
choose(29,11)*choose(11,9)/choose(40,20)
## [1] 0.01380413
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 10 | 10 | 20 |
| Grup Y | 19 | 1 | 20 |
| Total | 29 | 11 | 40 |
choose(29,10)*choose(11,10)/choose(40,20)
## [1] 0.001598373
| Ya | Tidak | Total | |
|---|---|---|---|
| Grup X | 9 | 11 | 20 |
| Grup Y | 20 | 0 | 20 |
| Total | 29 | 11 | 40 |
choose(29,9)*choose(11,11)/choose(40,20)
## [1] 7.26533e-05
6.2.3.4.3 Menggunakan fisher.test() di R
# Buat matriks data
data <- matrix(c(18, 2, 11, 9), nrow = 2, byrow = TRUE)
# Tampilkan tabel
colnames(data) <- c("Ya", "Tidak")
rownames(data) <- c("Grup X", "Grup Y")
data
## Ya Tidak
## Grup X 18 2
## Grup Y 11 9
# Lakukan Fisher's Exact Test
fisher.test(data)
##
## Fisher's Exact Test for Count Data
##
## data: data
## p-value = 0.03095
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.147793 78.183838
## sample estimates:
## odds ratio
## 6.994073
Interpretasi :
p-value = 0.03095 < 0.05 → Tolak H0, yang artinya ada hubungan signifikan antara dua variabel.
Karena p-value < 0.05, kita menyimpulkan bahwa ada hubungan yang signifikan secara statistik antara kelompok dan respon.
Residual dalam tabel kontingensi digunakan untuk mengevaluasi kontribusi masing-masing sel terhadap adanya hubungan antara dua variabel kategori. Residual dihitung sebagai selisih antara frekuensi aktual (yang diamati) dan frekuensi yang diprediksi berdasarkan asumsi bahwa kedua variabel bersifat independen.
Nilai residual yang besar, baik positif maupun negatif, menunjukkan bahwa terdapat deviasi besar antara data aktual dengan nilai yang diharapkan. Artinya, sel tersebut kemungkinan besar memberikan kontribusi yang signifikan terhadap asosiasi antar variabel. Sebaliknya, residual yang mendekati nol menandakan bahwa data aktual sesuai dengan nilai yang diperkirakan jika tidak ada hubungan antar variabel, sehingga sel tersebut hanya memiliki pengaruh kecil terhadap asosiasi yang terjadi.
Analisis residual ini sangat berguna dalam memahami secara lebih mendalam sumber ketidaksesuaian atau pola-pola menarik dalam data kategorikal.
4.3.1 Jenis Residual
Pearson Residual
Pearson Residual digunakan untuk menilai sejauh mana nilai observasi menyimpang dari nilai yang diharapkan, yang dihitung dengan asumsi bahwa kedua variabel tidak saling berhubungan (independen).
Rumus Pearson Residual:
\[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
\(O_{ij}\): frekuensi yang diamati pada sel ke-i,j
\(E_{ij}\): frekuensi yang diharapkan berdasarkan model independensi
Semakin besar nilai absolut dari residual, semakin besar kontribusi sel tersebut terhadap nilai statistik \(\chi^2\).
Standardized Residual (Adjusted Residual)
Standardized Residual, yang juga dikenal sebagai Adjusted Residual, merupakan versi pengembangan dari residual Pearson. Residual ini tidak hanya membandingkan nilai observasi dan nilai harapan, tetapi juga memperhitungkan proporsi marginal dari baris dan kolom, sehingga memberikan hasil yang lebih akurat dalam konteks ketidaktergantungan antar variabel.
Rumus perhitungan residual standar:
\[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - p_{i+})(1 - p_{+j})}} \]
Dengan:
\(O_{ij}\): nilai observasi pada sel ke-(i,j)
\(E_{ij}\): nilai ekspektasi berdasarkan asumsi independen
\(p_{i+}\): proporsi total baris ke-i
\(p_{+j}\): proporsi total kolom ke-j
Jika asumsi independensi terpenuhi, nilai dari \(r_{ij}\) mendekati distribusi normal standar \(\mathcal{N}(0,1)\). Residual ini sangat berguna untuk mendeteksi sel-sel dalam tabel yang menyimpang secara signifikan dari ekspektasi.
6.3.1.1 Contoh Perhitungan Residual secara manual
Misalkan sebuah survei dilakukan untuk melihat hubungan antara jenis metode belajar dan tingkat keberhasilan siswa. Hasilnya disajikan dalam tabel kontingensi berikut:
| Berhasil | Tidak Berhasil | Total | |
|---|---|---|---|
| Metode X | 25 | 5 | 30 |
| Metode Y | 15 | 15 | 30 |
| Total | 40 | 20 | 60 |
Langkah-langkah Perhitungan :
Gunakan rumus:
\[ E_{ij} = \frac{(\text{Total Baris}_i) \times (\text{Total Kolom}_j)}{\text{Total Keseluruhan}} \]
Hasil:
\(E_{11} = \frac{30 \times 40}{60} = 20\)
\(E_{12} = \frac{30 \times 20}{60} = 10\)
\(E_{21} = \frac{30 \times 40}{60} = 20\)
\(E_{22} = \frac{30 \times 20}{60} = 10\)
\[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
\(e_{11} = \frac{25 - 20}{\sqrt{20}} = \frac{5}{4.47} \approx 1.12\)
\(e_{12} = \frac{5 - 10}{\sqrt{10}} = \frac{-5}{3.16} \approx -1.58\)
\(e_{21} = \frac{15 - 20}{\sqrt{20}} = \frac{-5}{4.47} \approx -1.12\)
\(e_{22} = \frac{15 - 10}{\sqrt{10}} = \frac{5}{3.16} \approx 1.58\)
Interpretasi
Perhitungan menggunakan software R
# Buat matriks kontingensi
data <- matrix(c(25, 5,
15, 15),
nrow = 2,
byrow = TRUE)
# Tambahkan nama baris dan kolom
rownames(data) <- c("Metode X", "Metode Y")
colnames(data) <- c("Berhasil", "Tidak Berhasil")
# Tampilkan tabel
data
## Berhasil Tidak Berhasil
## Metode X 25 5
## Metode Y 15 15
# Hitung chi-square dan residual
chisq_result <- chisq.test(data, correct = FALSE)
# Tampilkan residual Pearson
chisq_result$residuals
## Berhasil Tidak Berhasil
## Metode X 1.118034 -1.581139
## Metode Y -1.118034 1.581139
4.3.2 Deteksi Outlier dalam Analisis Data Kategorik Menggunakan Residual
Dalam analisis data kategorik, outlier merujuk pada sel-sel dalam tabel kontingensi yang memiliki nilai residual ekstrem—baik sangat tinggi positif maupun sangat rendah negatif. Residual di sini menunjukkan perbedaan antara jumlah kejadian aktual (observasi) dan jumlah yang diperkirakan (ekspektasi) berdasarkan asumsi bahwa variabel dalam tabel saling bebas (independen).
Apa yang Dimaksud Outlier?
Outlier dalam tabel kontingensi adalah kombinasi kategori yang muncul secara tidak biasa, artinya:
Terlalu sering terjadi dibandingkan ekspektasi (residual positif besar).
Jauh lebih jarang terjadi dibandingkan ekspektasi (residual negatif besar).
Cara Deteksi
Untuk mendeteksi outlier, kita bisa melihat nilai residual Pearson atau residual standar (adjusted residual). Jika nilai residual melebihi ambang batas tertentu (misalnya, ±1.96 untuk tingkat signifikansi 5%), maka sel tersebut dapat dicurigai sebagai outlier.
\[ e_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
Jika nilai mutlak residual (|eij|) lebih besar dari 2, maka sel tersebut dianggap sebagai indikasi adanya outlier.
\[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - p_{i+})(1 - p_{+j})}} \]
Jika nilai mutlak adjusted residual (|rij|) lebih besar dari 2, maka sel tersebut dianggap sebagai outlier yang signifikan.
Misalkan terdapat tabel kontingensi seperti berikut:
| Respon A | Respon B | Total | |
|---|---|---|---|
| Grup X | 50 | 40 | 90 |
| Grup Y | 30 | 80 | 110 |
| Total | 80 | 120 | 200 |
Langkah 1: Hitung Frekuensi Harapan
Frekuensi harapan (\(E_{ij}\)) dihitung dengan rumus:
\[ E_{ij} = \frac{(\text{jumlah baris}_i) \times (\text{jumlah kolom}_j)}{\text{total keseluruhan}} \]
| Respon A (Expected) | Respon B (Expected) | |
|---|---|---|
| Grup X | \(\frac{90 \times 80}{200} = 36\) | \(\frac{90 \times 120}{200} = 54\) |
| Grup Y | \(\frac{110 \times 80}{200} = 44\) | \(\frac{110 \times 120}{200} = 66\) |
Langkah 2: Hitung Pearson Residual
\[ \text{Pearson Residual} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
| Respon A | Respon B | |
|---|---|---|
| Grup X | \(\frac{50 - 36}{\sqrt{36}} = \frac{14}{6} = 2.33\) | \(\frac{40 - 54}{\sqrt{54}} \approx -1.91\) |
| Grup Y | \(\frac{30 - 44}{\sqrt{44}} \approx -2.11\) | \(\frac{80 - 66}{\sqrt{66}} \approx 1.72\) |
Langkah 3: Hitung Standardized Residual
\[ \text{Standardized Residual} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - r_i)(1 - c_j)}} \]
Dengan asumsi sederhana, kita gunakan standardized residual mendekati Pearson residual karena sel count besar dan koreksi kecil.
Interpretasi:
Sel (Grup X, Respon A) dan (Grup Y, Respon B) menunjukkan residual positif yang besar (2.33 dan 1.72). Ini mengindikasikan bahwa jumlah kejadian aktual pada kedua sel ini lebih tinggi dibandingkan yang diharapkan jika tidak ada hubungan antara kategori.
Sebaliknya, (Grup X, Respon B) dan (Grup Y, Respon A) memiliki residual negatif yang cukup besar (–1.91 dan –2.11), yang artinya nilai aktual jauh lebih rendah dari nilai ekspektasinya.
Karena residual beberapa sel mendekati atau melewati ambang ±2, bisa diduga bahwa terdapat pola sistematis yang menandakan hubungan antara grup dan jenis respon.
Kesimpulan: Distribusi respon antara Grup X dan Y tidak seimbang, sehingga asumsi tidak adanya asosiasi antar variabel kemungkinan tidak valid.
Perhitungan menggunakan software Rstudio
# Buat tabel kontingensi
data <- matrix(c(50, 40,
30, 80),
nrow = 2, byrow = TRUE)
rownames(data) <- c("Grup X", "Grup Y")
colnames(data) <- c("Respon A", "Respon B")
data
## Respon A Respon B
## Grup X 50 40
## Grup Y 30 80
# Uji chi-square
uji <- chisq.test(data)
uji
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 15.341, df = 1, p-value = 8.975e-05
# Pearson Residual
uji$residuals
## Respon A Respon B
## Grup X 2.333333 -1.905159
## Grup Y -2.110579 1.723281
# Standardized Residual
uji$stdres
## Respon A Respon B
## Grup X 4.061812 -4.061812
## Grup Y -4.061812 4.061812
Interpretasi :
Pearson Residual
(Grup X, Respon A): 2.33 → Ada lebih banyak respon A pada Grup X daripada yang diperkirakan model.
(Grup Y, Respon A): –2.11 → Grup Y memberikan lebih sedikit respon A dari yang diharapkan.
(Grup X, Respon B): –1.91 → Respon B kurang sering terjadi pada Grup X.
(Grup Y, Respon B): 1.72 → Lebih banyak respon B dari ekspektasi pada Grup Y.
Standardized residual
Semua residual melebihi |4|, yang berarti setiap sel dalam tabel adalah outlier signifikan. Artinya, seluruh penyebaran data tidak sesuai dengan model independensi.
Tabel kontingensi tiga arah merupakan metode statistik yang digunakan untuk menganalisis hubungan antar tiga variabel kategorik secara simultan. Dalam pengaplikasiannya, dua variabel utama (misalnya variabel A dan B) akan dianalisis dengan mempertimbangkan satu variabel lain sebagai pengendali atau penengah (misalnya variabel C).
Jenis analisis ini sangat berguna terutama ketika hubungan antara dua variabel utama diduga dipengaruhi oleh faktor ketiga, yang berfungsi sebagai variabel pengganggu (confounding variable). Contoh penerapannya sangat luas, seperti:
Bidang Kesehatan Masyarakat: Untuk melihat apakah ada kaitan antara konsumsi alkohol (variabel A) dan penyakit hati (variabel B), dengan memasukkan jenis kelamin sebagai variabel pengontrol (variabel C).
Ilmu Sosial: Dalam studi mengenai keterkaitan antara tingkat pendidikan (variabel A) dan tingkat partisipasi politik (variabel B), dengan memperhitungkan usia sebagai variabel ketiga (variabel C).
Bentuk Tabel Kontingensi Tiga Arah
Umumnya, tabel ini dapat disajikan dalam dua jenis tampilan:
Menampilkan keterkaitan antara dua variabel utama (A dan B) dalam masing-masing kategori dari variabel kontrol (C) dan memungkinkan analisis yang lebih spesifik dan menggambarkan hubungan bersyarat (conditional association).
Menunjukkan hubungan secara keseluruhan antara A dan B tanpa memperhitungkan variabel C (yaitu dengan menggabungkan semua kategori dari C). Lebih sederhana, tetapi bisa menimbulkan bias interpretasi karena mengabaikan variabel pengganggu seperti terjadinya paradoks Simpson (Simpson’s Paradox).
Tujuan Penggunaan Tabel Kontingensi Tiga Arah
Mengontrol efek variabel perancu yang dapat memengaruhi hubungan antara dua variabel utama.
Memberikan pemahaman yang lebih utuh dan objektif terhadap pola hubungan antar variabel.
Menghindari kesimpulan yang keliru akibat menganalisis data secara keseluruhan tanpa memisahkan kategori penting.
Manfaat Penggunaan Tabel Kontingensi Tiga arah
Meningkatkan validitas hasil analisis, karena mempertimbangkan pengaruh dari variabel kontrol.
Mengungkap hubungan yang kompleks, yang sering kali tidak terlihat saat hanya dua variabel dianalisis.
Mendeteksi fenomena seperti paradoks Simpson, yang bisa membuat hubungan antara variabel tampak terbalik jika data digabungkan.
Keunggulan
Lebih presisi dalam menilai hubungan antar variabel.
Mampu mengendalikan efek dari variabel pengganggu.
Sangat cocok untuk riset kuantitatif berskala besar yang melibatkan beberapa variabel kategorik.
Kekurangan
Analisis lebih rumit, baik dari segi penghitungan maupun penafsiran hasil.
Membutuhkan jumlah data yang besar untuk memastikan jumlah observasi mencukupi di setiap sel tabel.
Jika variabel kontrol memiliki banyak kategori, tabel akan menjadi sangat besar dan sulit dianalisis secara efisien.
Dalam analisis tabel kontingensi tiga arah, terdapat dua pendekatan utama dalam menyajikan data: tabel parsial dan tabel marginal.
Tabel Parsial disusun dengan memisahkan data berdasarkan kategori dari variabel ketiga (Z). Artinya, kita melihat hubungan antara dua variabel utama (misalnya X dan Y) secara terpisah dalam setiap kategori Z. Pendekatan ini memungkinkan kita untuk menilai apakah hubungan antara X dan Y konsisten dalam semua level Z, atau apakah ada perbedaan pola.
Tabel Marginal, sebaliknya, menggabungkan seluruh kategori variabel Z menjadi satu, sehingga hanya menampilkan hubungan antara X dan Y secara keseluruhan. Tabel ini tidak mempertimbangkan pengaruh Z, dan sering kali digunakan untuk melihat gambaran umum hubungan antar variabel.
Struktur Tabel Kontingensi Tiga Arah
| Z = 1 | Y = 1 | Y = 2 | … | Y = J | Y = • |
|---|---|---|---|---|---|
| X = 1 | n₁₁₁ | n₁₂₁ | … | n₁J₁ | n₁+1 |
| X = 2 | n₂₁₁ | n₂₂₁ | … | n₂J₁ | n₂+1 |
| … | … | … | … | … | … |
| X = i | nᵢ₁₁ | nᵢ₂₁ | … | nᵢJ₁ | nᵢ+1 |
| X = I | nᴵ₁₁ | nᴵ₂₁ | … | nᴵJ₁ | nᴵ+1 |
| X = • | n+₁₁ | n+₂₁ | … | n+J₁ | n++1 |
| Z = k | Y = 1 | Y = 2 | … | Y = J | Y = • |
|---|---|---|---|---|---|
| X = 1 | n₁₁ₖ | n₁₂ₖ | … | n₁Jₖ | n₁+ₖ |
| X = 2 | n₂₁ₖ | n₂₂ₖ | … | n₂Jₖ | n₂+ₖ |
| … | … | … | … | … | … |
| X = i | nᵢ₁ₖ | nᵢ₂ₖ | … | nᵢJₖ | nᵢ+ₖ |
| X = I | nᴵ₁ₖ | nᴵ₂ₖ | … | nᴵJₖ | nᴵ+ₖ |
| X = • | n+₁ₖ | n+₂ₖ | … | n+Jₖ | n++ₖ |
| Z = • | Y = 1 | Y = 2 | … | Y = J | Y = • |
|---|---|---|---|---|---|
| X = 1 | n₁₁+ | n₁₂+ | … | n₁J+ | n₁++ |
| X = 2 | n₂₁+ | n₂₂+ | … | n₂J+ | n₂++ |
| … | … | … | … | … | … |
| X = i | nᵢ₁+ | nᵢ₂+ | … | nᵢJ+ | nᵢ++ |
| X = I | nᴵ₁+ | nᴵ₂+ | … | nᴵJ+ | nᴵ++ |
| X = • | n+₁+ | n+₂+ | … | n+J+ | n+++ |
Contoh Data:
| Z (Jenis Kelamin) | X (Olahraga) | Y (Obesitas) | Tidak Obesitas | Jumlah |
|---|---|---|---|---|
| Pria | Ya | 15 | 35 | 50 |
| Pria | Tidak | 30 | 20 | 50 |
| Wanita | Ya | 20 | 30 | 50 |
| Wanita | Tidak | 40 | 10 | 50 |
| Lainnya | Ya | 10 | 40 | 50 |
| Lainnya | Tidak | 35 | 15 | 50 |
Tabel Frekuensi Parsial
Tabel frekuensi parsial digunakan untuk menganalisis hubungan antara dua variabel kategorik, dengan satu variabel tambahan (dalam hal ini, Jenis Kelamin) sebagai variabel kontrol. Dengan memisahkan data berdasarkan kategori kontrol tersebut, kita dapat melihat apakah hubungan antara dua variabel utama (Olahraga dan Obesitas) konsisten di seluruh subkelompok.
Tabel Parsial untuk Z (Jenis Kelamin) = Pria
| X (Olahraga) | Y (Obesitas) | Tidak Obesitas |
|---|---|---|
| Ya | 15 | 35 |
| Tidak | 30 | 20 |
Tabel Parsial untuk Z (Jenis Kelamin) = Wanita
| X (Olahraga) | Y (Obesitas) | Tidak Obesitas |
|---|---|---|
| Ya | 20 | 30 |
| Tidak | 40 | 10 |
Tabel Parsial untuk Z (Jenis Kelamin) = Lainnya
| X (Olahraga) | Y (Obesitas) | Tidak Obesitas |
|---|---|---|
| Ya | 10 | 40 |
| Tidak | 35 | 15 |
Implementasi dalam software R
# Buat data 3 variabel
data <- data.frame(
Z = rep(c("Pria", "Wanita", "Lainnya"), each = 4),
X = rep(c("Ya", "Tidak"), times = 6),
Y = rep(c("Obesitas", "Tidak Obesitas"), each = 2, times = 3),
Frekuensi = c(15, 35, 30, 20, # Pria
20, 30, 40, 10, # Wanita
10, 40, 35, 15) # Lainnya
)
# Tampilkan Data
data
## Z X Y Frekuensi
## 1 Pria Ya Obesitas 15
## 2 Pria Tidak Obesitas 35
## 3 Pria Ya Tidak Obesitas 30
## 4 Pria Tidak Tidak Obesitas 20
## 5 Wanita Ya Obesitas 20
## 6 Wanita Tidak Obesitas 30
## 7 Wanita Ya Tidak Obesitas 40
## 8 Wanita Tidak Tidak Obesitas 10
## 9 Lainnya Ya Obesitas 10
## 10 Lainnya Tidak Obesitas 40
## 11 Lainnya Ya Tidak Obesitas 35
## 12 Lainnya Tidak Tidak Obesitas 15
# Membuat array 3 dimensi (tabel kontingensi 3 arah)
tabel3d <- xtabs(Frekuensi ~ Z + X + Y, data = data)
# Tampilkan tabel 3D
tabel3d
## , , Y = Obesitas
##
## X
## Z Tidak Ya
## Lainnya 40 10
## Pria 35 15
## Wanita 30 20
##
## , , Y = Tidak Obesitas
##
## X
## Z Tidak Ya
## Lainnya 15 35
## Pria 20 30
## Wanita 10 40
tabel3d["Pria", , ]
## Y
## X Obesitas Tidak Obesitas
## Tidak 35 20
## Ya 15 30
tabel3d["Wanita", , ]
## Y
## X Obesitas Tidak Obesitas
## Tidak 30 10
## Ya 20 40
tabel3d["Lainnya", , ]
## Y
## X Obesitas Tidak Obesitas
## Tidak 40 15
## Ya 10 35
Kesimpulan
Tabel frekuensi parsial memungkinkan analisis hubungan antara dua variabel dengan mempertimbangkan variabel kontrol. Ini membantu mengidentifkasi pola yang mungkin tersembunyi dalam tabel frekuensi marginal.
Tabel Frekuensi Marginal menampilkan jumlah total observasi untuk setiap variabel dengan mengabaikan variabel lainnya dalam tabel kontingensi tiga arah. Tabel ini membantu dalam memahami distribusi kategori secara agregat tanpa mempertimbangkan hubungan antarvariabel. Tabel frekuensi marginal dihitung dengan menjumlahkan frekuensi dari tabel kontingensi tiga arah berdasarkan variabel yang tersisa.
1. Peluang Bersama
Peluang bersama didefinisikan sebagai:
\[ P(Z, X, Y) = \frac{f(Z, X, Y)}{N} \]
Dengan:
\(Z\): Jenis Kelamin
\(X\): Status Olahraga (Ya/Tidak)
\(Y\): Status Obesitas
\(f(Z, X, Y)\): Frekuensi kombinasi
\(N\): Total data (300)
Contoh Perhitungan Peluang Bersama
Contoh:
\[ P(Pria, Ya, Obesitas) = \frac{15}{300} = 0.05 \]
\[ P(Wanita, Tidak, Tidak\ Obesitas) = \frac{10}{300} = 0.0333 \]
\[ P(Lainnya, Ya, Tidak\ Obesitas) = \frac{40}{300} = 0.1333 \]
Perhitungan menggunakan software R :
# Membuat data awal
data <- data.frame(
Jenis_Kelamin = c("Pria", "Pria", "Wanita", "Wanita", "Lainnya", "Lainnya"),
Olahraga = c("Ya", "Tidak", "Ya", "Tidak", "Ya", "Tidak"),
Obesitas = c(15, 30, 20, 40, 10, 35),
Tidak_Obesitas = c(35, 20, 30, 10, 40, 15)
)
# Menambahkan kolom Jumlah
data$Jumlah <- data$Obesitas + data$Tidak_Obesitas
# Menampilkan tabel
data
## Jenis_Kelamin Olahraga Obesitas Tidak_Obesitas Jumlah
## 1 Pria Ya 15 35 50
## 2 Pria Tidak 30 20 50
## 3 Wanita Ya 20 30 50
## 4 Wanita Tidak 40 10 50
## 5 Lainnya Ya 10 40 50
## 6 Lainnya Tidak 35 15 50
# Menghitung total keseluruhan data
total_data <- sum(data$Jumlah)
total_data
## [1] 300
library(tidyr)
# Ubah ke format long
data_long <- pivot_longer(data,
cols = c("Obesitas", "Tidak_Obesitas"),
names_to = "Status",
values_to = "Frekuensi")
# Hitung peluang bersama
data_long$Peluang_Bersama <- data_long$Frekuensi / total_data
# Tampilkan data hasil
data_long
## # A tibble: 12 × 6
## Jenis_Kelamin Olahraga Jumlah Status Frekuensi Peluang_Bersama
## <chr> <chr> <dbl> <chr> <dbl> <dbl>
## 1 Pria Ya 50 Obesitas 15 0.05
## 2 Pria Ya 50 Tidak_Obesitas 35 0.117
## 3 Pria Tidak 50 Obesitas 30 0.1
## 4 Pria Tidak 50 Tidak_Obesitas 20 0.0667
## 5 Wanita Ya 50 Obesitas 20 0.0667
## 6 Wanita Ya 50 Tidak_Obesitas 30 0.1
## 7 Wanita Tidak 50 Obesitas 40 0.133
## 8 Wanita Tidak 50 Tidak_Obesitas 10 0.0333
## 9 Lainnya Ya 50 Obesitas 10 0.0333
## 10 Lainnya Ya 50 Tidak_Obesitas 40 0.133
## 11 Lainnya Tidak 50 Obesitas 35 0.117
## 12 Lainnya Tidak 50 Tidak_Obesitas 15 0.05
library(dplyr)
data_long %>%
select(Jenis_Kelamin, Olahraga, Status, Frekuensi, Peluang_Bersama) %>%
arrange(Jenis_Kelamin, Olahraga, Status)
## # A tibble: 12 × 5
## Jenis_Kelamin Olahraga Status Frekuensi Peluang_Bersama
## <chr> <chr> <chr> <dbl> <dbl>
## 1 Lainnya Tidak Obesitas 35 0.117
## 2 Lainnya Tidak Tidak_Obesitas 15 0.05
## 3 Lainnya Ya Obesitas 10 0.0333
## 4 Lainnya Ya Tidak_Obesitas 40 0.133
## 5 Pria Tidak Obesitas 30 0.1
## 6 Pria Tidak Tidak_Obesitas 20 0.0667
## 7 Pria Ya Obesitas 15 0.05
## 8 Pria Ya Tidak_Obesitas 35 0.117
## 9 Wanita Tidak Obesitas 40 0.133
## 10 Wanita Tidak Tidak_Obesitas 10 0.0333
## 11 Wanita Ya Obesitas 20 0.0667
## 12 Wanita Ya Tidak_Obesitas 30 0.1
Tabel Probabilitas Bersama (Joint Probability) Tabel probabilitas bersama dihitung dengan membagi setiap sel dengan total keseluruhan sampel.
2. Peluang marginal diperoleh dengan menjumlahkan
Peluang marginal diperoleh dengan menjumlahkan peluang bersama terhadap variabel lain yang tidak diperhatikan.
Contoh:
Peluang terkena obesitas (Y = 1):
\[
P(Y = 1) = \sum_{Z, X} P(Z, X, Y = 1)
\]
Peluang melakukan olahraga (X = Ya):
\[
P(X = Ya) = \sum_{Z, Y} P(Z = Z, X = Ya, Y)
\]
Contoh Perhitungan
Jumlah seluruh orang obesitas:
Pria, Ya: 15
Pria, Tidak: 30
Wanita, Ya: 20
Wanita, Tidak: 40
Lainnya, Ya: 10
Lainnya, Tidak: 35
\[ P(Y = 1) = \frac{15 + 30 + 20 + 40 + 10 + 35}{300} = \frac{150}{300} = 0.5 \]
Jumlah seluruh orang yang olahraga:
Pria, Ya: 15 + 35 = 50
Wanita, Ya: 20 + 30 = 50
Lainnya, Ya: 10 + 40 = 50
\[ P(X = Ya) = \frac{50 + 50 + 50}{300} = \frac{150}{300} = 0.5 \]
Perhitungan menggunakan R
# Data obesitas berdasarkan jenis kelamin dan olahraga
data_obesitas <- array(
c(15, 35, # Pria - Ya
30, 20, # Pria - Tidak
20, 30, # Wanita - Ya
40, 10, # Wanita - Tidak
10, 40, # Lainnya - Ya
35, 15), # Lainnya - Tidak
dim = c(2, 2, 3),
dimnames = list(
Obesitas = c("Ya", "Tidak"),
Olahraga = c("Ya", "Tidak"),
JenisKelamin = c("Pria", "Wanita", "Lainnya")
)
)
# Hitung total
total_data <- sum(data_obesitas)
# Probabilitas bersama
joint_prob <- data_obesitas / total_data
# Probabilitas marginal
marginal_jenis_kelamin <- apply(joint_prob, 3, sum)
marginal_olahraga <- apply(joint_prob, 2, sum)
marginal_obesitas <- apply(joint_prob, 1, sum)
# Tampilkan hasil
marginal_jenis_kelamin
## Pria Wanita Lainnya
## 0.3333333 0.3333333 0.3333333
marginal_olahraga
## Ya Tidak
## 0.5 0.5
marginal_obesitas
## Ya Tidak
## 0.5 0.5
Kesimpulan
Tabel peluang marginal menggambarkan distribusi probabilitas dari satu variabel saja, dengan cara mengabaikan atau menjumlahkan nilai-nilai dari variabel lain dalam tabel kontingensi. Ini sangat berguna saat ingin melihat gambaran umum dari masing-masing kategori dalam satu variabel tertentu, tanpa terpengaruh oleh kombinasi variabel lainnya.
3. Peluang Bersyarat
Rumus:
\[ P(Z \mid X, Y) = \frac{P(Z, X, Y)}{P(X, Y)} \]
Sebagai contoh, Hitung peluang seseorang mengalami obesitas, dengan syarat dia adalah seorang wanita yang tidak berolahraga.
Langkah Perhitungan:
Hitung:
\[ P(\text{Obesitas, Tidak Olahraga, Wanita}) = \frac{40}{300} \]
\[ P(\text{Tidak Olahraga, Wanita}) = \frac{50}{300} \]
\[ P(\text{Obesitas} \mid \text{Tidak Olahraga, Wanita}) = \frac{40/300}{50/300} = \frac{40}{50} = 0.8 \]
Kesimpulan:
Peluang seorang wanita yang tidak berolahraga mengalami obesitas adalah 0.8 atau 80%.
Perhitungan menggunakan software R
# Buat array data obesitas
data_obesitas <- array(
c(15, 35, # Pria - Ya
30, 20, # Pria - Tidak
20, 30, # Wanita - Ya
40, 10, # Wanita - Tidak
10, 40, # Lainnya - Ya
35, 15), # Lainnya - Tidak
dim = c(2, 2, 3),
dimnames = list(
Obesitas = c("Ya", "Tidak"),
Olahraga = c("Ya", "Tidak"),
JenisKelamin = c("Pria", "Wanita", "Lainnya")
)
)
# Hitung total data
total <- sum(data_obesitas) # Harusnya 300
# Ambil nilai untuk P(Obesitas, Tidak Olahraga, Wanita)
p_numerator <- data_obesitas["Ya", "Tidak", "Wanita"] / total
# Ambil nilai untuk P(Tidak Olahraga, Wanita)
p_denominator <- sum(data_obesitas[, "Tidak", "Wanita"]) / total
# Hitung peluang bersyarat
p_obesitas_given_wanita_tdk_olahraga <- p_numerator / p_denominator
# Tampilkan hasil
p_obesitas_given_wanita_tdk_olahraga
## [1] 0.8
Untuk menghitung peluang bersyarat, kita membandingkan jumlah kejadian yang diinginkan dengan total kejadian dalam kategori kondisi yang ditentukan.
Tabel Peluang Bersyarat
Kita ingin menghitung peluang seseorang mengalami obesitas, dengan syarat kombinasi dari jenis kelamin dan kebiasaan olahraga.
| Olahraga | P(Obesitas | Olahraga, Pria) |
|---|---|---|
| Ya | 15 / 50 = 0.30 | 35 / 50 = 0.70 |
| Tidak | 30 / 50 = 0.60 | 20 / 50 = 0.40 |
| Olahraga | P(Obesitas | Olahraga, Wanita) |
|---|---|---|
| Ya | 20 / 50 = 0.40 | 30 / 50 = 0.60 |
| Tidak | 40 / 50 = 0.80 | 10 / 50 = 0.20 |
| Olahraga | P(Obesitas | Olahraga, Lainnya) |
|---|---|---|
| Ya | 10 / 50 = 0.20 | 40 / 50 = 0.80 |
| Tidak | 35 / 50 = 0.70 | 15 / 50 = 0.30 |
Implementasi dalam Sofatware R
# Membuat array 3D 'data_obesitas' berdasarkan tabel yang kamu berikan
data_obesitas <- array(c(15, 35, 30, 20, 20, 30, 40, 10, 10, 40, 35, 15),
dim = c(2, 2, 3),
dimnames = list(
Olahraga = c("Ya", "Tidak"),
Obesitas = c("Obesitas", "Tidak Obesitas"),
JenisKelamin = c("Pria", "Wanita", "Lainnya")
))
# Menampilkan tabel menggunakan ftable
ftable(data_obesitas)
## JenisKelamin Pria Wanita Lainnya
## Olahraga Obesitas
## Ya Obesitas 15 20 10
## Tidak Obesitas 30 40 35
## Tidak Obesitas 35 30 40
## Tidak Obesitas 20 10 15
Kesimpulan
Peluang Bersama: Peluang bersama diperoleh dengan membagi jumlah kejadian dalam setiap kombinasi kategori dengan jumlah total data yang tersedia.
Peluang Marginal: Peluang marginal dihitung dengan menjumlahkan probabilitas pada setiap kategori yang relevan, tanpa mempertimbangkan kategori lainnya.
Peluang Bersyarat: Untuk menghitung peluang bersyarat, digunakan rumus Bayes, yang membagi probabilitas gabungan dari kejadian yang terjadi bersama dengan kejadian kondisi yang telah ditentukan.
1. Beda Peluang (BP)
\[ BP = P(Y | X_1, Z) - P(Y | X_2, Z) \]
2. Risiko Relatif (RR)
\[ RR = \frac{P(Y | X_1, Z)}{P(Y | X_2, Z)} \]
3. Odds Ratio (OR)
\[ OR = \frac{\frac{P(Y | X_1, Z)}{1 - P(Y | X_1, Z)}}{\frac{P(Y | X_2, Z)}{1 - P(Y | X_2, Z)}} \]
Ukuran asosiasi pada tabel kontingensi berfungsi untuk mengevaluasi sejauh mana keterkaitan antara dua variabel kategorik. Tiga ukuran yang sering digunakan dalam analisis ini adalah Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR), yang masing-masing memberikan cara berbeda untuk menilai kekuatan hubungan antara kategori.
1. Risk Difference (RD)
Risk Difference (RD) atau perbedaan risiko adalah selisih antara probabilitas kejadian (dalam hal ini obesitas) pada dua kelompok yang berbeda, yaitu kelompok yang berolahraga dan tidak berolahraga.
Perhitungan Manual :
\[ P(\text{Obesitas} \mid \text{Olahraga}) = \frac{15}{50} = 0.30 \]
\[ P(\text{Obesitas} \mid \text{Tidak Olahraga}) = \frac{30}{50} = 0.60 \]
Interpretasi :
Risk Difference sebesar 0.30 atau 30% menunjukkan bahwa kemungkinan obesitas pada pria yang berolahraga lebih rendah 30% dibandingkan dengan pria yang tidak berolahraga.
2. Relative Risk (RR)
Relative Risk (RR) atau risiko relatif digunakan untuk membandingkan probabilitas suatu kejadian antara dua kelompok. Dalam konteks ini, kita akan membandingkan risiko obesitas pada pria yang berolahraga dan yang tidak berolahraga.
Perhitungan Manual :
\[ RR = \frac{P(\text{Obesitas} \mid \text{Olahraga})}{P(\text{Obesitas} \mid \text{Tidak Olahraga})} \]
\[ RR = \frac{15 / 50}{30 / 50} = \frac{0.30}{0.60} = 0.5 \]
Interpretasi :
Relative Risk sebesar 0.5 menunjukkan bahwa pria yang berolahraga memiliki setengah risiko obesitas dibandingkan pria yang tidak berolahraga. Dengan kata lain, olahraga mengurangi risiko obesitas sebesar 50% pada kelompok pria.
3. Odds Ratio (OR)
Odds Ratio (OR) digunakan untuk membandingkan peluang (odds) suatu kejadian antara dua kelompok. Dalam kasus ini, kita akan membandingkan peluang terjadi obesitas pada pria yang berolahraga dan yang tidak berolahraga.
Perhitungan Manual :
\[ OR = \frac{15 \cdot 20}{35 \cdot 30} = \frac{300}{1050} = 0.2857 \]
Interpretasi:
Odds Ratio sebesar 0.29 berarti bahwa peluang mengalami obesitas pada pria yang berolahraga hanya sekitar 29% dibandingkan dengan pria yang tidak berolahraga. Ini menunjukkan bahwa olahraga berperan besar dalam menurunkan peluang obesitas.
Implementasi dalam R :
# Data obesitas pria
# Format: matrix(c(obesitas_ya, tidak_obesitas_ya, obesitas_tidak, tidak_obesitas_tidak))
data <- matrix(c(15, 35, 30, 20), nrow = 2, byrow = TRUE)
rownames(data) <- c("Olahraga", "Tidak")
colnames(data) <- c("Obesitas", "Tidak Obesitas")
# Tampilkan data
data
## Obesitas Tidak Obesitas
## Olahraga 15 35
## Tidak 30 20
# Hitung Risk Difference
p1 <- data[1, 1] / sum(data[1, ]) # P(Obesitas | Olahraga)
p2 <- data[2, 1] / sum(data[2, ]) # P(Obesitas | Tidak Olahraga)
RD <- p1 - p2
RD # Risk Difference
## [1] -0.3
# Hitung Relative Risk
RR <- p1 / p2
RR # Relative Risk
## [1] 0.5
# Hitung Odds Ratio
odds1 <- data[1, 1] / data[1, 2] # Odds kelompok olahraga
odds2 <- data[2, 1] / data[2, 2] # Odds kelompok tidak olahraga
OR <- odds1 / odds2
OR # Odds Ratio
## [1] 0.2857143
Conditional Independence dalam konteks tabel kontingensi terjadi ketika dua variabel X dan Y menjadi independen setelah dikendalikan oleh variabel ketiga Z. Ini berarti bahwa jika kita tahu nilai dari Z, pengetahuan tentang X tidak memberikan informasi lebih lanjut tentang Y, dan sebaliknya.
\[ P(X, Y \mid Z) = P(X \mid Z) \cdot P(Y \mid Z) \]
Contoh Kasus
Tabel untuk Status Sosial Ekonomi = Atas
Tabel di bawah ini menunjukkan distribusi pekerjaan dan tingkat pendidikan untuk individu yang berasal dari status sosial ekonomi Atas.
| Pekerjaan Stabil | Pekerjaan Tidak Stabil | |
|---|---|---|
| Pendidikan Tinggi | 50 | 10 |
| Pendidikan Rendah | 20 | 30 |
Tabel untuk Status Sosial Ekonomi = Bawah
Tabel di bawah ini menunjukkan distribusi pekerjaan dan tingkat pendidikan untuk individu yang berasal dari status sosial ekonomi Bawah.
| Pekerjaan Stabil | Pekerjaan Tidak Stabil | |
|---|---|---|
| Pendidikan Tinggi | 30 | 20 |
| Pendidikan Rendah | 40 | 50 |
Keterangan :
X: Pendidikan (Tinggi / Rendah)
Y: Pekerjaan (Stabil / Tidak Stabil)
Z: Status Sosial Ekonomi (Atas / Bawah)
Implementasi menggunakan software R :
# Memuat library yang diperlukan
library(knitr)
library(kableExtra)
# Membuat array 3 dimensi untuk data ekonomi
economic_data <- array(
c(50, 10, 20, 30, 40, 50, 30, 20),
dim = c(2, 2, 2),
dimnames = list(
"Pendidikan" = c("Tinggi", "Rendah"),
"Pekerjaan" = c("Stabil", "Tidak Stabil"),
"Status Sosial Ekonomi" = c("Atas", "Bawah")
)
)
# Menampilkan tabel untuk masing-masing kelompok Status Sosial Ekonomi
for (z in dimnames(economic_data)$`Status Sosial Ekonomi`) {
# Mengambil subset data untuk Status Sosial Ekonomi tertentu
df <- as.data.frame.matrix(economic_data[,,z])
colnames(df) <- c("Pekerjaan Stabil", "Pekerjaan Tidak Stabil")
rownames(df) <- c("Pendidikan Tinggi", "Pendidikan Rendah")
# Menampilkan tabel dalam format LaTeX menggunakan kable
print(kable(df, format = "latex", booktabs = TRUE,
caption = paste("Tabel untuk Status Sosial Ekonomi =", z)) %>%
kable_styling(full_width = FALSE, position = "center"))
}
## \begin{table}
## \centering
## \caption{\label{tab:unnamed-chunk-38}Tabel untuk Status Sosial Ekonomi = Atas}
## \centering
## \begin{tabular}[t]{lrr}
## \toprule
## & Pekerjaan Stabil & Pekerjaan Tidak Stabil\\
## \midrule
## Pendidikan Tinggi & 50 & 20\\
## Pendidikan Rendah & 10 & 30\\
## \bottomrule
## \end{tabular}
## \end{table}
## \begin{table}
## \centering
## \caption{\label{tab:unnamed-chunk-38}Tabel untuk Status Sosial Ekonomi = Bawah}
## \centering
## \begin{tabular}[t]{lrr}
## \toprule
## & Pekerjaan Stabil & Pekerjaan Tidak Stabil\\
## \midrule
## Pendidikan Tinggi & 40 & 30\\
## Pendidikan Rendah & 50 & 20\\
## \bottomrule
## \end{tabular}
## \end{table}
Pengujian Conditional Independence
Conditional independence (kemandirian bersyarat) mengukur apakah dua variabel \(X\) dan \(Y\) menjadi independen setelah mengendalikan variabel \(Z\). Dalam kasus ini, kita akan menguji apakah variabel Pekerjaan dan Pendidikan independen setelah mengendalikan Status Sosial Ekonomi.
Secara matematis, kita menguji apakah:
\[ P(X, Y | Z) = P(X | Z) \times P(Y | Z) \]
Misalkan untuk status ekonomi rendah :
Pendidikan Tinggi | Pekerjaan Stabil, Status Sosial Ekonomi Rendah:
\[ P(\text{Pendidikan Tinggi | Pekerjaan Stabil, Rendah}) = \frac{40}{50} = 0.8 \]
Pendidikan Tinggi | Pekerjaan Tidak Stabil, Status Sosial Ekonomi Rendah:
\[ P(\text{Pendidikan Tinggi | Pekerjaan Tidak Stabil, Rendah}) = \frac{20}{70} \approx 0.2857 \]
Pendidikan Tinggi | Status Sosial Ekonomi Rendah:
\[ P(\text{Pendidikan Tinggi | Rendah}) = \frac{60}{120} = 0.5 \]
Interpretasi :
Probabilitas seseorang memiliki Pendidikan Tinggi jika mereka memiliki Pekerjaan Stabil dan berada dalam Status Sosial Ekonomi Rendah adalah 0.8 atau 80%.
Probabilitas seseorang memiliki Pendidikan Tinggi jika mereka memiliki Pekerjaan Tidak Stabil dan berada dalam Status Sosial Ekonomi Rendah adalah 0.2857 atau sekitar 28.6%.
Probabilitas seseorang memiliki Pendidikan Tinggi di dalam keseluruhan Status Sosial Ekonomi Rendah (tanpa memandang apakah mereka memiliki pekerjaan stabil atau tidak) adalah 0.5 atau 50%.
Karena probabilitas Pendidikan Tinggi pada kategori Pekerjaan Stabil dan Pekerjaan Tidak Stabil berbeda jauh dengan probabilitas Pendidikan Tinggi secara keseluruhan, maka kita dapat mengatakan bahwa Pekerjaan dan Pendidikan tidak independen secara kondisional terhadap Status Sosial Ekonomi.
Perhitungan menggunakan R :
# Membuat data kontingensi untuk Status Sosial Ekonomi = Rendah
data_ekonomi <- matrix(c(40, 10, 20, 50), nrow = 2, byrow = TRUE)
rownames(data_ekonomi) <- c("Pendidikan Tinggi", "Pendidikan Rendah")
colnames(data_ekonomi) <- c("Pekerjaan Stabil", "Pekerjaan Tidak Stabil")
# Menampilkan data
data_ekonomi
## Pekerjaan Stabil Pekerjaan Tidak Stabil
## Pendidikan Tinggi 40 10
## Pendidikan Rendah 20 50
# Uji Chi-Square untuk data ekonomi
chisq_ekonomi <- chisq.test(data_ekonomi)
# Menampilkan hasil uji Chi-Square
chisq_ekonomi
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_ekonomi
## X-squared = 28.834, df = 1, p-value = 7.884e-08
Interpretasi hasil :
Dari hasil uji Chi-Square, kita mendapatkan nilai X-squared = 28.834 dengan p-value = 1.011e-08. Karena p-value jauh lebih kecil dari 0.05, maka didapatkan keputusan tolak H0, maka dapat disimpulkan terdapat hubungan yang signifikan antara Pekerjaan dan Pendidikan dalam kelompok Status Sosial Ekonomi Rendah. Dengan kata lain, keduanya tidak independen secara kondisional terhadap status sosial ekonomi.
Tabel kontingensi tiga arah digunakan untuk mengevaluasi hubungan antara dua variabel kategorikal dengan mempertimbangkan pengaruh dari satu variabel kontrol. Sebagai contoh, variabel Pendidikan (X) dan Pekerjaan (Y) dianalisis dengan mempertimbangkan Status Sosial Ekonomi (Z) sebagai variabel kontrol.
Dalam tabel ini, dibuat beberapa tabel parsial berukuran 2×2 untuk masing-masing kategori Z, serta sebuah tabel marginal yang menyatukan data tanpa memperhatikan Z. Ukuran asosiasi yang umum digunakan dalam analisis ini adalah odds ratio :
\[ \text{OR} = \frac{a \cdot d}{b \cdot c} \]
Dengan:
\(a\) = Jumlah kasus pada kategori positif Y dan positif X (Pendidikan Tinggi dan Pekerjaan Stabil)
\(b\) = Jumlah kasus pada kategori positif Y dan negatif X (Pendidikan Rendah dan Pekerjaan Stabil)
\(c\) = Jumlah kasus pada
kategori negatif Y dan positif X
(Pendidikan Tinggi dan Pekerjaan Tidak Stabil)
\(d\) = Jumlah kasus pada kategori negatif Y dan negatif X (Pendidikan Rendah dan Pekerjaan Tidak Stabil)
OR > 1: Menunjukkan adanya asosiasi positif, artinya ketika satu variabel meningkat, kemungkinan terjadinya kejadian pada variabel lainnya juga meningkat.
OR < 1: Menunjukkan asosiasi negatif, artinya ketika satu variabel meningkat, kemungkinan terjadinya kejadian pada variabel lainnya menurun.
OR = 1: Menunjukkan tidak ada asosiasi antara kedua variabel.
Mantel-Haenszel Odds Ratio (ORMH)
Ketika kita memperoleh beberapa tabel parsial (misalnya berdasarkan kelompok usia atau strata lainnya), dan jika nilai Odds Ratio dari masing-masing tabel relatif konsisten, maka kita dapat menghitung Odds Ratio gabungan menggunakan estimasi Mantel-Haenszel (MH).
Estimasi Mantel-Haenszel Odds Ratio (ORMH) memberikan ringkasan yang memperhitungkan variasi antar strata, sehingga lebih menggambarkan hubungan antara variabel pada keseluruhan populasi.
Rumus Mantel-Haenszel Odds Ratio:
\[ \text{ORMH} = \frac{\sum_i \frac{a_i d_i}{n_i}}{\sum_i \frac{b_i c_i}{n_i}} \]
Dengan:
\(a_i\), \(b_i\), \(c_i\), dan \(d_i\) adalah isi dari tabel parsial ke-\(i\),
\(n_i\) adalah total observasi dalam tabel parsial ke-\(i\).
Pengujian Hipotesis dengan Chi-Square Mantel-Haenszel
Metode Mantel-Haenszel juga memungkinkan kita untuk
melakukan pengujian hipotesis nol bahwa tidak ada
asosiasi antara variabel X dan variabel
Y dalam semua strata Z.
Pengujian ini dilakukan menggunakan statistik Chi-Square
Mantel-Haenszel, yang memungkinkan untuk mengevaluasi apakah
ada asosiasi yang signifikan antara variabel di berbagai strata.
7.9.1 Independensi Bersyarat dalam Tabel Kontingensi Tiga Arah
Dalam analisis statistik terhadap data kategorik,
independensi bersyarat adalah konsep yang sangat
penting untuk memahami keterkaitan antara dua variabel utama dengan
mempertimbangkan pengaruh variabel ketiga yang mungkin memengaruhi
hubungan tersebut.
Untuk menyelidiki keterkaitan antara dua variabel (misalnya, X dan Y)
dalam konteks pengaruh variabel ketiga (Z), kita menggunakan
tabel kontingensi tiga arah.
Penjelasan Konseptual dan Matematis
Independensi bersyarat terjadi ketika dua variabel,
misalnya X dan Y, tidak saling
bergantung pada satu sama lain dalam setiap strata atau tingkat yang
dipengaruhi oleh variabel ketiga Z.
Dalam konteks tabel kontingensi, ini berarti bahwa setelah
mempertimbangkan pengaruh dari Z, hubungan antara
X dan Y menjadi netral, yang artinya
tidak ada korelasi yang terdeteksi antara keduanya.
Rumus Matematis Independensi Bersyarat:
\[ \text{OR}(X, Y \mid Z) = 1 \]
Rumus ini menunjukkan bahwa rasio odds antara X dan Y pada setiap strata Z adalah 1, yang berarti tidak ada hubungan atau ketergantungan antara kedua variabel tersebut dalam konteks kontrol oleh Z. Jika nilai OR(X, Y ∣ Z) = 1, maka setelah mengendalikan efek dari Z, hubungan antara X dan Y menjadi tidak signifikan, yang berarti kedua variabel tersebut tidak saling mempengaruhi satu sama lain. Konsep independensi bersyarat ini sering digunakan dalam analisis data kategorik untuk memahami apakah hubungan antara dua variabel tetap ada setelah mempertimbangkan pengaruh variabel lain.
Penggunaan Asumsi Independensi Bersyarat di Berbagai Bidang
Asumsi independensi bersyarat sangat berguna dalam banyak disiplin ilmu, di antaranya:
Epidemiologi: Digunakan untuk menganalisis hubungan antara faktor risiko dan penyakit dengan mengendalikan pengaruh dari variabel lain yang dapat mengganggu hubungan tersebut (seperti variabel pengganggu atau confounders).
Ilmu Sosial: Membantu dalam memahami peran variabel yang memediasi atau memoderasi hubungan antara dua variabel utama dalam konteks tertentu.
Machine Learning dan Data Mining: Dalam konteks pemodelan berbasis jaringan Bayesian atau model probabilistik lainnya, asumsi independensi bersyarat sangat penting untuk menyederhanakan ketergantungan antar variabel dalam jaringan tersebut.
Contoh Aplikasi dalam Studi Nyata
Sebagai contoh dalam penelitian,ingin untuk mengevaluasi hubungan antara penggunaan internet (X) dan kesehatan mental (Y). Dalam studi ini, kita dapat mempertimbangkan apakah hubungan tersebut tetap berlaku setelah mengontrol pengaruh usia (Z) sebagai variabel ketiga.
Jika hasil perhitungan Odds Ratio (OR) untuk setiap kelompok usia mendekati angka 1, ini menunjukkan bahwa penggunaan internet dan kesehatan mental independen bersyarat terhadap usia, artinya pengaruh usia terhadap hubungan keduanya tidak signifikan.
Namun, jika OR menunjukkan variasi yang signifikan di antara strata, maka kita harus menyimpulkan bahwa asumsi independensi bersyarat tidak dapat diterapkan, dan kemungkinan ada interaksi kompleks antara penggunaan internet, kesehatan mental, dan usia yang perlu dianalisis lebih lanjut.
7.9.2 Pengujian Statistik untuk Independensi Bersyarat
Uji Cochran-Mantel-Haenszel (CMH) digunakan untuk menguji apakah terdapat hubungan antara dua variabel kategorik setelah mempertimbangkan pengaruh variabel kontrol atau variabel pengganggu. Uji ini sangat berguna dalam analisis data stratifikasi, di mana kita memiliki data yang terbagi ke dalam beberapa kelompok atau strata.
Manfaat Uji Cochran-Mantel-Haenszel:
Mengendalikan efek pengganggu dalam tabel kontingensi berlapis (multiple layers of contingency tables).
Mengujikan hipotesis independensi bersyarat, yang memungkinkan kita untuk mengetahui apakah dua variabel utama tetap tidak saling bergantung setelah mempertimbangkan variabel ketiga.
Mengatasi masalah confounding dalam studi observasional atau eksperimen sosial, dengan mengisolasi pengaruh faktor pengganggu yang mungkin mempengaruhi hasil analisis.
Prosedur CMH membagi data ke dalam tabel kontingensi 2 × 2 yang terpisah berdasarkan strata dari variabel kontrol (Z). Dengan cara ini, uji ini menguji hubungan antara dua variabel utama (X dan Y) dalam setiap strata variabel kontrol, dan kemudian menghitung odds ratio gabungan untuk semua strata. Proses ini memungkinkan kita untuk mengendalikan pengaruh variabel kontrol dan memberikan gambaran yang lebih akurat tentang apakah hubungan antara X dan Y bersifat independen bersyarat terhadap Z.
Hipotesis :
H0 (Hipotesis nol): θXY(k) = 1 untuk semua strata \(k = 1, 2, \dots, K\), yang berarti tidak ada hubungan antara variabel \(X\) dan \(Y\) setelah mengendalikan variabel ketiga \(Z\) pada setiap strata.
H1 (Hipotesis alternatif): θXY(k) ≠ 1 untuk setidaknya satu strata \(k\), yang berarti ada hubungan yang signifikan antara \(X\) dan \(Y\) setelah mempertimbangkan pengaruh variabel ketiga pada setidaknya satu strata.
Statistik Uji Cochran-Mantel-Haenszel
Statistik CMH dihitung dengan menggunakan rumus berikut:
\[ CMH = \sum_{k} \frac{(n_{11k} - \mu_{11k})^2}{\text{var}(n_{11k})} \]
Dimana:
\(n_{11k}\): Frekuensi aktual dari sel baris 1 kolom 1 pada strata ke-k.
\(\mu_{11k}\): Ekspektasi frekuensi dari sel tersebut, yang dihitung sebagai:
\[ \mu_{11k} = E(n_{11k}) \]
\[ \text{var}(n_{11k}) = \frac{n_{1\cdot k} \cdot n_{\cdot 1k}}{n_{\cdot \cdot k}} \cdot \frac{n_{1\cdot k} \cdot n_{2\cdot k} \cdot n_{\cdot 1k} \cdot n_{\cdot 2k}}{n_{\cdot \cdot k}(n_{\cdot \cdot k} - 1)} \]
Di mana:
\(n_{1\cdot k}\) adalah jumlah total di baris 1 pada strata ke-k.
\(n_{\cdot 1k}\) adalah jumlah total di kolom 1 pada strata ke-k.
\(n_{\cdot \cdot k}\) adalah jumlah total observasi pada strata ke-k.
Statistik CMH mengikuti distribusi Chi-Square dengan derajat kebebasan 1.
Pengujian Hipotesis
Untuk menguji hipotesis, kita menggunakan keputusan berikut:
Dengan kata lain, jika nilai statistik uji CMH cukup besar untuk menunjukkan perbedaan yang signifikan, maka kita menolak hipotesis nol dan menyimpulkan bahwa ada hubungan antara variabel \(X\) dan \(Y\) setelah mengendalikan variabel ketiga Z.
Contoh Kasus
Kita ingin menguji apakah penggunaan internet dan kesehatan mental bersifat independen secara kondisional setelah mengendalikan usia menggunakan Uji Cochran-Mantel-Haenszel (CMH)
Hipotesis :
H₀ (Hipotesis Nol): Penggunaan internet dan kesehatan mental independen secara kondisional setelah mengendalikan variabel usia.
H₁ (Hipotesis Alternatif): Penggunaan internet dan kesehatan mental tidak independen secara kondisional setelah mengendalikan variabel usia.
Tabel Kontingensi
Tabel kontingensi ini mengelompokkan data berdasarkan status penggunaan internet (X) dan kesehatan mental (Y) untuk berbagai kelompok usia (Z):
| Usia | Penggunaan Internet Positif (X=1) | Penggunaan Internet Negatif (X=0) | Total |
|---|---|---|---|
| Kesehatan Mental Baik (Y=1) | 12 | 16 | 28 |
| Kesehatan Mental Buruk (Y=0) | 5 | 9 | 14 |
| Total | 17 | 25 | 42 |
Nilai Ekspektasi
Untuk menghitung nilai ekspektasi \(\mu_{11k}\), kita menggunakan rumus berikut:
\[ \mu_{11k} = \frac{n_{1\cdot k} \times n_{\cdot 1k}}{n_{\cdot \cdot k}} \]
Berikut adalah perhitungan nilai ekspektasi untuk setiap strata usia:
Strata Usia 1: \[ \mu_{11}(1) = \frac{12 \times 4}{20} = 2.4 \]
Strata Usia 2: \[ \mu_{11}(2) = \frac{16 \times 9}{28} = 5.14 \]
Strata Usia 3: \[ \mu_{11}(3) = \frac{14 \times 11}{22} = 7 \]
Strata Usia 4: \[ \mu_{11}(4) = \frac{18 \times 12}{30} = 7.2 \]
Strata Usia 5: \[ \mu_{11}(5) = \frac{16 \times 8}{32} = 4 \]
Varians Sel \(n_{11k}\)
Dalam uji Cochran-Mantel-Haenszel (CMH), kita menghitung varian dari frekuensi observasi sel baris 1 kolom 1 pada masing-masing strata, yaitu \(\text{Var}(n_{11k})\), dengan rumus berikut:
\[ \text{Var}(n_{11k}) = \frac{n_{1\cdot k} \cdot n_{2\cdot k} \cdot n_{\cdot 1k} \cdot n_{\cdot 2k}}{n_{\cdot \cdot k}^2 (n_{\cdot \cdot k} - 1)} \]
Perhitungan Varian untuk Masing-Masing Strata
Strata Usia 1
\(n_{1\cdot 1} = 10\)
\(n_{2\cdot 1} = 10\)
\(n_{\cdot 1 1} = 3\)
\(n_{\cdot 2 1} = 17\)
\(n_{\cdot \cdot 1} = 20\)
\[ \text{Var}(n_{11(1)}) = \frac{10 \times 10 \times 3 \times 17}{20^2 \times 19} = 0.67105 \]
Strata Usia 2
\(n_{1\cdot 2} = 14\)
\(n_{2\cdot 2} = 14\)
\(n_{\cdot 1 2} = 11\)
\(n_{\cdot 2 2} = 17\)
\(n_{\cdot \cdot 2} = 28\)
\[ \text{Var}(n_{11(2)}) = \frac{14 \times 14 \times 11 \times 17}{28^2 \times 27} = 1.73148 \]
Strata Usia 3
\(n_{1\cdot 3} = 12\)
\(n_{2\cdot 3} = 10\)
\(n_{\cdot 1 3} = 13\)
\(n_{\cdot 2 3} = 9\)
\(n_{\cdot \cdot 3} = 22\)
\[ \text{Var}(n_{11(3)}) = \frac{12 \times 10 \times 13 \times 9}{22^2 \times 21} = 1.38135 \]
Strata Usia 4
\(n_{1\cdot 4} = 17\)
\(n_{2\cdot 4} = 13\)
\(n_{\cdot 1 4} = 16\)
\(n_{\cdot 2 4} = 14\)
\(n_{\cdot \cdot 4} = 30\)
\[ \text{Var}(n_{11(4)}) = \frac{17 \times 13 \times 16 \times 14}{30^2 \times 29} = 1.8967 \]
Strata Usia 5
\(n_{1\cdot 5} = 18\)
\(n_{2\cdot 5} = 14\)
\(n_{\cdot 1 5} = 19\)
\(n_{\cdot 2 5} = 13\)
\(n_{\cdot \cdot 5} = 32\)
\[ \text{Var}(n_{11(5)}) = \frac{18 \times 14 \times 19 \times 13}{32^2 \times 31} = 1.96081 \]
Menghitung statistik Uji CMH :
Rumus CMH:
\[ X^2_{CMH} = \frac{ \sum_k (n_{11k} - \mu_{11k})^2 }{ \sum_k \text{Var}(n_{11k}) } \]
Langkah Perhitungan
Jumlah deviasi kuadrat dari frekuensi yang diharapkan: \[ \sum_k (n_{11k} - \mu_{11k})^2 = 51.1929 \]
Jumlah seluruh varian dari lima strata: \[ \sum_k \text{Var}(n_{11k}) = 0.67105 + 1.73148 + 1.38135 + 1.8967 + 1.96081 = 7.6414 \]
Nilai Statistik Uji
\[ X^2_{CMH} = \frac{51.1929}{7.6414} = 6.69942 \]
Interpretasi
Nilai statistik uji CMH sebesar 6.70 dapat dibandingkan dengan nilai kritis dari distribusi Chi-Square dengan 1 derajat kebebasan. Jika nilai ini lebih besar dari nilai kritis (misalnya, 3.84 untuk α = 0.05), maka dapatkan kesimpulan :
Kesimpulan: Didapatkan keputusan Tolak H0, yang berarti ada hubungan yang signifikan antara penggunaan internet dan kesehatan mental, setelah efek dari usia dikendalikan.
7.9.3 Odds Ratio Bersama
Dalam analisis data kategorik, khususnya dalam tabel kontingensi 2x2, odds ratio (OR) merupakan ukuran kekuatan asosiasi antara dua variabel kategorik. Namun, ketika data dibagi ke dalam beberapa strata berdasarkan variabel perancu (confounder), seperti usia, maka perhitungan satu odds ratio tidak mencerminkan hubungan sebenarnya.
Untuk mengatasi hal ini, digunakan Odds Ratio Bersama (Common Odds Ratio) dengan pendekatan Mantel-Haenszel, yang menggabungkan informasi dari masing-masing strata.
Rumus Odds Ratio Bersama (Mantel-Haenszel)
Odds ratio bersama ditaksir dengan rumus:
\[ \hat{\theta}_{MH} = \frac{ \sum_{k=1}^{K} \frac{n_{11k} \cdot n_{22k}}{n_{\cdot\cdot k}} }{ \sum_{k=1}^{K} \frac{n_{12k} \cdot n_{21k}}{n_{\cdot\cdot k}} } \]
Rumus Interval Kepercayaan
Interval Kepercayaan (Confidence Interval) untuk log Odds Ratio Bersama dihitung dengan rumus:
\[ \log(\hat{\theta}_{MH}) \pm Z_{\alpha} \cdot \hat{\sigma}[\log(\hat{\theta}_{MH})] \]
Langkah-langkah Perhitungan
Pembilang:
\[ \sum_{k=1}^{K} (n_{11k} \cdot n_{22k}) \]
Penyebut:
\[ \sum_{k=1}^{K} (n_{12k} \cdot n_{21k}) \]
Estimasi Odds Ratio Bersama: \[ \hat{\theta}_{MH} = \frac{\text{Pembilang}}{\text{Penyebut}} \]
Perhitungan Pembilang dan Penyebut
Untuk strata 1, kita hitung \(n_{11k} \cdot n_{22k}\):
\[ n_{11(1)} \cdot n_{22(1)} = 12 \cdot 9 = 108 \]
Untuk strata 2:
\[ n_{11(2)} \cdot n_{22(2)} = 10 \cdot 11 = 110 \]
Untuk strata 3:
\[ n_{11(3)} \cdot n_{22(3)} = 8 \cdot 10 = 80 \]
Untuk strata 4:
\[ n_{11(4)} \cdot n_{22(4)} = 17 \cdot 14 = 238 \]
Untuk strata 5:
\[ n_{11(5)} \cdot n_{22(5)} = 18 \cdot 13 = 234 \]
Sehingga, total pembilangnya adalah:
\[ \text{Pembilang} = 108 + 110 + 80 + 238 + 234 = 770 \]
Untuk strata 1, kita hitung \(n_{12k} \cdot n_{21k}\):
\[ n_{12(1)} \cdot n_{21(1)} = 5 \cdot 16 = 80 \]
Untuk strata 2:
\[ n_{12(2)} \cdot n_{21(2)} = 7 \cdot 14 = 98 \]
Untuk strata 3:
\[ n_{12(3)} \cdot n_{21(3)} = 6 \cdot 12 = 72 \]
Untuk strata 4:
\[ n_{12(4)} \cdot n_{21(4)} = 13 \cdot 16 = 208 \]
Untuk strata 5:
\[ n_{12(5)} \cdot n_{21(5)} = 14 \cdot 19 = 266 \]
Sehingga, total penyebutnya adalah:
\[ \text{Penyebut} = 80 + 98 + 72 + 208 + 266 = 724 \]
Sekarang kita dapat menghitung Odds Ratio Bersama:
\[ \hat{\theta}_{MH} = \frac{\text{Pembilang}}{\text{Penyebut}} = \frac{770}{724} \approx 1.064 \]
Menghitung Interval Kepercayaan 95% untuk log Odds Ratio Bersama (\(\log(\hat{\theta}_{MH})\)) dan kemudian menghitung Interval Kepercayaan untuk Odds Ratio.
Langkah-langkah perhitungan :
Log Odds Ratio Bersama (\(\log(\hat{\theta}_{MH})\)):
\[ \log(\hat{\theta}_{MH}) = \log(2.53) \approx 0.927 \]
Standar Error dari Log Odds Ratio Bersama:
\[ SE(\log(\hat{\theta}_{MH})) = 0.05 \]
Tingkat Kepercayaan:
\[ Z_{\alpha} = 1.96 \]
Hitung Interval Kepercayaan untuk Log Odds Ratio:
\[ \text{Batas Bawah} = \log(\hat{\theta}_{MH}) - 1.96 \times SE(\log(\hat{\theta}_{MH})) \] \[ \text{Batas Atas} = \log(\hat{\theta}_{MH}) + 1.96 \times SE(\log(\hat{\theta}_{MH})) \]
Dengan nilai:
\[ \text{Batas Bawah} = 0.927 - 1.96 \times 0.05 = 0.927 - 0.098 = 0.829 \] \[ \text{Batas Atas} = 0.927 + 1.96 \times 0.05 = 0.927 + 0.098 = 1.025 \]
Interval Kepercayaan untuk Odds Ratio:
\[ \text{CI OR} = [e^{0.829}, e^{1.025}] = [2.29, 2.79] \]
Hasil
Interval Kepercayaan untuk log Odds Ratio Bersama: \[ \log(\hat{\theta}_{MH}) = [0.829, 1.025] \]
Interval Kepercayaan untuk Odds Ratio: \[ \hat{\theta}_{MH} = [2.29, 2.79] \]
Kesimpulan : Dengan tingkat kepercayaan 95%, Odds Ratio Bersama (\(\hat{\theta}_{MH}\)) untuk hubungan antara penggunaan internet dan kesehatan mental setelah mengendalikan usia berada dalam rentang [2.29, 2.79]
Implementasi dalam R :
# Data
log_theta_MH <- log(2.53) # Log Odds Ratio Bersama (log(2.53))
SE_log_theta_MH <- 0.05 # Standar Error dari log Odds Ratio Bersama
# Z untuk tingkat kepercayaan 95%
z_alpha <- 1.96
# Menghitung batas bawah dan batas atas dari Interval Kepercayaan untuk log Odds Ratio
lower_log_CI <- log_theta_MH - z_alpha * SE_log_theta_MH
upper_log_CI <- log_theta_MH + z_alpha * SE_log_theta_MH
# Menghitung Interval Kepercayaan untuk Odds Ratio
lower_CI_OR <- exp(lower_log_CI)
upper_CI_OR <- exp(upper_log_CI)
# Output hasil
cat("Interval Kepercayaan 95% untuk log(θMH): [", lower_log_CI, ", ", upper_log_CI, "]\n")
## Interval Kepercayaan 95% untuk log(θMH): [ 0.8302193 , 1.026219 ]
cat("Interval Kepercayaan 95% untuk θMH (Odds Ratio): [", lower_CI_OR, ", ", upper_CI_OR, "]\n")
## Interval Kepercayaan 95% untuk θMH (Odds Ratio): [ 2.293822 , 2.790496 ]
7.9.4 Uji Homogenitas Odds Ratio dengan Statistik Breslow-Day
Dalam analisis data kategorik, khususnya saat kita menganalisis tabel kontingensi tiga arah, sering kali kita tertarik untuk mengetahui apakah asosiasi antara dua variabel (misalnya X dan Y) konsisten di seluruh strata variabel ketiga (misalnya Z). Ini penting karena hubungan antara X dan Y mungkin bervariasi bergantung pada level variabel Z, yang bisa menjadi variabel perancu atau pengaruh eksternal.
Untuk menjawab pertanyaan ini, kita bisa menggunakan Uji Homogenitas Odds Ratio. Salah satu pendekatannya adalah dengan menggunakan statistik Breslow-Day. Uji ini menguji apakah nilai Odds Ratio untuk setiap strata (atau tabel parsial) memiliki nilai yang seragam di seluruh strata yang berbeda. Jika Odds Ratio dari setiap strata konsisten, maka kita dapat menyimpulkan bahwa hubungan antara variabel X dan Y homogen di seluruh strata Z. Secara matematis, homogenitas odds ratio antar strata dapat dituliskan sebagai:
\[ \theta_{XY}^{(1)} = \theta_{XY}^{(2)} = \cdots = \theta_{XY}^{(K)} \]
Jika kondisi ini terpenuhi, maka dapat disimpulkan bahwa tidak ada interaksi antara variabel X dan Y terhadap variabel kontrol Z. Artinya, hubungan antara X dan Y tidak bergantung pada level Z. Namun, jika odds ratio berbeda-beda pada masing-masing strata, maka terdapat indikasi interaksi antara X dan Y yang dipengaruhi oleh Z.
Dalam praktik analisis data kategorik:
Uji homogenitas Odds Ratio merupakan langkah penting sebelum menggabungkan data antar strata.
Uji ini menentukan apakah penggunaan odds ratio gabungan valid atau apakah analisis harus dilakukan secara stratifikasi.
Ketika homogenitas tidak terpenuhi, penggunaan odds ratio gabungan seperti OR_MH (Mantel-Haenszel) dapat menyesatkan dan menutupi efek berbeda yang sebenarnya terjadi di masing-masing strata.
Hipotesis :
Tidak ada perbedaan odds ratio antar strata, yaitu:
\[ \theta_{XY}^{(1)} = \theta_{XY}^{(2)} = \cdots = \theta_{XY}^{(K)} \]
Setidaknya terdapat satu strata di mana nilai odds ratio berbeda dari yang lain.
Rumus Statistik Uji Breslow-Day
\[ \chi^2_{HBD} = \sum_{j=1}^{K} \frac{(a_j - \tilde{a}_j)^2}{\widehat{\text{Var}}(a_j \mid \widehat{OR}_{MH})} \]
Keterangan:
\(\chi^2_{HBD}\): Statistik uji homogenitas (Breslow-Day)
\(K\): Jumlah strata (tingkat variabel kontrol Z)
\(a_j\): Frekuensi aktual sel baris 1 kolom 1 di strata ke-\(j\)
\(\tilde{a}_j\): Frekuensi yang diharapkan di sel tersebut jika semua strata memiliki odds ratio yang sama (\(\widehat{OR}_{MH}\))
\(\widehat{\text{Var}}(a_j \mid \widehat{OR}_{MH})\): Varian dari \(a_j\), dihitung berdasarkan odds ratio gabungan
Distribusi dari statistik \(\chi^2_{HBD}\) mengikuti distribusi Chi-square dengan:
\[ df = K - 1 \]
Keterangan:
\(df\): derajat bebas
\(K\): jumlah strata (jumlah tabel 2x2 parsial)
Jika nilai statistik uji lebih besar dari nilai kritis pada taraf signifikansi tertentu (misal 5%), maka kita menolak H0, yang berarti terdapat ketidakhomogenan odds ratio antar strata.
Sebaliknya, jika nilai statistik uji tidak signifikan, maka kita tidak menolak H0, sehingga asumsi homogenitas dapat diterima.
Contoh menggunakan contoh kasus sebelumnya
Rumus Odds Ratio
\[ OR_k = \frac{a_k \cdot d_k}{b_k \cdot c_k} \]
1. Hitung Rasio Odds Tiap Stratum
Berikut data dari 5 strata (kelompok usia):
Stratum 1:
\(a_1 = 1\), \(b_1 = 2\)
\(c_1 = 1\), \(d_1 = 6\)
\[ OR_1 = \frac{1 \cdot 6}{2 \cdot 1} = \frac{6}{2} = 3 \]
Stratum 2:
\(a_2 = 5\), \(b_2 = 6\)
\(c_2 = 4\), \(d_2 = 3\)
\[ OR_2 = \frac{5 \cdot 3}{6 \cdot 4} = \frac{15}{24} = 0.625 \]
Stratum 3:
\(a_3 = 9\), \(b_3 = 4\)
\(c_3 = 4\), \(d_3 = 5\)
\[ OR_3 = \frac{9 \cdot 5}{4 \cdot 4} = \frac{45}{16} = 2.8125 \]
Stratum 4:
\(a_4 = 12\), \(b_4 = 5\)
\(c_4 = 5\), \(d_4 = 8\)
\[ OR_4 = \frac{12 \cdot 8}{5 \cdot 5} = \frac{96}{25} = 3.84 \]
Stratum 5:
\(a_5 = 14\), \(b_5 = 5\)
\(c_5 = 5\), \(d_5 = 8\)
\[ OR_5 = \frac{14 \cdot 8}{5 \cdot 5} = \frac{112}{25} = 4.48 \]
2. Hitung Rasio Odds Gabungan (Mantel-Haenszel OR) Gunakan rumus Mantel-Haenszel
\[ \hat{OR}_{MH} = \frac{\sum_{j=1}^{K} \frac{a_j d_j}{N_j}}{\sum_{j=1}^{K} \frac{b_j c_j}{N_j}} \]
Perhitungan per Strata
Stratum 1:
\[ \frac{a_1 d_1}{N_1} = \frac{1 \cdot 6}{10} = 0.6, \quad \frac{b_1 c_1}{N_1} = \frac{2 \cdot 1}{10} = 0.2 \]
Stratum 2:
\[ \frac{a_2 d_2}{N_2} = \frac{5 \cdot 3}{18} = 0.83, \quad \frac{b_2 c_2}{N_2} = \frac{6 \cdot 4}{18} = 1.33 \]
Stratum 3:
\[ \frac{a_3 d_3}{N_3} = \frac{9 \cdot 5}{22} = 2.05, \quad \frac{b_3 c_3}{N_3} = \frac{4 \cdot 4}{22} = 0.73 \]
Stratum 4:
\[ \frac{a_4 d_4}{N_4} = \frac{12 \cdot 8}{30} = 3.2, \quad \frac{b_4 c_4}{N_4} = \frac{5 \cdot 5}{30} = 0.83 \]
Stratum 5:
\[ \frac{a_5 d_5}{N_5} = \frac{14 \cdot 8}{32} = 3.5, \quad \frac{b_5 c_5}{N_5} = \frac{5 \cdot 5}{32} = 0.78 \]
Menjumlahkan Pembilang dan Penyebut
Pembilang:
\[ 0.6 + 0.83 + 2.05 + 3.2 + 3.5 = 10.18 \]
Penyebut:
\[ 0.2 + 1.33 + 0.73 + 0.83 + 0.78 = 3.87 \]
Hasil Odds Ratio Gabungan
\[ \hat{OR}_{MH} = \frac{10.18}{3.87} = 2.63 \]
3. Menghitung Ekspektasi \(\bar{a}_j\)
Rumus Ekspektasi \(\bar{a}_j\)
Ekspektasi dari sel \(a_j\) (sel baris 1 kolom 1) pada tabel 2x2 tiap strata dihitung dengan:
\[ \bar{a}_j = \frac{m_{j1} n_{j1} \hat{OR}_{MH}}{n_{j2} - m_{j1} + \hat{OR}_{MH} (m_{j1} + m_{j2})} \]
Perhitungan Ekspektasi \(\bar{a}_j\) per Stratum
Stratum 1
\(a_1 = 1, b_1 = 2, c_1 = 1, d_1 = 6\)
\(m_{11} = a_1 + b_1 = 3\)
\(m_{12} = c_1 + d_1 = 7\)
\(n_{11} = a_1 + c_1 = 2\)
\(n_{12} = b_1 + d_1 = 8\)
\[ \bar{a}_1 = \frac{3 \cdot 2 \cdot 2.63}{8 - 3 + 2.63 \cdot 10} = \frac{15.78}{5 + 26.3} = \frac{15.78}{31.3} \approx 0.504 \]
Stratum 2
\(a_2 = 5, b_2 = 6, c_2 = 4, d_2 = 3\)
\(m_{21} = 11, m_{22} = 7, n_{21} = 9, n_{22} = 9\)
\[ \bar{a}_2 = \frac{11 \cdot 9 \cdot 2.63}{9 - 11 + 2.63 \cdot 18} = \frac{260.37}{-2 + 47.34} = \frac{260.37}{45.34} \approx 5.74 \]
Stratum 3
\(a_3 = 9, b_3 = 4, c_3 = 4, d_3 = 5\)
\(m_{31} = 13, m_{32} = 9, n_{31} = 13, n_{32} = 9\)
\[ \bar{a}_3 = \frac{13 \cdot 13 \cdot 2.63}{9 - 13 + 2.63 \cdot 22} = \frac{443.59}{-4 + 57.86} = \frac{443.59}{53.86} \approx 8.24 \]
Stratum 4
\(a_4 = 12, b_4 = 5, c_4 = 5, d_4 = 8\)
\(m_{41} = 17, m_{42} = 13, n_{41} = 17, n_{42} = 13\)
\[ \bar{a}_4 = \frac{17 \cdot 17 \cdot 2.63}{13 - 17 + 2.63 \cdot 30} = \frac{759.73}{-4 + 78.9} = \frac{759.73}{74.9} \approx 10.14 \]
Stratum 5
\(a_5 = 14, b_5 = 5, c_5 = 5, d_5 = 8\)
\(m_{51} = 19, m_{52} = 13, n_{51} = 19, n_{52} = 13\)
\[ \bar{a}_5 = \frac{19 \cdot 19 \cdot 2.63}{13 - 19 + 2.63 \cdot 32} = \frac{948.91}{-6 + 84.16} = \frac{948.91}{78.16} \approx 12.14 \]
4. Menghitung Varian \(\widehat{Var}(a_j | \hat{OR}_{MH})\)
Stratum 1
\[ Var(a_1) = \frac{3 \cdot 7 \cdot 2 \cdot 8 \cdot 2.63}{(10)^2 \cdot (8 - 3 + 2.63(10))^2} \] \[ = \frac{88.08}{100 \cdot (5 + 26.3)^2} = \frac{88.08}{100 \cdot 31.3^2} = \frac{88.08}{9796.9} \approx 0.009 \]
Stratum 2
\[ Var(a_2) = \frac{11 \cdot 7 \cdot 9 \cdot 9 \cdot 2.63}{324 \cdot (-2 + 2.63 \cdot 18)^2} = \frac{16285.89}{324 \cdot 45.34^2} = \frac{16285.89}{324 \cdot 2055.12} \approx 0.025 \]
Stratum 3
\[ Var(a_3) = \frac{13 \cdot 9 \cdot 13 \cdot 9 \cdot 2.63}{(22)^2 \cdot (-4 + 2.63 \cdot 22)^2} = \frac{35712.93}{484 \cdot 53.86^2} \approx \frac{35712.93}{484 \cdot 2900.91} \approx 0.026 \]
Stratum 4
\[ Var(a_4) = \frac{17 \cdot 13 \cdot 17 \cdot 13 \cdot 2.63}{(30)^2 \cdot (-4 + 2.63 \cdot 30)^2} = \frac{134894.19}{900 \cdot 74.9^2} = \frac{134894.19}{900 \cdot 5612.01} \approx 0.027 \]
Stratum 5
\[ Var(a_5) = \frac{19 \cdot 13 \cdot 19 \cdot 13 \cdot 2.63}{(32)^2 \cdot (-6 + 2.63 \cdot 32)^2} = \frac{201348.83}{1024 \cdot 78.16^2} = \frac{201348.83}{1024 \cdot 6109.95} \approx 0.032 \]
5. Statistik Uji Breslow-Day
\[ \chi^2_{HBD} = \sum_{j=1}^{5} \frac{(a_j - \bar{a}_j)^2}{Var(a_j)} \]
Stratum 1:
\[ \frac{(1 - 0.504)^2}{0.009} = \frac{0.2460}{0.009} \approx 27.33 \]
Stratum 2:
\[ \frac{(5 - 5.74)^2}{0.025} = \frac{0.5476}{0.025} \approx 21.90 \]
Stratum 3:
\[ \frac{(9 - 8.24)^2}{0.026} = \frac{0.5776}{0.026} \approx 22.22 \]
Stratum 4:
\[ \frac{(12 - 10.14)^2}{0.027} = \frac{3.4596}{0.027} \approx 128.13 \]
Stratum 5:
\[ \frac{(14 - 12.14)^2}{0.032} = \frac{3.4596}{0.032} \approx 108.11 \]
Jumlah Statistik
\[ \chi^2_{HBD} = 27.33 + 21.90 + 22.22 + 128.13 + 108.11 = \boxed{307.69} \]
Derajat Bebas
\[ df = K - 1 = 5 - 1 = 4 \]
6. Koreksi Tarone
Rumus:
\[ \chi^2_{HBD-T} = \chi^2_{HBD} \times \frac{\sum_j (a_j - \bar{a}_j)^2}{\sum_j \widehat{Var}(a_j)} \]
Hitung Koreksi Tarone:
\[ \chi^2_{HBD-T} = 307.69 \times \frac{8.2904}{0.119} = 307.69 \times 69.6647 \approx \boxed{21440.6} \]
7. Menghitung P-value
Rumus:
\[ p = 1 - P\left( \chi^2_1 \leq X^2_{HBD-T} \right) \]
\[ p = 1 - P(\chi^2_1 \leq 21440.6) \approx \boxed{0} \]
Interpretasi :
Dari hasil perhitungan diperoleh p-value = 0.0000001. Berdasarkan aturan keputusan:
Jika p-value < 0.05, maka tolak H0, artinya odds ratio tidak homogen di seluruh strata Z, ada interaksi antara X dan Y.
Jika p-value > 0.05, maka gagal menolak H0, yang berarti odds ratio seragam di seluruh strata Z.
Karena p-value = 0.0000001 < 0.05, maka tolak H0. artinya odds ratio tidak homogen di seluruh strata Z, ada interaksi antara X dan Y.
Implementasikan menggunakan R :
# Data yang diberikan
a <- c(1, 5, 9, 12, 14) # Nilai a_j
b <- c(8, 8, 6, 9, 9) # Nilai b_j
c <- c(9, 9, 10, 13, 14) # Nilai c_j
d <- c(20, 28, 22, 30, 32) # Nilai d_j
# 1. Menghitung Rasio Odds Tiap Stratum (OR_j)
OR_j <- (a * d) / (b * c)
# 2. Menghitung Rasio Odds Gabungan (MH-OR)
N <- sum(a + b + c + d) # Total seluruh data
sum_a_d <- sum(a * d) # Jumlah pembilang
sum_b_c <- sum(b * c) # Jumlah penyebut
ORMH <- sum_a_d / sum_b_c
# 3. Menghitung Ekspektasi a_j (𝑎̅𝑎𝑗)
mj1 <- sum(a * b) / sum(b) # Jumlah ekspektasi untuk a_j
mj2 <- sum(a * c) / sum(c) # Jumlah ekspektasi untuk a_j dengan c
# 4. Menghitung Statistik Uji Breslow-Day
var_a_j <- (a - mj1)^2 / (sum(a * b) + sum(a * c)) # Varians a_j
HBD_stat <- sum((a - mj1)^2 / var_a_j)
# 5. Menghitung Koreksi Tarone
HBDT_stat <- HBD_stat * sum((a - mj1)^2) / sum(var_a_j)
# 6. Menghitung P-value dari Statistik Koreksi Tarone
p_value <- 1 - pchisq(HBDT_stat, df = 1)
Regresi logistik adalah salah satu metode analisis statistik yang digunakan untuk memahami hubungan antara variabel dependen bersifat biner (memiliki dua kemungkinan hasil seperti ya/tidak atau berhasil/gagal) dengan satu atau lebih variabel independen. Keunggulan utama dari regresi logistik adalah kemampuannya untuk mengakomodasi berbagai tipe skala pengukuran pada variabel bebas. Umumnya, ada tiga jenis skala pengukuran yang dapat digunakan, yaitu:
Skala Nominal
Variabel ini memiliki kategori yang setara tanpa adanya urutan logis di antara kategori tersebut. Contohnya termasuk jenis kelamin (laki-laki atau perempuan), agama, atau warna favorit. Karena model regresi logistik membutuhkan input numerik, variabel nominal harus dikonversi menggunakan teknik dummy coding, dengan menciptakan variabel biner (0 dan 1) untuk tiap kategori. Misalnya, untuk variabel jenis kelamin bisa diberi kode perempuan = 1 dan laki-laki = 0.
Skala Ordinal
Variabel ordinal memiliki kategori dengan urutan yang jelas, meskipun jarak antar kategori tidak harus sama. Contohnya adalah jenjang pendidikan (SMA < Sarjana < Magister < Doktor) atau tingkat kepuasan (tidak puas < cukup puas < puas < sangat puas). Dalam analisis, variabel ordinal dapat diperlakukan dengan: - Membuat dummy untuk tiap kategori, tanpa mempertimbangkan urutannya seperti variabel nominal. - Memberikan kode angka sesuai urutan logis (misalnya, SMA=1, Sarjana=2, Magister=3, Doktor=4), yang lebih sederhana tetapi mengasumsikan jarak antar kategori dianggap seragam, padahal tidak selalu demikian.
Skala Rasio
Variabel rasio bersifat kuantitatif dan memiliki nol absolut, sehingga perbandingan antar nilai bermakna. Selain memiliki semua sifat variabel interval, variabel ini juga menunjukkan ketiadaan atribut yang diukur pada titik nol. Contohnya termasuk pendapatan per bulan, usia, atau jumlah anak. Karena variabel ini bersifat numerik dan memiliki skala penuh, biasanya dapat langsung dimasukkan ke dalam model regresi logistik tanpa transformasi, kecuali jika data sangat tidak berdistribusi normal.
Seiring dengan kemajuan teknologi dan perubahan pola konsumsi masyarakat, penggunaan platform e-commerce semakin meluas. Namun, tidak semua individu memanfaatkan layanan ini secara merata. Oleh karena itu, dalam simulasi ini, kita ingin meneliti faktor-faktor yang mempengaruhi kemungkinan seseorang melakukan pembelian online, khususnya berdasarkan:
Status pekerjaan: apakah seseorang bekerja, menganggur, pelajar, atau pensiunan.
Usia: diasumsikan bahwa orang yang lebih tua lebih jarang berbelanja online.
Frekuensi belanja online per bulan: semakin sering seseorang berbelanja online, semakin tinggi kemungkinan mereka akan terus berbelanja di platform e-commerce.
# Jumlah observasi
n <- 750
# Simulasi variabel
job_status <- sample(c("Unemployed", "Employed", "Student", "Retired"),
n, replace = TRUE, prob = c(0.15, 0.5, 0.25, 0.1))
# Frekuensi belanja online per bulan (menggunakan distribusi Poisson)
shopping_frequency <- rpois(n, lambda = 5)
# Usia (distribusi normal dengan rata-rata 35 dan deviasi standar 10)
age <- rnorm(n, mean = 35, sd = 10)
# Model logit untuk kemungkinan berbelanja online
logit_p <- -1.2 + 0.5 * (job_status == "Employed") +
0.3 * (job_status == "Student") +
0.02 * shopping_frequency - 0.015 * age
# Menghitung probabilitas menggunakan fungsi logit
p <- 1 / (1 + exp(-logit_p))
# Menentukan keputusan pembelian online berdasarkan probabilitas
set.seed(456)
online_shopping <- rbinom(n, size = 1, prob = p)
# Gabungkan menjadi tibble
library(tibble)
sim_data <- tibble(online_shopping, job_status, shopping_frequency, age)
# Tampilkan sebagian data
head(sim_data)
## # A tibble: 6 × 4
## online_shopping job_status shopping_frequency age
## <int> <chr> <int> <dbl>
## 1 0 Retired 5 33.8
## 2 0 Employed 3 45.1
## 3 0 Student 5 33.0
## 4 1 Student 5 14.6
## 5 1 Employed 5 33.0
## 6 0 Unemployed 3 40.4
Interpretasi
Data ini menunjukkan bahwa keputusan untuk melakukan pembelian online dipengaruhi oleh berbagai faktor seperti status pekerjaan, frekuensi belanja, dan usia, namun tidak ada satu faktor yang secara konsisten menjamin bahwa seseorang akan melakukan pembelian online. Hal ini mengindikasikan bahwa preferensi atau kebiasaan individu sangat bervariasi meskipun ada beberapa pola umum yang terlihat, seperti lebih banyak individu yang bekerja dan lebih muda yang cenderung berbelanja online lebih sering.
library(dplyr)
# Eksplorasi Data
sim_data %>%
group_by(online_shopping) %>%
summarise(
Jumlah = n(), # Jumlah observasi berdasarkan keputusan pembelian online
Rata2_Age = mean(age), # Rata-rata usia
Rata2_ShoppingFreq = mean(shopping_frequency), # Rata-rata frekuensi belanja online
Rata2_JobStatus = mean(as.numeric(factor(job_status))) # Rata-rata status pekerjaan dalam bentuk numerik
)
## # A tibble: 2 × 5
## online_shopping Jumlah Rata2_Age Rata2_ShoppingFreq Rata2_JobStatus
## <int> <int> <dbl> <dbl> <dbl>
## 1 0 560 35.6 4.96 2.09
## 2 1 190 34.1 4.83 1.88
Interpretasi
Umur: Individu yang membeli online cenderung sedikit lebih muda daripada yang tidak membeli online.
Frekuensi Belanja: Meskipun individu yang tidak membeli online memiliki frekuensi belanja yang lebih tinggi, orang yang membeli online sedikit lebih sering berbelanja.
Status Pekerjaan: Mayoritas dari kedua kelompok adalah individu yang bekerja, tetapi sedikit lebih banyak individu yang bekerja tidak melakukan pembelian online.
Dalam kasus ini, kita ingin menganalisis pengaruh status pekerjaan terhadap penggunaan layanan online banking. Status pekerjaan (yang memiliki empat kategori: “Unemployed”, “Employed”, “Student”, dan “Retired”) akan diperlakukan sebagai variabel dummy untuk analisis regresi logistik, dengan kategori “Unemployed” sebagai referensi.
# Mengonversi status pekerjaan ke dalam variabel dummy
sim_data <- sim_data %>%
mutate(
job_status_employed = ifelse(job_status == "Employed", 1, 0),
job_status_student = ifelse(job_status == "Student", 1, 0),
job_status_retired = ifelse(job_status == "Retired", 1, 0)
)
# Melakukan regresi logistik
logit_model <- glm(online_shopping ~ job_status_employed + job_status_student + job_status_retired + shopping_frequency + age,
data = sim_data,
family = binomial())
# Menampilkan hasil model regresi logistik
summary(logit_model)
##
## Call:
## glm(formula = online_shopping ~ job_status_employed + job_status_student +
## job_status_retired + shopping_frequency + age, family = binomial(),
## data = sim_data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.162342 0.445589 -2.609 0.00909 **
## job_status_employed 0.826932 0.286522 2.886 0.00390 **
## job_status_student 0.860992 0.312084 2.759 0.00580 **
## job_status_retired 0.553006 0.388030 1.425 0.15411
## shopping_frequency -0.020158 0.039255 -0.514 0.60759
## age -0.014960 0.008509 -1.758 0.07872 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 848.95 on 749 degrees of freedom
## Residual deviance: 834.62 on 744 degrees of freedom
## AIC: 846.62
##
## Number of Fisher Scoring iterations: 4
Interpretasi Koefisien
Koefisien intercept (konstanta) sebesar -1.073 menunjukkan bahwa untuk individu yang berstatus pengangguran (Unemployed), dengan frekuensi belanja online dan usia rata-rata 0, kemungkinan mereka melakukan pembelian online adalah rendah (pada kondisi dasar atau referensi).
Signifikansi: Nilai p (0.0160) menunjukkan bahwa koefisien intercept ini signifikan pada tingkat signifikansi 5%.
Koefisien 0.555 untuk individu yang bekerja (Employed) menunjukkan bahwa mereka memiliki kemungkinan lebih besar untuk melakukan pembelian online dibandingkan dengan individu yang pengangguran (Unemployed). Semakin besar koefisien positif ini, semakin tinggi kemungkinan mereka membeli online, jika variabel lain tetap konstan.
Signifikansi: Nilai p (0.0468) menunjukkan bahwa pengaruh status pekerjaan “Employed” ini signifikan pada tingkat signifikansi 5%.
Koefisien 0.532 untuk individu yang pelajar (Student) menunjukkan bahwa mereka juga memiliki kemungkinan lebih besar untuk membeli online dibandingkan dengan individu yang pengangguran. Koefisien ini lebih kecil dibandingkan dengan “Employed”, tetapi tetap positif.
Signifikansi: Nilai p (0.0775) menunjukkan bahwa pengaruh ini mendekati signifikansi (pada tingkat signifikansi 10%), namun tidak cukup kuat untuk dianggap signifikan pada tingkat 5%.
Koefisien -0.193 untuk individu yang pensiun (Retired) menunjukkan bahwa mereka memiliki kemungkinan lebih rendah untuk melakukan pembelian online dibandingkan dengan individu yang pengangguran. Nilai negatif ini menunjukkan pengaruh yang menurunkan kemungkinan pembelian online pada individu pensiunan.
Signifikansi: Nilai p (0.6260) menunjukkan bahwa pengaruh ini tidak signifikan, artinya status pensiunan tidak memengaruhi keputusan untuk melakukan pembelian online secara signifikan.
Koefisien positif 0.025 menunjukkan bahwa setiap peningkatan satu unit dalam frekuensi belanja online per bulan meningkatkan kemungkinan seseorang untuk melakukan pembelian online. Namun, efeknya sangat kecil (hanya 0.025 per unit peningkatan frekuensi).
Signifikansi: Nilai p (0.4979) menunjukkan bahwa frekuensi belanja online tidak signifikan dalam mempengaruhi keputusan untuk membeli online pada tingkat signifikansi 5%.
= age (-0.016045):
Koefisien negatif -0.016 untuk usia (age) menunjukkan bahwa semakin tua usia seseorang, semakin kecil kemungkinan mereka untuk melakukan pembelian online. Ini menunjukkan bahwa usia yang lebih tua berhubungan dengan penurunan kemungkinan untuk membeli online.
Signifikansi: Nilai p (0.0611) menunjukkan bahwa usia mendekati signifikansi (pada tingkat 10%), namun tidak cukup kuat untuk dianggap signifikan pada tingkat 5%.
Interpretasi Goodness Of Fit
Null Deviance menunjukkan deviance dari model yang hanya menggunakan intercept (konstanta) tanpa variabel prediktor apapun (model yang sangat sederhana). Ini menggambarkan seberapa baik model yang hanya memprediksi kelas mayoritas (misalnya, mengasumsikan semua orang tidak melakukan pembelian online). Nilai 844.60 menunjukkan seberapa besar deviasi (kesalahan) model dasar ini tanpa variabel prediktor.
Residual Deviance adalah deviance dari model yang sudah Anda sesuaikan, yang mencakup semua variabel prediktor yang digunakan dalam model, seperti status pekerjaan, frekuensi belanja, dan usia. Ini menggambarkan seberapa baik model ini dalam memprediksi data yang sebenarnya dibandingkan dengan model dasar (null model). Nilai 830.72 menunjukkan kesalahan model dengan variabel prediktor. Semakin kecil nilai residual deviance dibandingkan dengan null deviance, semakin baik model Anda dalam menjelaskan data.
Deviance residuals menunjukkan seberapa jauh prediksi model untuk setiap observasi dari hasil yang diamati. Semakin kecil deviance residuals, semakin baik model tersebut dalam memprediksi data.
AIC adalah salah satu ukuran yang digunakan untuk menilai kualitas model, dengan mempertimbangkan kecocokan model dan kompleksitas model. Nilai AIC yang lebih rendah menunjukkan model yang lebih baik dalam hal keseimbangan antara kecocokan dan kompleksitas. 842.72 adalah nilai AIC yang dihasilkan oleh model Anda. Anda dapat menggunakan AIC untuk membandingkan beberapa model yang berbeda; model dengan nilai AIC yang lebih rendah dianggap lebih baik dalam hal keseimbangan antara kecocokan dan jumlah parameter yang digunakan.
Signifikansi Model:
Job_status_employed adalah satu-satunya variabel yang signifikan pada level 5% dengan p-value = 0.0468. Ini menunjukkan bahwa status pekerjaan “Employed” memiliki pengaruh yang signifikan terhadap kemungkinan seseorang untuk melakukan pembelian online dibandingkan dengan individu yang menganggur (Unemployed).
Job_status_student hampir mendekati signifikan dengan p-value = 0.0775, namun tidak cukup untuk dianggap signifikan pada tingkat 5%. Pengaruhnya tidak cukup kuat dalam memprediksi pembelian online.
Job_status_retired, shopping_frequency, dan age tidak signifikan karena p-value mereka lebih besar dari 0.05. Artinya, status pensiunan, frekuensi belanja, dan usia tidak mempengaruhi keputusan untuk melakukan pembelian online secara signifikan dalam model ini.
Secara keseluruhan, model signifikan berdasarkan perbedaan deviance antara Null Deviance (844.60) dan Residual Deviance (830.72) yang menunjukkan bahwa model ini jauh lebih baik daripada model tanpa prediktor. Hal ini mengindikasikan bahwa model yang memasukkan variabel prediktor dapat menjelaskan data dengan lebih baik dibandingkan dengan model dasar.
Kesimpulan:
Model menunjukkan bahwa:
Status pekerjaan sebagai “Employed” secara signifikan meningkatkan peluang seseorang untuk melakukan pembelian online dibandingkan dengan mereka yang menganggur.
Variabel lain seperti status mahasiswa, pensiunan, usia, dan frekuensi belanja online belum menunjukkan pengaruh yang signifikan terhadap keputusan untuk membeli online.
Model secara keseluruhan memberikan fit yang lebih baik dibandingkan model tanpa prediktor, yang menunjukkan bahwa status pekerjaan memberikan kontribusi informasi penting dalam memprediksi pembelian online.
Dalam upaya memahami perilaku masyarakat terhadap pembelian online, salah satu faktor yang berpotensi mempengaruhi keputusan seseorang untuk melakukan pembelian online adalah status pekerjaan. Status pekerjaan ini dapat dianggap memiliki struktur hirarki atau urutan, mulai dari pengangguran (tidak bekerja) hingga bekerja penuh waktu atau pensiun.
Dengan asumsi bahwa status pekerjaan memiliki urutan atau hirarki, pendekatan perlakuan variabel kategori ini sebagai skala numerik berjenjang (numeric rank) menjadi relevan. Dalam pendekatan ini, kategori-kategori status pekerjaan akan diberikan nilai numerik yang menggambarkan urutan tingkat pekerjaan, di mana pengangguran diberi nilai rendah dan pekerjaan penuh waktu diberi nilai tinggi.
Misalnya, Unemployed (pengangguran) diberi nilai 1, Employed (bekerja) diberi nilai 2, Student (pelajar) diberi nilai 3, dan Retired (pensiunan) diberi nilai 4, dengan asumsi bahwa tingkat pekerjaan yang lebih tinggi atau lebih aktif berhubungan dengan kemungkinan yang lebih besar untuk melakukan pembelian online.
library(dplyr)
# Ubah job_status menjadi numerik terurut (ordinal)
sim_data_numeric <- sim_data %>%
mutate(
job_status_numeric = case_when(
job_status == "Unemployed" ~ 1, # Pengangguran diberi nilai 1
job_status == "Student" ~ 2, # Pelajar diberi nilai 2
job_status == "Retired" ~ 3, # Pensiunan diberi nilai 3
job_status == "Employed" ~ 4 # Pekerja diberi nilai 4
)
)
# Model regresi logistik dengan perlakuan ordinal
model_numeric <- glm(online_shopping ~ job_status_numeric + shopping_frequency + age,
data = sim_data_numeric, family = binomial)
# Menampilkan ringkasan model regresi logistik
summary(model_numeric)
##
## Call:
## glm(formula = online_shopping ~ job_status_numeric + shopping_frequency +
## age, family = binomial, data = sim_data_numeric)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.91231 0.43116 -2.116 0.0344 *
## job_status_numeric 0.15651 0.07407 2.113 0.0346 *
## shopping_frequency -0.02602 0.03911 -0.665 0.5058
## age -0.01472 0.00853 -1.726 0.0844 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 848.95 on 749 degrees of freedom
## Residual deviance: 840.74 on 746 degrees of freedom
## AIC: 848.74
##
## Number of Fisher Scoring iterations: 4
Perbandingan Model
# Membuat model nominal dengan variabel job_status dalam bentuk dummy
model_nominal <- glm(online_shopping ~ job_status_employed + job_status_student + job_status_retired + shopping_frequency + age,
data = sim_data,
family = binomial)
# Menghitung AIC untuk model nominal
AIC_nominal = AIC(model_nominal)
print(AIC_nominal)
## [1] 846.6186
# Menghitung AIC untuk model ordinal numerik
AIC_numeric = AIC(model_numeric);
AIC_numeric
## [1] 848.7358
## Menampilkan nilai AIC untuk model ordinal numerik
Interpretasi Koefisien
Koefisien intercept sebesar -1.041389 menunjukkan log-odds untuk individu yang memiliki job_status_numeric = 1 (pengangguran), shopping_frequency = 0, dan usia = 0. Ini adalah nilai dasar ketika semua variabel lain adalah 0. Dalam konteks ini, jika seseorang adalah pengangguran dengan frekuensi belanja dan usia yang nol, mereka memiliki kemungkinan lebih rendah untuk melakukan pembelian online. Signifikansi: Nilai p-value = 0.0157 menunjukkan bahwa intercept ini signifikan pada level 5%, yang berarti bahwa konstanta model memberikan kontribusi yang berarti.
Koefisien job_status_numeric sebesar 0.112491 menunjukkan bahwa setiap peningkatan satu unit dalam nilai status pekerjaan (misalnya, dari pengangguran ke pelajar, pensiunan, atau pekerja) meningkatkan log-odds untuk melakukan pembelian online sebesar 0.112. Semakin tinggi nilai numerik status pekerjaan (dari pengangguran ke pekerjaan yang lebih aktif), semakin besar kemungkinan seseorang untuk berbelanja online. Signifikansi: Nilai p-value = 0.1358 menunjukkan bahwa job_status_numeric tidak signifikan pada tingkat 5%, artinya status pekerjaan tidak memiliki pengaruh yang cukup kuat terhadap keputusan untuk membeli online dalam model ini.
Koefisien shopping_frequency sebesar 0.031355 menunjukkan bahwa setiap peningkatan satu unit dalam frekuensi belanja online meningkatkan log-odds untuk melakukan pembelian online sebesar 0.031. Ini berarti bahwa semakin sering seseorang berbelanja online, semakin besar kemungkinan mereka untuk melanjutkan pembelian online. Signifikansi: Nilai p-value = 0.3989 menunjukkan bahwa shopping_frequency tidak signifikan dalam mempengaruhi keputusan pembelian online pada tingkat 5%. Artinya, frekuensi belanja tidak cukup berpengaruh dalam model ini.
Koefisien age sebesar -0.015777 menunjukkan bahwa setiap peningkatan satu tahun usia individu akan mengurangi log-odds untuk melakukan pembelian online sebesar 0.016. Ini menunjukkan bahwa individu yang lebih tua cenderung lebih jarang melakukan pembelian online dibandingkan dengan individu yang lebih muda. Signifikansi: Nilai p-value = 0.0647 menunjukkan bahwa age hampir signifikan pada tingkat 10%, tetapi tidak cukup signifikan pada tingkat 5%. Ini berarti ada indikasi bahwa usia mungkin berpengaruh terhadap keputusan pembelian online, tetapi pengaruhnya tidak cukup kuat untuk dianggap signifikan pada tingkat 5%.
Interpretasi Goodness of Fit:
Null Deviance menunjukkan seberapa buruk model yang hanya menggunakan intercept (konstanta) tanpa variabel prediktor apa pun. Dalam hal ini, nilai 844.60 menunjukkan deviasi model dasar, yang tidak memanfaatkan informasi dari variabel prediktor apa pun. Semakin tinggi nilai Null Deviance, semakin buruk model dasar dalam memprediksi data.
Residual Deviance adalah deviasi dari model yang telah disesuaikan, yaitu model yang mencakup variabel prediktor (seperti job_status_numeric, shopping_frequency, dan age). Dalam hal ini, nilai 837.88 menunjukkan deviasi model yang disesuaikan dengan variabel prediktor. Nilai 837.88 menunjukkan seberapa baik model yang sudah disesuaikan dengan data. Semakin kecil nilai residual deviance dibandingkan dengan null deviance, semakin baik model dalam memprediksi data.
AIC adalah indikator yang digunakan untuk mengevaluasi keseimbangan antara kecocokan model dan kompleksitas model. Nilai AIC = 845.88 menunjukkan bahwa model ini mencoba untuk mencapai keseimbangan yang baik antara kecocokan data dan jumlah parameter yang digunakan. AIC yang lebih rendah menunjukkan model yang lebih baik. Namun, dalam perbandingan, Anda dapat membandingkan model nominal dan ordinal numerik berdasarkan AIC untuk memilih model yang lebih baik.
Signifikansi Model:
Dalam model ini, hanya status pekerjaan (job_status_numeric) yang memiliki pengaruh positif, meskipun tidak signifikan pada taraf 5%, dengan nilai p-value = 0.1358. Artinya, meskipun ada pengaruh kecil, status pekerjaan tidak cukup kuat untuk menjadi prediktor yang signifikan dalam mempengaruhi keputusan untuk melakukan pembelian online.
Sementara itu, variabel shopping_frequency dengan p-value = 0.3989 dan age dengan p-value = 0.0647 tidak signifikan pada taraf 5%, menunjukkan bahwa keduanya tidak cukup berpengaruh dalam menjelaskan variasi keputusan untuk berbelanja online pada model ini.
Secara keseluruhan, meskipun model menunjukkan bahwa ada beberapa variabel yang berpotensi berpengaruh, peran prediktor selain status pekerjaan relatif lemah dalam menjelaskan variasi pembelian online dalam model ini.
Kesimpulan
Hasil analisis menunjukkan bahwa status pekerjaan yang dianggap memiliki tingkatan lebih tinggi berkorelasi positif terhadap peluang individu untuk melakukan pembelian online, meskipun pengaruhnya tidak signifikan pada taraf 5%. Meskipun frekuensi belanja online dan usia dimasukkan dalam model, keduanya tidak terbukti memiliki pengaruh yang signifikan terhadap keputusan pembelian online.
Bila dibandingkan dengan model sebelumnya, model yang menggunakan perlakuan ordinal numerik untuk status pekerjaan menunjukkan penurunan AIC yang sedikit lebih tinggi, namun model dengan perlakuan nominal (dummy) untuk status pekerjaan memberikan performa yang lebih baik berdasarkan nilai AIC. Oleh karena itu, pendekatan kategorik dummy tampaknya lebih sesuai untuk kasus ini, karena dapat memberikan hasil yang lebih tepat dalam menjelaskan variasi dalam keputusan pembelian online.
Goodness-of-Fit Model
Untuk mengevaluasi kualitas model secara komprehensif, selain menggunakan deviance dan AIC, digunakan juga McFadden’s pseudo R², yang merupakan ukuran goodness-of-fit untuk model logistik. Nilai ini dihitung dengan membandingkan log-likelihood model penuh dengan model null (hanya intercept).
# Model null (tanpa prediktor)
nullmod <- glm(online_shopping ~ 1, data = sim_data, family = binomial)
# McFadden's R² untuk model nominal
r2_nominal <- 1 - (logLik(model_nominal) / logLik(nullmod))
# McFadden's R² untuk model ordinal numerik
r2_numeric <- 1 - (logLik(model_numeric) / logLik(nullmod))
# Menampilkan hasil McFadden's R² untuk kedua model
list(
McFadden_R2_Nominal = r2_nominal,
McFadden_R2_Numeric = r2_numeric
)
## $McFadden_R2_Nominal
## 'log Lik.' 0.01688307 (df=6)
##
## $McFadden_R2_Numeric
## 'log Lik.' 0.009677411 (df=4)
Interpretasi
Model nominal dengan variabel dummy memberikan peningkatan yang lebih baik dalam menjelaskan data dibandingkan dengan model tanpa prediktor (model null).
Model ordinal numerik memiliki nilai McFadden’s R² yang lebih rendah, menunjukkan bahwa model ini kurang efektif dalam menjelaskan variasi dalam keputusan pembelian online dibandingkan dengan model nominal.
Visualisasi Prediksi (Model Nominal)
# Memuat paket yang diperlukan
library(ggplot2)
library(dplyr)
# Menambahkan prediksi probabilitas berdasarkan model nominal
sim_data <- sim_data %>%
mutate(predicted = predict(model_nominal, type = "response"))
# Plot probabilitas prediksi terhadap frekuensi belanja online (shopping_frequency)
ggplot(sim_data, aes(x = shopping_frequency, y = predicted, color = as.factor(job_status))) +
geom_point(alpha = 0.6) +
labs(
title = "Prediksi Probabilitas Pembelian Online Berdasarkan Frekuensi Belanja Online (Model Nominal)",
x = "Frekuensi Belanja Online per Bulan",
y = "Probabilitas Prediksi",
color = "Status Pekerjaan"
) +
theme_minimal() +
scale_color_manual(
values = c(
"Unemployed" = "#E41A1C", # merah terang untuk 'Unemployed'
"Employed" = "#377EB8", # biru untuk 'Employed'
"Student" = "#4DAF4A", # hijau untuk 'Student'
"Retired" = "#984EA3" # ungu untuk 'Retired'
),
labels = c("Unemployed", "Employed", "Student", "Retired") # Label status pekerjaan
)
Visualisasi Prediksi Probabilitas (Model Ordinal/Numeric)
# Pastikan dataset yang benar digunakan
sim_data_numeric <- sim_data_numeric %>%
mutate(predicted = predict(model_numeric, type = "response"))
# Plot probabilitas prediksi terhadap frekuensi belanja online (shopping_frequency)
ggplot(sim_data_numeric, aes(x = shopping_frequency, y = predicted, color = as.factor(job_status_numeric))) +
geom_point(alpha = 0.6) +
labs(
title = "Prediksi Probabilitas Pembelian Online Berdasarkan Frekuensi Belanja Online (Ordinal sebagai Numeric)",
x = "Frekuensi Belanja Online per Bulan",
y = "Probabilitas Prediksi",
color = "Status Pekerjaan"
) +
theme_minimal() +
scale_color_manual(
values = c(
"1" = "#E41A1C", # merah terang untuk 'Unemployed'
"2" = "#377EB8", # biru untuk 'Student'
"3" = "#4DAF4A", # hijau untuk 'Retired'
"4" = "#984EA3" # ungu untuk 'Employed'
),
labels = c("Unemployed", "Student", "Retired", "Employed") # Label status pekerjaan
)
##9. Pemilihan Model Regresi Logistik dan Evaluasi
Dalam analisis regresi logistik, langkah pemilihan model sangat penting untuk memperoleh model yang paling sesuai dan efektif dalam memprediksi probabilitas suatu kejadian biner. Model yang ideal tidak hanya ditentukan oleh ketepatan prediksinya, tetapi juga oleh kesederhanaan, kemampuan untuk diinterpretasikan, dan kesesuaian dengan teori atau tujuan penelitian. Pemilihan model yang tepat dapat meningkatkan akurasi prediksi, menghindari overfitting, dan memberikan pemahaman yang jelas tentang peran masing-masing prediktor terhadap respons. Untuk mencapainya, biasanya digunakan pendekatan yang sistematis dan metodologis, dengan mempertimbangkan faktor statistik dan konteks substantif dari data yang dianalisis. Secara umum, ada dua pendekatan utama dalam membangun model regresi logistik: Confirmatory (konfirmatori) dan Exploratory (eksploratori). Kedua pendekatan ini bisa digunakan secara terpisah atau saling melengkapi, tergantung pada apakah peneliti sudah memiliki teori yang jelas atau masih dalam tahap eksplorasi hubungan antar variabel.
1. Confirmatory (Pendekatan Konfirmatori)
Pendekatan ini digunakan ketika peneliti sudah memiliki teori yang kuat atau hipotesis yang jelas mengenai hubungan antara variabel prediktor dan variabel respons. Karakteristik dari pendekatan konfirmatori adalah:
Model dibangun berdasarkan kerangka teori atau temuan-temuan dari penelitian sebelumnya.
Fokus utama adalah untuk menguji apakah hubungan antar variabel sesuai dengan hipotesis yang telah dibuat.
Pemodelan dilakukan dengan terlebih dahulu menyusun model teoritis, kemudian mengujinya menggunakan metode statistik.
Uji signifikansi dilakukan terhadap variabel-variabel dalam model, contohnya menggunakan Likelihood Ratio Test untuk membandingkan model dengan dan tanpa variabel tertentu.
Tujuan utamanya adalah tidak hanya untuk mendapatkan model yang akurat, tetapi juga untuk memastikan kesesuaian model dengan hipotesis yang ada.
Contoh penggunaan: Sebagai contoh, seorang peneliti ingin menguji apakah faktor X1 dan X2 mempengaruhi keputusan pembelian produk. Dalam pendekatan konfirmatori, peneliti akan mengembangkan model berdasarkan teori perilaku konsumen dan kemudian menguji apakah X1 dan X2 memiliki pengaruh yang signifikan secara statistik.
2. Exploratory (Pendekatan Eksploratori)
Pendekatan eksploratori digunakan ketika peneliti belum memiliki hipotesis yang jelas dan ingin menggali pola atau hubungan potensial antara variabel prediktor dan respons. Karakteristik dari pendekatan eksploratori adalah:
Pemilihan variabel dilakukan secara bertahap atau otomatis, berdasarkan kriteria statistik tertentu.
Tujuannya adalah untuk mengidentifikasi kombinasi variabel yang memberikan performa prediktif terbaik.
Pendekatan ini cocok digunakan untuk data besar atau dalam studi awal untuk mengeksplorasi fenomena yang belum diketahui secara mendalam.
Metode yang umum digunakan:
Forward Selection: Menambahkan variabel satu per satu ke dalam model berdasarkan kontribusi statistik masing-masing.
Backward Elimination: Dimulai dengan memasukkan semua variabel, kemudian mengeliminasi variabel yang tidak signifikan.
Stepwise Selection: Kombinasi antara forward dan backward selection untuk memilih model terbaik.
Tujuan utama pendekatan eksploratori:
Menyusun model yang parsimonious (cukup sederhana) namun memiliki kinerja prediktif yang baik.
Pendekatan ini cocok untuk studi eksplorasi, pengembangan model awal, atau saat belum ada teori yang mapan.
Simulasi Data
# Memuat paket yang dibutuhkan
library(knitr)
library(dplyr)
library(ggplot2)
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(DescTools)
set.seed(456)
# Jumlah sampel
n <- 250
# Prediktor X1 dan X3 bertipe numerik kontinu
x1 <- rnorm(n, mean = 2, sd = 1)
x3 <- rnorm(n, mean = 0, sd = 2)
# Prediktor X2 bertipe biner (simulasi variabel dummy)
x2 <- sample(0:1, n, replace = TRUE, prob = c(0.4, 0.6))
# Menyusun persamaan linear prediktor
lin_pred <- -1 + 0.7 * x1 + 0.4 * x2 - 0.6 * x3
# Menghitung probabilitas menggunakan fungsi logistik
p <- plogis(lin_pred)
# Menghasilkan variabel respon biner berdasarkan probabilitas
y <- rbinom(n, size = 1, prob = p)
# Menyusun data frame
df <- data.frame(
y = factor(y),
x1 = x1,
x2 = factor(x2),
x3 = x3
)
# Tampilkan sebagian data
head(df)
## y x1 x2 x3
## 1 1 0.6564786 1 -0.4998270
## 2 1 2.6217756 1 0.1426120
## 3 1 2.8008747 1 0.5001287
## 4 1 0.6111076 0 -2.4578501
## 5 1 1.2856431 1 -0.1172847
## 6 1 1.6759389 1 -0.7275040
Permodelan Regresi Logistik Penuh
# Pemodelan regresi logistik penuh
model_lengkap <- glm(y ~ x1 + x2 + x3, data = df, family = binomial)
# Menampilkan ringkasan model
summary(model_lengkap)
##
## Call:
## glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.81302 0.37873 -2.147 0.031818 *
## x1 0.57650 0.15585 3.699 0.000216 ***
## x21 0.46931 0.29119 1.612 0.107023
## x3 -0.48096 0.08612 -5.585 2.34e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 337.30 on 249 degrees of freedom
## Residual deviance: 285.31 on 246 degrees of freedom
## AIC: 293.31
##
## Number of Fisher Scoring iterations: 4
Untuk membangun model regresi logistik yang optimal, teknik stepwise selection dapat digunakan untuk memilih kombinasi variabel prediktor terbaik secara otomatis. Pendekatan ini dilakukan dengan menambahkan (forward), menghapus (backward), atau mengombinasikan keduanya (both) berdasarkan kriteria statistik, seperti AIC (Akaike Information Criterion).
# Model nol (hanya intercept, tanpa prediktor)
model_nol <- glm(y ~ 1, data = df, family = binomial)
# Seleksi maju (forward selection)
maju <- step(model_nol, direction = "forward", scope = formula(model_lengkap)
, trace = FALSE)
# Seleksi mundur (backward elimination)
mundur <- step(model_lengkap, direction = "backward", trace = FALSE)
# Seleksi dua arah (forward + backward / stepwise)
gabungan <- step(model_nol, direction = "both", scope = formula(model_lengkap
), trace = FALSE)
Perbandingan AIC Antar Metode
Untuk menilai kualitas model hasil seleksi, digunakan nilai AIC. Model dengan nilai AIC yang lebih kecil dianggap lebih baik karena menunjukkan keseimbangan yang lebih baik antara kompleksitas model dan akurasi prediksi.
AIC(model_lengkap, maju, mundur, gabungan)
## df AIC
## model_lengkap 4 293.3136
## maju 4 293.3136
## mundur 4 293.3136
## gabungan 4 293.3136
Untuk mengevaluasi kemampuan model dalam membedakan antara kelas 1 dan 0, digunakan kurva ROC (Receiver Operating Characteristic). Kurva ROC menggambarkan hubungan antara Sensitivity (True Positive Rate) dan 1 − Specificity (False Positive Rate). Area di bawah kurva (AUC) digunakan sebagai ukuran numerik untuk menilai performa model klasifikasi.
# Prediksi probabilitas dari model terbaik (hasil stepwise)
prediksi_probabilitas <- predict(gabungan, type = "response")
# Membuat objek ROC
roc_kurva <- roc(df$y, prediksi_probabilitas)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Visualisasi kurva ROC
plot(roc_kurva,
main = "Kurva ROC",
col = "darkorange",
lwd = 2)
# Tambahkan garis diagonal sebagai referensi
abline(a = 0, b = 1, lty = 2, col = "gray")
# Tambahkan legend
legend("bottomright",
legend = c("Model Stepwise"),
col = c("darkorange"),
lwd = 2)
auc(roc_kurva)
## Area under the curve: 0.7539
Interpretasi
Nilai AUC (Area Under the Curve) sebesar 0.7539 menunjukkan bahwa model memiliki kemampuan yang cukup baik dalam membedakan antara dua kelas (respon 0 dan 1). Secara umum, nilai AUC di atas 0.7 dianggap memadai, yang berarti model dapat dengan benar membedakan antara observasi yang termasuk dalam kelas positif dan kelas negatif sekitar 75% dari waktu. Oleh karena itu, model ini memiliki kinerja klasifikasi yang baik dan dapat digunakan sebagai dasar untuk pengambilan keputusan prediktif, meskipun masih ada potensi untuk perbaikan lebih lanjut.
Sebagai pengganti R-squared pada regresi linear, regresi logistik menggunakan pseudo R-squared untuk mengukur seberapa baik model dapat menjelaskan variasi dalam data. Beberapa ukuran yang sering digunakan untuk ini antara lain Cox & Snell, Nagelkerke, dan McFadden.
PseudoR2(gabungan, which = c("CoxSnell", "Nagelkerke", "McFadden"))
## CoxSnell Nagelkerke McFadden
## 0.1877492 0.2535258 0.1541254
Nilai pseudo R-squared ini menunjukkan bahwa model dapat menjelaskan sekitar 15%–25% variasi dalam respons, yang dianggap cukup baik untuk model klasifikasi yang menggunakan data sosial atau observasional.
Untuk menilai performa prediksi, dibuat tabel klasifikasi (confusion matrix) dengan cutoff probabilitas 0.5. Evaluasi mencakup akurasi, sensitivitas, spesifisitas, serta metrik tambahan lainnya.
# Mengklasifikasikan berdasarkan probabilitas prediksi
kelas_prediksi <- ifelse(prediksi_probabilitas >= 0.5, 1, 0)
# Membuat tabel perbandingan antara prediksi dan data aktual
conf_matrix <- table(Prediksi = kelas_prediksi, Aktual = df$y)
print(conf_matrix)
## Aktual
## Prediksi 0 1
## 0 53 23
## 1 48 126
## Aktual
## Prediksi 0 1
## 0 53 23
## 1 48 126
# Ambil nilai-nilai dari confusion matrix
TN <- conf_matrix[1,1]
FP <- conf_matrix[2,1]
FN <- conf_matrix[1,2]
TP <- conf_matrix[2,2]
# Hitung metrik
accuracy <- (TP + TN) / sum(conf_matrix)
sensitivity <- TP / (TP + FN) # Recall
specificity <- TN / (TN + FP)
precision <- TP / (TP + FP)
f1_score <- 2 * (precision * sensitivity) / (precision + sensitivity)
# Tampilkan hasil
cat("Akurasi :", round(accuracy, 3), "\n")
## Akurasi : 0.716
cat("Sensitivitas:", round(sensitivity, 3), "\n")
## Sensitivitas: 0.846
cat("Spesifisitas:", round(specificity, 3), "\n")
## Spesifisitas: 0.525
cat("Presisi :", round(precision, 3), "\n")
## Presisi : 0.724
cat("F1-Score :", round(f1_score, 3), "\n")
## F1-Score : 0.78
Model klasifikasi menunjukkan kinerja yang baik dengan akurasi 71,6%, yang mengindikasikan bahwa sebagian besar prediksi sudah benar. Nilai sensitivitas yang tinggi (84,6%) menunjukkan bahwa model memiliki kemampuan yang kuat dalam mendeteksi kasus positif, sementara presisi sebesar 72,4% mengindikasikan bahwa sebagian besar prediksi positif memang benar. Meskipun spesifisitas masih relatif rendah (52,5%), secara keseluruhan, model ini cukup andal, terutama jika fokus utama adalah mendeteksi kelas positif.
Tujuan
Bagian ini bertujuan untuk menjelaskan cara membandingkan beberapa model regresi logistik menggunakan ukuran statistik umum, yaitu:
AIC (Akaike Information Criterion)
Deviance (−2 log-likelihood)
Likelihood-Ratio Test
Selain itu, bagian ini juga menguraikan pentingnya prinsip parsimony, yaitu memilih model yang cukup sederhana namun tetap efektif dalam menjelaskan data.
Simulasi Data
library(MASS)
library(broom)
library(DescTools)
set.seed(456)
n <- 500
z1 <- rnorm(n)
z2 <- rbinom(n, 1, 0.5)
z3 <- rnorm(n)
linear_pred <- -1.3 + 1.8 * z1 - 0.1 * z2 + 0.75 * z3
p <- 1 / (1 + exp(-linear_pred))
target <- rbinom(n, 1, p)
data_log <- data.frame(y = as.factor(target), z1, z2, z3)
Pembuatan Model
Dibuat tiga model regresi logistik dengan kompleksitas bertingkat, dari model sederhana hingga model lengkap:
model_a <- glm(y ~ z1, data = data_log, family = binomial)
model_b <- glm(y ~ z1 + z2, data = data_log, family = binomial)
model_c <- glm(y ~ z1 + z2 + z3, data = data_log, family = binomial)
Perbandingan AIC dan Deviance
Untuk memilih model terbaik, dilakukan perbandingan berdasarkan nilai AIC dan deviance:
model_band <- data.frame(
Model = c("Model A", "Model B", "Model C"),
AIC = c(AIC(model_a), AIC(model_b), AIC(model_c)),
Deviance = c(deviance(model_a), deviance(model_b), deviance(model_c))
)
model_band
## Model AIC Deviance
## 1 Model A 463.0457 459.0457
## 2 Model B 464.7974 458.7974
## 3 Model C 431.5352 423.5352
anova(model_a, model_b, test = "LRT")
## Analysis of Deviance Table
##
## Model 1: y ~ z1
## Model 2: y ~ z1 + z2
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 498 459.05
## 2 497 458.80 1 0.24835 0.6182
anova(model_b, model_c, test = "LRT")
## Analysis of Deviance Table
##
## Model 1: y ~ z1 + z2
## Model 2: y ~ z1 + z2 + z3
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 497 458.80
## 2 496 423.54 1 35.262 2.882e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dalam pemodelan regresi logistik, kompleksitas model sering kali sebanding dengan peningkatan kecocokan terhadap data. Namun, model yang terlalu kompleks dapat menimbulkan overfitting dan mempersulit interpretasi. Oleh karena itu, prinsip parsimony menekankan pentingnya memilih model yang relatif sederhana namun tetap dapat menggambarkan struktur data secara memadai.
Secara umum, jika penambahan parameter tidak memberikan penurunan nilai AIC yang signifikan, maka model yang lebih sederhana sebaiknya dipilih. Prinsip ini mendukung penggunaan model yang efisien, yaitu model yang tidak berlebihan dalam jumlah parameter.
Rumus dan Penjelasan
Rumus AIC
\[ \text{AIC} = -2(\log L - k) = -2 \log L + 2k \]
AIC (Akaike Information Criterion) adalah ukuran yang digunakan untuk menilai kualitas model berdasarkan keseimbangan antara kecocokan model terhadap data (melalui nilai log-likelihood) dan kompleksitas model (dihitung dari jumlah parameter 𝑘). Nilai AIC yang lebih rendah mengindikasikan model yang lebih baik secara relatif, dengan catatan AIC memberikan penalti terhadap model yang terlalu kompleks.
Rumus Deviance
\[ \text{Deviance} = -2[\log L(\text{model}) - \log L(\text{model saturasi})] \]
Deviance mengukur sejauh mana suatu model berbeda dari model saturasi (model dengan kecocokan sempurna terhadap data). Semakin kecil nilai deviance, maka model tersebut dianggap semakin mendekati data aktual. Dengan demikian, deviance yang rendah mencerminkan prediksi model yang lebih akurat.
Rumus Likelihood-Ratio Test
\[ G^2 = -2(\log L_0 - \log L_1) \]
Statistik Likelihood Ratio (𝐺²) digunakan untuk mengevaluasi apakah penambahan variabel dalam suatu model memberikan peningkatan kecocokan model secara signifikan. Nilai 𝐺² yang besar dan diikuti oleh nilai p-value yang kecil menunjukkan bahwa model yang lebih kompleks secara statistik lebih unggul dibandingkan model yang lebih sederhana.
Setelah model regresi logistik selesai dibangun, langkah berikutnya yang penting adalah mengevaluasi kemampuan prediksi model tersebut. Salah satu metode yang sering digunakan adalah dengan membuat tabel klasifikasi (confusion matrix) yang membandingkan hasil prediksi model dengan data asli.
Klasifikasi dilakukan dengan menetapkan ambang batas (cut-off) probabilitas, misalnya 0.5. Observasi dengan probabilitas lebih besar dari cut-off akan digolongkan sebagai kelas positif, sementara yang lainnya digolongkan sebagai kelas negatif.
Berikut adalah cara implementasi evaluasi tabel klasifikasi tanpa menggunakan paket tambahan seperti caret, melainkan dengan perhitungan manual:
# Menghasilkan probabilitas prediksi dari model logistik
pred_prob <- predict(model_c, type = "response")
# Klasifikasi berdasarkan cutoff 0.5
pred_class <- ifelse(pred_prob >= 0.5, 1, 0)
# Data aktual
actual_class <- as.numeric(as.character(data_log$y)) # pastikan dalam bentuk numerik
# Matriks klasifikasi
conf_matrix <- matrix(0, nrow = 2, ncol = 2,
dimnames = list("Predicted" = c("0", "1"),
"Actual" = c("0", "1")))
# Mengisi confusion matrix
for (i in 1:length(actual_class)) {
predicted <- pred_class[i]
actual <- actual_class[i]
conf_matrix[predicted + 1, actual + 1] <- conf_matrix[predicted + 1, actual
+ 1] + 1
}
# Menampilkan confusion matrix
conf_matrix
## Actual
## Predicted 0 1
## 0 293 61
## 1 36 110
## Actual
## Predicted 0 1
## 0 293 61
## 1 36 110
# Ekstrak nilai dari confusion matrix
TN <- conf_matrix["0", "0"]
FP <- conf_matrix["1", "0"]
FN <- conf_matrix["0", "1"]
TP <- conf_matrix["1", "1"]
# Hitung metrik performa
akurasi <- (TP + TN) / sum(conf_matrix)
sensitivitas <- TP / (TP + FN) # Recall
spesifisitas <- TN / (TN + FP)
presisi <- TP / (TP + FP)
f1_score <- 2 * (presisi * sensitivitas) / (presisi + sensitivitas)
# Tampilkan hasil evaluasi
cat("Akurasi :", round(akurasi, 3), "\n")
## Akurasi : 0.806
cat("Sensitivitas:", round(sensitivitas, 3), "\n")
## Sensitivitas: 0.643
cat("Spesifisitas:", round(spesifisitas, 3), "\n")
## Spesifisitas: 0.891
cat("Presisi :", round(presisi, 3), "\n")
## Presisi : 0.753
cat("F1-Score :", round(f1_score, 3), "\n")
## F1-Score : 0.694
Interpretasi
Berdasarkan hasil evaluasi model klasifikasi, diperoleh akurasi sebesar 0.806, yang berarti sekitar 80.6% dari prediksi model sesuai dengan data aktual. Sensitivitas sebesar 0.643 menunjukkan bahwa model mampu mengidentifikasi 64.3% dari kasus positif dengan benar, sementara spesifisitas sebesar 0.891 menunjukkan bahwa model memiliki kemampuan yang sangat baik dalam mengenali kasus negatif. Presisi sebesar 0.753 mengindikasikan bahwa 75.3% dari seluruh prediksi positif adalah benar-benar positif. Selain itu, nilai F1-Score sebesar 0.694 mencerminkan keseimbangan antara presisi dan sensitivitas, yang sangat penting dalam konteks klasifikasi dengan distribusi kelas yang tidak seimbang. Secara keseluruhan, model menunjukkan kinerja yang cukup baik, terutama dalam mendeteksi kelas negatif, meskipun kinerjanya terhadap kelas positif masih dapat diperbaiki.
Sensitivitas dan Spesifisitas
Untuk mengevaluasi kemampuan model dalam klasifikasi biner secara lebih mendalam, dua metrik utama yang perlu diperhatikan adalah sensitivitas dan spesifisitas. Kedua ukuran ini menggambarkan seberapa baik model dalam mengenali kelas positif dan kelas negatif secara terpisah.
Sensitivitas
Sensitivitas menggambarkan seberapa banyak kelas positif yang berhasil diidentifikasi dengan benar oleh model. Metrik ini juga dikenal dengan nama True Positive Rate dan dapat dirumuskan sebagai:
\[ \text{Sensitivity} = \frac{TP}{TP + FN} \]
di mana TP adalah jumlah prediksi benar positif dan FN adalah jumlah prediksi negatif yang salah.
Spesifisitas
Spesifisitas menggambarkan seberapa banyak kelas negatif yang dikenali dengan tepat oleh model. Metrik ini juga dikenal sebagai True Negative Rate, dengan rumus sebagai berikut:
\[ \text{Specificity} = \frac{TN}{TN + FP} \]
di mana TN adalah jumlah prediksi benar negatif dan FP adalah jumlah prediksi positif yang salah.
Kedua metrik ini sangat penting untuk memahami bagaimana model berperforma dalam mendeteksi dua kategori kelas yang berbeda, terutama ketika fokus utama adalah pada deteksi kejadian positif yang mungkin jarang terjadi namun sangat penting untuk diidentifikasi dengan akurat.
Perhitungan sensitivitas dan spesifisitas dapat dilakukan secara manual maupun menggunakan kode berikut:
# Perhitungan manual telah dilakukan sebelumnya
cat("Sensitivitas:", round(sensitivitas, 3), "\n")
## Sensitivitas: 0.643
cat("Spesifisitas:", round(spesifisitas, 3), "\n")
## Spesifisitas: 0.891
Kesimpulan
Deviance yang rendah menunjukkan bahwa model memiliki kesalahan prediksi yang lebih kecil dibandingkan dengan model referensi yang sempurna.
AIC digunakan untuk menilai keseimbangan antara ketepatan model dan jumlah parameter yang digunakan, sehingga membantu menghindari model yang terlalu kompleks.
Uji Likelihood Ratio berfungsi untuk menentukan apakah penambahan variabel dalam model memberikan peningkatan signifikan secara statistik.
Tabel klasifikasi memberikan gambaran kuantitatif tentang akurasi model dalam membedakan antara kategori aktual dan hasil prediksi.
Prinsip Parsimony mengarahkan pemilihan model ke arah struktur yang lebih sederhana, jika tidak ada perbedaan kinerja yang signifikan dibandingkan dengan model yang lebih kompleks.
Kurva ROC (Receiver Operating Characteristic) adalah representasi grafis yang digunakan untuk mengevaluasi kinerja model klasifikasi biner. Kurva ini menggambarkan hubungan antara True Positive Rate (Sensitivitas) dan False Positive Rate (1 − Spesifisitas) pada berbagai nilai ambang batas klasifikasi. Semakin baik kemampuan model dalam membedakan antara kelas positif dan negatif, maka kurva ROC akan semakin menjauh dari garis diagonal dan mendekati sudut kiri atas grafik.
1. Definisi
Sumbu Y (Sensitivitas): Menunjukkan
kelas positif yang berhasil dikenali dengan benar oleh
model.
Sensitivitas dihitung dengan rumus:
\[ \text{Sensitivitas} = \frac{TP}{TP + FN} \]
Sumbu X (1 − Spesifisitas): Menunjukkan proporsi kesalahan klasifikasi terhadap kelas negatif (False Positive Rate), yang dihitung dengan rumus:
\[ \text{FPR} = \frac{FP}{FP + TN} = 1 - \text{Spesifisitas} \]
Garis diagonal (y = x) menggambarkan performa acak (random classifier), yang berarti model tidak memiliki kemampuan diskriminasi dalam membedakan antara kelas positif dan negatif.
Kurva yang mendekati sudut kiri atas mencerminkan performa klasifikasi yang baik, karena menunjukkan sensitivitas tinggi dan false positive rate rendah.
2. Cut-off dan Pergerakan Kurva
Perubahan nilai ambang klasifikasi (cut-off) mempengaruhi bentuk kurva ROC:
3. Kurva ROC Ideal
Model yang ideal secara teori akan menghasilkan kurva ROC dengan ciri-ciri sebagai berikut:
Kenaikan tajam di bagian vertikal, diikuti dengan lintasan horizontal yang mendekati false positive rate yang rendah.
Area di bawah kurva (AUC) mendekati 1, menunjukkan performa model yang sangat baik.
4. Interpretasi Luas Area (AUC)
Nilai AUC digunakan untuk mengukur seberapa baik model dapat memisahkan antara kelas positif dan negatif. Beberapa pedoman interpretasi AUC yang umum adalah:
AUC ≈ 0.5: Performa model tidak lebih baik dari klasifikasi acak.
AUC > 0.7: Model memiliki kemampuan diskriminatif yang layak.
AUC > 0.9: Model menunjukkan kinerja yang sangat baik.
AUC juga dikenal sebagai ukuran concordance, yaitu probabilitas bahwa model memberikan skor yang lebih tinggi untuk kasus positif dibandingkan dengan kasus negatif secara acak.
5. Kegunaan Kurva ROC
Kurva ROC memiliki beberapa aplikasi penting dalam analisis klasifikasi:
Untuk membandingkan kinerja beberapa model klasifikasi secara objektif.
Untuk menentukan ambang prediksi optimal berdasarkan konteks, seperti memprioritaskan penurunan false negative dalam deteksi penyakit.
6. Visualisasi dalam R
Visualisasi kurva ROC untuk model klasifikasi logistik dapat dilakukan menggunakan paket pROC
library(pROC)
set.seed(321)
# Simulasi variabel prediktor
x1 <- rnorm(300, mean = 0.5, sd = 1.3)
x2 <- rbinom(300, size = 1, prob = 0.6)
x3 <- rnorm(300, mean = -1, sd = 1)
# Model linier dengan parameter berbeda
lin_mod <- 0.8 - 1.4 * x1 + 1.2 * x2 + 0.5 * x3
p <- 1 / (1 + exp(-lin_mod))
y <- rbinom(300, 1, prob = p)
# Data frame
data <- data.frame(y = factor(y), x1, x2, x3)
# Model logistik
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
# Prediksi probabilitas
pred <- predict(model, type = "response")
# Kurva ROC
roc_curve <- roc(data$y, pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Plot ROC dengan warna unik dan legend
plot(roc_curve,
main = "Kurva ROC - Model Simulasi",
col = "#4B0082", # warna ungu gelap (indigo)
lwd = 2)
abline(a = 0, b = 1, col = "gray", lty = 2)
legend("bottomright",
legend = c("Model Logistik Simulasi"),
col = c("#4B0082"),
lwd = 2)
auc(roc_curve)
## Area under the curve: 0.8614
7. Simulasi Pemilihan Threshold Optimal
Tujuan dari simulasi ini adalah mengevaluasi kinerja model pada berbagai nilai ambang (cut-off) untuk mengetahui trade-off antara sensitivitas dan spesifisitas.
# Daftar nilai threshold yang akan diuji
thresholds <- seq(0.05, 0.95, by = 0.05)
# Inisialisasi data frame untuk menyimpan hasil
results <- data.frame(Threshold = thresholds)
# Hitung Sensitivitas untuk setiap threshold
results$Sensitivity <- sapply(thresholds, function(t) {
pred_class <- ifelse(pred >= t, 1, 0)
cm <- table(Pred = pred_class, Obs = as.numeric(as.character(data$y)))
TP <- cm["1", "1"]
FN <- cm["0", "1"]
TP / (TP + FN)
})
# Hitung Spesifisitas untuk setiap threshold
results$Specificity <- sapply(thresholds, function(t) {
pred_class <- ifelse(pred >= t, 1, 0)
cm <- table(Pred = pred_class, Obs = as.numeric(as.character(data$y)))
TN <- cm["0", "0"]
FP <- cm["1", "0"]
TN / (TN + FP)
})
# Cetak hasil evaluasi sensitivitas dan spesifisitas
print(results)
## Threshold Sensitivity Specificity
## 1 0.05 1.0000000 0.1313869
## 2 0.10 0.9938650 0.2116788
## 3 0.15 0.9631902 0.3138686
## 4 0.20 0.9570552 0.3795620
## 5 0.25 0.9386503 0.4598540
## 6 0.30 0.9325153 0.5255474
## 7 0.35 0.9079755 0.5912409
## 8 0.40 0.8773006 0.6569343
## 9 0.45 0.8588957 0.7153285
## 10 0.50 0.8282209 0.7737226
## 11 0.55 0.7730061 0.7956204
## 12 0.60 0.7177914 0.8394161
## 13 0.65 0.6871166 0.8759124
## 14 0.70 0.6257669 0.9051095
## 15 0.75 0.5705521 0.9343066
## 16 0.80 0.5092025 0.9416058
## 17 0.85 0.4294479 0.9416058
## 18 0.90 0.2699387 0.9635036
## 19 0.95 0.1104294 0.9854015
Kurva Precision-Recall (PR) adalah salah satu metode evaluasi performa model klasifikasi yang sangat direkomendasikan, terutama ketika data memiliki ketidakseimbangan kelas (class imbalance), di mana jumlah observasi pada kelas positif jauh lebih sedikit dibandingkan dengan kelas negatif.
1. Definisi
Precision (Presisi): Mengukur proporsi prediksi positif yang benar-benar positif.
\[ \text{Precision} = \frac{TP}{TP + FP} \]
Recall (Sensitivitas): Mengukur proporsi kasus positif yang sebenarnya yang berhasil dikenali oleh model.
\[ \text{Recall} = \frac{TP}{TP + FN} \]
Keterangan Notasi:
TP: True Positive (prediksi positif yang benar)
FP: False Positive (prediksi positif yang salah)
FN: False Negative (prediksi negatif yang salah)
2. Interpretasi
Kurva PR menggambarkan hubungan antara presisi dan recall ketika ambang klasifikasi diubah.
Model yang baik akan menghasilkan nilai precision dan recall yang tinggi secara bersamaan, namun seringkali terdapat trade-off antara keduanya.
Semakin melengkung ke arah pojok kanan atas kurva, semakin baik kinerja model.
Catatan: PR Curve lebih representatif dibandingkan dengan ROC Curve dalam kasus data yang tidak seimbang karena tidak memperhitungkan true negatives.
3. Area Under PR Curve (AUPRC)
Area di bawah kurva PR (AUPRC) mengukur rata-rata presisi pada berbagai nilai recall.
AUPRC memiliki nilai maksimum 1. Semakin mendekati 1, semakin baik kualitas model dalam mendeteksi kelas positif.
Nilai baseline AUPRC setara dengan prevalensi kelas positif:
\[ \text{Baseline AUPRC} = \frac{\text{Jumlah Kelas Positif}}{\text{Total Observasi}} \]
AUPRC sangat berguna untuk menilai kinerja model dalam kasus ketidakseimbangan kelas, karena lebih fokus pada kelas positif.
4. Perbandingan PR Curve dan ROC Curve
| Aspek | ROC Curve | Precision-Recall Curve |
|---|---|---|
| Fokus | Kuat di semua kelas | Fokus pada kelas positif saja, cocok untuk data tidak seimbang |
| Sumbu Y | Sensitivitas (Recall) | Presisi |
| Sumbu X | 1 - Spesifisitas (FPR) | Recall |
5. Ilustrasi Precision-Recall Curve Menggunakan R
# Muat paket yang diperlukan
library(PRROC)
## Loading required package: rlang
library(rlang)
# Inisialisasi seed untuk replikasi
set.seed(2025)
# Simulasi tiga prediktor dengan distribusi normal
x1 <- rnorm(300)
x2 <- rnorm(300, 2, 0.4)
x3 <- rnorm(300)
# Rumus logit dan prediksi probabilitas
lin_pred <- -1 + 0.9 * x1 + 0.6 * x2 + 0.5 * x3
p <- 1 / (1 + exp(-lin_pred))
# Hasil klasifikasi biner
y <- rbinom(300, 1, p)
# Gabungkan data menjadi satu kerangka data
data <- data.frame(y = y, x1 = x1, x2 = x2, x3 = x3)
# Bangun model regresi logistik
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
# Prediksi probabilitas
prob <- predict(model, type = "response")
# Buat objek PR Curve
pr <- pr.curve(scores.class0 = prob[data$y == 1],
scores.class1 = prob[data$y == 0],
curve = TRUE)
# Visualisasikan
plot(pr)
6. Catatan
Penggunaan PR Curve sangat disarankan dalam situasi berikut:
Ketika kelas positif jauh lebih sedikit dibandingkan dengan kelas lainnya.
Fokus model diarahkan pada minimisasi false positive dan maksimalisasi presisi.
Prioritas aplikasi terletak pada akurasi dalam memprediksi kelas positif.
Dalam regresi logistik, koefisien determinasi (R²) yang digunakan dalam regresi linear tidak dapat langsung diterapkan karena perbedaan bentuk fungsi likelihood. Oleh karena itu, dikembangkan ukuran alternatif yang disebut pseudo R-squared.
Tujuan Penggunaan Pseudo R-squared
Memberikan indikasi relatif seberapa baik model logistik dapat menjelaskan variabilitas data biner yang diamati.
Membandingkan kebaikan model antara model penuh dengan model null (tanpa prediktor).
Menilai apakah penambahan prediktor dapat meningkatkan kecocokan model terhadap data.
Memberikan bantuan kuantitatif dalam pemilihan model (selain menggunakan AIC/BIC atau deviance).
Beberapa Jenis Pseudo R-squared:
\(R^2_{\text{CoxSnell}}\)
\(R^2_{\text{McFadden}}\)
Simulasi Data
# Set seed agar hasil dapat direproduksi
set.seed(58)
# Jumlah observasi
n <- 500
# Simulasi prediktor x1, x2, dan x3
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.4)
x3 <- rnorm(n)
# Persamaan linier logit dan probabilitas
lin_pred <- -0.8 + 1.5 * x1 - 0.3 * x2 + 0.9 * x3
p <- 1 / (1 + exp(-lin_pred))
# Respon biner y
y <- rbinom(n, 1, p)
# Gabungkan ke dalam dataframe
data <- data.frame(y = as.factor(y), x1 = x1, x2 = x2, x3 = x3)
Model Logistik dan Null Model
# Model penuh (menggunakan semua prediktor)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
model
##
## Call: glm(formula = y ~ x1 + x2 + x3, family = binomial, data = data)
##
## Coefficients:
## (Intercept) x1 x2 x3
## -0.8641 1.6928 -0.4486 0.8968
##
## Degrees of Freedom: 499 Total (i.e. Null); 496 Residual
## Null Deviance: 639.7
## Residual Deviance: 442.4 AIC: 450.4
# Model null (hanya intercept, tanpa prediktor)
model_null <- glm(y ~ 1, data = data, family = binomial)
model_null
##
## Call: glm(formula = y ~ 1, family = binomial, data = data)
##
## Coefficients:
## (Intercept)
## -0.6722
##
## Degrees of Freedom: 499 Total (i.e. Null); 499 Residual
## Null Deviance: 639.7
## Residual Deviance: 639.7 AIC: 641.7
Interpretasi
Berdasarkan hasil regresi logistik, model penuh yang melibatkan prediktor x1, x2, dan x3 menunjukkan bahwa x1 dan x3 memberikan kontribusi positif terhadap probabilitas kejadian, dengan koefisien masing-masing sebesar 1.6928 dan 0.8968, sementara x2 memberikan kontribusi negatif dengan koefisien -0.4486. Perbedaan antara null deviance (639.7) dan residual deviance (442.4) menunjukkan bahwa model yang menggunakan prediktor memberikan peningkatan kecocokan yang signifikan dibandingkan dengan model tanpa prediktor. Nilai \(R^2_{\text{CoxSnell}}\) sebesar 0.2698 dan \(R^2_{\text{McFadden}}\) sebesar 0.2586 menunjukkan bahwa model ini dapat menjelaskan sebagian variasi dalam data dengan kualitas yang cukup baik untuk model regresi logistik biner.
Likelihood dan Rumus
Ukuran Pseudo 𝑅2 dihitung berdasarkan nilai likelihood sebagai berikut:
Rumus Cox & Snell:
\[ R^2_{\text{CoxSnell}} = 1 - \left( \frac{L_0}{L_M} \right)^{\frac{2}{n}} \]
Rumus McFadden:
\[ R^2_{\text{McFadden}} = 1 - \frac{\log L_M}{\log L_0} \]
Dengan:
\(L_0\): log-likelihood dari model null (tanpa prediktor)
\(L_M\): log-likelihood dari model penuh
\(n\): jumlah observasi
Perhitungan Manual dalam R
# Ambil nilai log-likelihood
logL0 <- logLik(model_null)
logLM <- logLik(model)
# Konversi ke skala likelihood
L0 <- exp(logL0)
LM <- exp(logLM)
# Ambil jumlah data
n <- nobs(model)
# Hitung pseudo R-squared
cox_snell <- 1 - (L0 / LM)^(2 / n)
mcfadden <- 1 - (as.numeric(logLM) / as.numeric(logL0))
# Tampilkan dalam data.frame
r2 <- data.frame(
R2_CoxSnell = cox_snell,
R2_McFadden = mcfadden
)
r2
## R2_CoxSnell R2_McFadden
## 1 0.3260752 0.3084545
Perhitungan Otomatis dengan beberapa Package
1. Menggunakan pcsl
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(model)
## fitting null model for pseudo-r2
## llh llhNull G2 McFadden r2ML r2CU
## -221.1908043 -319.8499841 197.3183597 0.3084545 0.3260752 0.4517554
2. Menggunakan DescTools
library(DescTools)
PseudoR2(model, which = "all")
## McFadden McFaddenAdj CoxSnell Nagelkerke AldrichNelson
## 0.3084545 0.2959487 0.3260752 0.4517554 0.2829674
## VeallZimmermann Efron McKelveyZavoina Tjur AIC
## 0.5041394 0.3424673 0.5002325 0.3508718 450.3816086
## BIC logLik logLik0 G2
## 467.2400410 -221.1908043 -319.8499841 197.3183597
Interpretasi
Hasil evaluasi model logistik menggunakan paket pscl dan DescTools menunjukkan bahwa nilai pseudo R-squared model bervariasi tergantung pada metode yang digunakan. Nilai \(R^2_{\text{McFadden}}\) sebesar 0.3085 menunjukkan bahwa model dapat menjelaskan sekitar 30.85% dari informasi log-likelihood jika dibandingkan dengan model null. Sementara itu, nilai \(R^2_{\text{CoxSnell}}\) sebesar 0.3261 dan \(R^2_{\text{Nagelkerke}}\) sebesar 0.4518 memberikan indikasi bahwa model memiliki kualitas prediksi yang sedang hingga baik. Nilai \(R^2\) lainnya, seperti Tjur (0.5041) dan McKelvey-Zavoina (0.5002), menunjukkan bahwa setidaknya setengah dari variasi dalam probabilitas kejadian dapat dijelaskan oleh model. Secara keseluruhan, metrik-metrik ini mengindikasikan bahwa model memiliki kecocokan yang cukup baik terhadap data.
Distribusi multinomial adalah perluasan dari distribusi binomial dalam konteks yang memiliki lebih dari dua kategori hasil. Misalkan terdapat \(X_1, X_2, \dots, X_k\) yang menyatakan jumlah observasi untuk masing-masing dari \(k\) kategori, maka probabilitas gabungan dari distribusi multinomial dapat dihitung dengan rumus:
\[ P(X_1 = x_1, \dots, X_k = x_k) = \frac{n!}{x_1! x_2! \dots x_k!} \cdot p_1^{x_1} p_2^{x_2} \dots p_k^{x_k} \]
dengan:
\(\sum_{i=1}^k x_i = n\) (total jumlah observasi),
\(\sum_{i=1}^k p_i = 1\) (jumlah probabilitas kategori),
\(p_1, p_2, \dots, p_k\) adalah probabilitas untuk masing-masing kategori.
Sebuah penelitian dilakukan terhadap 20 responden yang diminta untuk memilih satu dari empat jenis makanan favorit: Pizza (P), Burger (B), Sushi (S), dan Salad (L). Hasil observasi yang diperoleh adalah sebagai berikut:
Pizza: 8 orang
Burger: 6 orang
Sushi: 4 orang
Salad: 2 orang
Asumsikan bahwa probabilitas teoritis preferensi makanan di populasi adalah sebagai berikut:
\(p_P = 0.40\)
\(p_B = 0.30\)
\(p_S = 0.20\)
\(p_L = 0.10\)
Pertanyaan:
Berapa peluang bahwa dalam 20 responden, sebanyak 8 orang memilih Pizza, 6 orang memilih Burger, 4 orang memilih Sushi, dan 2 orang memilih Salad?
Perhitungan Manual di R
# Jumlah total individu
n <- 20
# Frekuensi tiap kategori
frekuensi <- c(8, 6, 4, 2) # P, B, S, L
# Probabilitas preferensi
probabilitas <- c(0.40, 0.30, 0.20, 0.10)
# Hitung koefisien multinomial
faktorial_total <- factorial(n)
faktorial_frekuensi <- prod(factorial(frekuensi))
koefisien <- faktorial_total / faktorial_frekuensi
# Hitung probabilitas gabungan
peluang <- koefisien * prod(probabilitas^frekuensi)
peluang
## [1] 0.01334621
Interpretasi:
Nilai ini merepresentasikan probabilitas bahwa dalam sebuah kelompok yang terdiri dari 20 responden, sebanyak 8 orang memilih Pizza, 6 orang memilih Burger, 4 orang memilih Sushi, dan 2 orang memilih Salad, sesuai dengan probabilitas teoritis yang telah ditentukan untuk masing-masing pilihan makanan. Dengan kata lain, nilai 0.01334621 adalah peluang terjadinya kombinasi spesifik ini berdasarkan distribusi probabilitas yang telahditentukan untuk setiap kategori.
Secara singkat, ini berarti sekitar 1.33% kemungkinan bahwa dalam 20 responden, akan diperoleh jumlah pemilihan yang tepat seperti yang tercatat (8 untuk Pizza, 6 untuk Burger, 4 untuk Sushi, dan 2 untuk Salad), dengan asumsi probabilitas teoritis yang telah diberikan untuk masing-masing jenis makanan.
Model regresi logistik multinomial digunakan untuk menjelaskan hubungan antara satu variabel respons kategorik (yang memiliki lebih dari dua kategori) dan satu atau lebih variabel prediktor.
Misalkan \(Y\) terdiri atas \(K\) kategori, dan kategori referensi (baseline) adalah kategori \(K\). Maka bentuk umum model logit multinomial adalah:
\[ \log\left(\frac{P(Y = j)}{P(Y = K)}\right) = \alpha_j + \beta_{j1}x_1 + \beta_{j2}x_2 + \cdots + \beta_{jp}x_p \]
untuk \(j = 1, 2, \dots, K - 1\).
Model logit baseline-kategori adalah variasi dari regresi logistik yang diterapkan pada variabel respons dengan lebih dari dua kategori. Dalam pendekatan ini, satu kategori digunakan sebagai acuan (baseline), dan kategori lainnya dibandingkan terhadap kategori baseline tersebut.
Rumus modelnya adalah:
\[ \log\left(\frac{\pi_j}{\pi_K}\right) = \eta_j, \quad j = 1, \dots, K-1 \]
Dengan:
\(\pi_j\) adalah probabilitas pengamatan berada di kategori \(j\).
\(\pi_K\) adalah probabilitas pengamatan berada di kategori acuan (baseline).
Model ini menghasilkan \(K - 1\) persamaan logit.
Catatan: Secara default, fungsi
multinom() dari package
nnet di R menjadikan kategori terakhir
sebagai baseline. Namun, kita juga dapat menentukan kategori referensi
secara manual.
Model Regresi
Jika hanya ada satu variabel prediktor, misalnya \(x\), maka bentuk model regresi logitnya adalah:
\[ \log\left(\frac{\pi_j}{\pi_K}\right) = \alpha_j + \beta_j x, \quad j = 1, \dots, K-1 \]
Dimana:
\(\pi_j\) adalah probabilitas pengamatan berada di kategori \(j\).
\(\pi_K\) adalah probabilitas pengamatan berada di kategori acuan (baseline).
\(\alpha_j\) dan \(\beta_j\) adalah parameter model yang perlu diestimasi.
Contoh Kasus: Respons 3 Kategori
Misalkan variabel respons \(Y\) memiliki 3 kategori: \(Y \in \{A, B, C\}\), dan kita pilih kategori \(C\) sebagai baseline. Maka model regresi logitnya adalah:
\[ \log\left(\frac{\pi_A}{\pi_C}\right) = \alpha_1 + \beta_1 x \]
\[ \log\left(\frac{\pi_B}{\pi_C}\right) = \alpha_2 + \beta_2 x \]
Relasi Antar Kategori
Jika kita ingin mengetahui logit antara dua kategori non-baseline, misalnya antara kategori 1 (\(\pi_1\)) dan kategori 2 (\(\pi_2\)), maka kita dapat menggunakan rumus berikut:
\[ \log\left(\frac{\pi_1}{\pi_2}\right) = \log\left(\frac{\pi_1 / \pi_3}{\pi_2 / \pi_3}\right) = \log\left(\frac{\pi_1}{\pi_2}\right) \]
Jika model logit untuk setiap kategori terhadap baseline (\(\pi_3\)) adalah:
\[ \log\left(\frac{\pi_1}{\pi_3}\right) = (\alpha_1 - \beta_1 x) \]
\[ \log\left(\frac{\pi_2}{\pi_3}\right) = (\alpha_2 - \beta_2 x) \]
Maka logit antara kategori 1 dan 2 menjadi:
\[ \log\left(\frac{\pi_1}{\pi_2}\right) = (\alpha_1 - \alpha_2) + (\beta_1 - \beta_2) x \]
Ringkasan Model Logit Baseline-Kategori
Model ini cocok digunakan jika respons memiliki lebih dari dua kategori (multikategori).
Model ini menghasilkan \((K - 1)\) persamaan logit terhadap satu referensi (baseline).
Hubungan antara dua kategori non-baseline dapat diperoleh dari selisih dua logit terhadap baseline.
Catatan Implementasi di R:
Fungsi multinom() dari paket nnet digunakan untuk membangun model ini. Pengaturan kategori baseline dapat diubah menggunakan fungsi relevel().
Untuk menentukan parameter model, digunakan metode Maximum Likelihood Estimation (MLE). Estimasi dilakukan menggunakan algoritma iteratif seperti Newton-Raphson.
Fungsi log-likelihood yang dimaksimalkan adalah:
\[ \ell(\beta) = \sum_{i=1}^{n} \sum_{j=1}^{K} y_{ij} \log(\pi_{ij}) \]
Dengan:
\(\pi_{ij}\) = \(P(Y_i = j | x_i)\) adalah probabilitas prediksi untuk kategori \(j\) dari observasi ke-\(i\).
\(y_{ij}\) = 1 jika observasi ke-\(i\) benar berada di kategori ke-\(j\), dan 0 jika tidak.
Sebuah perusahaan teknologi yang bergerak di bidang perangkat keras ingin mengevaluasi preferensi karyawan terhadap jenis perangkat komputer yang digunakan untuk pekerjaan sehari-hari, antara: Laptop, Desktop, dan Tablet.
Untuk itu, dilakukan survei terhadap 250 karyawan dengan mencatat beberapa informasi sebagai berikut:
DEVICE: Jenis perangkat yang digunakan (Laptop, Desktop, Tablet)
AGE: Usia karyawan (dalam tahun)
DEPARTMENT: Bagian atau unit kerja tempat bertugas (Pengembangan, Pemasaran, dan Keuangan)
EXPERIENCE: Lama bekerja (tahun pengalaman)
Tujuan Penelitian
Mengetahui apakah bagian/unit kerja, usia, dan pengalaman kerja memiliki hubungan atau keterkaitan dalam preferensi pemilihan perangkat komputer yang digunakan di tempat kerja.
# Penyiapan pustaka
library(nnet)
library(ggplot2) # Pustaka untuk visualisasi
## Warning: package 'nnet' was built under R version 4.3.3
set.seed(999)
# Jumlah responden
JUMLAH_RESP <- 250
# Simulasi variabel DEPARTMENT
DEPARTMENT <- sample(c("Pengembangan", "Pemasaran", "Keuangan"), size = JUMLAH_RESP, replace = TRUE)
# Simulasi usia dengan distribusi normal
AGE <- round(rnorm(JUMLAH_RESP, mean = 35, sd = 7))
# Simulasi pengalaman kerja (tahun)
EXPERIENCE <- round(pmax(rnorm(JUMLAH_RESP, mean = 7, sd = 3), 0)) # hanya nilai positif
# Simulasi preferensi perangkat komputer berdasarkan DEPARTMENT
DEVICE <- sapply(DEPARTMENT, function(department) {
if (department == "Pengembangan") {
sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.5, 0.3, 0.2))
} else if (department == "Pemasaran") {
sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.4, 0.4, 0.2))
} else {
sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.3, 0.5, 0.2))
}
})
# Gabungkan semua ke dalam satu data.frame
DATA_RESP <- data.frame(
DEVICE = factor(DEVICE),
AGE = AGE,
DEPARTMENT = factor(DEPARTMENT),
EXPERIENCE = EXPERIENCE
)
# Atur baseline kategori untuk DEVICE
DATA_RESP$DEVICE <- relevel(DATA_RESP$DEVICE, ref = "Desktop")
# Tampilkan 10 data pertama
head(DATA_RESP, 10)
## DEVICE AGE DEPARTMENT EXPERIENCE
## 1 Laptop 27 Keuangan 5
## 2 Tablet 42 Pengembangan 11
## 3 Desktop 45 Keuangan 10
## 4 Laptop 41 Pengembangan 5
## 5 Tablet 30 Pemasaran 9
## 6 Tablet 34 Pengembangan 10
## 7 Desktop 31 Pemasaran 8
## 8 Laptop 33 Pemasaran 6
## 9 Laptop 37 Pemasaran 8
## 10 Laptop 36 Keuangan 2
# Visualisasi
ggplot(DATA_RESP, aes(x = DEVICE, fill = DEPARTMENT)) +
geom_bar(position = "dodge") +
labs(
title = "Distribusi Pemilihan Perangkat Komputer",
x = "Jenis Perangkat", y = "Jumlah Karyawan"
) +
theme_minimal()
Setelah data disimulasikan, langkah berikutnya adalah melakukan estimasi model menggunakan pendekatan baseline-category logit. Model ini mengevaluasi pengaruh beberapa prediktor terhadap kategori pilihan kendaraan, dengan Pickup sebagai baseline.
# Estimasi model logit multinomial
model_device <- multinom(DEVICE ~ AGE + DEPARTMENT + EXPERIENCE, data = DATA_RESP)
## # weights: 18 (10 variable)
## initial value 274.653072
## iter 10 value 253.497869
## final value 253.359001
## converged
## Ringkasan hasil model
summary(model_device)
## Call:
## multinom(formula = DEVICE ~ AGE + DEPARTMENT + EXPERIENCE, data = DATA_RESP)
##
## Coefficients:
## (Intercept) AGE DEPARTMENTPemasaran DEPARTMENTPengembangan
## Laptop 0.2408925 -0.01596278 0.9664008 1.3439722
## Tablet -0.7982344 -0.01187997 0.8908414 0.9167886
## EXPERIENCE
## Laptop -0.05948085
## Tablet -0.01465005
##
## Std. Errors:
## (Intercept) AGE DEPARTMENTPemasaran DEPARTMENTPengembangan
## Laptop 0.8508473 0.02162222 0.3621915 0.3748647
## Tablet 1.0476022 0.02652321 0.4410187 0.4691631
## EXPERIENCE
## Laptop 0.05253840
## Tablet 0.06405485
##
## Residual Deviance: 506.718
## AIC: 526.718
Untuk mengevaluasi apakah masing-masing prediktor berkontribusi signifikan secara statistik, kita hitung nilai z-score dan p-value berdasarkan rasio antara koefisien dan standard error.
## Hitung nilai Z-statistik
Z_stat <- summary(model_device)$coefficients / summary(model_device)$standard.errors
## Hitung p-value 2 sisi
p_value <- 2 * (1 - pnorm(abs(Z_stat)))
## Bulatkan hasil
round(p_value, 4)
## (Intercept) AGE DEPARTMENTPemasaran DEPARTMENTPengembangan EXPERIENCE
## Laptop 0.7771 0.4604 0.0076 0.0003 0.2576
## Tablet 0.4461 0.6542 0.0434 0.0507 0.8191
Interpretasi:
Berikut adalah interpretasi dari hasil koefisien model logit multinomial untuk perangkat yang digunakan oleh karyawan, dengan Desktop sebagai kategori referensi (baseline):
Laptop: Koefisien intercept untuk Laptop adalah 0.7771, yang menunjukkan bahwa bila semua variabel prediktor bernilai nol, log odds memilih Laptop dibandingkan Desktop adalah 0.7771.
Tablet: Koefisien intercept untuk Tablet adalah 0.4461, yang menunjukkan bahwa bila semua variabel prediktor bernilai nol, log odds memilih Tablet dibandingkan Desktop adalah 0.4461.
Laptop: Koefisien untuk AGE adalah 0.4604, yang menunjukkan bahwa setiap penambahan satu tahun usia karyawan meningkatkan log odds memilih Laptop dibandingkan Desktop sebesar 0.4604.
Tablet: Koefisien untuk AGE adalah 0.6542, yang menunjukkan bahwa setiap penambahan satu tahun usia karyawan meningkatkan log odds memilih Tablet dibandingkan Desktop sebesar 0.6542.
Laptop: Koefisien untuk DEPARTMENTPemasaran adalah 0.0076, yang menunjukkan bahwa karyawan di unit kerja Pemasaran memiliki sedikit kecenderungan lebih besar (meskipun sangat kecil) untuk memilih Laptop dibandingkan Desktop, namun pengaruhnya hampir tidak signifikan karena nilai koefisiennya sangat kecil.
Tablet: Koefisien untuk DEPARTMENTPemasaran adalah 0.0434, yang menunjukkan bahwa karyawan di unit kerja Pemasaran sedikit lebih cenderung untuk memilih Tablet dibandingkan Desktop, meskipun pengaruhnya juga kecil dan perlu diuji lebih lanjut.
Laptop: Koefisien untuk DEPARTMENTPengembangan adalah 0.0003, yang menunjukkan bahwa tidak ada perbedaan signifikan antara karyawan di unit kerja Pengembangan yang memilih Laptop dibandingkan Desktop. Pengaruhnya hampir tidak ada.
Tablet: Koefisien untuk DEPARTMENTPengembangan adalah 0.0507, yang menunjukkan sedikit kecenderungan lebih besar bagi karyawan di unit kerja Pengembangan untuk memilih Tablet dibandingkan Desktop, tetapi pengaruhnya juga sangat kecil.
Laptop: Koefisien untuk EXPERIENCE adalah 0.2576, yang menunjukkan bahwa setiap penambahan satu tahun pengalaman kerja meningkatkan log odds memilih Laptop dibandingkan Desktop sebesar 0.2576.
Tablet: Koefisien untuk EXPERIENCE adalah 0.8191, yang menunjukkan bahwa setiap penambahan satu tahun pengalaman kerja meningkatkan log odds memilih Tablet dibandingkan Desktop sebesar 0.8191.
Catatan:
Koefisien positif menunjukkan bahwa peningkatan dalam variabel prediktor meningkatkan peluang untuk memilih kategori perangkat yang bersangkutan (misalnya, Laptop atau Tablet) dibandingkan dengan kategori referensi (Desktop).
Koefisien mendekati 0 menunjukkan bahwa variabel tersebut memiliki pengaruh yang sangat kecil terhadap pemilihan perangkat, seperti halnya DEPARTMENTPengembangan yang memiliki pengaruh sangat kecil pada pemilihan Laptop dan Tablet.
Setelah model multinomial berhasil diestimasi, langkah selanjutnya adalah melakukan prediksi kategori device untuk masing-masing observasi. Prediksi ini kemudian divalidasi dengan membandingkan hasil klasifikasi dengan kategori aktual dari data simulasi.
# Prediksi kategori kendaraan untuk seluruh observasi
DATA_RESP$HASIL_PREDIKSI <- predict(model_device)
# Buat tabel perbandingan antara aktual dan prediksi
table(TERPREDIKSI = DATA_RESP$HASIL_PREDIKSI, SEBENARNYA = DATA_RESP$DEVICE)
## SEBENARNYA
## TERPREDIKSI Desktop Laptop Tablet
## Desktop 45 24 12
## Laptop 52 81 36
## Tablet 0 0 0
Model memprediksi dengan baik untuk kategori Laptop, dengan 81 prediksi yang benar dan 36 prediksi yang salah.
Model kesulitan dalam memprediksi Tablet, karena tidak ada prediksi yang benar untuk Tablet, dan tidak ada prediksi Tablet sama sekali oleh model. Ini menunjukkan bahwa model sangat buruk dalam mengidentifikasi Tablet sebagai perangkat pilihan.
Model juga melakukan kesalahan dalam memprediksi Desktop dan Laptop, dengan 52 kesalahan prediksi Desktop menjadi Laptop dan 24 kesalahan prediksi Laptop menjadi Desktop.
Secara keseluruhan, model lebih baik dalam memprediksi Laptop dibandingkan dengan Desktop atau Tablet, tetapi performa model dalam memprediksi Tablet sangat buruk karena tidak ada prediksi yang benar untuk kategori ini.
Ketika variabel respons \(Y\) memiliki sifat urutan (ordinal), seperti contoh: tingkat kesadaran kesehatan (Rendah, Sedang, Tinggi), maka regresi logistik ordinal menjadi pendekatan yang tepat untuk menganalisis hubungan antara \(Y\) dan satu atau lebih prediktor.
Karakteristik:
Berbeda dari regresi logistik biner, yang hanya digunakan untuk dua kategori.
Berbeda dari regresi logistik multinomial, yang menangani lebih dari dua kategori tanpa urutan.
Dalam model ordinal, urutan antar kategori sangat penting, namun jarak antar kategori tidak harus sama.
Salah satu pendekatan yang paling umum dalam regresi ordinal adalah Cumulative Logit Model, dengan asumsi dasar proportional odds (peluang proporsional).
Bentuk model:
\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]
Penjelasan:
\(\alpha_j\) adalah intersep khusus untuk batas kumulatif kategori ke-\(j\).
\(\beta\) adalah koefisien regresi yang sama untuk semua ambang kumulatif.
Jika terdapat \(K\) kategori, maka akan terbentuk sebanyak \((K - 1)\) model logit kumulatif.
Dalam regresi logistik ordinal (cumulative logit model), koefisien regresi (\(\beta\)) menunjukkan arah dan besarnya pengaruh prediktor terhadap probabilitas kumulatif dari suatu kategori dan kategori yang lebih rendah darinya.
Prinsip Umum Interpretasi Koefisien
Model ini membandingkan:
\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]
untuk setiap batas kumulatif antar kategori.
Jika \(\beta > 0\): Peningkatan nilai \(x\) akan meningkatkan peluang untuk berada di kategori yang lebih rendah atau menengah (dan menurunkan peluang untuk berada di kategori tertinggi).
Jika \(\beta < 0\): Peningkatan nilai \(x\) justru akan meningkatkan kemungkinan untuk berada di kategori yang lebih tinggi.
Odds Ratio (Rasio Peluang)
Koefisien juga dapat diterjemahkan ke dalam bentuk Odds Ratio (OR):
\[ OR = e^\beta \]
Jika OR < 1 → Peningkatan nilai prediktor menurunkan kemungkinan untuk berada di kategori yang lebih rendah.
Jika OR > 1 → Peningkatan nilai prediktor meningkatkan peluang untuk berada di kategori yang lebih tinggi.
Dalam studi ini, dilakukan survei terhadap 200 pelanggan di beberapa restoran di kota besar. Mereka diminta untuk menilai kepuasan terhadap kebersihan restoran menggunakan skala ordinal berikut:
1 = Tidak Puas
2 = Cukup Puas
3 = Sangat Puas
Salah satu prediktor yang dianalisis adalah jumlah staf kebersihan yang bertugas di restoran tersebut per hari.
Berikut adalah simulasi data menggunakan R:
set.seed(123)
# Jumlah responden
JUMLAH_RESPONDEN <- 200
# Simulasi jumlah staf kebersihan (antara 1 hingga 8)
STAF_KEBERSIHAN <- sample(1:8, JUMLAH_RESPONDEN, replace = TRUE)
# Simulasi tingkat kepuasan berdasarkan jumlah staf dan noise
KEPUASAN <- cut(
1.5 * STAF_KEBERSIHAN + rnorm(JUMLAH_RESPONDEN, sd = 1.5),
breaks = c(-Inf, 5, 9, Inf),
labels = c("Tidak Puas", "Cukup Puas", "Sangat Puas"),
ordered_result = TRUE
)
# Membentuk data frame
DATA_RESTORAN <- data.frame(KEPUASAN, STAF_KEBERSIHAN)
# Melihat 6 data pertama
head(DATA_RESTORAN)
## KEPUASAN STAF_KEBERSIHAN
## 1 Sangat Puas 7
## 2 Sangat Puas 7
## 3 Tidak Puas 3
## 4 Cukup Puas 6
## 5 Tidak Puas 3
## 6 Tidak Puas 2
Pada kasus ini, kita akan membentuk model regresi logistik ordinal untuk mengetahui pengaruh jumlah staf kebersihan terhadap tingkat kepuasan pelanggan.
library(MASS)
# Membentuk model ordinal
MODEL_RESTORAN <- polr(KEPUASAN ~ STAF_KEBERSIHAN, data = DATA_RESTORAN, Hess = TRUE)
# Menampilkan ringkasan model
summary(MODEL_RESTORAN)
## Call:
## polr(formula = KEPUASAN ~ STAF_KEBERSIHAN, data = DATA_RESTORAN,
## Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## STAF_KEBERSIHAN 2.129 0.2497 8.526
##
## Intercepts:
## Value Std. Error t value
## Tidak Puas|Cukup Puas 7.8172 0.9709 8.0512
## Cukup Puas|Sangat Puas 12.3764 1.4916 8.2972
##
## Residual Deviance: 152.746
## AIC: 158.746
Langkah ini bertujuan untuk menilai signifikansi statistik dari prediktor dan intercept. Kita gunakan distribusi normal standar karena fungsi polr() tidak langsung menyediakan nilai p-value.
# Ambil tabel koefisien dari model
TABEL_KOEF <- coef(summary(MODEL_RESTORAN))
# Hitung p-value dari t-value
PVAL <- 2 * pnorm(-abs(TABEL_KOEF[, "t value"]))
# Gabungkan p-value ke tabel koefisien
TABEL_KOEF <- cbind(TABEL_KOEF, "p-value" = round(PVAL, 4))
# Lihat hasil
TABEL_KOEF
## Value Std. Error t value p-value
## STAF_KEBERSIHAN 2.128904 0.2497005 8.525831 0
## Tidak Puas|Cukup Puas 7.817191 0.9709349 8.051200 0
## Cukup Puas|Sangat Puas 12.376433 1.4916343 8.297230 0
# Data baru untuk prediksi
DATA_BARU <- data.frame(STAF_KEBERSIHAN = 2:6)
# Prediksi probabilitas tiap kategori kepuasan
prediksi_prob <- predict(MODEL_RESTORAN, newdata = DATA_BARU, type = "probs")
# Pembulatan hasil prediksi
round(prediksi_prob, 4)
## Tidak Puas Cukup Puas Sangat Puas
## 1 0.9723 0.0274 0.0003
## 2 0.8070 0.1905 0.0025
## 3 0.3322 0.6472 0.0206
## 4 0.0559 0.7938 0.1503
## 5 0.0070 0.3950 0.5980
# Load library
library(tidyr)
library(ggplot2)
# Ubah format tabel prediksi ke long format
PROB_TBL <- as.data.frame(prediksi_prob)
PROB_TBL$STAF_KEBERSIHAN <- 2:6
PROB_TBL_LONG <- pivot_longer(
PROB_TBL,
cols = -STAF_KEBERSIHAN,
names_to = "KATEGORI",
values_to = "PROB"
)
# Plot
ggplot(PROB_TBL_LONG, aes(x = STAF_KEBERSIHAN, y = PROB, color = KATEGORI)) +
geom_line(size = 1.2) +
labs(
title = "Perubahan Probabilitas terhadap Jumlah Staf Kebersihan",
x = "Jumlah Staf Kebersihan",
y = "Probabilitas",
color = "Tingkat Kepuasan"
) +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Interpretasi
Grafik menunjukkan perubahan probabilitas untuk tiga kategori tingkat kepuasan pelanggan terhadap kebersihan restoran berdasarkan jumlah staf kebersihan.
Ketika jumlah staf rendah (2–3 orang), probabilitas pelanggan merasa Tidak Puas (garis biru) sangat tinggi, sementara probabilitas Sangat Puas (garis hijau) sangat rendah.
Saat jumlah staf meningkat, probabilitas persepsi “Tidak Puas” menurun tajam, sementara kategori “Cukup Puas” (garis merah) meningkat. Setelah jumlah staf melewati 4–5 orang, probabilitas “Sangat Puas” mulai meningkat secara signifikan.
Pada jumlah staf ≥6, “Sangat Puas” menjadi persepsi yang paling dominan di antara pelanggan.
Maka, dapat disimpulkan peningkatan jumlah staf kebersihan secara nyata meningkatkan peluang pelanggan merasa lebih puas terhadap kebersihan restoran.
Model cumulative logit (seperti yang digunakan dalam fungsi polr) mengasumsikan bahwa efek dari prediktor tetap konstan di seluruh batas antar kategori. Artinya, perubahan nilai prediktor (jumlah staf kebersihan) dianggap memberi pengaruh yang sama antara:
“Tidak Puas” ke “Cukup Puas”
dan “Cukup Puas” ke “Sangat Puas”
Jika asumsi ini tidak terpenuhi, maka hasil interpretasi model bisa menjadi bias.
Salah satu solusi jika asumsi proportional odds ini tidak berlaku adalah dengan mempertimbangkan model alternatif yang tidak mengasumsikan proportional odds, seperti:
Generalized Ordered Logit Model (GOLM)
Partial Proportional Odds Model.
Apabila asumsi pada model cumulative logit tidak terpenuhi, terdapat beberapa opsi model ordinal lain yang dapat digunakan untuk menganalisis hubungan antara jumlah staf kebersihan dan tingkat kepuasan pelanggan, antara lain:
Adjacent-Category Logit: Model ini membandingkan probabilitas antar kategori yang berdekatan, seperti membandingkan kemungkinan “Tidak Puas” dengan “Cukup Puas”, lalu “Cukup Puas” dengan “Sangat Puas” secara bertahap.
Continuation-Ratio Logit: Cocok untuk data yang memiliki sifat berjenjang atau progresif, di mana transisi antar tingkat kepuasan terjadi secara bertahap, mirip seperti tahapan dalam perkembangan penyakit.
Generalized Ordered Logit: Memberikan fleksibilitas lebih karena memungkinkan koefisien regresi berbeda untuk setiap batas antar kategori, sehingga dapat mengatasi pelanggaran asumsi proportional odds pada model cumulative logit.
Pemilihan model alternatif ini harus disesuaikan dengan karakteristik data dan kebutuhan analisis yang ingin dicapai.
Berdasarkan analisis dengan regresi logistik ordinal, diperoleh bahwa jumlah staf kebersihan (STAF_KEBERSIHAN) memiliki koefisien positif sebesar 2.129, dengan t-value sebesar 8.526. Nilai ini menunjukkan bahwa variabel tersebut sangat signifikan secara statistik dalam menjelaskan tingkat kepuasan pelanggan terhadap kebersihan restoran, dengan p-value yang mendekati 0.
Selain itu, intersep pada batas kategori juga signifikan, masing-masing sebesar 7.8172 untuk transisi dari “Tidak Puas” ke “Cukup Puas”, dan 12.3764 untuk peralihan dari “Cukup Puas” ke “Sangat Puas”, dengan t-value di atas 8 untuk masing-masing batas. Ini mengindikasikan bahwa terdapat perbedaan yang jelas dalam tingkat kepuasan antar kategori.
Secara keseluruhan, hasil model ini menguatkan bahwa dengan bertambahnya satu orang staf kebersihan, kemungkinan pelanggan memberikan penilaian yang lebih tinggi terhadap kebersihan restoran juga meningkat secara signifikan. Dengan nilai Residual Deviance sebesar 152.746 dan AIC sebesar 158.746, model ini dapat dianggap memiliki kebaikan penyesuaian yang cukup baik, dan dapat dimanfaatkan untuk membantu perencanaan kebutuhan staf kebersihan di restoran secara lebih optimal.
Dalam analisis regresi logistik ordinal, salah satu pendekatan yang paling umum digunakan adalah Model Logit Kumulatif (Cumulative Logit Model) yang berlandaskan pada asumsi Odds Proporsional.
Apa yang Dimaksud dengan Asumsi Paralel?
Asumsi paralel, atau dikenal juga dengan istilah parallel lines
assumption, menyatakan bahwa pengaruh prediktor
(\(\beta\)) harus
seragam di seluruh batas kategori pada variabel respon
ordinal. Ini berarti bahwa perubahan satu unit pada variabel prediktor
memberikan dampak yang sama terhadap peluang kumulatif
di setiap level kategori respon.
Model ini dapat dirumuskan secara matematis sebagai berikut:
\[ \log\left( \frac{P(Y \leq j)}{P(Y > j)} \right) = \alpha_j + \beta x \]
Untuk \(j = 1, \dotsc, c - 1\), dengan:
\(\alpha_j\) = intersep yang berbeda untuk setiap ambang kategori,
\(\beta\) = koefisien yang bersifat tetap di semua persamaan.
Asumsi ini penting agar interpretasi model tetap valid dan dapat dipercaya. Apabila asumsi paralel tidak terpenuhi, penggunaan model cumulative logit menjadi kurang tepat, dan perlu dipertimbangkan untuk menggunakan model alternatif seperti generalized ordered logit.
Ilustrasi Visual
Ketika asumsi paralel terpenuhi, garis logit kumulatif yang menggambarkan hubungan antara kategori respon ordinal dan variabel prediktor akan sejajar satu sama lain. Perbedaan antar garis hanya terjadi pada nilai intersep (posisi titik potong pada sumbu), sementara kemiringan garis tetap identik di semua kategori.
Apa yang Terjadi Jika Asumsi Dilanggar?
Apabila asumsi paralel tidak terpenuhi:
Pengaruh variabel prediktor dapat berbeda untuk setiap transisi antar kategori.
Model yang dihasilkan berpotensi mengalami bias sehingga interpretasi menjadi tidak valid.
Maka diperlukan pendekatan model lain seperti:
Generalized Ordered Logit Model
Partial Proportional Odds Model
Pengujian Asumsi Paralel
Untuk memastikan apakah asumsi ini berlaku, dapat dilakukan beberapa metode pengujian, di antaranya:
Likelihood Ratio Test (LRT), dengan membandingkan model yang mengasumsikan odds proporsional dengan model yang tidak.
Brant Test, yang dapat diimplementasikan menggunakan paket brant di perangkat lunak R.
Contoh Implematansi di R :
library(MASS)
library(brant)
# Simulasi data dan fitting model ordinal
set.seed(321)
dat <- data.frame(
y_ord = factor(sample(c("Rendah", "Sedang", "Tinggi"), 150, replace = TRUE)
, ordered = TRUE),
x1 = rnorm(150),
x2 = runif(150)
)
# Model ordinal logit
model_ordinal <- polr(y_ord ~ x1 + x2, data = dat, Hess = TRUE)
151
## [1] 151
# Uji Brant
brant(model_ordinal)
## --------------------------------------------
## Test for X2 df probability
## --------------------------------------------
## Omnibus 1.67 2 0.43
## x1 0.01 1 0.91
## x2 1.65 1 0.2
## --------------------------------------------
##
## H0: Parallel Regression Assumption holds
Kesimpulan
Asumsi paralel memiliki peran krusial dalam menjaga validitas model logit kumulatif. Dengan mengasumsikan bahwa pengaruh variabel prediktor tetap konsisten di seluruh batas kategori, model menjadi lebih sederhana dan mudah diinterpretasikan. Namun, apabila asumsi ini tidak terpenuhi, penggunaan model yang lebih fleksibel perlu dipertimbangkan agar hasil analisis tetap akurat dan dapat memberikan kesimpulan yang dapat dipercaya.
Analisis data kategorik berperan penting dalam statistik terapan karena banyak fenomena di dunia nyata menghasilkan data dalam bentuk kategori, seperti jenis kelamin, status pekerjaan, dan tingkat pendidikan.
Pendekatan statistik yang umum digunakan dalam analisis data kategorik meliputi:
Tabel Kontingensi Digunakan untuk eksplorasi hubungan antar dua atau lebih variabel kategorik dengan cara menyajikan frekuensi gabungan. Tabel ini bisa dilengkapi dengan uji asosiasi seperti chi-square untuk mengetahui hubungan antar variabel.
Model Log-linear Digunakan untuk menganalisis struktur asosiasi dari tabel kontingensi tanpa variabel dependen. Model ini cocok untuk memahami interaksi antar variabel kategorik dan dapat diuji menggunakan likelihood ratio test.
Model Regresi Logistik Cocok digunakan saat ada variabel kategorik sebagai variabel dependen (contoh: sakit/tidak). Model ini memodelkan peluang terjadinya suatu kejadian (log odds) berdasarkan variabel independen dan dapat diperluas menjadi regresi logistik multinomial atau ordinal.
Perbandingan
Kesimpulan
Pemilihan pendekatan tergantung pada tujuan analisis: apakah untuk deskripsi, eksplorasi struktur, atau prediksi. Kombinasi pendekatan sering digunakan untuk pemahaman yang lebih komprehensif terhadap data kategorik.
Tabel Kontingensi
Tabel kontingensi menyajikan jumlah frekuensi dari kombinasi kategori antar variabel.
Contoh:
table_data <- matrix(c(30, 20, 50, 70), nrow=2,
dimnames = list(Obat = c("Timolol", "Placebo"),
Serangan = c("Ya", "Tidak")))
table_data
## Serangan
## Obat Ya Tidak
## Timolol 30 50
## Placebo 20 70
Tabel kontingensi bersifat deskriptif dan tidak melibatkan pemodelan probabilitas.
Model Loglinear
Model loglinear memodelkan logaritma dari ekspektasi frekuensi sel dalam tabel kontingensi.
\[ \log(\mu_{ij}) = \lambda + \lambda_i^{A} + \lambda_j^{B} + \lambda_{ij}^{AB} \]
library(MASS)
loglm(~ Obat * Serangan, data = table_data)
## Call:
## loglm(formula = ~Obat * Serangan, data = table_data)
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
Model Regresi Logistik
Model regresi logistik biner:
\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 x \]
Digunakan jika ada variabel dependen kategorik (biasanya biner).
Bertujuan untuk memprediksi probabilitas suatu outcome.
Umumnya digunakan dalam studi observasional atau eksperimental. Contoh:
data_glm <- data.frame(
Serangan = c(1, 0, 1, 0),
Obat = factor(c("Timolol", "Timolol", "Placebo", "Placebo")),
Frek = c(30, 20, 50, 70)
)
model_logit <- glm(Serangan ~ Obat, weights = Frek, family = binomial, data = data_glm)
summary(model_logit)
##
## Call:
## glm(formula = Serangan ~ Obat, family = binomial, data = data_glm,
## weights = Frek)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.3365 0.1852 -1.817 0.0692 .
## ObatTimolol 0.7419 0.3430 2.163 0.0305 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 235.08 on 3 degrees of freedom
## Residual deviance: 230.31 on 2 degrees of freedom
## AIC: 234.31
##
## Number of Fisher Scoring iterations: 4
| Aspek | Tabel Kontingensi | Model Loglinear | Regresi Logistik |
|---|---|---|---|
| Tujuan | Deskripsi frekuensi | Deteksi asosiasi | Prediksi probabilitas |
| Variabel Dependen | Tidak ada | Tidak ada (simetris) | Ada (eksplisit) |
| Distribusi | Tidak diasumsikan | Poisson (frekuensi sel) | Binomial (probabilitas) |
| Bentuk Model | Tidak ada | GLM: log(μ) ~ efek | GLM: logit(p) ~ prediktor |
| Cocok untuk | Eksplorasi awal | Tabel > 2 variabel | Studi prediktif |
Tabel kontingensi menyajikan frekuensi dari kombinasi kategori antar dua atau lebih variabel. Misal:
# Contoh tabel 2x2
matrix(c(45, 35, 25, 55), nrow = 2,
dimnames = list(Vaksin = c("Vaksin A", "Vaksin B"),
Status = c("Positif", "Negatif")))
## Status
## Vaksin Positif Negatif
## Vaksin A 45 25
## Vaksin B 35 55
Model log-linier untuk tabel I x J dapat dituliskan: \[ \log(\mu_{ij}) = \lambda + \lambda_i^{T} + \lambda_j^{R} + \lambda_{ij}^{TR} \]
Model saturated atau model penuh menyertakan seluruh efek utama dan interaksi:
Cocok sempurna terhadap data
Tidak mengasumsikan independensi antar variabel Contoh formulasi untuk tabel 2x2:
# Data
library(MASS)
data <- matrix(c(45, 35, 25, 55), nrow = 2, byrow = TRUE)
dimnames(data) <- list(Vaksin = c("Vaksin A", "Vaksin B"),
Status = c("Positif", "Negatif"))
ftable(data)
## Status Positif Negatif
## Vaksin
## Vaksin A 45 35
## Vaksin B 25 55
Model saturated dapat dipasang dengan loglm dari package {MASS}:
model_saturated <- loglm(~ Vaksin * Status, data = data)
summary(model_saturated)
## Formula:
## ~Vaksin * Status
## attr(,"variables")
## list(Vaksin, Status)
## attr(,"factors")
## Vaksin Status Vaksin:Status
## Vaksin 1 0 1
## Status 0 1 1
## attr(,"term.labels")
## [1] "Vaksin" "Status" "Vaksin:Status"
## attr(,"order")
## [1] 1 1 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
Model independen mengasumsikan bahwa tidak ada interaksi antara variabel: \[ \log(\mu_{ij}) = \lambda + \lambda_i^{T} + \lambda_j^{R} \]
Model ini menguji hipotesis bahwa variabel X dan Y saling independen.
model_indep <- loglm(~ Vaksin + Status, data = data)
summary(model_indep)
## Formula:
## ~Vaksin + Status
## attr(,"variables")
## list(Vaksin, Status)
## attr(,"factors")
## Vaksin Status
## Vaksin 1 0
## Status 0 1
## attr(,"term.labels")
## [1] "Vaksin" "Status"
## attr(,"order")
## [1] 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 10.27645 1 0.001347387
## Pearson 10.15873 1 0.001436195
Odds ratio untuk tabel 2x2:
\[ OR = \frac{n_{11} n_{22}}{n_{12} n_{21}} \]
Interpretasi nilai OR:
OR = 1: Tidak ada asosiasi
OR > 1: Asosiasi positif
OR < 1: Asosiasi negatif
# Hitung OR manual
OR_manual <- (data[1,1] * data[2,2]) / (data[1,2] * data[2,1])
OR_manual
## [1] 2.828571
Dalam model saturated:
Estimasi dilakukan dengan pembatasan seperti sum-to-zero
Estimasi parameter dilakukan dengan iterative proportional fitting (IPF)
# Estimasi odds ratio dan log-odds
logOR <- log((data[1,1] * data[2,2]) / (data[1,2] * data[2,1]))
logOR
## [1] 1.039772
Perbandingan antar model dilakukan dengan menggunakan statistik deviance (G²) atau likelihood ratio test.
anova(model_indep, model_saturated)
## LR tests for hierarchical log-linear models
##
## Model 1:
## ~Vaksin + Status
## Model 2:
## ~Vaksin * Status
##
## Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1 10.27645 1
## Model 2 0.00000 0 10.27645 1 0.00135
## Saturated 0.00000 0 0.00000 0 1.00000
Studi dari Bureau of Labor Statistics (2023) membahas hubungan antara tingkat pendidikan dan kemungkinan bekerja dari rumah.
Sumber : U.S. Bureau of Labor Statistics – American Time Use Survey 2023
data_survey <- matrix(c(
85, 11, # Less than high school diploma
85, 22, # High school graduates, no college
79, 26, # Some college or associate degree
57, 52 # Bachelor's degree or higher
), nrow = 4, byrow = TRUE,
dimnames = list(
Pendidikan = c("<High School", "High School Grad", "Some College", "Bachelor+"),
Kerja = c("Workplace", "Work from Home")
))
ftable(data_survey)
## Kerja Workplace Work from Home
## Pendidikan
## <High School 85 11
## High School Grad 85 22
## Some College 79 26
## Bachelor+ 57 52
# Model saturated
model_saturated <- loglm(~ Pendidikan * Kerja, data = data_survey)
# Ringkasan model
summary(model_saturated)
## Formula:
## ~Pendidikan * Kerja
## attr(,"variables")
## list(Pendidikan, Kerja)
## attr(,"factors")
## Pendidikan Kerja Pendidikan:Kerja
## Pendidikan 1 0 1
## Kerja 0 1 1
## attr(,"term.labels")
## [1] "Pendidikan" "Kerja" "Pendidikan:Kerja"
## attr(,"order")
## [1] 1 1 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
# Model independen
model_independen <- loglm(~ Pendidikan + Kerja, data = data_survey)
# Ringkasan model
summary(model_independen)
## Formula:
## ~Pendidikan + Kerja
## attr(,"variables")
## list(Pendidikan, Kerja)
## attr(,"factors")
## Pendidikan Kerja
## Pendidikan 1 0
## Kerja 0 1
## attr(,"term.labels")
## [1] "Pendidikan" "Kerja"
## attr(,"order")
## [1] 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 37.75035 3 3.192235e-08
## Pearson 38.30643 3 2.434238e-08
# Perbandingan model
anova(model_independen, model_saturated)
## LR tests for hierarchical log-linear models
##
## Model 1:
## ~Pendidikan + Kerja
## Model 2:
## ~Pendidikan * Kerja
##
## Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1 37.75035 3
## Model 2 0.00000 0 37.75035 3 0
## Saturated 0.00000 0 0.00000 0 1
# Menghitung odds ratio antara <High School> dan Bachelor+
OR <- (data_survey["<High School", "Workplace"] * data_survey["Bachelor+", "Work from Home"]) /
(data_survey["<High School", "Work from Home"] * data_survey["Bachelor+", "Workplace"])
OR
## [1] 7.049442
Berdasarkan hasil analisis log-linear:
Pengujian Perbandingan Model:
Model independen, yang tidak mempertimbangkan adanya interaksi antara tingkat pendidikan dan status kerja, menghasilkan nilai Deviance sebesar 37.75 dengan p-value ≈ 3.19 × 10⁻⁸. Nilai ini menunjukkan bahwa model tersebut tidak mampu menggambarkan data dengan baik secara signifikan.
Sebaliknya, model saturated, yang mencakup interaksi antara variabel Pendidikan dan Kerja, menunjukkan Deviance sebesar 0, menandakan kecocokan sempurna terhadap data.
Perbedaan nilai Deviance antara kedua model sebesar 37.75 dengan p-value = 0, mengindikasikan bahwa interaksi antara tingkat pendidikan dan status bekerja dari rumah adalah signifikan. Dengan kata lain, tingkat pendidikan seseorang berkorelasi kuat dengan kecenderungan untuk bekerja dari rumah.
Hasil Perhitungan Odds Ratio: – Odds Ratio (OR) antara kelompok dengan pendidikan <High School dan Bachelor+ terhadap status bekerja dari rumah adalah sebesar 7.05. Sehingga dapat disimpulkan bahwa individu dengan tingkat pendidikan di bawah SMA memiliki kemungkinan sekitar 7 kali lebih besar untuk bekerja di kantor dibandingkan dengan individu yang berpendidikan sarjana atau lebih tinggi, yang cenderung lebih banyak bekerja dari rumah.
Hasil ini memperlihatkan adanya hubungan kuat antara tingkat pendidikan dan jenis tempat kerja. Selain signifikan secara statistik, asosiasi ini juga memiliki dampak praktis yang cukup besar, seperti tercermin dari nilai odds ratio yang tinggi. Hasil ini menegaskan pentingnya mempertimbangkan efek interaksi dalam menganalisis data kategorik terkait status kerja.
Agresti, A. (2002). Categorical Data Analysis. John Wiley & Sons
Astuti, A. B., Efendi, A., Astutik, S., & Sumarminingsih, E. (2020). Analisis Data Kategorik Menggunakan R: Teori dan Aplikasinya pada Berbagai Bidang. Universitas Brawijaya Press.
Maryana, M. (2013). Model Log Linier yang Terbaik untuk Analisis Data Kualitatif pada Tabel Kontingensi Tiga Arah. Industrial Engineering Journal, 2(2).
Sudjana, N. (2005). Metoda Statistika. Tarsito.
Satria, T. A. I., Imro’ah, N., & Huda, N. A. M. (2023). Penerapan Model Log Linier Dalam Menganalisis Tabel Kontingensi Dua Arah. BIMASTER: Buletin Ilmiah Matematika, Statistika dan Terapannya, 12(6).
Szumilas, M. (2010). Explaining odds ratios. Journal of the Canadian Academy of Child and Adolescent Psychiatry, 19(3), 227–229.
Sumber Data https://www.bls.gov/charts/american-time-use/work-by-ftpt-job-edu-p.htm
Mujiyana, M., & Elissa, I. (2013). Analisis faktor-faktor yang mempengaruhi keputusan pembelian via internet pada toko online. J@ TI Undip: Jurnal Teknik Industri, 8(3), 143-152.
Setyawati, D. U., Korida, B. D., & Febrilia, B. R. A. (2020). Analisis Regresi Logistik Ordinal Faktor-Faktor yang Mempengaruhi IPK Mahasiswa. Jurnal Varian, 3(2), 65-72.
Christensen, R. (2006). Log-linear models and logistic regression. Springer Science & Business Media.