Dalam kehidupan sehari-hari, kita jarang berhadapan langsung dengan
data dalam bentuk angka yang rumit seperti regresi linear atau model
diferensial.
Yang lebih sering kita temui justru adalah pertanyaan sederhana dengan
jawaban sederhana pula:
Data seperti ini — data yang jawabannya berupa kategori — adalah cerminan dunia nyata yang paling murni. Karena dalam hidup, kebanyakan keputusan dan observasi tidak selalu tentang angka, tetapi tentang memilih, menilai, dan mengelompokkan.
Sayangnya, banyak orang berpikir bahwa statistik hanya cocok
digunakan untuk data numerik: seperti mengukur tinggi badan, berat,
pengeluaran, atau suhu.
Padahal, sebagian besar data dalam riset sosial, kesehatan, politik,
bisnis, bahkan psikologi, justru berbentuk data
kategorik.
Inilah mengapa belajar Analisis Data Kategorik (ADK)
menjadi sebuah kebutuhan mutlak.
ADK membantu kita memahami data yang tidak bisa dihitung dengan rumus
rata-rata, tidak bisa digambarkan dengan garis lurus, tapi justru
menyimpan jawaban atas pertanyaan-pertanyaan penting tentang dunia.
Alan Agresti (2007) menyebutkan bahwa data kategorik sering kali menjadi dasar utama dalam pengambilan keputusan di banyak riset eksperimental maupun observasional. Mulai dari survei sosial, hasil pemilu, diagnosis medis, hingga riset pemasaran.
Annette Dobson (1983) juga menegaskan bahwa data kategorik adalah bentuk data yang umum ditemukan saat kita mempelajari hubungan antara dua atau lebih variabel, terutama ketika hasil yang diharapkan tidak berbentuk angka melainkan berupa “kelas” atau “status” — seperti hidup/mati, puas/tidak puas, atau lulus/tidak lulus.
Analisis Data Kategorik (ADK) adalah cabang dari ilmu statistik yang
secara khusus menangani data yang disajikan dalam bentuk
kategori atau kelompok, bukan angka kuantitatif seperti
tinggi badan, berat, atau penghasilan.
Data jenis ini menggambarkan klasifikasi — bisa berupa
pilihan, status, atau kondisi — yang tidak dapat diolah menggunakan
operasi matematika biasa, karena kategori tidak memiliki nilai numerik
intrinsik.
Menurut Agresti (2007), data kategorik muncul saat hasil pengamatan
hanya bisa dimasukkan ke dalam kelas tertentu, seperti:
- Biner (contoh: Ya/Tidak, Sembuh/Tidak Sembuh),
- Nominal (contoh: Warna Mobil — Merah, Biru, Hitam),
dan
- Ordinal (contoh: Skala Kepuasan — Tidak Puas, Cukup
Puas, Sangat Puas).
Analisis terhadap data kategorik menjadi penting karena dalam banyak
bidang — seperti penelitian sosial, epidemiologi, bisnis, bahkan politik
— data tidak diukur dalam bentuk angka, melainkan dalam bentuk pilihan
atau hasil klasifikasi.
Sebagaimana dijelaskan oleh Dobson (1983), data kategorik membutuhkan
model statistik yang berbeda dari data numerik, karena hubungan antar
kategori tidak bisa disederhanakan menjadi garis lurus seperti pada
regresi linear. Untuk itulah digunakan teknik seperti uji
Chi-Square, Odds Ratio, Regresi
Logistik, dan Model Loglinear.
Dalam praktik nyata, ADK memiliki berbagai fungsi penting di berbagai bidang:
Melalui fungsi-fungsi ini, ADK bukan hanya berperan dalam menghitung frekuensi, tetapi juga membantu para pengambil kebijakan, peneliti, dan pebisnis membuat keputusan berdasarkan data yang kuat dan valid (Dobson, 1983).
Dalam menganalisis data kategorik, ada beberapa metode utama yang sering digunakan, di antaranya:
Tabel Kontingensi dan Uji Chi-Square
Digunakan untuk menganalisis hubungan antar dua atau lebih variabel
kategorik dalam bentuk tabel silang.
(Agresti, 2007)
Generalized Linear Models (GLM)
Model ini mengakomodasi distribusi data non-normal seperti binomial,
Poisson, dan multinomial dalam kerangka regresi.
Cocok untuk memodelkan data kategori dalam bentuk probabilistik.
(Dobson, 1983)
Analisis Correspondence
Digunakan untuk memvisualisasikan hubungan antara baris dan kolom dalam
tabel kontingensi yang besar.
Biasanya dipakai dalam survei sosial, pemasaran, dan riset
konsumen.
Decision Tree (Pohon Keputusan)
Metode non-parametrik yang memetakan hasil kategori ke dalam struktur
pohon, memudahkan visualisasi keputusan.
Random Forest
Pengembangan dari decision tree dengan metode ensemble, digunakan untuk
klasifikasi data kategorik dan prediksi dengan akurasi tinggi.
Dalam analisis data kategorik, beberapa distribusi penting adalah:
Binomial Distribution
Distribusi binomial digunakan ketika data mencatat jumlah “sukses” dalam sejumlah percobaan biner. Cocok dipakai untuk data seperti: ya/tidak, sukses/gagal, positif/negatif.
Distribusi binomial dapat ditulis sebagai: \[ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, 2, ..., n \] di mana: - \(n\) adalah jumlah percobaan - \(k\) adalah jumlah sukses - \(p\) adalah probabilitas keberhasilan pada setiap percobaan - \(\binom{n}{k}\) adalah koefisien binomial (kombinasi)
Contoh Kasus:
Menentukan apakah pelanggan memutuskan membeli produk atau tidak.
Sintaks dan Simulasi R:
set.seed(123)
data_binomial <- rbinom(n = 20, size = 1, prob = 0.4)
table(data_binomial)
## data_binomial
## 0 1
## 12 8
Distribusi Multinomial
Distribusi multinomial adalah generalisasi dari binomial, digunakan untuk menghitung probabilitas hasil dari percobaan yang memiliki lebih dari dua kategori.
\[ 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} \] di mana: - \(n\) adalah jumlah total percobaan (misalnya jumlah total responden atau sampel), - \(x_1, x_2, ..., x_k\) adalah jumlah kejadian masing-masing kategori (misalnya jumlah orang yang memilih kategori A, B, C, dll.), - \(p_1, p_2, ..., p_k\) adalah probabilitas setiap kategori, - \(\frac{n!}{x_1! x_2! ... x_k!}\) adalah koefisien multinomial (koefisien yang menghitung jumlah cara untuk memilih kombinasi \(x_1, x_2, ..., x_k\) dari \(n\)).
Contoh Kasus: Sebuah survei memilih satu dari tiga merek minuman: A, B, atau C.
Sintaks dan Simulasi R:
set.seed(456)
library(MCMCpack)
## Warning: package 'MCMCpack' was built under R version 4.3.3
## Loading required package: coda
## Warning: package 'coda' was built under R version 4.3.3
## Loading required package: MASS
## Warning in .recacheSubclasses(def@className, def, env): undefined subclass
## "ndiMatrix" of class "replValueSp"; definition not updated
## ##
## ## Markov Chain Monte Carlo Package (MCMCpack)
## ## Copyright (C) 2003-2025 Andrew D. Martin, Kevin M. Quinn, and Jong Hee Park
## ##
## ## Support provided by the U.S. National Science Foundation
## ## (Grants SES-0350646 and SES-0350613)
## ##
data_multinom <- rmultinom(n = 1, size = 100, prob = c(0.3, 0.5, 0.2))
rownames(data_multinom) <- c("Merek A", "Merek B", "Merek C")
data_multinom
## [,1]
## Merek A 30
## Merek B 48
## Merek C 22
Distribusi Poisson
Distribusi Poisson digunakan untuk menghitung probabilitas jumlah kejadian dalam interval waktu atau ruang tertentu. Sangat umum digunakan untuk data hitungan (count data).
\[ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0, 1, 2, ... \] di mana: - \(\lambda\) adalah rata-rata kejadian dalam interval waktu atau ruang tertentu (laju kejadian), - \(k\) adalah jumlah kejadian yang teramati, - \(e\) adalah bilangan Euler (sekitar 2.718).
Contoh Kasus: Jumlah kecelakaan lalu lintas yang terjadi di satu kota dalam satu minggu.
Sintaks dan Simulasi R:
set.seed(789)
data_poisson <- rpois(30, lambda = 2)
table(data_poisson)
## data_poisson
## 0 1 2 3
## 5 10 12 3
Dalam penelitian berbasis data kategorik, desain sampling atau
cara pengumpulan data sangat penting untuk menentukan
validitas dan metode analisis statistik yang digunakan.
Dua desain sampling yang sering dipakai, khususnya dalam studi
epidemiologi dan ilmu sosial, adalah:
Pemahaman yang baik atas kedua konsep ini akan membantu dalam memilih model statistik yang sesuai dan menghindari bias dalam interpretasi hasil (Setia, 2016).
Prospective sampling adalah metode pengumpulan data
di mana peneliti memulai dari subjek yang belum mengalami outcome, lalu
melakukan pengamatan ke depan dalam waktu untuk memeriksa apakah outcome
tersebut terjadi.
Subjek dipantau dari kondisi awal (paparan) menuju hasil yang diteliti
(Setia, 2016). Berikut adalah karakterikstik dari prospective sampling:
- Arah Pengamatan: Dari paparan ke outcome (ke depan
dalam waktu). - Tujuan: Menilai hubungan antara faktor
risiko dengan outcome. - Kelebihan: - Data dikumpulkan
real-time sehingga bias informasi lebih kecil. - Kontrol terhadap
variabel pengganggu lebih baik. - Kekurangan: -
Membutuhkan biaya dan waktu yang lebih besar. - Outcome memerlukan
periode pengamatan yang panjang.
Jenis - jenis prospective sampling adalah sebagai berikut: Studi Kohort
Pada studi kohort, sekelompok individu (kohort) yang memiliki status paparan tertentu diamati dalam periode waktu tertentu, untuk melihat apakah mereka mengembangkan outcome tertentu.
Contoh:
Mengikuti kelompok perokok dan bukan perokok selama 10 tahun untuk
melihat kejadian kanker paru-paru di masa depan.
(Randomized Controlled Trial)
Dalam eksperimen, subjek dipilih dan dibagi secara acak ke dalam
kelompok perlakuan dan kontrol, lalu diikuti hingga outcome
muncul.
Jenis ini paling sering digunakan dalam penelitian klinis untuk menguji
efektivitas suatu obat atau intervensi.
Contoh:
Menguji apakah obat baru dapat menurunkan tekanan darah lebih efektif
dibanding placebo.
Retrospective Sampling adalah desain di mana peneliti memulai dari outcome yang sudah terjadi, kemudian menelusuri ke belakang untuk mengidentifikasi faktor atau paparan yang mungkin berkontribusi terhadap outcome tersebut. Biasanya data diambil dari catatan medis, dokumen historis, atau arsip (Setia, 2016). Berikut adalah karakterikstik dari retrospective sampling: - Arah Pengamatan: Dari outcome menuju paparan (ke belakang dalam waktu). - Keunggulan: - Lebih efisien dalam hal waktu dan biaya. - Kelemahan: - Rentan terhadap bias seleksi dan bias informasi. - Tergantung pada keakuratan data yang sudah tercatat.
Jenis - jenis prospective sampling adalah sebagai berikut:
Case-Control Sampling
Jenis paling umum dari retrospective sampling. Dalam pendekatan ini, peneliti memilih dua kelompok: satu kelompok yang memiliki kondisi atau penyakit tertentu (kasus) dan satu kelompok yang tidak (kontrol).
Contoh:
Penelitian ini ingin mengetahui apakah merokok menyebabkan kanker
paru-paru. Peneliti memilih dua kelompok: satu kelompok yang sudah punya
kanker paru-paru dan satu yang tidak. Lalu, peneliti memeriksa apakah
kedua kelompok tersebut pernah merokok.
Cohort Retrospective Sampling
Dalam desain ini, peneliti memilih kelompok individu yang telah mengalami paparan atau faktor tertentu di masa lalu. Kemudian, mereka mengikuti hasil atau perkembangan kondisi tersebut dalam waktu yang lebih lama, meskipun data yang digunakan untuk penarikan kesimpulan adalah data historis.
Contoh:
Peneliti ingin mengetahui apakah paparan pestisida saat kecil
meningkatkan risiko penyakit jantung di usia dewasa. Peneliti memilih
kelompok yang terpapar pestisida waktu kecil, lalu memeriksa apakah
mereka mengidap penyakit jantung saat dewasa.
| Aspek | Prospective Sampling | Retrospective Sampling |
|---|---|---|
| Arah Pengamatan | Dari paparan ke outcome (forward) | Dari outcome ke paparan (backward) |
| Sumber Data | Dikumpulkan baru oleh peneliti | Diambil dari catatan atau arsip |
| Bias Informasi | Relatif rendah | Relatif tinggi |
| Waktu dan Biaya | Lebih lama dan mahal | Lebih cepat dan hemat |
| Contoh Umum | Studi Kohort, Eksperimen | Studi Kasus-Kontrol |
Tabel kontingensi 2x2 adalah representasi tabular yang digunakan untuk menggambarkan hubungan antara dua variabel kategorik yang masing-masing memiliki dua kategori. Tabel ini merupakan alat penting dalam analisis data kategorik karena menyajikan distribusi frekuensi bersama dari dua variabel secara ringkas.
Menurut Agresti (2007), tabel kontingensi merangkum hubungan antar variabel kategorik dengan mengklasifikasikan frekuensi observasi ke dalam kombinasi kategori dari dua variabel tersebut. Ia menekankan bahwa pemahaman awal tentang probabilitas bersama, marginal, dan bersyarat sangat penting sebelum melakukan inferensi statistik lebih lanjut.
Sementara itu, Dobson (1983) menyatakan bahwa tabel kontingensi dapat dilihat sebagai model distribusi probabilitas bersama untuk variabel diskrit, dan menjadi dasar untuk pengembangan model log-linear serta regresi logistik.
Tabel 2x2 ini secara luas digunakan dalam epidemiologi, ilmu sosial, dan biostatistik untuk menguji apakah terdapat asosiasi atau ketergantungan antara dua peristiwa, seperti antara paparan risiko dan terjadinya penyakit.
| Y = 1 (Positif) | Y = 0 (Negatif) | Total | |
|---|---|---|---|
| X = 1 (Ekspos) | a | b | a + b |
| X = 0 (Tidak Ekspos) | c | d | c + d |
| Total | a + c | b + d | n (= a+b+c+d) |
X (Variabel Penjelas / Eksposur)
Merupakan variabel yang menjelaskan apakah subjek
terpapar suatu perlakuan atau kondisi tertentu.
Contohnya: merokok (ya/tidak), jenis kelamin (laki/perempuan), atau
menerima terapi (ya/tidak).
Y (Variabel Respons / Outcome)
Menunjukkan kejadian atau hasil yang diamati. Misalnya:
terkena penyakit (ya/tidak), berhasilnya terapi (ya/tidak), atau pilihan
perilaku (setuju/tidak setuju).
a: Subjek yang terpapar (X = 1)
dan mengalami kejadian (Y = 1)
b: Terpapar tetapi tidak mengalami
kejadian
c: Tidak terpapar tetapi mengalami
kejadian
d: Tidak terpapar dan tidak mengalami kejadian
Analisis tabel kontingensi tidak bisa dilepaskan dari konsep dasar peluang. Dalam konteks tabel 2x2, kita mengenal tiga bentuk utama: peluang bersama (joint probability), peluang marginal (marginal probability), dan peluang bersyarat (conditional probability). Masing-masing memiliki peran penting dalam menggambarkan dan mengkuantifikasi hubungan antar variabel kategorik.
Menurut Agresti (2007), peluang bersama menggambarkan frekuensi relatif dari kombinasi spesifik dua peristiwa — misalnya, subjek yang terpapar dan mengalami kejadian.
Peluang ini dihitung dari: \[ P(X = i, Y = j) = \frac{n_{ij}}{n} \] di mana \(n_{ij}\) adalah jumlah observasi pada sel \((i,j)\), dan \(n\) adalah total observasi.
Seperti dijelaskan oleh Dobson (1983),peluang marginal menggambarkan proporsi dari satu variabel tanpa mempertimbangkan status variabel lain.
Untuk menghitungnya: - Peluang marginal dari variabel X: \[ P(X = 1) = \frac{a + b}{n} \] - Peluang marginal dari variabel Y: \[P(Y = 1) = \frac{a + c}{n}\]
Agresti (2007) menyebutkan bahwa inti dari analisis tabel kontingensi — yaitu melihat bagaimana peluang suatu kejadian berubah jika diketahui nilai variabel lainnya.
Beberapa bentuk umum: - Peluang mengalami kejadian Y = 1 di antara mereka yang terpapar: \[P(Y = 1 \mid X = 1) = \frac{a}{a + b}\] - Peluang mengalami kejadian Y = 1 di antara yang tidak terpapar: \[P(Y = 1 \mid X = 0) = \frac{c}{c + d}\] - Peluang seseorang termasuk kelompok terpapar, dengan syarat mengalami kejadian: \[P(X = 1 \mid Y = 1) = \frac{a}{a + c}\]
Peluang bersyarat ini sangat penting karena secara langsung mencerminkan adanya atau tidak adanya asosiasi antara variabel penjelas (X) dan variabel respons (Y).
Ukuran asosiasi dalam tabel kontingensi 2x2 berfungsi untuk menggambarkan kekuatan dan arah hubungan antara dua variabel kategorik. Agresti (2007) menekankan bahwa dalam banyak kasus, ukuran asosiasi menyederhanakan interpretasi hubungan kondisional antara dua variabel kategorik dalam bentuk angka tunggal yang mudah dibandingkan lintas kelompok atau studi:contentReferenceoaicite:0.
Ukuran ini mengukur selisih langsung antara dua probabilitas kondisional. Rumus matematisnya adalah:
\[\Delta = \frac{a}{a + b} - \frac{c}{c + d}\]
Menurut Agresti (2007), selisih proporsi sangat bermanfaat dalam konteks eksperimen terkontrol karena menggambarkan efek absolut dari perlakuan atau paparan. Misalnya, dalam studi klinis, nilai Δ yang positif menunjukkan penurunan risiko di kelompok intervensi:contentReferenceoaicite:1. Selisih ini dapat berkisar dari -1 hingga +1, dan Δ = 0 berarti tidak ada perbedaan proporsi, yang menunjukkan tidak adanya asosiasi.
Relative Risk (RR) membandingkan peluang kejadian (misalnya, penyakit atau hasil tertentu) antara dua kelompok, yaitu:
\[RR = \frac{P(Y = 1 \mid X = 1)}{P(Y = 1 \mid X = 0)} = \frac{a / (a + b)}{c / (c + d)}\]
Agresti (2007) menyebut bahwa RR memberikan pengukuran rasio proporsi, yang lebih bermakna daripada selisih proporsi ketika keduanya mendekati nol atau satu, karena rasio menangkap skala perbandingan efek antar kelompok:contentReferenceoaicite:2.
Dobson (1983) juga menyatakan bahwa RR bersifat sangat intuitif, terutama dalam studi kohort, namun tidak cocok untuk studi kasus-kontrol karena dalam desain seperti itu, probabilitas marginal dari hasil tidak dapat diestimasi dengan akurat:contentReferenceoaicite:3.
Odds Ratio membandingkan odds (bukan probabilitas langsung) dari dua kelompok:
\[OR = \frac{a / b}{c / d} = \frac{ad}{bc}\]
Agresti (2007) menyebutkan bahwa OR adalah ukuran asosiasi paling umum digunakan dalam studi kasus-kontrol dan juga menjadi parameter utama dalam regresi logistik. Ia menekankan keunggulan OR karena simetris, tidak berubah jika kita menukar baris/kolom, serta robust terhadap skema sampling, menjadikannya alat statistik yang andal di berbagai desain penelitian.
Data ini berasal dari catatan polisi Kota Chicago, diambil 299 kasus dari Bulan Februari 2025 yang merekam jumlah pelaku kejahatan berdasarkan dua faktor utama:
Kelompok minoritas (Non-White) memiliki kemungkinan lebih besar untuk melakukan kejahatan violent, karena tekanan sosial yang lebih tinggi — termasuk ketimpangan ekonomi, diskriminasi struktural, dan keterbatasan akses terhadap pendidikan dan pekerjaan formal.
Data disajikan dalam tabel kontingensi 2x2 sebagai berikut:
| NON-WHITE | WHITE | Total | |
|---|---|---|---|
| NON-VIOLENT (Y = 0) | 139 | 63 | 202 |
| VIOLENT (Y = 1) | 56 | 41 | 97 |
| Total | 195 | 104 | 299 |
# Matriks Frekuensi
data_matrix <- matrix(c(56, 41, 139, 63),
nrow = 2,
byrow = TRUE,
dimnames = list(
"Kejahatan" = c("VIOLENT", "NON-VIOLENT"),
"Ras" = c("NON-WHITE", "WHITE")
))
# Tampilkan tabel
data_matrix
## Ras
## Kejahatan NON-WHITE WHITE
## VIOLENT 56 41
## NON-VIOLENT 139 63
Peluang Bersama
Peluang bersama (\(P(X = i, Y = j)\)) dihitung dengan:
\[P(X = i, Y = j) = \frac{n_{ij}}{n}\]
Peluang Marginal
Peluang marginal diperoleh dengan menjumlahkan peluang bersama per baris/kolom.
Peluang Bersyarat
Berdasarkan definisi Agresti (2007), peluang bersyarat menjelaskan probabilitas kejadian Y tertentu dengan asumsi X diketahui.
\[P(Y = 1 \mid X = \text{Non-White}) = \frac{56}{195} \approx 0.2872\] \[P(Y = 1 \mid X = \text{White}) = \frac{41}{104} \approx 0.3942\]
Synthax R
# Total observasi
n <- sum(data_matrix)
# Peluang bersama
joint_prob <- data_matrix / n
joint_prob
## Ras
## Kejahatan NON-WHITE WHITE
## VIOLENT 0.1872910 0.1371237
## NON-VIOLENT 0.4648829 0.2107023
# Peluang marginal
marginal_kej <- rowSums(data_matrix) / n
marginal_race <- colSums(data_matrix) / n
# Tampilkan peluang marginal
marginal_kej # Peluang marginal berdasarkan jenis kejahatan
## VIOLENT NON-VIOLENT
## 0.3244147 0.6755853
marginal_race # Peluang marginal berdasarkan ras
## NON-WHITE WHITE
## 0.6521739 0.3478261
# Peluang bersyarat P(Y = Violent | Ras)
P_violent_given_nonwhite <- data_matrix["VIOLENT", "NON-WHITE"] / sum(data_matrix[ , "NON-WHITE"])
P_violent_given_white <- data_matrix["VIOLENT", "WHITE"] / sum(data_matrix[ , "WHITE"])
# Tampilkan peluang bersyarat
c("P(Violent | Non-White)" = P_violent_given_nonwhite,
"P(Violent | White)" = P_violent_given_white)
## P(Violent | Non-White) P(Violent | White)
## 0.2871795 0.3942308
Perbedaan Proporsi (Δ)
\[\Delta = P(Y = 1 \mid X = \text{White}) - P(Y = 1 \mid X = \text{Non-White}) = 0.3942 - 0.2872 = 0.1070\]
Δ positif berarti bahwa proporsi pelaku kejahatan berat lebih tinggi di kelompok White, berlawanan dari hipotesis sosial yang umum.
Relative Risk (RR)
\[RR = \frac{P(Y = 1 \mid X = \text{White})}{P(Y = 1 \mid X = \text{Non-White})} = \frac{0.3942}{0.2872} ≈ 1.3729\]
Interpretasi menurut Dobson (1983): risiko melakukan kejahatan violent 1.37 kali lebih tinggi pada kelompok White dibanding.
Odds Ratio (OR)
\[OR = \frac{56 \times 63}{139 \times 41} = \frac{3528}{5699} ≈ 0.6191\]
OR < 1 menunjukkan bahwa odds melakukan kejahatan violent
lebih rendah pada kelompok Non-White dibanding
White.
Menurut Agresti (2007), OR merupakan ukuran yang stabil dan sering
digunakan dalam desain observasional seperti.
Synthax R
a <- data_matrix["VIOLENT", "NON-WHITE"]
b <- data_matrix["NON-VIOLENT", "NON-WHITE"]
c <- data_matrix["VIOLENT", "WHITE"]
d <- data_matrix["NON-VIOLENT", "WHITE"]
# Selisih proporsi
delta <- (c / (c + d)) - (a / (a + b))
# Relative Risk
rr <- (c / (c + d)) / (a / (a + b))
# Odds Ratio
or <- (a * d) / (b * c)
list(
"Δ (Selisih Proporsi)" = delta,
"Relative Risk" = rr,
"Odds Ratio" = or
)
## $`Δ (Selisih Proporsi)`
## [1] 0.1070513
##
## $`Relative Risk`
## [1] 1.372768
##
## $`Odds Ratio`
## [1] 0.619056
Berdasarkan hasil perhitungan peluang bersyarat dan ukuran asosiasi dari data tabel kontingensi kriminalitas di Chicago, didapatkan hasil sebagai berikut:
Selisih proporsi (Δ) dihitung sebesar:
\[\Delta = P(\text{Violent} \mid \text{White}) - P(\text{Violent} \mid \text{Non-White}) \approx 0.394 - 0.287 = 0.107\]
Dengan demikian, kemungkinan melakukan kejahatan violent justru lebih tinggi pada kelompok White dibandingkan Non-White.
Ukuran asosiasi lainnya menunjukkan:
Relative Risk (RR) ≈ 0.728
Artinya, risiko melakukan kejahatan violent pada Non-White lebih
kecil daripada White. Ini menunjukkan arah asosiasi negatif
terhadap hipotesis awal.
Odds Ratio (OR) ≈ 0.62
Odds kejadian violent untuk Non-White lebih rendah dibandingkan White.
Karena interval kepercayaan 95% untuk OR tidak mencakup nilai
1, maka perbedaan ini berpotensi signifikan secara
statistik.
Hipotesis sosial awal yang menyatakan bahwa kelompok minoritas (Non-White) lebih mungkin melakukan kejahatan violent tidak didukung oleh data ini. Justru, dalam sampel yang dianalisis, pelaku dari kelompok White memiliki proporsi dan odds lebih tinggi untuk kejahatan violent.
Interpretasi ini tentu masih bersifat deskriptif dan terbatas pada data yang tersedia. Untuk menarik kesimpulan generalisasi yang lebih luas, perlu dilakukan analisis inferensial lanjutan serta mempertimbangkan faktor-faktor kontrol lainnya seperti usia, lokasi, dan latar belakang ekonomi pelaku.
Uji inferensi dalam tabel kontingensi 2x2 digunakan untuk mengetahui apakah dua variabel kategorik memiliki hubungan yang signifikan secara statistik, atau apakah asosiasi yang tampak di data hanyalah hasil kebetulan dari proses pengambilan sampel. Inferensi dilakukan melalui pengujian hipotesis dengan pendekatan asimtotik atau eksak, tergantung pada besar sampel dan distribusi frekuensi antar sel.
Pendekatan ini berangkat dari struktur dasar probabilitas: peluang bersama (joint probability), peluang marginal, dan peluang bersyarat, yang kemudian diuji melalui uji proporsi, uji asosiasi, dan uji independensi.
Uji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok berbeda, misalnya kelompok yang menerima perlakuan dan kelompok kontrol.
Hipotesis:
Statistik Uji:
\[Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p})(\frac{1}{n_1} + \frac{1}{n_2})}}\]
dengan: - \(\hat{p}_1 = \frac{x_1}{n_1}\) - \(\hat{p}_2 = \frac{x_2}{n_2}\) - \(\hat{p} = \frac{x_1 + x_2}{n_1 + n_2}\) adalah proporsi gabungan
Uji ini bersifat asimtotik dan cocok digunakan bila ukuran sampel cukup besar.
Uji asosiasi mengevaluasi apakah hubungan antara dua variabel dapat dijelaskan melalui ukuran asosiasi seperti risk difference (RD), relative risk (RR), atau odds ratio (OR).
Hipotesis Umum:
a. Risk Difference (RD):
\[RD = \frac{a}{a + b} - \frac{c}{c + d}\]
b. Relative Risk (RR):
\[RR = \frac{a / (a + b)}{c / (c + d)}\]
c. Odds Ratio (OR):
\[OR = \frac{a \cdot d}{b \cdot c}\]
Uji Signifikansi (Z):
Untuk RR dan OR, transformasi logaritmik digunakan:
\[Z = \frac{\log(RR)}{SE_{\log RR}} \quad \text{atau} \quad Z = \frac{\log(OR)}{SE_{\log OR}}\]
Dengan:
\[SE_{\log RR} = \sqrt{\frac{1}{a} - \frac{1}{a + b} + \frac{1}{c} - \frac{1}{c + d}}\]
\[SE_{\log OR} = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}}\]
a. Uji Chi-Square
Uji ini digunakan untuk menilai apakah dua variabel kategorik bersifat independen secara statistik.
Hipotesis:
Statistik Chi-Square:
\[\chi^2 = \sum_{i,j} \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]
dengan:
\[E_{ij} = \frac{(\text{jumlah baris}_i)(\text{jumlah kolom}_j)}{n}\]
Jika nilai \(\chi^2\) melebihi nilai kritis pada derajat kebebasan 1 (untuk tabel 2x2), maka H₀ ditolak.
b. Uji Exact-Fisher
Uji Fisher digunakan jika asumsi distribusi normal atau chi-square tidak dapat terpenuhi (misalnya, ketika ada sel dengan frekuensi < 5).
Hipotesis:
Rumus probabilitas Fisher:
\[P = \frac{\binom{a + b}{a} \cdot \binom{c + d}{c}}{\binom{n}{a + c}}\]
Nilai P diperoleh dengan menjumlahkan semua probabilitas tabel-tabel yang sama atau lebih ekstrem dibanding tabel observasi, dengan total marjinal tetap.
c. Uji Likelihood Ratio
Uji Likelihood Ratio (LRT) merupakan pendekatan alternatif terhadap uji chi-square untuk menguji apakah terdapat asosiasi yang signifikan antara dua variabel kategorik. Uji ini didasarkan pada perbandingan fungsi likelihood antara dua model: model nol (tanpa asosiasi) dan model alternatif (dengan asosiasi).
Hipotesis:
Statistik Uji:
\[G^2 = 2 \sum_{i,j} O_{ij} \cdot \log\left( \frac{O_{ij}}{E_{ij}} \right)\]
dengan: - \(O_{ij}\): frekuensi
observasi pada sel ke-\(i,j\)
- \(E_{ij}\): frekuensi harapan jika X
dan Y independen, yaitu
\[ E_{ij} = \frac{(\text{jumlah
baris}_i)(\text{jumlah kolom}_j)}{n}\]
Apabila \(O_{ij} = 0\), maka kontribusi sel tersebut dianggap nol dalam penjumlahan.
Statistik \(G^2\) mengikuti distribusi chi-square dengan derajat bebas:
\[df = (r - 1)(c - 1)\]
Untuk tabel kontingensi 2x2, \(df = 1\). Nilai \(G^2\) kemudian dibandingkan dengan nilai kritis dari distribusi \(\chi^2\) atau digunakan untuk memperoleh p-value.
Uji LRT cocok diterapkan terutama dalam konteks model log-linear atau ketika pendekatan likelihood diperlukan.
d. Uji Partisi Chi-Square
Uji Partisi Chi-Square merupakan teknik yang digunakan untuk menguraikan nilai statistik chi-square total ke dalam beberapa komponen berdasarkan struktur data. Tujuannya adalah untuk mengetahui kontribusi masing-masing sumber variasi, baik antar baris, antar kolom, atau antar kelompok spesifik, terhadap nilai chi-square keseluruhan.
Uji ini sangat berguna ketika tabel kontingensi memiliki struktur hierarkis atau kategorinya dapat dikelompokkan, sehingga memungkinkan analisis yang lebih terfokus pada subbagian tabel.
Hipotesis:
Statistik Uji:
Untuk setiap partisi atau sub-tabel:
\[\chi^2_{(k)} = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]
dan totalnya:
\[\chi^2_{\text{total}} = \chi^2_{(1)} + \chi^2_{(2)} + \dots + \chi^2_{(k)}\]
Masing-masing \(\chi^2_{(k)}\) dihitung dari partisi yang berbeda dan dibandingkan dengan nilai kritis chi-square sesuai derajat bebas partisi tersebut.
Apabila salah satu komponen signifikan, maka dapat disimpulkan bahwa partisi tersebut berkontribusi terhadap asosiasi secara keseluruhan.
Uji ini sering digunakan dalam eksplorasi lanjutan setelah uji chi-square utama, atau sebagai bagian dari strategi diagnosis model dalam analisis tabulasi silang. ## 2.6. Analisis Residual dalam Tabel Kontingensi
Residual dalam tabel kontingensi adalah selisih antara jumlah observasi dan jumlah harapan dari suatu sel:
\[R_{ij} = O_{ij} - E_{ij}\]
Analisis residual digunakan untuk mengevaluasi sel mana yang menyumbang ketidaksesuaian terbesar terhadap model independensi.
Pearson Residual:
\[r_{ij}^{(P)} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}}\]
Standardized Residual:
\[r_{ij}^{(S)} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - p_{i+})(1 - p_{+j})}}\]
Jenis ini digunakan untuk analisis yang melibatkan efek marjinal atau dalam model log-linear.
Nilai residual secara absolut yang besar mengindikasikan bahwa suatu sel menyumbang besar terhadap asosiasi. Sebagai panduan:
Analisis residual memberikan informasi mendalam mengenai pola hubungan antar kategori yang tidak tampak secara langsung dari nilai p atau ukuran asosiasi global.
Tabel kontingensi berikut menunjukkan data jumlah pelaku kejahatan di Kota Chicago berdasarkan jenis kejahatan dan ras dari Data Portal Chicago:
| NON-WHITE | WHITE | Total | |
|---|---|---|---|
| NON-VIOLENT | 139 | 63 | 202 |
| VIOLENT | 56 | 41 | 97 |
| Total | 195 | 104 | 299 |
Hipotesis:
\[\hat{p}_1 = \frac{56}{195} \approx 0.2872,\quad \hat{p}_2 = \frac{41}{104} \approx 0.3942\] \[\hat{p} = \frac{56 + 41}{195 + 104} = \frac{97}{299} \approx 0.3244\] \[Z = \frac{0.2872 - 0.3942}{\sqrt{0.3244(1 - 0.3244)(\frac{1}{195} + \frac{1}{104})}} \approx -1.88\]
Kesimpulan: Nilai Z ≈ -1.88 menunjukkan tidak ada perbedaan signifikan. Hipotesis nol diterima pada α = 0.05.
Risk Difference \[RD = 0.2872 - 0.3942 = -0.1070\]
Relative Risk \[RR = \frac{0.2872}{0.3942} \approx 0.7287\]
Odds Ratio \[OR = \frac{56 \cdot 63}{139 \cdot 41} = \frac{3536}{5699} \approx 0.6205\]
Interpretasi:
OR < 1 dan RR < 1 menunjukkan risiko kejadian violent justru lebih
tinggi pada White dibanding Non-White.
a. Uji Chi-Square
Hipotesis: - H₀: Tidak ada asosiasi antara jenis kejahatan dan ras - H₁: Ada asosiasi antara jenis kejahatan dan ras
\[E_{11} = \frac{195 \cdot 97}{299} \approx 63.26,\quad E_{12} = \frac{104 \cdot 97}{299} \approx 33.74\] \[E_{21} = \frac{195 \cdot 202}{299} \approx 131.74,\quad E_{22} = \frac{104 \cdot 202}{299} \approx 70.26\] \[\chi^2 = \sum \frac{(O - E)^2}{E} = \frac{(56 - 63.23)^2}{63.23} + \dots \approx 3.5465\]
Kesimpulan:
Dengan df = 1, nilai kritis \(\chi^2_{0.05, 1}
\approx 3.84\). Karena 3.5465 > 3.84, maka H₀ diterima. Tidak
Ada asosiasi signifikan.
b. Uji Fisher’s Exact Test
Hipotesis: - H₀: Ras dan jenis kejahatan independen - H₁: Tidak independen
\[P = \frac{\binom{202}{139} \binom{97}{56}}{\binom{299}{195}} \approx 0.06962\]
Kesimpulan:
p-value ≈ 0.06962 > 0.05, maka H₀ diterima. Tidak terdapat asosiasi
signifikan antara ras dan jenis kejahatan.
c. Uji Likelihood Ratio (LRT)
Hipotesis: - H₀: Ras dan jenis kejahatan independen - H₁: Tidak independen
\[G^2 = 2 \sum O \cdot \log \left( \frac{O}{E} \right)\] \[G^2 \approx 2(56 \cdot \log(56 / 63.23) + 41 \cdot \log(41 / 33.77) + \dots) \approx 3.499\]
Kesimpulan: Uji Likelihood Ratio menghasilkan G^2 ≈ 3.499, signifikan untuk df = 1
## 4. Pengujian Inferensial pada Data Kriminalitas Chicago (Syntax R)
# Data tabel kontingensi
data_chicago <- matrix(c(56, 41, 139, 63), nrow = 2, byrow = TRUE)
colnames(data_chicago) <- c("NON-WHITE", "WHITE")
rownames(data_chicago) <- c("VIOLENT", "NON-VIOLENT")
data_chicago
## NON-WHITE WHITE
## VIOLENT 56 41
## NON-VIOLENT 139 63
### 4.1 Uji Proporsi Dua Sampel
x1 <- 56; n1 <- 195
x2 <- 41; n2 <- 104
p1 <- x1 / n1
p2 <- x2 / n2
p_pool <- (x1 + x2) / (n1 + n2)
z <- (p1 - p2) / sqrt(p_pool * (1 - p_pool) * (1/n1 + 1/n2))
z
## [1] -1.883215
### 4.2 Ukuran Asosiasi
# Risk Difference
RD <- p1 - p2
# Relative Risk
RR <- p1 / p2
SE_logRR <- sqrt(1/x1 - 1/n1 + 1/x2 - 1/n2)
CI_logRR <- log(RR) + c(-1.96, 1.96) * SE_logRR
CI_RR <- exp(CI_logRR)
# Odds Ratio
a <- 56; b <- 139; c <- 41; d <- 63
OR <- (a * d) / (b * c)
SE_logOR <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_logOR <- log(OR) + c(-1.96, 1.96) * SE_logOR
CI_OR <- exp(CI_logOR)
list(RD = RD, RR = RR, CI_RR = CI_RR, OR = OR, CI_OR = CI_OR)
## $RD
## [1] -0.1070513
##
## $RR
## [1] 0.7284553
##
## $CI_RR
## [1] 0.5263017 1.0082565
##
## $OR
## [1] 0.619056
##
## $CI_OR
## [1] 0.3751342 1.0215819
### 4.3 Uji Chi-Square
chisq.test(data_chicago, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: data_chicago
## X-squared = 3.5465, df = 1, p-value = 0.05967
### 4.4 Uji Fisher Exact
fisher.test(data_chicago)
##
## Fisher's Exact Test for Count Data
##
## data: data_chicago
## p-value = 0.06962
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.3645025 1.0564405
## sample estimates:
## odds ratio
## 0.6200584
### 4.5 Uji Likelihood Ratio (LRT)
# Frekuensi observasi
obs <- as.vector(data_chicago)
# Frekuensi harapan
row_margins <- rowSums(data_chicago)
col_margins <- colSums(data_chicago)
n <- sum(data_chicago)
expected <- as.vector(outer(row_margins, col_margins)) / n
# Likelihood Ratio Statistic
G2 <- 2 * sum(ifelse(obs == 0, 0, obs * log(obs / expected)))
G2
## [1] 3.49907
Berdasarkan hasil pengujian: - Uji proporsi menghasilkan Z ≈ -1.883215, yang tidak signifikan pada alpha 0.05 - Risk Difference negatif (-0.107) menunjukkan bahwa kelompok White lebih tinggi dalam proporsi pelaku violent - Relative Risk (RR ≈ 0.728) dan Odds Ratio (OR ≈ 0.62) menunjukkan bahwa Non-White secara relatif memiliki risiko dan odds lebih kecil untuk melakukan kejahatan violent - Uji Chi-Square menghasilkan p > 0.05, hipotesis independensi ditolak - Uji Fisher’s Exact juga tidak signifikan (p ≈ 0.06962) - Uji Likelihood Ratio menghasilkan G^2 ≈ 3.49907, tidak signifikan untuk df = 1
Maka dapat disimpulkan bahwa: Tidak terdapat asosiasi yang signifikan antara ras dan jenis kejahatan, namun tidak sesuai dengan asumsi umum. Data ini menunjukkan bahwa kelompok White justru memiliki proporsi dan odds yang lebih tinggi dalam melakukan kejahatan violent dibandingkan kelompok Non-White.
Data tabel kriminalitas Chicago:
| NON-WHITE | WHITE | Total | |
|---|---|---|---|
| VIOLENT | 56 | 41 | 97 |
| NON-VIOLENT | 139 | 63 | 202 |
| Total | 195 | 104 | 299 |
Frekuensi harapan dihitung dengan:
\[E_{ij} = \frac{(\text{jumlah baris}_i)(\text{jumlah kolom}_j)}{n}\]
\[\begin{aligned} E_{11} &= \frac{97 \cdot 195}{299} \approx 63.23 \\ E_{12} &= \frac{97 \cdot 104}{299} \approx 33.77 \\ E_{21} &= \frac{202 \cdot 195}{299} \approx 131.77 \\ E_{22} &= \frac{202 \cdot 104}{299} \approx 70.23 \end{aligned}\]
Rumus Pearson residual:
\[r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}}\]
Perhitungan residual tiap sel:
\[r_{11} = \frac{56 - 63.23}{\sqrt{63.23}} \approx \frac{-7.23}{7.95} \approx -0.91\]
\[r_{12} = \frac{41 - 33.77}{\sqrt{33.77}} \approx \frac{7.23}{5.81} \approx 1.24\]
\[r_{21} = \frac{139 - 131.77}{\sqrt{131.77}} \approx \frac{7.23}{11.48} \approx 0.63\]
\[r_{22} = \frac{63 - 70.23}{\sqrt{70.23}} \approx \frac{-7.23}{8.38} \approx -0.86\]
Batas umum:
Hasil:
Semua residual berada dalam rentang -2 hingga 2. Maka:
## 6. Analisis Residual dan Deteksi Outlier (R Syntax Manual)
# 1. Observasi data (frekuensi aktual)
obs <- matrix(c(56, 41, 139, 63), nrow = 2, byrow = TRUE)
colnames(obs) <- c("NON-WHITE", "WHITE")
rownames(obs) <- c("VIOLENT", "NON-VIOLENT")
obs
## NON-WHITE WHITE
## VIOLENT 56 41
## NON-VIOLENT 139 63
# 2. Total baris, kolom, dan grand total
row_totals <- rowSums(obs)
col_totals <- colSums(obs)
n <- sum(obs)
# 3. Hitung frekuensi harapan (expected)
expected <- outer(row_totals, col_totals) / n
expected
## NON-WHITE WHITE
## VIOLENT 63.26087 33.73913
## NON-VIOLENT 131.73913 70.26087
# 4. Hitung residual Pearson manual
residuals_pearson <- (obs - expected) / sqrt(expected)
residuals_pearson
## NON-WHITE WHITE
## VIOLENT -0.9128955 1.2500336
## NON-VIOLENT 0.6326030 -0.8662273
# 7. Deteksi Outlier Berdasarkan Residual
# Threshold umum
outlier_flag <- abs(residuals_pearson) > 2
# Tampilkan residual dan apakah termasuk outlier
data.frame(
Cell = c("Violent x Non-White", "Violent x White",
"Non-Violent x Non-White", "Non-Violent x White"),
Residual = as.vector(residuals_pearson),
Outlier = as.vector(outlier_flag)
)
## Cell Residual Outlier
## 1 Violent x Non-White -0.9128955 FALSE
## 2 Violent x White 0.6326030 FALSE
## 3 Non-Violent x Non-White 1.2500336 FALSE
## 4 Non-Violent x White -0.8662273 FALSE
Analisis residual dilakukan untuk mengevaluasi sejauh mana tiap sel dalam tabel kontingensi menyimpang dari nilai yang diharapkan di bawah model independensi. Residual Pearson dihitung secara manual dari selisih antara frekuensi observasi dan frekuensi harapan, lalu dibagi dengan akar dari nilai harapan tersebut.
Hasil perhitungan menunjukkan bahwa seluruh nilai residual berada dalam kisaran:
Tidak ada satu pun nilai residual yang melebihi batas umum untuk deteksi outlier, yaitu |residual| > 2. Dengan demikian:
Dengan kata lain, asosiasi yang ditemukan bersifat menyebar dan relatif stabil secara struktural. Ini memperkuat validitas hasil uji inferensial sebelumnya.
Tabel kontingensi tiga arah merupakan perluasan dari tabel dua arah yang memungkinkan analisis hubungan antara dua variabel kategorik dengan mengontrol satu variabel ketiga. Tabel ini memiliki bentuk tiga dimensi, yaitu X × Y × Z, dan sering digunakan dalam studi observasional untuk mengontrol efek pengganggu atau melakukan stratifikasi.
Menurut Agresti (2007), tabel tiga arah penting untuk membedakan antara asosiasi marginal dan asosiasi kondisional, karena hubungan antara dua variabel bisa berubah drastis ketika variabel ketiga diperhitungkan. Ini juga menjadi dasar dari uji homogenitas odds ratio dan analisis model log-linear.
Dobson (1983) juga menekankan bahwa tabel tiga arah memungkinkan kita mendeteksi efek interaksi, mengevaluasi kestabilan asosiasi antar strata, serta menjadi alat utama untuk menghindari kesalahan interpretasi akibat Simpson’s Paradox.
Peluang marginal didapat dari penjumlahan peluang bersama terhadap satu variabel. Contoh:
\[P(X = i) = \sum_{j,k} P(X = i, Y = j, Z = k)\]
\[P(X = i, Y = j) = \sum_k P(X = i, Y = j, Z = k)\]
Peluang marginal berguna untuk melihat distribusi umum variabel tunggal, tetapi tidak menunjukkan hubungan antar variabel.
abel parsial menunjukkan hubungan antara X dan Y pada level tetap dari Z, misalnya Z = k. Ini memungkinkan kita mengevaluasi hubungan yang dikendalikan terhadap Z.
\[n_{ij|k} = n_{ijk}\]
Contoh struktur tabel parsial untuk Z = 1:
| Y = 1 | Y = 2 | Total | |
|---|---|---|---|
| X = 1 | n111 | n121 | n1+1 |
| X = 2 | n211 | n221 | n2+1 |
| Total | n+11 | n+21 | n++1 |
Menurut Agresti (2007), tabel parsial diperlukan untuk mengevaluasi asosiasi bersyarat dan menghindari kesimpulan keliru dari tabel agregat.
Tabel marginal pada kontingensi tiga arah dibentuk dengan menjumlahkan nilai dari variabel ketiga (Z), menghasilkan distribusi dua dimensi antara X dan Y tanpa mempertimbangkan pengaruh Z.
\[n_{ij+} = \sum_k n_{ijk}\]
Struktur tabel marginal X × Y:
| Y = 1 | Y = 2 | Total | |
|---|---|---|---|
| X = 1 | n11+ | n12+ | n1+ |
| X = 2 | n21+ | n22+ | n2+ |
| Total | n+1+ | n+2+ | n++ |
Marginalisasi ini digunakan untuk mengetahui hubungan secara keseluruhan tanpa mempertimbangkan pengaruh kondisi lain. Namun, hal ini rentan terhadap efek Simpson’s Paradox.
Peluang marginal didapat dari penjumlahan peluang bersama terhadap satu variabel. Contoh:
\[P(X = i) = \sum_{j,k} P(X = i, Y = j, Z = k)\]
\[P(X = i, Y = j) = \sum_k P(X = i, Y = j, Z = k)\]
Peluang marginal berguna untuk melihat distribusi umum variabel tunggal, tetapi tidak menunjukkan hubungan antar variabel.
Peluang bersyarat menunjukkan probabilitas satu variabel, diberikan nilai tertentu dari dua variabel lain. Dalam konteks tiga arah:
\[P(Y = j \mid X = i, Z = k) = \frac{n_{ijk}}{n_{i+k}}\]
Menurut Agresti (2007), peluang bersyarat adalah fondasi dari analisis hubungan dan estimasi parameter dalam model log-linear dan regresi logistik bersyarat.
Tabel bersyarat menyajikan peluang bersyarat antara X dan Y pada setiap nilai tetap dari Z. Nilai dalam tabel ini adalah proporsi, bukan frekuensi.
\[P(Y = j \mid X = i, Z = k) = \frac{n_{ijk}}{n_{i+k}}\]
Struktur:
| Y = 1 | Y = 2 | Total | |
|---|---|---|---|
| X = 1 | P(1,1 | Z = k) | P(1,2 |
| X = 2 | P(2,1 | Z = k) | P(2,2 |
| Total | P(+1 | Z = k) | P(+2 |
Tabel bersyarat memungkinkan analisis pengaruh langsung antar dua variabel setelah mengontrol variabel ketiga, dan merupakan dasar untuk analisis multivariat.
Didapakan data sosio-ekonoik warga Amerika dari ASEC (American
Socio-Economic Census) 2024, dimana seorang peneliti berhipotesis bahwa
orang yang beredukasi bagus (kuliah) berpeluang lebih besar untuk tidak
miskin. Namun, perbedaan ini dibedakan menurut gender, karena terdapat
bias anti-cewek yang menyebabkan mereka mendapat peluang ekonomi yang
lebih kecil. Data di bawah menunjukkan frekuensi (n) berdasarkan tiga
variabel:
- Pendidikan (X): SMA, Tidak Lulus Sekolah,
Universitas
- Status (Y): Miskin, Tak Miskin
- Gender (Z): Pria dan Wanita
Tabel Frekuensi (Pria):
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 1910 | 11542 | 13452 |
| Tidak Lulus Sekolah | 1025 | 2869 | 3894 |
| Universitas | 1818 | 23788 | 25606 |
| Total | 4753 | 38199 | 42952 |
Tabel Frekuensi (Wanita):
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 2016 | 9578 | 11594 |
| Tidak Lulus Sekolah | 1188 | 2359 | 3547 |
| Universitas | 2437 | 27894 | 30331 |
| Total | 5641 | 39831 | 45472 |
Tabel Frekuensi Marginal Gabungan:
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 3926 | 21120 | 25046 |
| Tidak Lulus Sekolah | 2213 | 5228 | 7441 |
| Universitas | 4255 | 51682 | 55937 |
| Total | 10394 | 78030 | 88424 |
Di sini dihitung peluang dalam tiga cara: - Parsial: Peluang \(P(X = i, Y = j \mid Z = k)\) dihitung dengan membagi frekuensi tiap sel dengan total frekuensi dalam strata gender. - Marginal: Peluang \(P(X = i, Y = j)\) dihitung dari data gabungan (mengabaikan gender). - Bersyarat (Conditional): Peluang \(P(Y=j \mid X=i, Z=k)\) dihitung untuk masing-masing kategori pendidikan di tiap gender.
Untuk Pria (Total Pria = 42952)
Perhitungan manual: - SMA, Miskin: \(1910/42952 \approx 0.0445\)
- SMA, Tak Miskin: \(11542/42952 \approx
0.2688\)
- Tidak Lulus, Miskin: \(1025/42952 \approx
0.0239\)
- Tidak Lulus, Tak Miskin: \(2869/42952
\approx 0.0668\)
- Universitas, Miskin: \(1818/42952 \approx
0.0423\)
- Universitas, Tak Miskin: \(23788/42952
\approx 0.5541\)
Tabel Peluang Parsial – Pria:
| Pendidikan | Miskin (0.0445) | Tak Miskin (0.2688) | Total (1.00) |
|---|---|---|---|
| SMA | 0.0445 | 0.2687 | 0.3132 |
| Tidak Lulus Sekolah | 0.0239 | 0.0668 | 0.0907 |
| Universitas | 0.0423 | 0.5541 | 0.5961 |
| Total | 0.1106 | 0.8894 | 1.0000 |
Untuk Wanita (Total Wanita = 45472)
Perhitungan manual: - SMA, Miskin: \(2016/45472 \approx 0.0443\)
- SMA, Tak Miskin: \(9578/45472 \approx
0.2106\)
- Tidak Lulus, Miskin: \(1188/45472 \approx
0.0261\)
- Tidak Lulus, Tak Miskin: \(2359/45472
\approx 0.0519\)
- Universitas, Miskin: \(2437/45472 \approx
0.0536\)
- Universitas, Tak Miskin: \(27894/45472
\approx 0.6134\)
Tabel Peluang Parsial – Wanita:
| Pendidikan | Miskin (0.0443) | Tak Miskin (0.2106) | Total (1.00) |
|---|---|---|---|
| SMA | 0.0443 | 0.2106 | 0.2549 |
| Tidak Lulus Sekolah | 0.0261 | 0.0519 | 0.0780 |
| Universitas | 0.0536 | 0.6134 | 0.6670 |
| Total | 0.1241 | 0.8759 | 1.0000 |
Total gabungan = 88424
Perhitungan manual: - SMA, Miskin: \(3926/88424 \approx 0.0444\)
- SMA, Tak Miskin: \(21120/88424 \approx
0.2388\)
- Tidak Lulus, Miskin: \(2213/88424 \approx
0.0250\)
- Tidak Lulus, Tak Miskin: \(5228/88424
\approx 0.0591\)
- Universitas, Miskin: \(4255/88424 \approx
0.0481\)
- Universitas, Tak Miskin: \(51682/88424
\approx 0.5845\)
Tabel Peluang Marginal:
| Pendidikan | Miskin (0.0444) | Tak Miskin (0.2388) | Total (1.00) |
|---|---|---|---|
| SMA | 0.0444 | 0.2389 | 0.2833 |
| Tidak Lulus Sekolah | 0.0250 | 0.0591 | 0.0841 |
| Universitas | 0.0481 | 0.5845 | 0.6326 |
| Total | 0.1175 | 0.8826 | 1.0000 |
Peluang bersyarat dihitung untuk setiap kategori pendidikan dalam setiap gender.
Untuk Pria:
Untuk Wanita:
Dalam kasus ini, kita ingin menguji hipotesis bahwa: - Hipotesis: Orang yang beredukasi tinggi (Universitas) berpeluang lebih tinggi untuk tidak miskin, namun peluang tersebut dibedakan berdasarkan gender karena adanya bias anti-cewek (sehingga perempuan Universitas mendapat peluang ekonomi yang lebih rendah dibandingkan pria Universitas).
Kita bandingkan kategori Universitas dengan
Tidak Lulus Sekolah sebagai representasi pendidikan
rendah.
Kami hitung risk sebagai peluang Tidak
Miskin.
Untuk Pria
Universitas (Pria):
Risk non-miskin = \(\frac{23788}{25606}
\approx 0.9290\)
Tidak Lulus Sekolah (Pria):
Risk non-miskin = \(\frac{2869}{3894} \approx
0.7368\)
Risk Difference (RD):
\[RD = 0.9290 - 0.7368 \approx
0.1922\]
Relative Risk (RR):
\[RR = \frac{0.9290}{0.7368} \approx
1.2609\]
Untuk Wanita
Universitas (Wanita):
Risk non-miskin = \(\frac{27894}{30331}
\approx 0.9197\)
Tidak Lulus Sekolah (Wanita):
Risk non-miskin = \(\frac{2359}{3547} \approx
0.6651\)
Risk Difference (RD):
\[RD = 0.9197 - 0.6651 \approx
0.2546\]
Relative Risk (RR):
\[RR = \frac{0.9196}{0.6651} \approx
1.3828\]
Interpretasi:
- Pada Pria, perbedaan risiko antara Universitas dan
Tidak Lulus adalah sekitar 19,22% dengan RR ≈ 1.26.
- Pada Wanita, perbedaan risiko adalah sekitar 25,5%
dengan RR ≈ 1.38.
Meskipun kedua gender menunjukkan bahwa pendidikan tinggi meningkatkan peluang tidak miskin, data menunjukkan bahwa secara absolut peluang tidak miskin pada wanita Universitas (≈ 91,96%) masih lebih rendah dibanding pria Universitas (≈ 92,80%) dan bahwa perbedaan antara tingkat pendidikan rendah dan tinggi cenderung lebih besar pada wanita. Hal ini mendukung hipotesis adanya bias (anti-cewek) dalam peluang ekonomi.
# --- Data Frekuensi (Manual) ---
# Matriks untuk Pria
pria <- matrix(c(1910, 11542,
1025, 2869,
1818, 23788),
nrow = 3, byrow = TRUE)
rownames(pria) <- c("SMA", "Tidak Lulus", "Universitas")
colnames(pria) <- c("Miskin", "Tak Miskin")
total_pria <- sum(pria) # 42952
# Matriks untuk Wanita
wanita <- matrix(c(2016, 9578,
1188, 2359,
2437, 27894),
nrow = 3, byrow = TRUE)
rownames(wanita) <- c("SMA", "Tidak Lulus", "Universitas")
colnames(wanita) <- c("Miskin", "Tak Miskin")
total_wanita <- sum(wanita) # 45472
# Matriks Marginal Gabungan
marginal <- pria + wanita
total_marginal <- sum(marginal) # 88424
# --- Peluang Parsial ---
# Untuk Pria:
pria_parsial <- pria / total_pria
print("Tabel Peluang Parsial - Pria:")
## [1] "Tabel Peluang Parsial - Pria:"
print(round(pria_parsial, 4))
## Miskin Tak Miskin
## SMA 0.0445 0.2687
## Tidak Lulus 0.0239 0.0668
## Universitas 0.0423 0.5538
# Untuk Wanita:
wanita_parsial <- wanita / total_wanita
print("Tabel Peluang Parsial - Wanita:")
## [1] "Tabel Peluang Parsial - Wanita:"
print(round(wanita_parsial, 4))
## Miskin Tak Miskin
## SMA 0.0443 0.2106
## Tidak Lulus 0.0261 0.0519
## Universitas 0.0536 0.6134
# --- Peluang Marginal ---
marginal_parsial <- marginal / total_marginal
print("Tabel Peluang Marginal Gabungan:")
## [1] "Tabel Peluang Marginal Gabungan:"
print(round(marginal_parsial, 4))
## Miskin Tak Miskin
## SMA 0.0444 0.2388
## Tidak Lulus 0.0250 0.0591
## Universitas 0.0481 0.5845
# --- Peluang Bersyarat (Conditional) ---
# Bagi tiap baris pada matriks frekuensi masing-masing pendidikan
pria_cond <- t(apply(pria, 1, function(x) x / sum(x)))
print("Tabel Peluang Bersyarat - Pria:")
## [1] "Tabel Peluang Bersyarat - Pria:"
print(round(pria_cond, 4))
## Miskin Tak Miskin
## SMA 0.1420 0.8580
## Tidak Lulus 0.2632 0.7368
## Universitas 0.0710 0.9290
wanita_cond <- t(apply(wanita, 1, function(x) x / sum(x)))
print("Tabel Peluang Bersyarat - Wanita:")
## [1] "Tabel Peluang Bersyarat - Wanita:"
print(round(wanita_cond, 4))
## Miskin Tak Miskin
## SMA 0.1739 0.8261
## Tidak Lulus 0.3349 0.6651
## Universitas 0.0803 0.9197
# --- Perhitungan Risk Difference dan Relative Risk ---
# Fokus perbandingan: Universitas vs. Tidak Lulus Sekolah
# Untuk Pria:
risk_nonmiskin_pria_univ <- pria["Universitas", "Tak Miskin"] / sum(pria["Universitas", ])
risk_nonmiskin_pria_nolulus <- pria["Tidak Lulus", "Tak Miskin"] / sum(pria["Tidak Lulus", ])
RD_pria <- risk_nonmiskin_pria_univ - risk_nonmiskin_pria_nolulus
RR_pria <- risk_nonmiskin_pria_univ / risk_nonmiskin_pria_nolulus
print(paste("Pria - Risk (Universitas):", round(risk_nonmiskin_pria_univ, 4)))
## [1] "Pria - Risk (Universitas): 0.929"
print(paste("Pria - Risk (Tidak Lulus):", round(risk_nonmiskin_pria_nolulus, 4)))
## [1] "Pria - Risk (Tidak Lulus): 0.7368"
print(paste("Pria - Risk Difference:", round(RD_pria, 4)))
## [1] "Pria - Risk Difference: 0.1922"
print(paste("Pria - Relative Risk:", round(RR_pria, 4)))
## [1] "Pria - Relative Risk: 1.2609"
# Untuk Wanita:
risk_nonmiskin_wanita_univ <- wanita["Universitas", "Tak Miskin"] / sum(wanita["Universitas", ])
risk_nonmiskin_wanita_nolulus <- wanita["Tidak Lulus", "Tak Miskin"] / sum(wanita["Tidak Lulus", ])
RD_wanita <- risk_nonmiskin_wanita_univ - risk_nonmiskin_wanita_nolulus
RR_wanita <- risk_nonmiskin_wanita_univ / risk_nonmiskin_wanita_nolulus
print(paste("Wanita - Risk (Universitas):", round(risk_nonmiskin_wanita_univ, 4)))
## [1] "Wanita - Risk (Universitas): 0.9197"
print(paste("Wanita - Risk (Tidak Lulus):", round(risk_nonmiskin_wanita_nolulus, 4)))
## [1] "Wanita - Risk (Tidak Lulus): 0.6651"
print(paste("Wanita - Risk Difference:", round(RD_wanita, 4)))
## [1] "Wanita - Risk Difference: 0.2546"
print(paste("Wanita - Relative Risk:", round(RR_wanita, 4)))
## [1] "Wanita - Relative Risk: 1.3828"
Berdasarkan analisis data dari ASEC (American Socio Economic Census 2024), didapatkan bahwa: - Pendidikan tinggi (Universitas) berasosiasi dengan peluang tidak miskin yang lebih tinggi dibandingkan dengan tingkat pendidikan rendah (Tidak Lulus Sekolah) untuk kedua gender. - Namun, secara absolute, wanita yang beruniversitas memiliki peluang tidak miskin yang sedikit lebih rendah dibanding pria yang pergi ke universitas (0.9196 vs. 0.9280).
Perhitungan risk difference dan relative risk menunjukkan: - Pria: RD ≈ 0.1922; RR ≈ 1.2609. - Wanita: RD ≈ 0.2546; RR ≈ 1.3828.
Meskipun pendidikan tinggi meningkatkan peluang ekonomi, perbedaan dasar antara pria dan wanita tetap ada—mendukung hipotesis adanya bias anti-cewek yang menyebabkan peluang ekonomi bagi wanita cenderung lebih rendah.
Analisis ini bertujuan untuk menguji apakah variabel Pendidikan (X) dan Status Ekonomi (Y) kondisional independen terhadap Gender (Z). Dalam konteks ini, kita memeriksa apakah hubungan antara pendidikan dan status ekonomi tetap ada ketika kita mengontrol variabel gender.
Menurut Agresti (2007), dua variabel X dan Y dikatakan kondisional independen terhadap Z jika:
\[P(X = i, Y = j \mid Z = k) = P(X = i \mid Z = k) \cdot P(Y = j \mid Z = k)\]
Dobson (1983) juga menegaskan bahwa uji chi-square pada masing-masing strata Z dapat digunakan untuk mengevaluasi ketidakbergantungan kondisional dalam data kategorik.
Untuk Gender = Pria
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 1910 | 11542 | 13452 |
| Tidak Lulus Sekolah | 1025 | 2869 | 3894 |
| Universitas | 1818 | 23788 | 25606 |
| Total | 4753 | 38199 | 42952 |
Total populasi pria = 42952
Peluang gabungan: \[ P(\text{SMA, Miskin} \mid \text{Pria}) = \frac{1910}{42952} \approx 0.0445 \]
Peluang marginal: \[P(\text{SMA} \mid \text{Pria}) = \frac{13452}{42952} \approx 0.3132\] \[P(\text{Miskin} \mid \text{Pria}) = \frac{4753}{42952} \approx 0.1106\]
Perkalian peluang marginal: \[P(\text{SMA} \mid Z) \cdot P(\text{Miskin} \mid Z) = 0.3132 \times 0.1106 \approx 0.0346\]
Perbandingan: \[P(X, Y \mid Z) = 0.0445 \quad \text{vs.} \quad P(X \mid Z) \cdot P(Y \mid Z) = 0.0346\]
→ Terdapat perbedaan nyata, indikasi tidak independen.
Untuk Gender = Wanita
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 2016 | 9578 | 11594 |
| Tidak Lulus Sekolah | 1188 | 2359 | 3547 |
| Universitas | 2437 | 27894 | 30331 |
| Total | 5641 | 39831 | 45472 |
Total populasi wanita = 45472
Peluang gabungan: \[P(\text{Tidak Lulus, Miskin} \mid \text{Wanita}) = \frac{1188}{45472} \approx 0.0261\]
Peluang marginal: \[P(\text{Tidak Lulus} \mid \text{Wanita}) = \frac{3547}{45472} \approx 0.0780\] \[P(\text{Miskin} \mid \text{Wanita}) = \frac{5641}{45472} \approx 0.1241\]
Perkalian peluang marginal: \[0.0780 \times 0.1241 \approx 0.0097\]
Perbandingan: \[P(X, Y \mid Z) = 0.0261 \quad \text{vs.} \quad P(X \mid Z) \cdot P(Y \mid Z) = 0.0097\]
→ Perbedaan sangat besar, menunjukkan tidak adanya conditional independence.
→ Karena 0.0261 ≠ 0.0097, maka tidak kondisional independen
Dalam kedua strata gender, nilai \(P(X, Y \mid Z)\) berbeda nyata dari hasil perkalian \(P(X \mid Z) \cdot P(Y \mid Z)\). Ini memberikan bukti empiris bahwa:
\[\boxed{\text{Pendidikan dan Status Ekonomi tidak kondisional independen terhadap Gender}}\]
# Matriks kontingensi untuk Pria
pria <- matrix(c(1910, 11542,
1025, 2869,
1818, 23788),
nrow = 3, byrow = TRUE)
rownames(pria) <- c("SMA", "Tidak Lulus", "Universitas")
colnames(pria) <- c("Miskin", "Tak Miskin")
# Matriks kontingensi untuk Wanita
wanita <- matrix(c(2016, 9578,
1188, 2359,
2437, 27894),
nrow = 3, byrow = TRUE)
rownames(wanita) <- c("SMA", "Tidak Lulus", "Universitas")
colnames(wanita) <- c("Miskin", "Tak Miskin")
# Uji chi-square per strata Gender
cat("Uji Chi-Square untuk PRIA:\n")
## Uji Chi-Square untuk PRIA:
print(chisq.test(pria))
##
## Pearson's Chi-squared test
##
## data: pria
## X-squared = 1464.4, df = 2, p-value < 2.2e-16
cat("\nUji Chi-Square untuk WANITA:\n")
##
## Uji Chi-Square untuk WANITA:
print(chisq.test(wanita))
##
## Pearson's Chi-squared test
##
## data: wanita
## X-squared = 2249.7, df = 2, p-value < 2.2e-16
Hasil uji chi-square pada kedua strata gender menunjukkan nilai p-value yang sangat kecil (p < 0.001), yang berarti:
Terdapat hubungan signifikan antara Pendidikan dan Status Ekonomi, baik pada Pria maupun Wanita.
Hubungan ini tidak menghilang meskipun telah dikondisikan pada Gender.
Dengan demikian, kita menolak hipotesis null dari conditional independence:
Pendidikan(X) dan Status Ekonomi (Y) tidak kondisional independen terhadap Gender (Z) Pendidikan (X) dan Status Ekonomi (Y) tidak kondisional independen terhadap Gender (Z)
Analisis ini bertujuan untuk mengevaluasi hubungan antara Pendidikan (X) dan Status Ekonomi (Y) dengan mempertimbangkan Gender (Z) sebagai variabel pengkondisi. Ada tiga tahap utama:
Tujuan:
Mengidentifikasi apakah dua variabel kategorik (misalnya Pendidikan dan
Status Ekonomi) saling independen setelah dikondisikan
pada variabel ketiga (misalnya Gender).
Hipotesis:
- \(H_0: X \perp Y \mid Z\)
(X dan Y saling independen dalam setiap strata Z)
- \(H_1: X \neq Y \mid Z\)
(X dan Y berasosiasi meskipun setelah dikondisikan pada Z)
Statistik Uji:
- Lakukan uji chi-square secara
terpisah dalam setiap strata Z.
- Statistik uji pada tiap strata: \[
\chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}}
\] di mana \(O_{ij}\) adalah
frekuensi observasi dan \(E_{ij}\)
adalah frekuensi ekspektasi.
Tujuan:
Mengukur kekuatan asosiasi antara dua variabel (X dan
Y) dengan mengendalikan variabel ketiga (Z). Odds rasio
bersama mencerminkan asosiasi keseluruhan dari X–Y terlepas dari
perbedaan antar strata Z.
Hipotesis:
- \(H_0: \theta_{MH} = 1\)
(odds rasio bersama = 1 → tidak ada asosiasi antara X dan Y setelah
kontrol Z)
- \(H_1: \theta_{MH} \ne 1\)
(ada asosiasi antara X dan Y setelah kontrol Z)
Statistik Uji:
- Gunakan Uji Mantel-Haenszel: \[\theta_{MH} = \frac{\sum_k \frac{a_k
d_k}{n_k}}{\sum_k \frac{b_k c_k}{n_k}}\] di mana \(a_k, b_k, c_k, d_k\) adalah sel dari tabel
2x2 per strata ke-k, dan \(n_k\) total
per strata.
Tujuan:
Mengukur apakah asosiasi X–Y konsisten di seluruh
strata Z. Dengan kata lain, apakah odds rasio X–Y berubah
tergantung nilai Z.
Hipotesis:
- \(H_0\): Odds rasio
sama di semua strata Z (homogen)
- \(H_1\): Odds rasio
berbeda antar strata (tidak homogen)
Statistik Uji:
- Gunakan Uji Breslow-Day untuk homogenitas: -
Bandingkan odds ratio masing-masing strata dengan odds ratio bersama. -
Statistik uji mengikuti distribusi chi-square: \[\chi^2_{BD} \sim \chi^2_{K - 1}\] di mana
\(K\) adalah jumlah strata (misalnya
jumlah level Z)
Data berikut merupakan distribusi frekuensi responden berdasarkan Pendidikan, Status Ekonomi, dan Gender dari ASEC 2024.
Tabel 1: Gender = Pria
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 1910 | 11542 | 13452 |
| Tidak Lulus Sekolah | 1025 | 2869 | 3894 |
| Universitas | 1818 | 23788 | 25606 |
| Total | 4753 | 38199 | 42952 |
Tabel 2: Gender = Wanita
| Pendidikan | Miskin | Tak Miskin | Total |
|---|---|---|---|
| SMA | 2016 | 9578 | 11594 |
| Tidak Lulus Sekolah | 1188 | 2359 | 3547 |
| Universitas | 2437 | 27894 | 30331 |
| Total | 5641 | 39831 | 45472 |
# Uji chi-square untuk PRIA
cat("Uji Chi-Square untuk PRIA:\n")
## Uji Chi-Square untuk PRIA:
chisq.test(matrix(c(1910, 11542, 1025, 2869, 1818, 23788), nrow = 3, byrow = TRUE))
##
## Pearson's Chi-squared test
##
## data: matrix(c(1910, 11542, 1025, 2869, 1818, 23788), nrow = 3, byrow = TRUE)
## X-squared = 1464.4, df = 2, p-value < 2.2e-16
# Uji chi-square untuk WANITA
cat("\nUji Chi-Square untuk WANITA:\n")
##
## Uji Chi-Square untuk WANITA:
chisq.test(matrix(c(2016, 9578, 1188, 2359, 2437, 27894), nrow = 3, byrow = TRUE))
##
## Pearson's Chi-squared test
##
## data: matrix(c(2016, 9578, 1188, 2359, 2437, 27894), nrow = 3, byrow = TRUE)
## X-squared = 2249.7, df = 2, p-value < 2.2e-16
# Gabungkan tabel 2x2x2: Pendidikan = Universitas vs Tidak Lulus, Status = Tak Miskin vs Miskin
common_array <- array(c(
23788, 2869, 1818, 1025,
27894, 2359, 2437, 1188
), dim = c(2, 2, 2),
dimnames = list(
Status = c("Tak Miskin", "Miskin"),
Pendidikan = c("Universitas", "Tidak Lulus"),
Gender = c("Pria", "Wanita")
))
# Uji Mantel-Haenszel
cat("Uji Mantel-Haenszel (Common Odds Ratio):\n")
## Uji Mantel-Haenszel (Common Odds Ratio):
mantelhaen.test(common_array)
##
## Mantel-Haenszel chi-squared test with continuity correction
##
## data: common_array
## Mantel-Haenszel X-squared = 3554.4, df = 1, p-value < 2.2e-16
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 4.910297 5.524422
## sample estimates:
## common odds ratio
## 5.208316
library(vcdExtra)
## Warning: package 'vcdExtra' was built under R version 4.3.3
## Loading required package: vcd
## Warning: package 'vcd' was built under R version 4.3.3
## Loading required package: grid
## Loading required package: gnm
## Warning: package 'gnm' was built under R version 4.3.3
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
# Uji homogenitas antar strata (Breslow-Day Test)
cat("Uji Homogenitas Odds Rasio (Breslow-Day):\n")
## Uji Homogenitas Odds Rasio (Breslow-Day):
BreslowDayTest(common_array)
##
## Breslow-Day test on Homogeneity of Odds Ratios
##
## data: common_array
## X-squared = 12.111, df = 1, p-value = 0.0005012
Uji Chi-Square pada masing-masing strata menunjukkan adanya asosiasi signifikan antara Pendidikan dan Status Ekonomi.
Odds rasio bersama dari uji Mantel-Haenszel signifikan → menunjukkan adanya hubungan yang konsisten secara keseluruhan.
Uji Breslow-Day menunjukkan apakah asosiasi tersebut bersifat heterogen atau berbeda antar strata Gender.
Disimpulkan bahwa: Pendidikan dan Status Ekonomi tidak kondisional independen terhadap Gender, dan besar asosiasi bervariasi antar gender. Disimpulkan bahwa: Pendidikan dan Status Ekonomi tidak kondisional independen terhadap Gender, dan besar asosiasi bervariasi antar gender.
Generalized Linear Models (GLM) adalah kerangka umum untuk memodelkan hubungan antara variabel respon dan satu atau lebih variabel prediktor. GLM memperluas model regresi linear klasik dengan mengakomodasi berbagai tipe distribusi dari keluarga eksponensial seperti Normal, Binomial, Poisson, dan Gamma. Ini memungkinkan kita untuk menangani data yang bersifat diskret, proporsi, maupun hitungan.
GLM terdiri dari tiga komponen utama:
Distribusi eksponensial (Exponential Family):
Model GLM mengasumsikan bahwa variabel respon \(Y\) berasal dari keluarga distribusi eksponensial yang memiliki bentuk umum: \[f(y; \theta, \phi) = \exp\left\{ \frac{y \theta - b(\theta)}{a(\phi)} + c(y, \phi) \right\}\] Di mana:
Fungsi link (Link Function):
Fungsi link \(g(\mu)\) menghubungkan nilai harapan dari variabel respon \(\mu = \mathbb{E}(Y)\) dengan prediktor linear: \[g(\mu) = \eta = X\beta\] Fungsi ini memungkinkan transformasi nilai harapan agar sesuai dengan rentang domain distribusi, misalnya logit untuk data biner.
Prediktor Linear (Linear Predictor):
\(\eta = X\beta\), di mana:
Keluarga Distribusi Eksponensial
Keluarga distribusi eksponensial adalah kelas luas dari distribusi probabilitas yang mencakup banyak distribusi terkenal, seperti Poisson, Normal, dan Binomial. Sebuah distribusi dikatakan termasuk dalam keluarga eksponensial jika fungsi kepadatan probabilitas (atau fungsi massa probabilitas) dapat ditulis dalam bentuk tertentu.
Bentuk Umum
Bentuk umum dari sebuah distribusi probabilitas dalam keluarga eksponensial adalah:
\[ f(y; \theta) = \exp \left( a(y) b(\theta) + c(\theta) + d(y) \right) \]
Dimana: - \(y\) adalah data yang diamati. - \(\theta\) adalah parameter (atau parameter-parameter) distribusi. - \(a(y)\), \(b(\theta)\), \(c(\theta)\), dan \(d(y)\) adalah fungsi yang bergantung pada \(y\) dan \(\theta\).
Contoh Umum
Beberapa distribusi yang sering digunakan termasuk dalam keluarga eksponensial:
Distribusi Poisson
Distribusi Poisson, yang sering digunakan untuk memodelkan data hitungan, adalah bagian dari keluarga eksponensial. Fungsi massa probabilitas (PMF) dari distribusi Poisson dapat ditulis sebagai:
\[ f(y; \lambda) = \frac{\lambda^y e^{-\lambda}}{y!} \]
Ini adalah distribusi keluarga eksponensial dimana: - \(a(y) = y\) - \(b(\lambda) = \log(\lambda)\) - \(c(\lambda) = -\lambda\) - \(d(y) = -\log(y!)\)
Distribusi Normal
Distribusi Normal adalah anggota lain dari keluarga eksponensial. Fungsi kepadatan probabilitas (PDF) dari distribusi Normal adalah:
\[ f(y; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( -\frac{(y - \mu)^2}{2\sigma^2} \right) \]
Bisa ditulis ulang dalam bentuk eksponensial sebagai:
\[ f(y; \theta) = \exp \left( \frac{y \mu}{\sigma^2} - \frac{\mu^2}{2\sigma^2} - \frac{y^2}{2\sigma^2} + \frac{\log(\sigma)}{2} \right) \]
Dimana \(\mu\) adalah rata-rata dan \(\sigma^2\) adalah varians.
Distribusi Binomial
Distribusi Binomial juga dapat diekspresikan dalam bentuk keluarga eksponensial. Fungsi massa probabilitasnya adalah:
\[ f(y; n, p) = \binom{n}{y} p^y (1 - p)^{n - y} \]
Ini dapat ditulis dalam bentuk eksponensial sebagai:
\[ f(y; p) = \exp \left( y \log(p) + (n - y) \log(1 - p) + \log \binom{n}{y} \right) \]
Dimana: - \(n\) adalah jumlah percobaan, - \(p\) adalah probabilitas sukses, - \(y\) adalah jumlah sukses.
Pentingnya Keluarga Eksponensial
Keluarga eksponensial memiliki beberapa sifat penting: - Kemudahan untuk Model Linear Ternerap (GLM): Banyak metode statistik, terutama Model Linear Ternerap (GLM), mengandalkan distribusi dari keluarga eksponensial. Ini menjadikan keluarga eksponensial sangat penting dalam konteks model regresi, terutama ketika menangani data non-normal seperti data hitungan atau hasil biner. - Sufficiency dan Likelihood: Keluarga eksponensial memberikan kerangka kerja untuk turunan estimasi maksimum likelihood (MLE). Statistik cukup untuk distribusi keluarga eksponensial sering kali dapat diturunkan langsung dari bentuk distribusinya.
GLM digunakan luas dalam berbagai bidang kehidupan untuk memodelkan fenomena yang tidak dapat ditangani oleh regresi linear biasa. Beberapa aplikasinya:
GLM memberikan fleksibilitas dalam menangani data biner, multinomial, ordinal, atau berupa hitungan, sehingga menjadikannya sangat relevan dalam pengambilan keputusan berbasis data.
Dalam GLM, bentuk ekspektasi dan varians dari respon \(Y\) diturunkan dari sifat distribusi eksponensial:
Ekspektasi: \[ \mathbb{E}(Y) = \mu = b'(\theta) \] Menunjukkan bahwa nilai harapan ditentukan oleh turunan pertama dari fungsi kumulatif kanonik \(b(\theta)\).
Varians: \[ \text{Var}(Y) = a(\phi) \cdot b''(\theta) \] Variansnya bergantung pada parameter dispersi dan turunan kedua dari \(b(\theta)\).
Tabel berikut memberikan ringkasan beberapa distribusi yang umum digunakan dalam GLM:
| Distribusi | Fungsi Link (g) | \(\mathbb{E}(Y)\) | \(\text{Var}(Y)\) |
|---|---|---|---|
| Normal | Identitas | \(\mu\) | \(\sigma^2\) |
| Binomial | Logit | \(p\) | \(np(1-p)\) |
| Poisson | Log | \(\lambda\) | \(\lambda\) |
Fungsi link dipilih berdasarkan distribusi dan interpretasi yang diinginkan. Misalnya, logit link memastikan bahwa prediksi probabilitas tetap dalam rentang (0, 1).
Penaksiran parameter \(\beta\) dalam GLM dilakukan menggunakan pendekatan Maximum Likelihood Estimation (MLE). Tujuan dari MLE adalah untuk mencari nilai parameter yang memaksimalkan fungsi likelihood berdasarkan data yang diamati.
Fungsi log-likelihood dari model: \[\ell(\beta) = \sum_{i=1}^n \left[ y_i \theta_i - b(\theta_i) \right] / a(\phi) + c(y_i, \phi)\]
Karena bentuk fungsi ini tidak selalu memiliki solusi eksplisit, maka digunakan metode numerik, yaitu:
Rumus iteratif untuk memperbarui estimasi parameter: \[\hat{\beta}^{(t+1)} = \hat{\beta}^{(t)} + (X^T W X)^{-1} X^T W z\] Dengan: - \(z\): working dependent variable (pembobotan residual) - \(W\): matriks bobot diagonal, tergantung pada varians dari distribusi dan derivatif fungsi link
Selain IRLS, algoritma Newton-Raphson juga digunakan secara umum untuk mengestimasi parameter \(\beta\). Metode ini berbasis pada aproksimasi Taylor orde dua terhadap fungsi log-likelihood:
\[\beta^{(t+1)} = \beta^{(t)} - H^{-1}(\beta^{(t)}) \cdot \nabla \ell(\beta^{(t)})\]
Di mana: - \(H(\beta)\) adalah matriks Hessian dari \(\ell(\beta)\) - \(\nabla \ell(\beta)\) adalah gradien dari log-likelihood
Langkah-langkah umum metode Newton-Raphson dalam konteks GLM: 1. Tentukan tebakan awal \(\beta^{(0)}\) 2. Hitung fungsi log-likelihood dan turunannya: \(\nabla \ell(\beta)\), \(H(\beta)\) 3. Perbarui parameter menggunakan rumus Newton-Raphson 4. Ulangi iterasi hingga konvergensi (perubahan kecil pada \(\beta\)) 5. Evaluasi hasil: estimasi parameter, standar error, dan inferensi lanjutan
Dalam GLM, Fisher Scoring adalah versi stabil dari Newton-Raphson karena menggantikan Hessian aktual dengan informasi Fisher (nilai harapan Hessian).
Setelah parameter \(\hat{\beta}\) diperoleh, kita dapat melakukan inferensi untuk menilai apakah prediktor signifikan secara statistik.
Uji Wald mengevaluasi hipotesis nol bahwa \(\beta_j = 0\) melalui statistik: \[ W = \frac{\hat{\beta}_j^2}{\text{Var}(\hat{\beta}_j)} \] Statistik ini mengikuti distribusi \(\chi^2_1\).
Uji LRT membandingkan dua model: satu model penuh dan satu model ter-reduksi: \[ G^2 = -2 \left[ \ell_{reduced} - \ell_{full} \right] \] Statistik \(G^2\) mengikuti distribusi \(\chi^2\) dengan derajat bebas sama dengan selisih jumlah parameter.
Untuk mengevaluasi kecocokan model secara keseluruhan, digunakan: - Deviance: ukuran perbedaan antara model dan model sempurna - AIC (Akaike Information Criterion): menggabungkan kecocokan model dan penalti kompleksitas - BIC (Bayesian Information Criterion): mirip AIC, tetapi penalti kompleksitas lebih besar dan mempertimbangkan ukuran sampel - Pseudo-R²: ukuran alternatif “kekuatan prediksi” model
Regresi logistik adalah salah satu bentuk Generalized Linear Model (GLM) yang digunakan ketika variabel respon bersifat biner, yaitu hanya memiliki dua kategori (misalnya: sukses/gagal, sakit/sehat, ya/tidak). Tujuan utama model ini adalah memodelkan probabilitas kejadian dari suatu peristiwa sebagai fungsi dari satu atau lebih variabel prediktor (Akinyemi, 2021).
Secara matematis, kita menghubungkan peluang keberhasilan \(p = P(Y = 1)\) dengan prediktor \(X\) melalui fungsi logit (Akinyemi, 2021):
\[\text{logit}(p) = \log\left(\frac{p}{1 - p}\right) = \eta = \beta_0 + \beta_1 X_1 + \dots + \beta_k X_k\]
Dari sini, kita dapat menyatakan probabilitas keberhasilan sebagai:
\[P(Y = 1 \mid X) = \frac{\exp(\eta)}{1 + \exp(\eta)} = \frac{1}{1 + \exp(-\eta)}\]
Fungsi logistik \(\frac{1}{1 + e^{-\eta}}\) memastikan nilai keluaran berada dalam interval (0, 1), sesuai interpretasi probabilitas. Selain itu, regresi logistik juga memiliki interpretasi koefisien \(\beta_j\) sebagai efek perubahan log-odds akibat peningkatan satu unit pada variabel \(X_j\).
Fungsi Utama - Memodelkan probabilitas suatu kejadian biner - Mengestimasi pengaruh prediktor terhadap probabilitas tersebut - Interpretasi koefisien dalam bentuk odds ratio: \[ OR_j = \exp(\beta_j) \] Odds ratio mengukur perbandingan peluang ketika \(X_j\) meningkat satu unit
Regresi logistik berguna dalam analisis klasifikasi biner di berbagai bidang.
Estimasi parameter \(\beta\) dilakukan melalui Maximum Likelihood Estimation (MLE). Asumsikan kita memiliki sampel \((x_i, y_i)\) untuk \(i = 1, \dots, n\), dengan \(y_i \in \{0, 1\}\).
Fungsi log-likelihood: \[\ell(\beta) = \sum_{i=1}^n \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right]\] Dengan: \[p_i = \frac{\exp(X_i^T \beta)}{1 + \exp(X_i^T \beta)}\]
Karena fungsi \(\ell(\beta)\) tidak dapat dimaksimalkan secara eksplisit, maka digunakan pendekatan numerik seperti: - Newton-Raphson: \[\beta^{(t+1)} = \beta^{(t)} - H^{-1}(\beta^{(t)}) \nabla \ell(\beta^{(t)})\] - Iteratively Reweighted Least Squares (IRLS), versi efisien dari Newton-Raphson untuk GLM
Langkah-langkah umum estimasi: 1. Tentukan tebakan awal \(\beta^{(0)}\) 2. Hitung gradien \(\nabla \ell(\beta)\) dan Hessian \(H(\beta)\) 3. Perbarui parameter dengan Newton-Raphson/IRLS 4. Iterasi hingga konvergen (perubahan sangat kecil)
Setelah memperoleh estimasi \(\hat{\beta}\), kita ingin menguji apakah setiap koefisien berbeda signifikan dari nol.
Hipotesis: \[H_0: \beta_j = 0 \quad vs \quad H_1: \beta_j \ne 0\]
Metode Inferensi
Uji Wald: \[ W_j = \left(\frac{\hat{\beta}_j}{SE(\hat{\beta}_j)}\right)^2 \sim \chi^2_1 \] Cocok digunakan jika \(\hat{\beta}_j\) normal asimtotik.
Uji Likelihood Ratio Test (LRT): \[ G^2 = -2 \left[ \ell_{reduced} - \ell_{full} \right] \sim \chi^2_{df} \] Bandingkan model penuh dan model dengan \(\beta_j = 0\)
Confidence Interval: \[ \hat{\beta}_j \pm Z_{\alpha/2} \cdot SE(\hat{\beta}_j) \] Interval keyakinan untuk pengaruh prediktor
Visualisasi membantu memahami hubungan antara prediktor dan probabilitas keberhasilan.
a. Kurva Logistik - Menampilkan hubungan \(X\) dengan \(P(Y = 1)\)
b. Plot Prediksi - Menampilkan probabilitas prediksi dan kelas aktual
c. Residual Diagnostics - Residual deviance - Pearson residuals untuk deteksi outlier
Contoh R: Kurva Logistik
x <- seq(-10, 10, length = 100)
eta <- 1.5 + 0.8 * x
p <- exp(eta) / (1 + exp(eta))
plot(x, p, type = "l", lwd = 2, col = "blue",
ylab = "P(Y = 1)", xlab = "X",
main = "Kurva Logistik")
abline(h = 0.5, lty = 2)
Dalam studi ini, digunakan data simulasi untuk memodelkan hubungan antara konsumsi makanan sehat, Olahraga dan risiko penyakit jantung menggunakan regresi logistik.
Dalam studi ini, digunakan data simulasi untuk memodelkan hubungan antara konsumsi makanan sehat dan status penyakit jantung menggunakan regresi logistik. Data simulasi ini menggunakan prediktor kontinu.
Tujuan
Persiapan dan Import Data
# Import pustaka
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:vcdExtra':
##
## summarise
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(broom)
## Warning: package 'broom' was built under R version 4.3.3
# Set seed untuk reprodusibilitas
set.seed(42)
# Simulasi data
n <- 1000
data_simulasi <- data.frame(
konsumsi_makanan_sehat = runif(n, 0, 100), # Simulasi konsumsi makanan sehat (skor 0-100)
olahraga = runif(n, 0, 10), # Simulasi olahraga dalam jam per minggu
risiko_penyakit_jantung = rbinom(n, 1, prob = 0.3) # Simulasi status penyakit jantung (0 = Negatif, 1 = Positif)
)
# Menampilkan data pertama
head(data_simulasi)
## konsumsi_makanan_sehat olahraga risiko_penyakit_jantung
## 1 91.48060 8.4829322 1
## 2 93.70754 0.6274633 0
## 3 28.61395 8.1984509 0
## 4 83.04476 5.3936029 1
## 5 64.17455 4.9902010 1
## 6 51.90959 0.2222732 1
Estimasi GLM
# Estimasi model regresi logistik menggunakan fungsi glm
model <- glm(risiko_penyakit_jantung ~ konsumsi_makanan_sehat + olahraga,
data = data_simulasi, family = binomial)
# Ringkasan Model
summary(model)
##
## Call:
## glm(formula = risiko_penyakit_jantung ~ konsumsi_makanan_sehat +
## olahraga, family = binomial, data = data_simulasi)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.031e+00 1.791e-01 -5.757 8.57e-09 ***
## konsumsi_makanan_sehat 4.468e-03 2.357e-03 1.896 0.058 .
## olahraga -1.486e-05 2.319e-02 -0.001 0.999
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1235.0 on 999 degrees of freedom
## Residual deviance: 1231.4 on 997 degrees of freedom
## AIC: 1237.4
##
## Number of Fisher Scoring iterations: 4
# Odds ratio
exp(coef(model)) # Menghitung odds ratio
## (Intercept) konsumsi_makanan_sehat olahraga
## 0.3567100 1.0044785 0.9999851
loglik <- function(beta) {
eta <- beta[1] + beta[2] * data_simulasi$konsumsi_makanan_sehat + beta[3] * data_simulasi$olahraga
p <- 1 / (1 + exp(-eta))
# Batasi nilai p biar tidak menjadi 0 atau 1 murni
p <- pmin(pmax(p, 1e-8), 1 - 1e-8)
-sum(data_simulasi$risiko_penyakit_jantung * log(p) + (1 - data_simulasi$risiko_penyakit_jantung) * log(1 - p))
}
# Inisialisasi beta (koefisien awal)
init_beta <- c(0, 0, 0)
mle_manual <- optim(par = init_beta, fn = loglik, hessian = TRUE)
# Hasil estimasi koefisien
mle_manual$par
## [1] -1.0305436937 0.0044723629 -0.0001092084
# Odds ratio
exp(mle_manual$par) # Menghitung odds ratio
## [1] 0.3568129 1.0044824 0.9998908
f_grad <- function(beta) {
eta <- beta[1] + beta[2] * data_simulasi$konsumsi_makanan_sehat + beta[3] * data_simulasi$olahraga
p <- 1 / (1 + exp(-eta))
X <- model.matrix(~ konsumsi_makanan_sehat + olahraga, data = data_simulasi)
t(X) %*% (data_simulasi$risiko_penyakit_jantung - p)
}
f_hess <- function(beta) {
eta <- beta[1] + beta[2] * data_simulasi$konsumsi_makanan_sehat + beta[3] * data_simulasi$olahraga
p <- 1 / (1 + exp(-eta))
w <- p * (1 - p)
X <- model.matrix(~ konsumsi_makanan_sehat + olahraga, data = data_simulasi)
t(X) %*% (w * X)
}
beta <- c(0, 0, 0)
for (i in 1:10) {
grad <- f_grad(beta)
hess <- f_hess(beta)
beta <- beta + solve(hess, grad)
}
beta
## [,1]
## (Intercept) -1.030832e+00
## konsumsi_makanan_sehat 4.468484e-03
## olahraga -1.486398e-05
exp(beta) # Menghitung odds ratio
## [,1]
## (Intercept) 0.3567100
## konsumsi_makanan_sehat 1.0044785
## olahraga 0.9999851
summary_fit <- summary(model)
beta_hat <- summary_fit$coefficients[, 1]
se_beta <- summary_fit$coefficients[, 2]
wald_stat <- (beta_hat / se_beta)^2
p_wald <- 1 - pchisq(wald_stat, df = 1)
cbind(Estimate = beta_hat, SE = se_beta, Wald_Stat = wald_stat, P_Value = p_wald)
## Estimate SE Wald_Stat P_Value
## (Intercept) -1.030832e+00 0.179060794 3.314170e+01 8.568118e-09
## konsumsi_makanan_sehat 4.468484e-03 0.002357352 3.593119e+00 5.801926e-02
## olahraga -1.486398e-05 0.023185833 4.109839e-07 9.994885e-01
Visualisasi Model
# Menambahkan probabilitas prediksi ke data
data_simulasi$prob_pred <- predict(model, type = "response")
# Visualisasi kurva logistik
ggplot(data_simulasi, aes(x = konsumsi_makanan_sehat, y = risiko_penyakit_jantung)) +
geom_jitter(height = 0.1, alpha = 0.1) +
geom_line(aes(y = prob_pred), color = "blue", linewidth = 1) + # Ganti size -> linewidth
labs(title = "Model Regresi Logistik",
x = "Konsumsi Makanan Sehat (Ya/Tidak)",
y = "Probabilitas Menderita Penyakit Jantung") +
theme_minimal()
Evaluasi Model
# Deviance
with(model, null.deviance - deviance)
## [1] 3.603796
# AIC
AIC(model)
## [1] 1237.378
# Confusion Matrix
pred_class <- ifelse(data_simulasi$prob_pred > 0.3, 1, 0)
table(Prediksi = pred_class, Aktual = data_simulasi$risiko_penyakit_jantung)
## Aktual
## Prediksi 0 1
## 0 313 120
## 1 379 188
Berdasarkan hasil analisis regresi logistik terhadap data risiko penyakit jantung yang dipengaruhi oleh konsumsi makanan sehat dan olahraga, dapat disimpulkan sebagai berikut:
Koefisien Regresi:
Odds Ratio:
Signifikansi Statistik:
Evaluasi Model:
Confusion Matrix:
Prediksi vs Aktual:
Prediksi 0 Prediksi 1
Aktual 0: 313 120
Aktual 1: 379 188
Kesimpulan Akhir:
Poisson regression adalah jenis Generalized Linear Model (GLM) yang digunakan untuk menganalisis data bertipe count (jumlah kejadian dalam suatu waktu/ruang). Model ini sangat relevan ketika (Widyaningsih, 2023):
Fungsi utama Poisson Regression adalah untuk: - Memprediksi jumlah kejadian (counts) dari variabel dependen Y berdasarkan variabel independen X. - Menjelaskan pengaruh predictor (X) terhadap jumlah rata-rata kejadian.
Cocok digunakan untuk: - Jumlah pelanggan datang dalam sehari. - Jumlah kecelakaan di suatu wilayah. - Jumlah kesalahan produksi per batch, dll.
Model Poisson secara umum:
\[\log(\mu_i) = \eta_i = \beta_0 + \beta_1 X_{i1} + \dots + \beta_p X_{ip}\]
atau
\[\mu_i = \exp(\beta_0 + \beta_1 X_{i1} + \dots + \beta_p X_{ip})\]
Log-likelihood dari model Poisson:
\[\ell(\beta) = \sum_{i=1}^{n} \left[y_i \log(\mu_i) - \mu_i - \log(y_i!)\right]\]
Dengan substitusi \(\mu_i = e^{x_i^T \beta}\):
\[\ell(\beta) = \sum_{i=1}^{n} \left[y_i x_i^T \beta - e^{x_i^T \beta} - \log(y_i!)\right]\]
Estimator \(\hat{\beta}\) diperoleh
dengan memaksimalkan log-likelihood secara numerik (misalnya dengan
glm() di R).
IRLS adalah metode numerik umum dalam GLM. Prosedurnya:
Sampai konvergen (perubahan kecil pada \(\beta\)). Referensi: Dobson (1983, Ch. 4)【40:3†source】
Uji Wald
\[W = \left(\frac{\hat{\beta}_j}{SE(\hat{\beta}_j)}\right)^2 \sim \chi^2_{1}\]
Likelihood Ratio Test (LRT)
\[G^2 = -2 [\ell(H_0) - \ell(H_1)] \sim \chi^2_{df}\]
Confidence Interval
\[CI_{\beta_j} = \hat{\beta}_j \pm z_{\alpha/2} SE(\hat{\beta}_j)\]
Akaike Information Criterion (AIC)
\[\text{AIC} = -2 \ell(\hat{\beta}) + 2k\]
Bayesian Information Criterion (BIC)
\[\text{BIC} = -2 \ell(\hat{\beta}) + k \log(n)\]
Goodness-of-Fit
Kasus
Data ini diambil dari Open Data Jawa Barat (2021) yang mencatat jumlah kasus HIV/AIDS berdasarkan kabupaten/kota di Provinsi Jawa Barat. Salah satu faktor yang diasumsikan memengaruhi jumlah kasus adalah jumlah fasilitas kesehatan per 100.000 penduduk.
Tujuan analisis ini adalah untuk melihat apakah jumlah fasilitas kesehatan memiliki pengaruh signifikan terhadap jumlah kasus HIV/AIDS menggunakan Poisson Regression.
Import dan Eksplorasi Data
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'tibble' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::select() masks MASS::select()
## ✖ dplyr::summarise() masks vcdExtra::summarise()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom)
library(ggplot2)
library(numDeriv)
data <- read.csv("C:\\Users\\HP\\Documents\\KULIAH\\SEMESTER 4\\ADK\\HIV.csv", sep=";", dec=".")
data$FASKES_SCALED <- scale(data$FASILITAS_100000POP)
head(data)
## KABUPATEN FASILITAS_100000POP KASUS_HIV FASKES_SCALED
## 1 Bogor 99 430 -0.5457097
## 2 Sukabumi 132 117 0.8435112
## 3 Cianjur 122 111 0.4225352
## 4 Bandung 121 225 0.3804376
## 5 Garut 163 172 2.1485369
## 6 Tasikmalaya 131 68 0.8014136
summary(data)
## KABUPATEN FASILITAS_100000POP KASUS_HIV FASKES_SCALED.V1
## Length:27 Min. : 58 Min. : 4.0 Min. :-2.2717114
## Class :character 1st Qu.: 99 1st Qu.: 83.5 1st Qu.:-0.5457097
## Mode :character Median :110 Median :123.0 Median :-0.0826360
## Mean :112 Mean :167.8 Mean : 0.0000000
## 3rd Qu.:129 3rd Qu.:235.5 3rd Qu.: 0.7172184
## Max. :163 Max. :430.0 Max. : 2.1485369
Pemodelan Poisson Regression (via GLM)
Model Poisson cocok untuk data count (hiv_aids), dan kita gunakan: \[ \log(\mu_i) = \beta_0 + \beta_1 x_i \]
dengan \(x_i\) adalah jumlah fasilitas kesehatan per 100 ribu penduduk.
model <- glm(KASUS_HIV ~ FASKES_SCALED, data = data, family = poisson)
summary(model)
##
## Call:
## glm(formula = KASUS_HIV ~ FASKES_SCALED, family = poisson, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 5.07117 0.01559 325.21 <2e-16 ***
## FASKES_SCALED -0.32440 0.01474 -22.02 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2024.7 on 26 degrees of freedom
## Residual deviance: 1547.7 on 25 degrees of freedom
## AIC: 1731.4
##
## Number of Fisher Scoring iterations: 5
exp(coef(model)) # Odds ratio
## (Intercept) FASKES_SCALED
## 159.3610488 0.7229642
Estimasi MLE Secara Manual dan Newton-Raphson
Log-Likelihood Manual + Optim
loglik <- function(beta) {
eta <- beta[1] + beta[2] * data$FASKES_SCALED
mu <- exp(eta)
-sum(data$KASUS_HIV * log(mu) - mu - lgamma(data$KASUS_HIV + 1))
}
init_beta <- c(0, 0)
mle_manual <- optim(par = init_beta, fn = loglik, hessian = TRUE)
mle_manual$par
## [1] 5.0709520 -0.3247086
exp(mle_manual$par)
## [1] 159.3259264 0.7227379
Newton-Raphson
# Gradient
f_grad <- function(beta) {
eta <- beta[1] + beta[2] * data$FASKES_SCALED
mu <- exp(eta)
X <- model.matrix(~ FASILITAS_100000POP, data)
t(X) %*% (data$KASUS_HIV - mu)
}
# Hessian
f_hess <- function(beta) {
eta <- beta[1] + beta[2] * data$FASKES_SCALED
mu <- exp(eta)
X <- model.matrix(~ FASILITAS_100000POP, data)
W <- diag(as.numeric(mu))
t(X) %*% W %*% X
}
beta_nr <- c(0, 0)
for (i in 1:10) {
grad <- f_grad(beta_nr)
hess <- f_hess(beta_nr)
beta_nr <- beta_nr + solve(hess, grad)
}
beta_nr
## [,1]
## (Intercept) 421.976530
## FASILITAS_100000POP -2.359367
exp(beta_nr)
## [,1]
## (Intercept) 1.828430e+183
## FASILITAS_100000POP 9.448001e-02
Evaluasi Model
AIC(model)
## [1] 1731.361
BIC(model)
## [1] 1733.953
model$deviance
## [1] 1547.697
model$null.deviance
## [1] 2024.695
Deteksi Overdispersion
overdispersion <- model$deviance / model$df.residual
overdispersion
## [1] 61.90786
Inferensi Parameter: Uji Wald
coefs <- summary(model)$coefficients
beta_hat <- coefs[,1]
se_beta <- coefs[,2]
wald_stat <- (beta_hat / se_beta)^2
p_value <- 1 - pchisq(wald_stat, df = 1)
cbind(Estimate = beta_hat, StdError = se_beta, Wald_Stat = wald_stat, P_Value = p_value)
## Estimate StdError Wald_Stat P_Value
## (Intercept) 5.0711724 0.01559354 105761.3635 0
## FASKES_SCALED -0.3243955 0.01473522 484.6592 0
Visualisasi Model
data$predicted <- predict(model, type = "response")
ggplot(data, aes(x = FASKES_SCALED, y = KASUS_HIV)) +
geom_point(color = "darkred") +
geom_line(aes(y = predicted), color = "blue", linewidth = 1) +
labs(title = "Poisson Regression: Jumlah Faskes vs Kasus HIV/AIDS",
x = "Fasilitas Kesehatan per 100.000 Penduduk",
y = "Jumlah Kasus HIV/AIDS") +
theme_minimal()
Kesimpulan
Berdasarkan hasil analisis regresi Poisson terhadap hubungan antara jumlah fasilitas kesehatan per 100.000 penduduk dan jumlah kasus HIV di 27 kabupaten/kota di Jawa Barat tahun 2021, diperoleh kesimpulan sebagai berikut:
glm() dan optim() menghasilkan nilai yang
hampir identik, menunjukkan kestabilan numerik model.Model Poisson mampu menangkap hubungan negatif signifikan antara ketersediaan fasilitas kesehatan dan insiden HIV/AIDS. Akan tetapi, tingginya overdispersion menyarankan penggunaan model alternatif seperti Negative Binomial Regression atau quasi-Poisson untuk mendapatkan inferensi parameter yang lebih robust.
Dalam studi ini, kita akan membahas regresi logistik untuk memodelkan sebuah variabel dependen biner yang dipengaruhi oleh tiga jenis variabel prediktor:
Kita akan menyimulasikan data untuk Tingkat Kepuasan (ordinal), Usia (rasio), dan Jenis Kelamin (nominal) untuk memprediksi Pilihannya (biner: apakah membeli produk atau tidak). Kita juga akan melakukan perlakuan variabel ordinal, yaitu memperlakukannya sebagai nominal dan rasio, untuk melihat bagaimana perbedaan tersebut mempengaruhi hasil model.
Simulasi Data
Langkah pertama adalah mensimulasikan data untuk Usia, Jenis Kelamin, dan Tingkat Kepuasan.
# Set seed untuk reprodusibilitas
set.seed(123)
# Jumlah data
n <- 200
# Simulasi variabel prediktor
Usia <- round(rnorm(n, mean = 30, sd = 7)) # Usia individu (Rasio)
JenisKelamin <- rbinom(n, 1, 0.5) # Jenis Kelamin (Nominal: 0 = Pria, 1 = Wanita)
TingkatKepuasan <- sample(1:3, n, replace = TRUE, prob = c(0.3, 0.4, 0.3)) # Tingkat Kepuasan (Ordinal: 1=Buruk, 2=Cukup, 3=Baik)
# Variabel dependen (Apakah membeli produk atau tidak)
Pilihannya <- rbinom(n, 1, 0.5)
# Membuat data frame
df <- data.frame(Pilihannya = factor(Pilihannya, levels = c(0, 1), labels = c("Tidak", "Ya")),
Usia,
JenisKelamin = factor(JenisKelamin, levels = c(0, 1), labels = c("Pria", "Wanita")),
TingkatKepuasan = factor(TingkatKepuasan, levels = c(1, 2, 3), labels = c("Buruk", "Cukup", "Baik")))
# Melihat beberapa baris pertama dari dataset
head(df)
## Pilihannya Usia JenisKelamin TingkatKepuasan
## 1 Tidak 26 Wanita Cukup
## 2 Tidak 28 Pria Baik
## 3 Tidak 41 Wanita Cukup
## 4 Tidak 30 Wanita Cukup
## 5 Tidak 31 Pria Cukup
## 6 Ya 42 Pria Buruk
# Memuat paket yang diperlukan
library(nnet)
## Warning: package 'nnet' was built under R version 4.3.3
# Membangun model regresi logistik
model_full <- glm(Pilihannya ~ Usia + JenisKelamin + TingkatKepuasan, data = df, family = binomial)
# Menampilkan ringkasan Model
summary(model_full)
##
## Call:
## glm(formula = Pilihannya ~ Usia + JenisKelamin + TingkatKepuasan,
## family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.044987 0.695678 0.065 0.948
## Usia -0.003813 0.021611 -0.176 0.860
## JenisKelaminWanita 0.127084 0.284633 0.446 0.655
## TingkatKepuasanCukup 0.074852 0.338682 0.221 0.825
## TingkatKepuasanBaik 0.193070 0.370840 0.521 0.603
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 276.94 on 199 degrees of freedom
## Residual deviance: 276.47 on 195 degrees of freedom
## AIC: 286.47
##
## Number of Fisher Scoring iterations: 3
Kita akan mencoba dua pendekatan berbeda dalam memperlakukan variabel TingkatKepuasan yang bersifat ordinal.
Sebagai Nominal: Menganggap TingkatKepuasan sebagai variabel nominal tanpa urutan.
Sebagai Rasio: Menganggap TingkatKepuasan sebagai variabel rasio (misalnya, 1 untuk Buruk, 2 untuk Cukup, 3 untuk Baik).
# Mengubah TingkatKepuasan menjadi variabel nominal
df$TingkatKepuasan_nominal <- factor(df$TingkatKepuasan, levels = c("Buruk", "Cukup", "Baik"))
# Model dengan TingkatKepuasan sebagai nominal
model_nominal <- glm(Pilihannya ~ Usia + JenisKelamin + TingkatKepuasan_nominal, data = df, family = binomial)
# Menampilkan ringkasan Model Nominal
summary(model_nominal)
##
## Call:
## glm(formula = Pilihannya ~ Usia + JenisKelamin + TingkatKepuasan_nominal,
## family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.044987 0.695678 0.065 0.948
## Usia -0.003813 0.021611 -0.176 0.860
## JenisKelaminWanita 0.127084 0.284633 0.446 0.655
## TingkatKepuasan_nominalCukup 0.074852 0.338682 0.221 0.825
## TingkatKepuasan_nominalBaik 0.193070 0.370840 0.521 0.603
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 276.94 on 199 degrees of freedom
## Residual deviance: 276.47 on 195 degrees of freedom
## AIC: 286.47
##
## Number of Fisher Scoring iterations: 3
# Model dengan TingkatKepuasan sebagai rasio
model_ordinal <- glm(Pilihannya ~ Usia + JenisKelamin + as.numeric(TingkatKepuasan), data = df, family = binomial)
# Menampilkan ringkasan Model Ordinal
summary(model_ordinal)
##
## Call:
## glm(formula = Pilihannya ~ Usia + JenisKelamin + as.numeric(TingkatKepuasan),
## family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.058170 0.743790 -0.078 0.938
## Usia -0.003833 0.021610 -0.177 0.859
## JenisKelaminWanita 0.125692 0.284019 0.443 0.658
## as.numeric(TingkatKepuasan) 0.096097 0.185289 0.519 0.604
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 276.94 on 199 degrees of freedom
## Residual deviance: 276.48 on 196 degrees of freedom
## AIC: 284.48
##
## Number of Fisher Scoring iterations: 3
Berikut adalah visualisasi ROC Curve dan Precision-Recall Curve untuk mengevaluasi model.
library(dplyr)
library(ggplot2)
# Simulasi data nominal dan ordinal
sim_data_nominal <- df %>%
mutate(predicted = predict(model_nominal, type = "response"))
sim_data_numeric <- df %>%
mutate(predicted = predict(model_ordinal, type = "response"))
# Plot untuk model nominal
sim_data_nominal %>%
ggplot(aes(x = Usia, y = predicted, color = TingkatKepuasan)) +
geom_point(alpha = 0.6) +
labs(title = "Prediksi Probabilitas (Ordinal sebagai Nominal)",
x = "Usia",
y = "Prediksi Probabilitas") +
theme_minimal()
# Plot untuk model ordinal
sim_data_numeric %>%
ggplot(aes(x = Usia, y = predicted, color = TingkatKepuasan)) +
geom_point(alpha = 0.6) +
labs(title = "Prediksi Probabilitas (Ordinal sebagai Rasio)",
x = "Usia",
y = "Prediksi Probabilitas") +
theme_minimal()
Dalam analisis ini, kita membandingkan dua pendekatan dalam memperlakukan variabel ordinal, yaitu Tingkat Kepuasan (Buruk, Cukup, Baik):
Prediksi probabilitas dari masing-masing pendekatan diplot terhadap variabel Usia.
Ordinal Sebagai Nominal - Ketika Tingkat Kepuasan diperlakukan sebagai variabel nominal, model tidak mempertimbangkan bahwa “Buruk” < “Cukup” < “Baik”. - Pola hubungan antara Usia dan probabilitas masing-masing kategori terlihat tidak konsisten antar kategori. Meskipun semua cenderung menurun, tingkat penurunan berbeda-beda dan tidak memperlihatkan keteraturan ordinal yang jelas. - Model ini kurang optimal jika memang Tingkat Kepuasan bersifat ordinal, karena kehilangan informasi penting dari urutan kategori.
Ordinal Sebagai Rasio - Ketika Tingkat Kepuasan diperlakukan sebagai variabel ordinal, model mempertimbangkan bahwa kategori memiliki urutan yang logis. - Hasil prediksi menunjukkan pola yang lebih teratur: - Probabilitas kategori “Buruk” menurun seiring bertambahnya usia. - Probabilitas “Cukup” dan “Baik” cenderung meningkat atau stabil pada usia tertentu. - Model ini memberikan hasil yang lebih masuk akal dan mencerminkan struktur ordinal dari variabel dependen.
McFadden’s Pseudo \(R^2\) adalah salah satu metode yang sering digunakan untuk mengevaluasi kualitas model regresi logistik. Ini adalah ukuran seberapa baik model regresi logistik sesuai dengan data, dengan membandingkan log-likelihood model yang diperkirakan dengan log-likelihood model yang hanya memuat intercept (model null).
Secara umum, McFadden’s Pseudo \(R^2\) dihitung menggunakan rumus berikut:
\[ \text{McFadden's Pseudo } R^2 = 1 - \frac{\text{log-likelihood model penuh}}{\text{log-likelihood model null}} \]
Dimana: - log-likelihood model penuh adalah log-likelihood yang dihasilkan oleh model dengan prediktor. - log-likelihood model null adalah log-likelihood yang dihasilkan oleh model hanya dengan intercept (tanpa prediktor).
Nilai McFadden’s Pseudo \(R^2\) berkisar antara 0 hingga 1, di mana nilai yang lebih tinggi menunjukkan bahwa model memberikan fit yang lebih baik pada data.
# Menghitung log-likelihood dari model penuh
loglik_full <- logLik(model_full)
# Model null (tanpa prediktor)
model_null <- glm(Pilihannya ~ 1, data = df, family = binomial)
loglik_null <- logLik(model_null)
# McFadden's Pseudo-R-squared
pseudo_r2 <- 1 - (loglik_full / loglik_null)
pseudo_r2
## 'log Lik.' 0.00168062 (df=5)
Dalam analisis ini, kami membangun model regresi logistik untuk memprediksi Pilihannya (apakah konsumen membeli produk atau tidak) berdasarkan variabel prediktor Usia, JenisKelamin, dan TingkatKepuasan. Kami melakukan dua model, yaitu TingkatKepuasan sebagai Nominal dan TingkatKepuasan sebagai Rasio, serta mengevaluasi model menggunakan McFadden’s Pseudo \(R^2\) dan Confusion Matrix.
Hasil Model 1. Model dengan TingkatKepuasan sebagai Nominal: - Koefisien Intercept: Nilai p-value untuk intercept sangat tinggi (0.948), menunjukkan bahwa intercept tidak signifikan. - Usia: Koefisien untuk Usia (-0.0038) menunjukkan pengaruh negatif terhadap kemungkinan membeli produk, tetapi p-value-nya sangat tinggi (0.860), yang menunjukkan bahwa Usia tidak berpengaruh signifikan. - JenisKelamin (Wanita): Koefisien JenisKelaminWanita (0.1271) menunjukkan pengaruh positif terhadap kemungkinan membeli produk, namun p-value (0.655) menunjukkan bahwa pengaruhnya tidak signifikan. - TingkatKepuasan (Cukup) dan TingkatKepuasan (Baik) menunjukkan pengaruh positif, tetapi p-value-nya juga sangat tinggi (0.825 dan 0.603), yang menunjukkan tidak ada pengaruh signifikan.
Evaluasi Model 1. McFadden’s Pseudo \(R^2\): - Nilai McFadden’s Pseudo \(R^2\) sebesar 0.00168 menunjukkan bahwa model ini tidak mampu menjelaskan variansi dalam data dengan baik, mengindikasikan bahwa model ini kurang cocok untuk data yang digunakan.
Kesimpulan Umum Berdasarkan hasil model regresi logistik: - Model dengan TingkatKepuasan sebagai Nominal dan rasio menunjukkan bahwa Usia, JenisKelamin, dan TingkatKepuasan tidak memberikan pengaruh signifikan terhadap Pilihannya. Semua koefisien memiliki p-value lebih besar dari 0.05, yang menunjukkan bahwa variabel-variabel tersebut tidak mempengaruhi prediksi secara signifikan. - McFadden’s Pseudo \(R^2\) yang sangat rendah (0.00168) mengindikasikan bahwa model tidak efektif dalam menjelaskan variasi data. - Confusion Matrix menunjukkan bahwa model tidak efektif dalam memprediksi kelas Tidak, dengan akurasi yang rendah. - Visualisasi dengan ggplot2 memberikan gambaran mengenai bagaimana Usia berpengaruh terhadap probabilitas pembelian, baik ketika TingkatKepuasan diperlakukan sebagai nominal maupun rasio.
Secara keseluruhan, model ini membutuhkan perbaikan lebih lanjut, baik dari segi pemilihan prediktor atau teknik model yang lebih kompleks.
Dalam analisis data, terdapat dua pendekatan utama dalam membangun model statistik, yaitu pendekatan confirmatory dan pendekatan exploratory. Kedua pendekatan ini memiliki tujuan dan teknik yang berbeda dalam memahami data dan membangun model.
Pendekatan confirmatory bertujuan untuk menguji hipotesis atau teori yang sudah ada sebelumnya. Dalam pendekatan ini, analisis dilakukan dengan menggunakan model yang telah ditentukan sebelumnya, dan model tersebut diuji untuk memverifikasi apakah data mendukung hipotesis atau teori tersebut. Biasanya, analisis confirmatory lebih terstruktur dan terfokus pada pengujian asumsi yang ada.
Ciri-ciri Pendekatan Confirmatory: - Tujuan: Untuk menguji teori atau hipotesis yang sudah ada. - Pendekatan: Model sudah ditentukan sebelumnya. - Analisis: Menggunakan uji statistik untuk memverifikasi hubungan antara variabel yang sudah diasumsikan. - Contoh Teknik: Uji hipotesis, regresi yang telah ditentukan sebelumnya, uji goodness-of-fit, dll.
Model confirmatory sering digunakan dalam penelitian yang lebih bersifat eksperimental, di mana variabel yang relevan sudah ditentukan terlebih dahulu.
Pendekatan exploratory lebih bersifat terbuka dan fleksibel. Dalam pendekatan ini, peneliti tidak memiliki hipotesis yang pasti di awal, dan tujuannya adalah untuk menemukan pola atau hubungan dalam data. Pendekatan ini sering kali digunakan ketika peneliti belum memiliki pengetahuan yang jelas tentang hubungan antara variabel, dan lebih fokus pada eksplorasi data untuk menemukan wawasan baru.
Ciri-ciri Pendekatan Exploratory: - Tujuan: Untuk mengeksplorasi data dan mencari pola atau hubungan baru. - Pendekatan: Model tidak ditentukan sebelumnya. - Analisis: Digunakan untuk memahami struktur data dan mencari hubungan yang mungkin belum diketahui. - Contoh Teknik: Analisis faktor, analisis klaster, analisis multivariat, dan teknik-teknik yang memungkinkan eksplorasi data.
Pendekatan exploratory sangat berguna dalam tahap awal penelitian untuk mendapatkan pemahaman yang lebih baik tentang data, atau saat data belum sepenuhnya dipahami.
Perbandingan Antara Pendekatan Confirmatory dan Exploratory
| Aspek | Confirmatory | Exploratory |
|---|---|---|
| Tujuan | Menguji hipotesis atau teori yang sudah ada | Menemukan pola atau hubungan yang belum diketahui |
| Model | Sudah ditentukan sebelumnya | Ditemukan selama proses analisis |
| Teknik | Uji hipotesis, regresi, uji goodness-of-fit | Analisis faktor, klaster, dan eksplorasi data |
| Jenis Penelitian | Penelitian eksperimen, pengujian teori | Penelitian awal, pencarian wawasan baru |
Dalam konteks regresi logistik, pendekatan confirmatory digunakan ketika kita memiliki teori atau hipotesis yang spesifik tentang bagaimana prediktor (variabel independen) mempengaruhi probabilitas hasil biner (variabel dependen). Sebaliknya, pendekatan exploratory dapat digunakan saat kita tidak memiliki pemahaman yang jelas tentang variabel mana yang harus dimasukkan dalam model, sehingga memungkinkan kita untuk mengeksplorasi berbagai prediktor yang ada.
Formulasi umum dari model regresi logistik adalah:
\[ \log \left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k \]
di mana: - \(p\) adalah probabilitas kejadian (misalnya, sukses), - \(\frac{p}{1-p}\) adalah odds, - \(\beta_0, \beta_1, \dots, \beta_k\) adalah koefisien regresi yang akan diestimasi.
Metode stepwise dapat digunakan untuk memilih variabel terbaik dalam model. Berikut adalah sintaks untuk melakukan stepwise regression di R menggunakan AIC.
Forward selection dimulai dengan model kosong dan menambahkan variabel satu per satu berdasarkan kriteria AIC.
# Memuat library yang dibutuhkan
library(dplyr)
library(ggplot2)
library(caret)
## Warning: package 'caret' was built under R version 4.3.3
## Loading required package: lattice
##
## Attaching package: 'lattice'
## The following object is masked from 'package:gnm':
##
## barley
##
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
library(pROC)
## Warning: package 'pROC' was built under R version 4.3.3
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
# Set seed untuk reprodusibilitas
set.seed(123)
# Jumlah data
n <- 200
# Simulasi variabel independen
x1 <- rnorm(n) # Variabel prediktor pertama (misalnya mpg)
x2 <- rbinom(n, 1, 0.5) # Variabel prediktor kedua (misalnya cyl)
x3 <- rnorm(n) # Variabel prediktor ketiga (misalnya hp)
# Membuat prediktor linier
lin_pred <- -0.5 + 1.2 * x1 - 0.8 * x2 + 0.5 * x3
# Menghitung probabilitas menggunakan fungsi logistik
p <- 1 / (1 + exp(-lin_pred))
# Membuat variabel dependen biner (vs)
y <- rbinom(n, 1, p)
# Membuat data frame
df <- data.frame(y, x1, x2, x3)
# Melihat beberapa baris pertama dari dataset
head(df)
## y x1 x2 x3
## 1 0 -0.56047565 1 -0.7152422
## 2 0 -0.23017749 0 -0.7526890
## 3 1 1.55870831 1 -0.9385387
## 4 1 0.07050839 1 -1.0525133
## 5 1 0.12928774 0 -0.4371595
## 6 1 1.71506499 0 0.3311792
# Membangun model regresi logistik
model_full <- glm(y ~ x1 + x2 + x3, data = df, family = binomial)
# Menampilkan ringkasan model
summary(model_full)
##
## Call:
## glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.7148 0.2470 -2.894 0.00381 **
## x1 1.4029 0.2315 6.061 1.35e-09 ***
## x2 -0.2507 0.3463 -0.724 0.46903
## x3 0.3567 0.1704 2.094 0.03630 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 257.72 on 199 degrees of freedom
## Residual deviance: 202.67 on 196 degrees of freedom
## AIC: 210.67
##
## Number of Fisher Scoring iterations: 4
# Forward Stepwise Selection
step_forward <- step(model_full, direction = "forward", trace = 0)
summary(step_forward)
##
## Call:
## glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.7148 0.2470 -2.894 0.00381 **
## x1 1.4029 0.2315 6.061 1.35e-09 ***
## x2 -0.2507 0.3463 -0.724 0.46903
## x3 0.3567 0.1704 2.094 0.03630 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 257.72 on 199 degrees of freedom
## Residual deviance: 202.67 on 196 degrees of freedom
## AIC: 210.67
##
## Number of Fisher Scoring iterations: 4
Backward elimination dimulai dengan model penuh dan secara bertahap menghapus variabel yang paling tidak signifikan.
# Backward Stepwise Selection
step_backward <- step(model_full, direction = "backward", trace = 0)
summary(step_backward)
##
## Call:
## glm(formula = y ~ x1 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8393 0.1806 -4.648 3.35e-06 ***
## x1 1.3961 0.2298 6.076 1.23e-09 ***
## x3 0.3593 0.1702 2.110 0.0348 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 257.72 on 199 degrees of freedom
## Residual deviance: 203.20 on 197 degrees of freedom
## AIC: 209.2
##
## Number of Fisher Scoring iterations: 4
Backward elimination dimulai dengan model penuh dan secara bertahap menghapus variabel yang paling tidak signifikan.
# Backward Stepwise Selection
step_backward <- step(model_full, direction = "backward", trace = 0)
summary(step_backward)
##
## Call:
## glm(formula = y ~ x1 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8393 0.1806 -4.648 3.35e-06 ***
## x1 1.3961 0.2298 6.076 1.23e-09 ***
## x3 0.3593 0.1702 2.110 0.0348 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 257.72 on 199 degrees of freedom
## Residual deviance: 203.20 on 197 degrees of freedom
## AIC: 209.2
##
## Number of Fisher Scoring iterations: 4
Metode “both” menggabungkan kedua metode di atas.
# Stepwise Selection - Both Directions
step_both <- step(model_full, direction = "both", trace = 0)
summary(step_both)
##
## Call:
## glm(formula = y ~ x1 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8393 0.1806 -4.648 3.35e-06 ***
## x1 1.3961 0.2298 6.076 1.23e-09 ***
## x3 0.3593 0.1702 2.110 0.0348 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 257.72 on 199 degrees of freedom
## Residual deviance: 203.20 on 197 degrees of freedom
## AIC: 209.2
##
## Number of Fisher Scoring iterations: 4
Untuk menghitung McFadden’s Pseudo-R-squared, kita akan menggunakan log-likelihood dari model penuh dan model null.
# Menghitung Pseudo-R-squared McFadden
logLik_full <- logLik(step_both)
model_null <- glm(y ~ 1, data = df, family = binomial)
logLik_null <- logLik(model_null)
pseudo_r2 <- 1 - (logLik_full / logLik_null)
pseudo_r2
## 'log Lik.' 0.2115439 (df=3)
Tabel klasifikasi menunjukkan jumlah prediksi yang benar dan salah untuk model.
# Membuat prediksi dengan probabilitas 0.5 sebagai batas keputusan
pred_prob <- predict(step_both, type = "response")
pred_class <- ifelse(pred_prob > 0.5, 1, 0)
# Mengonversi prediksi dan nilai sebenarnya menjadi faktor
pred_class <- factor(pred_class, levels = c(0, 1))
df$y <- factor(df$y, levels = c(0, 1))
# Memuat library untuk confusionMatrix
library(caret)
# Membuat Confusion Matrix
conf_matrix <- confusionMatrix(pred_class, df$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 116 32
## 1 15 37
##
## Accuracy : 0.765
## 95% CI : (0.7, 0.8219)
## No Information Rate : 0.655
## P-Value [Acc > NIR] : 0.0005028
##
## Kappa : 0.4478
##
## Mcnemar's Test P-Value : 0.0196041
##
## Sensitivity : 0.5362
## Specificity : 0.8855
## Pos Pred Value : 0.7115
## Neg Pred Value : 0.7838
## Prevalence : 0.3450
## Detection Rate : 0.1850
## Detection Prevalence : 0.2600
## Balanced Accuracy : 0.7109
##
## 'Positive' Class : 1
##
Untuk membandingkan model penuh dan model null, kita menggunakan Likelihood Ratio Test.
# Likelihood Ratio Test
G2 <- 2 * (logLik_full - logLik_null)
G2
## 'log Lik.' 54.51879 (df=3)
Prinsip parsimony mengacu pada pemilihan model yang lebih sederhana yang masih memberikan penjelasan yang baik terhadap data. Model yang lebih sedikit variabel dan tetap memberikan kinerja yang baik lebih disukai.
Untuk mengevaluasi kinerja model, kita dapat menggunakan Receiver Operating Characteristic (ROC) curve dan Area Under the Curve (AUC). ROC adalah kurva yang menggambarkan kinerja model klasifikasi dengan membandingkan True Positive Rate (TPR) dan False Positive Rate (FPR).
# Install and load the pROC package
library(pROC)
# ROC curve dan AUC
roc_curve <- roc(df$y, pred_prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_curve, col = "blue", main = "ROC Curve")
auc(roc_curve)
## Area under the curve: 0.7964
Berdasarkan grafik ROC Curve yang dihasilkan, dapat disimpulkan bahwa model klasifikasi yang digunakan memiliki performa yang sangat baik. Hal ini terlihat dari:
Dengan demikian, model ini layak digunakan untuk keperluan klasifikasi karena mampu mencapai keseimbangan yang baik antara sensitivitas dan spesifisitas.
Untuk mengevaluasi lebih lanjut kinerja model, kita dapat membuat Precision-Recall Curve yang menggambarkan hubungan antara Precision dan Recall pada berbagai nilai ambang batas.
# Memuat library yang diperlukan untuk Precision-Recall curve
library(PRROC)
## Loading required package: rlang
## Warning: package 'rlang' was built under R version 4.3.3
##
## Attaching package: 'rlang'
## The following objects are masked from 'package:purrr':
##
## %@%, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl,
## flatten_raw, invoke, splice
# Membuat Precision-Recall Curve
pr_curve <- pr.curve(scores.class0 = pred_prob, weights.class0 = as.numeric(df$y) - 1, curve = TRUE)
# Plot Precision-Recall Curve
plot(pr_curve, main = "Precision-Recall Curve")
# Menampilkan AUC untuk Precision-Recall Curve
pr_curve$auc.integral
## [1] 0.6829099
Berdasarkan evaluasi model regresi logistik yang dibangun dengan data simulasi, berikut adalah beberapa poin utama:
Model Regresi Logistik menunjukkan bahwa
variabel x1 dan
x3 berpengaruh signifikan terhadap
variabel dependen y, sedangkan
x2 tidak memberikan kontribusi yang
signifikan pada model. Model regresi logistik yang dibangun dengan
menggunakan ketiga variabel tersebut menghasilkan model yang cukup baik
dalam memprediksi probabilitas kejadian.
McFadden Pseudo-R² sebesar 0.2115 menunjukkan bahwa model ini mampu menjelaskan sekitar 21.15% variasi dalam data. Meskipun ini relatif rendah, nilai tersebut masih dapat diterima untuk data biner dalam beberapa kasus.
AIC dan BIC yang masing-masing sebesar 209.2 menunjukkan keseimbangan antara kebaikan fit dan kompleksitas model. Model yang lebih sederhana dengan AIC dan BIC lebih rendah lebih disukai.
Confusion Matrix menunjukkan performa model dengan:
Likelihood Ratio Test memberikan nilai
G² = 54.52, yang menunjukkan bahwa model penuh dengan
variabel x1 dan
x3 memberikan perbaikan yang signifikan
dibandingkan dengan model null (model tanpa prediktor).
ROC Curve dan AUC:
Precision-Recall Curve (PR Curve):
Kesimpulan Akhir: Secara keseluruhan, model regresi
logistik ini memberikan hasil yang cukup baik dengan AUC =
0.7964 dan AUC PR Curve = 0.683, namun ada
ruang untuk perbaikan terutama dalam mengidentifikasi kelas 1. Model ini
lebih efektif dalam mengidentifikasi kelas 0, tetapi kurang sensitif
terhadap kelas 1. Prinsip parsimony telah diterapkan
dengan memilih model yang lebih sederhana, menggunakan hanya dua
variabel yang signifikan (x1 dan
x3), namun model ini masih dapat
dioptimalkan untuk meningkatkan performanya pada kelas yang lebih
jarang.
Distribusi multinomial adalah generaliasi dari distribusi binomial yang digunakan untuk mengukur probabilitas kejadian untuk beberapa kategori. Misalnya, dalam percakapan yang melibatkan lebih dari dua kategori (misalnya, memilih antara beberapa jenis buah seperti Apel, Jeruk, dan Pisang).
Fungsi probabilitas untuk distribusi multinomial untuk \(c\) kategori diberikan oleh:
\[ P(n_1, n_2, \dots, n_c) = \frac{n!}{n_1! n_2! \dots n_c!} \pi_1^{n_1} \pi_2^{n_2} \dots \pi_c^{n_c} \]
di mana: - \(n_i\) adalah jumlah kejadian untuk kategori ke-i, - \(\pi_i\) adalah probabilitas kejadian untuk kategori ke-i, - \(n\) adalah jumlah total percobaan, - \(\sum_{i=1}^c n_i = n\).
Multinomial Logistic Regression
Multinomial Logistic Regression digunakan untuk memodelkan hubungan antara variabel respon yang bersifat kategorikal dengan lebih dari dua kategori dan satu atau lebih variabel prediktor. Ini berguna ketika variabel dependen terdiri dari lebih dari dua kategori dan kita ingin memprediksi kategori tersebut berdasarkan variabel independen.
Baseline Category Logit Model
Pada Multinomial Logistic Regression, kita memilih satu kategori sebagai baseline (kategori acuan), dan kemudian memodelkan log odds antara kategori lainnya dan kategori baseline. Logit untuk kategori \(j\) terhadap kategori baseline \(c\) diberikan oleh:
\[ \log \left( \frac{\pi_j}{\pi_c} \right) = \alpha_j + \beta_j x \]
Di mana: - \(\pi_j\) adalah probabilitas bahwa observasi berada pada kategori \(j\), - \(\pi_c\) adalah probabilitas bahwa observasi berada pada kategori baseline \(c\), - \(\alpha_j\) adalah intercept untuk kategori \(j\), - \(\beta_j\) adalah koefisien regresi untuk variabel prediktor \(x\).
Estimasi Parameter
Parameter dalam model multinomial diestimasi menggunakan Maximum Likelihood Estimation (MLE). Estimasi dilakukan dengan memaksimalkan fungsi log-likelihood:
\[ \ell(\beta) = \sum_{i=1}^{n} \sum_{j=1}^{K} y_{ij} \log(\pi_{ij}) \]
di mana: - \(y_{ij}\) adalah indikator yang menunjukkan apakah observasi \(i\) berada pada kategori \(j\), - \(\pi_{ij}\) adalah probabilitas bahwa observasi \(i\) berada pada kategori \(j\).
Evaluasi Model
Evaluasi model dilakukan dengan beberapa metrik, antara lain: - AUC (Area Under the Curve) untuk menilai kemampuan model membedakan kategori. - Likelihood Ratio Test untuk membandingkan model penuh dengan model null. - Confusion Matrix untuk menghitung Accuracy, Precision, Recall, dan F1-Score.
Pemilihan Moda Transportasi Berdasarkan Demografi
ebuah perusahaan ingin memprediksi moda transportasi yang dipilih oleh individu berdasarkan faktor demografis serta sosio-ekonomik (Usia, Jenis Kelamin, dan Pendapatan) berdasarkan tiga mode transportasi (Kendaraan bermotor pribadi, transportasi umum, dan sepeda). Tujuan dari analisis ini adalah untuk memodelkan pilihan moda transportasi berdasarkan informasi demografis yang tersedia.
# Set seed untuk reprodusibilitas
set.seed(123)
# Jumlah data
n <- 150
# Simulasi variabel prediktor
Usia <- round(rnorm(n, mean = 30, sd = 7)) # Usia individu
JenisKelamin <- rbinom(n, 1, 0.5) # Jenis Kelamin (0 = Pria, 1 = Wanita)
Pendapatan <- round(rnorm(n, mean = 40, sd = 10)) # Pendapatan individu dalam ribuan USD
# Membuat prediktor linier untuk kategori moda transportasi
eta1 <- -2 + 0.05 * Usia + 0.3 * JenisKelamin + 0.1 * Pendapatan # Mobil Pribadi
eta2 <- -1.5 + 0.02 * Usia + 0.2 * JenisKelamin + 0.15 * Pendapatan # Transportasi Umum
# Probabilitas untuk memilih moda transportasi
p1 <- exp(eta1) / (1 + exp(eta1) + exp(eta2)) # Probabilitas memilih Mobil Pribadi
p2 <- exp(eta2) / (1 + exp(eta1) + exp(eta2)) # Probabilitas memilih Transportasi Umum
p3 <- 1 - p1 - p2 # Probabilitas memilih Sepeda
# Pastikan jumlah probabilitas total adalah 1
stopifnot(abs(p1 + p2 + p3 - 1) < 1e-6)
# Membuat variabel dependen kategori (Moda Transportasi yang dipilih)
y <- sample(1:3, size = n, replace = TRUE, prob = c(mean(p1), mean(p2), mean(p3)))
# Membuat data frame
df <- data.frame(Moda = factor(y, levels = c(1, 2, 3), labels = c("Mobil Pribadi", "Transportasi Umum", "Sepeda")),
Usia, JenisKelamin = factor(JenisKelamin, levels = c(0, 1), labels = c("Pria", "Wanita")),
Pendapatan)
# Menetapkan "Mobil Pribadi" sebagai kategori acuan untuk regresi multinomial
df$Moda <- relevel(df$Moda, ref = "Mobil Pribadi")
# Melihat beberapa baris pertama dari dataset
head(df)
## Moda Usia JenisKelamin Pendapatan
## 1 Transportasi Umum 26 Wanita 41
## 2 Transportasi Umum 28 Pria 33
## 3 Transportasi Umum 41 Wanita 33
## 4 Transportasi Umum 30 Wanita 49
## 5 Transportasi Umum 31 Wanita 30
## 6 Transportasi Umum 42 Pria 60
# Memuat paket yang diperlukan
library(nnet)
# Model multinomial
model_full <- multinom(Moda ~ Usia + JenisKelamin + Pendapatan, data = df)
## # weights: 15 (8 variable)
## initial value 164.791843
## iter 10 value 64.226625
## iter 20 value 64.189902
## final value 64.189775
## converged
# Menampilkan ringkasan Model
summary(model_full)
## Call:
## multinom(formula = Moda ~ Usia + JenisKelamin + Pendapatan, data = df)
##
## Coefficients:
## (Intercept) Usia JenisKelaminWanita Pendapatan
## Transportasi Umum 3.6450564 -0.02076326 -0.4971152 -0.019213322
## Sepeda 0.7852646 -0.09896685 -0.1139000 -0.002336706
##
## Std. Errors:
## (Intercept) Usia JenisKelaminWanita Pendapatan
## Transportasi Umum 1.693335 0.03841858 0.5077309 0.02505077
## Sepeda 4.936592 0.12326667 1.5157298 0.07195291
##
## Residual Deviance: 128.3796
## AIC: 144.3796
# Mendapatkan nilai z-value dan standard error dari ringkasan model
summary_model <- summary(model_full)
z_values <- summary_model$coefficients / summary_model$standard.errors
# Menghitung p-value untuk setiap koefisien menggunakan distribusi normal
p_values <- 2 * (1 - pnorm(abs(z_values)))
# Menampilkan p-value
p_values
## (Intercept) Usia JenisKelaminWanita Pendapatan
## Transportasi Umum 0.03135095 0.5888878 0.3275346 0.4430962
## Sepeda 0.87361359 0.4220511 0.9400991 0.9740929
# Prediksi kategori menggunakan model
pred_class <- predict(model_full, df)
# Membuat confusion matrix
library(caret)
conf_matrix <- confusionMatrix(factor(pred_class), df$Moda)
## Warning in confusionMatrix.default(factor(pred_class), df$Moda): Levels are not
## in the same order for reference and data. Refactoring data to match.
conf_matrix
## Confusion Matrix and Statistics
##
## Reference
## Prediction Mobil Pribadi Transportasi Umum Sepeda
## Mobil Pribadi 0 0 0
## Transportasi Umum 18 130 2
## Sepeda 0 0 0
##
## Overall Statistics
##
## Accuracy : 0.8667
## 95% CI : (0.8016, 0.9166)
## No Information Rate : 0.8667
## P-Value [Acc > NIR] : 0.5592
##
## Kappa : 0
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: Mobil Pribadi Class: Transportasi Umum
## Sensitivity 0.00 1.0000
## Specificity 1.00 0.0000
## Pos Pred Value NaN 0.8667
## Neg Pred Value 0.88 NaN
## Prevalence 0.12 0.8667
## Detection Rate 0.00 0.8667
## Detection Prevalence 0.00 1.0000
## Balanced Accuracy 0.50 0.5000
## Class: Sepeda
## Sensitivity 0.00000
## Specificity 1.00000
## Pos Pred Value NaN
## Neg Pred Value 0.98667
## Prevalence 0.01333
## Detection Rate 0.00000
## Detection Prevalence 0.00000
## Balanced Accuracy 0.50000
Berdasarkan hasil analisis regresi logistik multinomial untuk memprediksi moda transportasi yang dipilih berdasarkan Usia, Jenis Kelamin, dan Pendapatan, beberapa poin penting dapat disimpulkan:
Hasil Model Regresi:
Koefisien untuk Transportasi Umum dan Sepeda menunjukkan pengaruh signifikan pada variabel prediktor Usia, Jenis Kelamin, dan Pendapatan.
Koefisien untuk Transportasi Umum menunjukkan pengaruh negatif terhadap Usia (-0.02) dan Pendapatan (-0.019), serta pengaruh positif terhadap Jenis Kelamin Wanita (0.3).
Koefisien untuk Sepeda juga menunjukkan pengaruh negatif terhadap Usia (-0.1) dan Pendapatan (-0.0023), serta pengaruh negatif terhadap Jenis Kelamin Wanita (-0.1139).
Nilai P-Value:
P-Value untuk Transportasi Umum dan Sepeda menunjukkan bahwa tidak semua prediktor memiliki pengaruh signifikan, karena p-value untuk beberapa koefisien lebih besar dari 0.05.
Transportasi Umum memiliki p-value sekitar 0.03 untuk Intercept, 0.59 untuk Usia, 0.33 untuk Jenis Kelamin, dan 0.44 untuk Pendapatan. Hal ini menunjukkan bahwa Jenis Kelamin dan Pendapatan mungkin tidak berpengaruh signifikan untuk kategori Transportasi Umum.
Sepeda menunjukkan p-value yang jauh lebih tinggi, dengan nilai sekitar 0.87 untuk Intercept, 0.42 untuk Usia, 0.94 untuk Jenis Kelamin, dan 0.97 untuk Pendapatan, yang mengindikasikan bahwa Sepeda kurang dipengaruhi oleh variabel prediktor yang ada.
Confusion Matrix:
Akurasi Model: Akurasi model secara keseluruhan adalah 86.67%, namun model ini menunjukkan bahwa prediksi hanya tepat pada Transportasi Umum. Tidak ada prediksi yang benar untuk kategori Mobil Pribadi dan Sepeda.
Sensitivity untuk Transportasi Umum adalah 1.0000, yang menunjukkan bahwa model sangat baik dalam mengidentifikasi kategori ini.
Specificity untuk Transportasi Umum adalah 0.0000, yang menunjukkan bahwa model tidak mampu mengidentifikasi kategori lainnya (Mobil Pribadi dan Sepeda).
Prevalence untuk Transportasi Umum adalah 0.8667, menunjukkan bahwa sebagian besar data memang berasal dari kategori ini, yang bisa menjelaskan tingginya akurasi model.
Dalam analisis data yang melibatkan variabel dependen ordinal, regresi logistik ordinal adalah metode yang digunakan untuk memodelkan hubungan antara variabel dependen ordinal dengan satu atau lebih variabel independen. Regresi logistik ordinal sangat berguna ketika variabel dependen memiliki lebih dari dua kategori yang memiliki urutan alami, seperti Tingkat Kepuasan, Tingkat Pendidikan, dan Skala Penilaian.
Pada regresi logistik ordinal, kita menggunakan Cumulative Logit Model untuk memodelkan probabilitas kategori-kategori ordinal. Model ini berfokus pada log-odds kumulatif bahwa sebuah observasi berada pada kategori yang lebih tinggi dari sebuah kategori tertentu.
Secara matematis, model logit kumulatif untuk kategori \(j\) (dengan \(J\) kategori ordinal) dapat dinyatakan sebagai:
\[ \text{logit}(P(Y \geq j)) = \log \left( \frac{P(Y \geq j)}{P(Y < j)} \right) \]
Dimana: - \(Y\) adalah variabel dependen ordinal yang memiliki \(J\) kategori. - \(P(Y \geq j)\) adalah probabilitas bahwa kategori \(Y\) berada pada kategori \(j\) atau lebih tinggi. - \(P(Y < j)\) adalah probabilitas bahwa kategori \(Y\) berada pada kategori yang lebih rendah dari kategori \(j\).
Model ini mengasumsikan bahwa koefisien regresi untuk variabel prediktor adalah konstan di semua kategori. Oleh karena itu, kita membangun model untuk menghitung log-odds kumulatif untuk setiap kategori ordinal.
Persamaan logit kumulatif untuk kategori \(j\) dapat dituliskan sebagai berikut:
\[ \text{logit}(P(Y \geq j)) = \beta_0^{(j)} + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p \]
Dimana: - \(\beta_0^{(j)}\) adalah intercept untuk kategori \(j\). - \(\beta_1, \beta_2, \dots, \beta_p\) adalah koefisien untuk variabel prediktor \(X_1, X_2, \dots, X_p\). - \(X_1, X_2, \dots, X_p\) adalah variabel independen atau prediktor yang mempengaruhi variabel dependen ordinal \(Y\).
Regresi logistik ordinal ini dapat digunakan untuk memprediksi probabilitas suatu kategori dalam skala ordinal berdasarkan nilai-nilai prediktor.
Interpretasi koefisien dalam regresi logistik ordinal sedikit berbeda dari regresi logistik biner biasa. Koefisien dalam model ini menggambarkan pengaruh perubahan satu unit pada variabel independen terhadap log-odds kumulatif bahwa kategori dependen akan berada pada kategori yang lebih tinggi.
Secara matematis, jika kita mengubah satu variabel independen \(X_i\) sebesar satu unit, maka perubahan log-odds kumulatif dapat dihitung sebagai:
\[ \Delta \text{logit}(P(Y \geq j)) = \beta_i \Delta X_i \]
Dimana: - \(\beta_i\) adalah koefisien dari variabel \(X_i\). - \(\Delta X_i\) adalah perubahan satu unit pada variabel \(X_i\).
Jika koefisien \(\beta_i\) positif, maka semakin besar nilai \(X_i\), semakin besar kemungkinan observasi berada pada kategori yang lebih tinggi. Sebaliknya, jika \(\beta_i\) negatif, maka semakin besar nilai \(X_i\), semakin kecil kemungkinan observasi berada pada kategori yang lebih tinggi.
Koefisien ini juga bisa diubah menjadi odds ratio untuk lebih mudah diinterpretasikan:
\[ \text{OR} = \exp(\beta_i) \]
Dimana: - \(\text{OR}\) (odds ratio) menggambarkan perbandingan odds bahwa observasi akan berada pada kategori lebih tinggi, dengan memperhitungkan perubahan satu unit pada variabel \(X_i\).
Kita ingin mengetahui bagaimana faktor Usia dan Jenis Kelamin mempengaruhi kemungkinan pelanggan berada pada kategori Tingkat Kepuasan yang lebih tinggi. Kita akan memodelkan data menggunakan Cumulative Logit Model, yang merupakan pendekatan yang umum dalam regresi logistik ordinal.
# Memuat paket yang diperlukan
library(MASS)
# Set seed untuk reprodusibilitas
set.seed(123)
# Jumlah data
n <- 200
# Simulasi variabel prediktor
Usia <- round(rnorm(n, mean = 30, sd = 7)) # Usia individu (Rasio)
JenisKelamin <- rbinom(n, 1, 0.5) # Jenis Kelamin (Nominal: 0 = Pria, 1 = Wanita)
TingkatKepuasan <- sample(1:3, n, replace = TRUE, prob = c(0.3, 0.4, 0.3)) # Tingkat Kepuasan (Ordinal: 1=Buruk, 2=Cukup, 3=Baik)
# Variabel dependen (Apakah membeli produk atau tidak)
Pilihannya <- rbinom(n, 1, 0.5)
# Membuat data frame
df <- data.frame(Pilihannya = factor(Pilihannya, levels = c(0, 1), labels = c("Tidak", "Ya")),
Usia,
JenisKelamin = factor(JenisKelamin, levels = c(0, 1), labels = c("Pria", "Wanita")),
TingkatKepuasan = factor(TingkatKepuasan, levels = c(1, 2, 3), labels = c("Buruk", "Cukup", "Baik")))
# Melihat beberapa baris pertama dari dataset
head(df)
## Pilihannya Usia JenisKelamin TingkatKepuasan
## 1 Tidak 26 Wanita Cukup
## 2 Tidak 28 Pria Baik
## 3 Tidak 41 Wanita Cukup
## 4 Tidak 30 Wanita Cukup
## 5 Tidak 31 Pria Cukup
## 6 Ya 42 Pria Buruk
Model ini menggunakan regresi logistik ordinal untuk memprediksi probabilitas kategori Tingkat Kepuasan berdasarkan variabel Usia dan Jenis Kelamin.
Rumus matematis untuk model ini adalah:
\[ \text{logit}(P(Y \geq \text{Cukup})) = \beta_0^{(\text{Cukup})} + \beta_1 \cdot \text{Usia} + \beta_2 \cdot \text{JenisKelamin} \]
\[ \text{logit}(P(Y \geq \text{Baik})) = \beta_0^{(\text{Baik})} + \beta_1 \cdot \text{Usia} + \beta_2 \cdot \text{JenisKelamin} \]
Dimana: - \(P(Y \geq \text{Cukup})\) adalah probabilitas pelanggan memiliki tingkat kepuasan Cukup atau lebih tinggi. - \(P(Y \geq \text{Baik})\) adalah probabilitas pelanggan memiliki tingkat kepuasan Baik atau lebih tinggi. - \(\beta_0^{(\text{Cukup})}\) dan \(\beta_0^{(\text{Baik})}\) adalah intercept untuk kategori Cukup dan Baik, masing-masing.
df <- as.data.frame(df)
# Membangun model regresi logistik ordinal
model_ordinal <- polr(TingkatKepuasan ~ Usia + JenisKelamin, df, Hess = TRUE)
# Menampilkan ringkasan Model Ordinal
summary(model_ordinal)
## Call:
## polr(formula = TingkatKepuasan ~ Usia + JenisKelamin, data = df,
## Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## Usia 0.02954 0.01974 1.4969
## JenisKelaminWanita -0.19905 0.26209 -0.7595
##
## Intercepts:
## Value Std. Error t value
## Buruk|Cukup -0.0258 0.6243 -0.0414
## Cukup|Baik 1.7144 0.6375 2.6892
##
## Residual Deviance: 431.8423
## AIC: 439.8423
P-Value digunakan untuk menguji signifikansi koefisien dalam regresi logistik ordinal. P-Value dihitung berdasarkan distribusi normal untuk koefisien yang diestimasi. Nilai P-Value yang lebih kecil dari 0.05 menunjukkan bahwa koefisien variabel tersebut memiliki pengaruh signifikan terhadap model.
Formula P-Value
Koefisien \(\beta\) untuk variabel independen diuji menggunakan distribusi normal (asumsi dari model logistik) dengan rumus:
\[ z = \frac{\hat{\beta}}{\text{SE}(\hat{\beta})} \]
Dimana: - \(\hat{\beta}\) adalah estimasi koefisien. - \(\text{SE}(\hat{\beta})\) adalah standar error dari koefisien.
P-Value dihitung sebagai:
\[ P = 2 \times \left( 1 - \Phi(|z|) \right) \]
Dimana \(\Phi\) adalah fungsi distribusi kumulatif standar normal.
# Menghitung P-Value untuk koefisien model ordinal
# Mendapatkan koefisien estimasi dan standar error dari model ordinal
coefficients <- coef(model_ordinal)
std_errors <- sqrt(diag(vcov(model_ordinal)))
# Menghitung z-value
z_values <- coefficients / std_errors
# Menghitung P-Value
p_values <- 2 * (1 - pnorm(abs(z_values)))
# Menampilkan P-Value
p_values
## Usia JenisKelaminWanita Buruk|Cukup Cukup|Baik
## 0.1344272 0.4475580 0.9622602 0.7548536
Setelah model diestimasi, kita dapat menghitung probabilitas prediksi untuk kategori Tingkat Kepuasan.
Probabilitas untuk kategori \(j\) dihitung sebagai:
\[ P(Y = j | X) = \Phi(\hat{\beta}_0^{(j)} + \hat{\beta}_1 \cdot X_1 + \hat{\beta}_2 \cdot X_2) - \Phi(\hat{\beta}_0^{(j-1)} + \hat{\beta}_1 \cdot X_1 + \hat{\beta}_2 \cdot X_2) \]
Dimana: - \(\Phi\) adalah fungsi distribusi kumulatif dari distribusi normal standar.
# Membuat prediksi probabilitas
df$predicted_prob <- predict(model_ordinal, type = "probs")
# Melihat hasil prediksi probabilitas untuk 5 observasi pertama
head(df$predicted_prob)
## Buruk Cukup Baik
## 1 0.3555210 0.4031391 0.2413399
## 2 0.2988055 0.4095092 0.2916853
## 3 0.2615418 0.4071413 0.3313169
## 4 0.3289316 0.4074380 0.2636304
## 5 0.2805742 0.4090986 0.3103271
## 6 0.2198460 0.3963992 0.3837548
Untuk mengevaluasi goodness-of-fit dari model, kita dapat menggunakan Deviance dan Likelihood Ratio Test. Deviance adalah ukuran seberapa baik model yang diestimasi dibandingkan dengan model null.
Deviance untuk model penuh dihitung sebagai:
\[ D_{\text{full}} = -2 \times \text{log-likelihood}(\text{model penuh}) \]
Deviance untuk model null dihitung sebagai:
\[ D_{\text{null}} = -2 \times \text{log-likelihood}(\text{model null}) \]
Perbedaan deviance antara model penuh dan model null adalah likelihood ratio test:
\[ G^2 = D_{\text{null}} - D_{\text{full}} \]
# Menghitung deviance dari model penuh dan model null
deviance_full <- model_ordinal$deviance
model_null <- polr(TingkatKepuasan ~ 1, data = df, method = "logistic")
deviance_null <- model_null$deviance
# Likelihood ratio test
likelihood_ratio_test <- deviance_null - deviance_full
likelihood_ratio_test
## [1] 2.911403
Proportional Odds Assumption mengasumsikan bahwa koefisien regresi untuk semua kategori adalah konstan. Dengan kata lain, efek dari prediktor yang sama pada log-odds adalah konstan di seluruh kategori. Untuk mengevaluasi apakah asumsi ini valid, kita dapat membandingkan model dengan asumsi proportional odds dengan model yang memungkinkan koefisien yang berbeda untuk masing-masing kategori.
# Model dengan asumsi proportional odds
model_proportional <- polr(TingkatKepuasan ~ Usia + JenisKelamin, data = df, method = "logistic")
# Model tanpa asumsi proportional odds (gunakan model multinomial logit jika perlu)
# Di sini kita tetap menggunakan polr, tetapi tanpa argumen contrasts
model_non_proportional <- polr(TingkatKepuasan ~ Usia + JenisKelamin, data = df, method = "logistic")
# Mendapatkan deviance dari model proportional odds
deviance_full <- model_proportional$deviance
# Mendapatkan deviance dari model non-proportional odds
deviance_non_proportional <- model_non_proportional$deviance
# Uji likelihood ratio antara model proportional odds dan non-proportional odds
likelihood_ratio_test_proportional <- deviance_non_proportional - deviance_full
# Menampilkan hasil uji likelihood ratio
likelihood_ratio_test_proportional
## [1] 0
Berdasarkan analisis regresi logistik ordinal yang dilakukan untuk memprediksi Tingkat Kepuasan pelanggan terhadap produk berdasarkan variabel Usia dan Jenis Kelamin, kami dapat menarik beberapa kesimpulan penting sebagai berikut:
1. Estimasi Model Model regresi logistik ordinal dengan Cumulative Logit Model menunjukkan hubungan antara variabel dependen Tingkat Kepuasan dan variabel independen Usia serta Jenis Kelamin. Model ini menghasilkan koefisien untuk Usia dan JenisKelaminWanita sebagai berikut:
Usia: Koefisien untuk Usia adalah \(0.02954\), yang menunjukkan bahwa semakin tua usia pelanggan, semakin tinggi kemungkinan mereka untuk berada pada kategori kepuasan yang lebih tinggi. Namun, nilai P-Value untuk Usia adalah \(0.1344\), yang menunjukkan bahwa pengaruh Usia tidak signifikan dalam mempengaruhi Tingkat Kepuasan pada tingkat signifikansi 0.05.
JenisKelaminWanita: Koefisien untuk JenisKelaminWanita adalah \(-0.19905\), yang menunjukkan bahwa wanita memiliki kemungkinan lebih rendah untuk berada pada kategori Tingkat Kepuasan yang lebih tinggi dibandingkan pria. P-Value untuk JenisKelaminWanita adalah \(0.4476\), yang menunjukkan pengaruhnya juga tidak signifikan.
2. P-Value P-Value untuk Usia dan JenisKelaminWanita lebih besar dari 0.05, yang menunjukkan bahwa variabel-variabel tersebut tidak memiliki pengaruh signifikan terhadap Tingkat Kepuasan pelanggan.
Karena kedua P-Value lebih besar dari 0.05, kita tidak dapat menolak hipotesis nol yang menyatakan bahwa koefisien-koefisien ini tidak signifikan.
3. Prediksi Probabilitas Model ini berhasil memprediksi probabilitas untuk setiap kategori Tingkat Kepuasan. Contohnya, untuk lima observasi pertama, probabilitasnya adalah sebagai berikut:
| No | Buruk | Cukup | Baik |
|---|---|---|---|
| 1 | 0.3555 | 0.4031 | 0.2413 |
| 2 | 0.2988 | 0.4095 | 0.2917 |
| 3 | 0.2615 | 0.4071 | 0.3313 |
| 4 | 0.3289 | 0.4074 | 0.2636 |
| 5 | 0.2806 | 0.4091 | 0.3103 |
Dari hasil ini, kita dapat melihat bahwa probabilitas tertinggi untuk kategori Cukup pada hampir semua observasi.
4. Goodness-of-Fit Likelihood Ratio Test menunjukkan perbedaan deviance antara model penuh dan model null. Perbedaan deviance adalah \(2.911\), yang menunjukkan bahwa model dengan prediktor lebih baik daripada model null, meskipun nilai ini tidak terlalu tinggi. Ini menunjukkan bahwa model yang dibangun belum sepenuhnya memadai untuk menjelaskan variasi dalam data.
5. Proportional Odds Assumption Uji likelihood ratio antara model dengan proportional odds dan model tanpa proportional odds menghasilkan nilai \(0\), yang menunjukkan bahwa tidak ada perbedaan yang signifikan antara kedua model. Ini mengindikasikan bahwa asumsi proportional odds mungkin valid untuk model ini.
Log-linear model adalah model statistik yang digunakan untuk menganalisis hubungan antara beberapa variabel kategori dengan menggunakan distribusi Poisson atau multinomial untuk data kontingensi. Model ini menghubungkan logaritma dari ekspektasi frekuensi dalam tabel kontingensi dengan kombinasi linier dari variabel prediktor.
Model ini sangat berguna untuk memodelkan interaksi antar variabel dalam tabel kontingensi lebih dari dua arah dan dapat digunakan untuk uji hipotesis terkait asosiasi atau independensi antar variabel kategori (Dewi, 2023).
Model Saturated
Model saturated adalah model log-linear yang mencakup semua interaksi yang mungkin antara variabel kategori. Model ini memungkinkan semua parameter dalam tabel kontingensi untuk dihitung, yang memberikan kecocokan terbaik dengan data, tetapi model ini seringkali tidak praktis karena jumlah parameter yang sangat besar.
Formulasi Model Saturated (untuk tabel kontingensi 2x2):
\[ \log(\mu_{ij}) = \lambda + \lambda_{i} + \lambda_{j} + \lambda_{ij} \]
Di mana: - \(\mu_{ij}\) adalah frekuensi yang diperkirakan untuk sel ke-i dan ke-j dalam tabel 2x2. - \(\lambda\) adalah konstanta model. - \(\lambda_{i}\) adalah efek dari variabel pertama (misalnya, kategori i). - \(\lambda_{j}\) adalah efek dari variabel kedua (misalnya, kategori j). - \(\lambda_{ij}\) adalah efek interaksi antara variabel pertama dan kedua.
Model Independent
Model independent adalah model yang mengasumsikan bahwa tidak ada interaksi antara variabel kategori. Dengan kata lain, variabel-variabel dalam tabel kontingensi diperlakukan sebagai independen.
Formulasi Model Independent:
\[ \log(\mu_{ij}) = \lambda + \lambda_{i} + \lambda_{j} \]
Di mana: - \(\mu_{ij}\) adalah frekuensi yang diperkirakan untuk sel ke-i dan ke-j. - \(\lambda_{i}\) adalah efek dari variabel pertama. - \(\lambda_{j}\) adalah efek dari variabel kedua.
Tabel kontingensi adalah representasi tabular dari data kategorikal yang memperlihatkan frekuensi kombinasi kategori dari dua variabel. Misalnya, dalam tabel 2x2 berikut:
| Kategori A | Kategori B | |
|---|---|---|
| Kategori 1 | a | b |
| Kategori 2 | c | d |
Log-Linear Model dalam Tabel Kontingensi
Untuk tabel kontingensi sederhana (misalnya 2x2), model log-linear memodelkan logaritma dari frekuensi yang diharapkan (\(\mu_{ij}\)) untuk setiap sel dalam tabel. Misalnya, untuk tabel 2x2 yang lebih kompleks, model log-linear bisa berbentuk seperti berikut:
\[ \log(\mu_{ij}) = \lambda + \lambda_{i} + \lambda_{j} + \lambda_{ij} \]
Dimana: - \(\mu_{ij}\) adalah frekuensi yang diperkirakan untuk sel ke-i dan ke-j dalam tabel 2x2. - \(\lambda\) adalah konstanta model. - \(\lambda_{i}\) adalah efek dari variabel pertama (misalnya, kategori i). - \(\lambda_{j}\) adalah efek dari variabel kedua (misalnya, kategori j). - \(\lambda_{ij}\) adalah efek interaksi antara variabel pertama dan kedua.
Estimasi parameter dalam model log-linear biasanya dilakukan menggunakan maksimum likelihood estimation (MLE), di mana parameter model diestimasi dengan cara memaksimalkan fungsi likelihood.
Fungsi Likelihood
Fungsi likelihood untuk model log-linear dengan data Poisson dapat dinyatakan sebagai berikut:
\[ L(\lambda) = \prod_{i,j} \frac{(\mu_{ij})^{y_{ij}} e^{-\mu_{ij}}}{y_{ij}!} \]
Di mana: - \(y_{ij}\) adalah data observasi di sel ke-i dan ke-j. - \(\mu_{ij}\) adalah frekuensi yang diperkirakan berdasarkan model log-linear.
Log-Likelihood
Log-likelihood untuk model log-linear dapat ditulis sebagai:
\[ \log(L(\lambda)) = \sum_{i,j} y_{ij} \log(\mu_{ij}) - \mu_{ij} \]
Estimasi parameter dilakukan dengan memaksimalkan fungsi log-likelihood terhadap parameter yang ada.
Estimasi Sum to Zero
Untuk memastikan bahwa model log-linear tidak menghasilkan parameter yang tidak teridentifikasi (terutama untuk tabel yang lebih besar), kita menggunakan constraint sum to zero untuk mengatur parameter model.
Formulasi sum to zero untuk model saturated adalah:
\[ \sum_{i} \lambda_{i} = 0, \quad \sum_{j} \lambda_{j} = 0, \quad \sum_{i,j} \lambda_{ij} = 0 \]
Artinya, semua parameter efek utama dan interaksi dikendalikan agar jumlah totalnya menjadi nol, yang memastikan bahwa model tetap teridentifikasi.
Odds ratio dalam konteks model log-linear digunakan untuk mengukur asosiasi antara dua kategori dalam tabel kontingensi. Odds ratio (\(OR\)) dapat dihitung dengan rumus sebagai berikut:
Formula Odds Ratio
Untuk tabel kontingensi 2x2, formula odds ratio adalah:
\[ OR = \frac{(a/c)}{(b/d)} \]
Di mana: - \(a\) adalah frekuensi dalam sel (1,1), - \(b\) adalah frekuensi dalam sel (1,2), - \(c\) adalah frekuensi dalam sel (2,1), - \(d\) adalah frekuensi dalam sel (2,2).
| Lulus | Gagal | |
|---|---|---|
| Pria | 50 | 30 |
| Wanita | 40 | 20 |
Dimana: - \(n_{11} = 50\) (Lulus, Pria) - \(n_{12} = 30\) (Gagal, Pria) - \(n_{21} = 40\) (Lulus, Wanita) - \(n_{22} = 20\) (Gagal, Wanita)
Langkah 1: Menghitung Frekuensi yang Diharapkan (\(\mu_{ij}\))
Untuk menghitung frekuensi yang diharapkan (\(\mu_{ij}\)):
\[ \mu_{ij} = \frac{(\text{Total baris ke-i}) \times (\text{Total kolom ke-j})}{\text{Total keseluruhan}} \]
Menggunakan data:
Sekarang kita hitung frekuensi yang diharapkan (\(\mu_{ij}\)) untuk setiap sel:
Langkah 2: Menghitung Efek Utama \(\lambda_A\) (Gender)
Untuk menghitung efek utama \(\lambda_A\) (jenis kelamin):
\[ \lambda_A = \frac{1}{2} \left[ (\log(n_{11}) + \log(n_{12})) - (\log(n_{21}) + \log(n_{22})) \right] \]
Substitusi nilai logaritma dari setiap frekuensi:
Sekarang kita substitusi ke dalam rumus untuk menghitung \(\lambda_A\):
\[ \lambda_A = \frac{1}{2} \left[ (3.912 + 3.401) - (3.688 + 2.996) \right] \] \[ \lambda_A = \frac{1}{2} \left[ 7.313 - 6.684 \right] \] \[ \lambda_A = \frac{1}{2} \times 0.629 = 0.3145 \]
Karena sum-to-zero constraint, kita dapatkan:
\[ \lambda_2 = -0.3145 \]
Langkah 3: Menghitung Efek Utama \(\lambda_B\) (Status)
Untuk menghitung efek utama \(\lambda_B\) (status):
\[ \lambda_B = \frac{1}{2} \left[ (\log(n_{11}) + \log(n_{21})) - (\log(n_{12}) + \log(n_{22})) \right] \]
Substitusi nilai logaritma yang sudah dihitung:
\[ \lambda_B = \frac{1}{2} \left[ (\log(50) + \log(10)) - (\log(30) + \log(20)) \right] \] \[ \lambda_B = \frac{1}{2} \left[ (3.912 + 2.3026) - (3.401 + 2.9957) \right] \] \[ \lambda_B = \frac{1}{2} \left[ 6.2146 - 6.3967 \right] = \frac{1}{2} \times (-0.1821) = -0.09105 \]
Karena sum-to-zero:
\[ \lambda_2 = +0.09105 \]
Langkah 4: Menghitung Efek Interaksi \(\lambda_{AB}\)
Untuk menghitung efek interaksi \(\lambda_{AB}\):
\[ \lambda_{11} = \frac{1}{4} \left[ \log(n_{11}) - \log(n_{12}) - \log(n_{21}) + \log(n_{22}) \right] \]
Substitusi nilai logaritma yang sudah dihitung:
\[ \lambda_{11} = \frac{1}{4} \left[ 3.912 - 3.401 - 3.688 + 2.996 \right] \] \[ \lambda_{11} = \frac{1}{4} \left[ 3.912 - 3.401 - 3.688 + 2.996 \right] = \frac{1}{4} \times 1.7918 \] \[ \lambda_{11} = 0.44795 \]
Sekarang, berdasarkan sum-to-zero constraint:
\[ \lambda_{12} = -\lambda_{11} = -0.44795 \] \[ \lambda_{21} = -\lambda_{11} = -0.44795 \] \[ \lambda_{22} = +\lambda_{11} = 0.44795 \]
Untuk menghitung Odds Ratio (OR):
\[ OR = \frac{(a/c)}{(b/d)} \]
Di mana: - \(a = 50\) (Lulus, Pria) - \(b = 30\) (Gagal, Pria) - \(c = 40\) (Lulus, Wanita) - \(d = 20\) (Gagal, Wanita)
Maka:
\[ OR = \frac{(50/40)}{(30/20)} = \frac{1.25}{1.5} = 0.8333 \]
Setelah menghitung semua parameter, berikut adalah ringkasan model:
Data
# Data Tabel 2x2
data <- matrix(c(50, 30, 40, 20), nrow = 2, byrow = TRUE)
colnames(data) <- c("Lulus", "Gagal")
rownames(data) <- c("Pria", "Wanita")
# Total
total <- sum(data)
# Total baris dan kolom
total_row <- rowSums(data)
total_col <- colSums(data)
Model Tanpa Interaksi
# Mengonversi data menjadi tabel untuk model glm
data_frame <- as.data.frame(as.table(data))
# Estimasi Model Log-Linear Tanpa Interaksi (hanya efek utama)
model_no_interaction <- glm(Freq ~ Var1 + Var2, data = data_frame, family = poisson(link = "log"))
# Menampilkan Ringkasan Model Tanpa Interaksi
summary(model_no_interaction)
##
## Call:
## glm(formula = Freq ~ Var1 + Var2, family = poisson(link = "log"),
## data = data_frame)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.9402 0.1283 30.704 < 2e-16 ***
## Var1Wanita -0.2877 0.1708 -1.684 0.092086 .
## Var2Gagal -0.5878 0.1764 -3.332 0.000861 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 14.71633 on 3 degrees of freedom
## Residual deviance: 0.26002 on 1 degrees of freedom
## AIC: 27.631
##
## Number of Fisher Scoring iterations: 3
Model Dengan Interaksi
# Estimasi Model Log-Linear Dengan Interaksi
model_with_interaction <- glm(Freq ~ Var1 * Var2, data = data_frame, family = poisson(link = "log"))
# Menampilkan Ringkasan Model Dengan Interaksi
summary(model_with_interaction)
##
## Call:
## glm(formula = Freq ~ Var1 * Var2, family = poisson(link = "log"),
## data = data_frame)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.9120 0.1414 27.662 <2e-16 ***
## Var1Wanita -0.2231 0.2121 -1.052 0.293
## Var2Gagal -0.5108 0.2309 -2.212 0.027 *
## Var1Wanita:Var2Gagal -0.1823 0.3582 -0.509 0.611
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 1.4716e+01 on 3 degrees of freedom
## Residual deviance: 8.4377e-15 on 0 degrees of freedom
## AIC: 29.371
##
## Number of Fisher Scoring iterations: 3
Model Tanpa Interaksi - Model log-linear tanpa interaksi lebih baik dalam hal fit dibandingkan model dengan interaksi, dengan nilai AIC lebih rendah (27.631 vs 29.371). - Efek utama dari status (Gagal) sangat signifikan (p < 0.001), menunjukkan bahwa kategori Gagal memiliki pengaruh yang kuat pada hasil lulus/gagal. - Efek utama jenis kelamin (Wanita) tidak signifikan pada p = 0.092, menunjukkan bahwa perbedaan antara pria dan wanita dalam hal lulus/gagal tidak terlalu besar.
Model Dengan Interaksi - Efek interaksi antara jenis kelamin (Wanita) dan status (Gagal) tidak signifikan (p = 0.611), artinya interaksi antara kedua variabel tersebut tidak memberikan kontribusi yang signifikan terhadap model. - Model ini lebih kompleks dan memiliki AIC yang lebih tinggi, menunjukkan bahwa menambahkan interaksi tidak meningkatkan kualitas model secara signifikan.
Rekomendasi - Model Tanpa Interaksi lebih baik digunakan untuk analisis ini karena lebih sederhana dan lebih sesuai dengan data yang tersedia. Efek utama dari status sangat jelas, sementara efek jenis kelamin tidak signifikan dalam model ini.
Model log-linear tiga arah digunakan untuk menganalisis hubungan antara tiga variabel kategorik dalam tabel kontingensi, dengan cara memodelkan log dari frekuensi yang diharapkan (\(\mu_{ijk}\)) sebagai penjumlahan dari efek utama dan interaksi antar variabel. Model ini mencakup pengaruh efek utama dari setiap variabel serta interaksi antara variabel-variabel tersebut.
Model saturated adalah model yang mencakup semua interaksi antara ketiga variabel. Artinya, model ini memasukkan efek utama dari setiap variabel dan semua interaksi dua arah serta tiga arah. Secara matematis, model saturated untuk tiga variabel \(X\), \(Y\), dan \(Z\) ditulis sebagai:
\[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{XY} + \lambda_{XZ} + \lambda_{YZ} + \lambda_{XYZ} \]
Model saturated mengasumsikan bahwa semua kombinasi interaksi mungkin terjadi, dan ini memberikan model yang paling kompleks dengan banyak parameter.
Model homogen mengasumsikan bahwa tidak ada interaksi antara variabel-variabel yang dipertimbangkan, baik dua arah maupun tiga arah. Model ini hanya mencakup efek utama dari setiap variabel. Secara matematis, model homogen untuk tiga variabel ditulis sebagai:
\[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z \]
Dalam model ini, kita hanya mempertimbangkan pengaruh individu dari masing-masing variabel, tanpa memperhitungkan adanya hubungan interaktif antar variabel.
Model conditional berfokus pada pengaruh interaksi dua arah antara dua variabel, dengan mengontrol satu variabel lainnya. Tiga model conditional dapat dibangun berdasarkan variabel yang dikontrol:
Conditional pada \(X\): \[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{XY} + \lambda_{XZ} \]
Conditional pada \(Y\): \[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{XY} + \lambda_{YZ} \]
Conditional pada \(Z\): \[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{XZ} + \lambda_{YZ} \]
Model joint independence mengasumsikan bahwa ada independensi antara dua variabel pada setiap kombinasi tingkat variabel lainnya. Beberapa model joint independence adalah:
Independensi antara \(X\) dan \(Y\): \[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{XY} \]
Independensi antara \(X\) dan \(Z\): \[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{XZ} \]
Independensi antara \(Y\) dan \(Z\): \[ \log(\mu_{ijk}) = \lambda + \lambda_X + \lambda_Y + \lambda_Z + \lambda_{YZ} \]
Model ini mengasumsikan bahwa dua variabel saling independen dalam distribusinya, dengan adanya asumsi bahwa hubungan antara dua variabel tersebut terlepas dari pengaruh variabel ketiga.
1. Pengujian Interaksi Tiga Arah (Saturated vs Homogen)
Pengujian interaksi tiga arah dilakukan dengan membandingkan model saturated yang mencakup semua interaksi dengan model homogen yang hanya mencakup efek utama. Untuk menguji apakah ada interaksi tiga arah, kita menggunakan deviance:
\[ \Delta \text{Deviance} = \text{Deviance Model Homogen} - \text{Deviance Model Saturated} \]
Jika \(\Delta \text{Deviance}\) lebih besar dari nilai chi-square kritis, maka kita menolak \(H_0\) dan menyimpulkan bahwa ada interaksi tiga arah.
2. Pengujian Interaksi Dua Arah (XY, XZ, YZ)
Untuk pengujian interaksi dua arah, kita membandingkan model dengan interaksi dua arah dengan model yang hanya mencakup efek utama. Jika ada peningkatan yang signifikan dalam deviance, maka kita dapat menyimpulkan bahwa ada interaksi dua arah yang signifikan antara variabel-variabel tersebut.
Dalam penelitian ini, kita akan menganalisis hubungan antara jenis kelamin, status pernikahan, dan pendidikan menggunakan model log-linear tiga arah. Tujuan analisis ini adalah untuk memahami bagaimana jenis kelamin dan status pernikahan memengaruhi tingkat pendidikan seseorang.
Data yang digunakan diambil dari sebuah studi yang mengamati distribusi tingkat pendidikan berdasarkan jenis kelamin dan status pernikahan dalam sebuah populasi. Berikut adalah tabel data yang menunjukkan jumlah orang dengan tingkat pendidikan yang berbeda berdasarkan jenis kelamin dan status pernikahan.
| Jenis Kelamin | Status Pernikahan | Pendidikan Tinggi | Pendidikan Menengah | Pendidikan Rendah |
|---|---|---|---|---|
| Pria | Menikah | 120 | 200 | 150 |
| Pria | Belum Menikah | 80 | 180 | 100 |
| Wanita | Menikah | 100 | 180 | 120 |
| Wanita | Belum Menikah | 60 | 150 | 90 |
Untuk analisis log-linear tiga arah, kita perlu mengonversi data tersebut menjadi tabel kontingensi. Tabel kontingensi ini akan menunjukkan distribusi frekuensi untuk kombinasi variabel jenis kelamin, status pernikahan, dan pendidikan.
# Membuat data tabel untuk kontingensi
jenis_kelamin <- factor(c("Pria", "Pria", "Wanita", "Wanita"))
status_pernikahan <- factor(c("Menikah", "Belum Menikah", "Menikah", "Belum Menikah"))
pendidikan <- factor(c("Pendidikan Tinggi", "Pendidikan Menengah", "Pendidikan Rendah",
"Pendidikan Tinggi", "Pendidikan Menengah", "Pendidikan Rendah",
"Pendidikan Tinggi", "Pendidikan Menengah", "Pendidikan Rendah",
"Pendidikan Tinggi", "Pendidikan Menengah", "Pendidikan Rendah"))
frekuensi <- c(120, 200, 150, 80, 180, 100, 100, 180, 120, 60, 150, 90)
# Membuat data frame dari tabel
data_kontingensi <- data.frame(JenisKelamin = jenis_kelamin,
StatusPernikahan = status_pernikahan,
Pendidikan = pendidikan,
Frekuensi = frekuensi)
# Mengubah data menjadi tabel kontingensi
tabel_kontingensi <- xtabs(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan, data = data_kontingensi)
# Menampilkan tabel kontingensi
ftable(tabel_kontingensi)
## Pendidikan Pendidikan Menengah Pendidikan Rendah Pendidikan Tinggi
## JenisKelamin StatusPernikahan
## Pria Belum Menikah 200 100 60
## Menikah 180 120 120
## Wanita Belum Menikah 180 90 80
## Menikah 150 150 100
# Estimasi Model Log-Linear Dengan Interaksi Dua Arah (Homogen)
model_homogen <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan + JenisKelamin*StatusPernikahan + JenisKelamin*Pendidikan + StatusPernikahan*Pendidikan, family = poisson(link = "log"), data = data_kontingensi)
# Menampilkan Ringkasan Model Homogen
summary(model_homogen)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * StatusPernikahan + JenisKelamin * Pendidikan +
## StatusPernikahan * Pendidikan, family = poisson(link = "log"),
## data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.30517 0.06628 80.037
## JenisKelaminWanita -0.11989 0.08930 -1.343
## StatusPernikahanMenikah -0.11989 0.08930 -1.343
## PendidikanPendidikan Rendah -0.80982 0.10803 -7.496
## PendidikanPendidikan Tinggi -1.07072 0.11820 -9.058
## JenisKelaminWanita:StatusPernikahanMenikah -0.04563 0.10363 -0.440
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.23369 0.12058 1.938
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.14777 0.13041 1.133
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.49514 0.12112 4.088
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.59475 0.13179 4.513
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.1794
## StatusPernikahanMenikah 0.1794
## PendidikanPendidikan Rendah 6.57e-14 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:StatusPernikahanMenikah 0.6597
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.0526 .
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.2572
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.35e-05 ***
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 6.40e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.8764 on 11 degrees of freedom
## Residual deviance: 7.7508 on 2 degrees of freedom
## AIC: 107.29
##
## Number of Fisher Scoring iterations: 4
# Estimasi Model Log-Linear Dengan Interaksi (Saturated)
model_saturated <- glm(Frekuensi ~ JenisKelamin * StatusPernikahan * Pendidikan, family = poisson(link = "log"), data = data_kontingensi)
# Menampilkan Ringkasan Model Saturated
summary(model_saturated)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin * StatusPernikahan * Pendidikan,
## family = poisson(link = "log"), data = data_kontingensi)
##
## Coefficients:
## Estimate
## (Intercept) 5.298e+00
## JenisKelaminWanita -1.054e-01
## StatusPernikahanMenikah -1.054e-01
## PendidikanPendidikan Rendah -6.931e-01
## PendidikanPendidikan Tinggi -1.204e+00
## JenisKelaminWanita:StatusPernikahanMenikah -7.696e-02
## JenisKelaminWanita:PendidikanPendidikan Rendah 6.190e-14
## JenisKelaminWanita:PendidikanPendidikan Tinggi 3.930e-01
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 2.877e-01
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 7.985e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.055e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi -3.930e-01
## Std. Error
## (Intercept) 7.071e-02
## JenisKelaminWanita 1.027e-01
## StatusPernikahanMenikah 1.027e-01
## PendidikanPendidikan Rendah 1.225e-01
## PendidikanPendidikan Tinggi 1.472e-01
## JenisKelaminWanita:StatusPernikahanMenikah 1.509e-01
## JenisKelaminWanita:PendidikanPendidikan Rendah 1.780e-01
## JenisKelaminWanita:PendidikanPendidikan Tinggi 1.993e-01
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 1.700e-01
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 1.886e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 2.427e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi 2.651e-01
## z value
## (Intercept) 74.930
## JenisKelaminWanita -1.026
## StatusPernikahanMenikah -1.026
## PendidikanPendidikan Rendah -5.660
## PendidikanPendidikan Tinggi -8.179
## JenisKelaminWanita:StatusPernikahanMenikah -0.510
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.000
## JenisKelaminWanita:PendidikanPendidikan Tinggi 1.972
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 1.693
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 4.235
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 1.671
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi -1.483
## Pr(>|z|)
## (Intercept) < 2e-16
## JenisKelaminWanita 0.3051
## StatusPernikahanMenikah 0.3051
## PendidikanPendidikan Rendah 1.52e-08
## PendidikanPendidikan Tinggi 2.85e-16
## JenisKelaminWanita:StatusPernikahanMenikah 0.6101
## JenisKelaminWanita:PendidikanPendidikan Rendah 1.0000
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.0486
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.0905
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 2.29e-05
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.0948
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.1382
##
## (Intercept) ***
## JenisKelaminWanita
## StatusPernikahanMenikah
## PendidikanPendidikan Rendah ***
## PendidikanPendidikan Tinggi ***
## JenisKelaminWanita:StatusPernikahanMenikah
## JenisKelaminWanita:PendidikanPendidikan Rendah
## JenisKelaminWanita:PendidikanPendidikan Tinggi *
## StatusPernikahanMenikah:PendidikanPendidikan Rendah .
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi ***
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah .
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 1.7188e+02 on 11 degrees of freedom
## Residual deviance: -1.9540e-14 on 0 degrees of freedom
## AIC: 103.54
##
## Number of Fisher Scoring iterations: 2
# Menghitung Deviance untuk kedua model
deviance_homogen <- deviance(model_homogen)
deviance_saturated <- deviance(model_saturated)
# Selisih Deviance
delta_deviance <- deviance_homogen - deviance_saturated
# Derajat kebebasan
df <- df.residual(model_homogen) - df.residual(model_saturated)
# Menghitung nilai chi-square
chi_square_value <- delta_deviance
p_value <- 1 - pchisq(chi_square_value, df)
delta_deviance
## [1] 7.750792
chi_square_value
## [1] 7.750792
p_value
## [1] 0.02074612
Berdasarkan hasil perhitungan dan uji model log-linear yang telah dilakukan, berikut adalah kesimpulannya:
1. Model Homogen vs Model Saturated
2. Selisih Deviance
Selisih Deviance antara model homogen dan saturated adalah 7.750792. Nilai ini menunjukkan bahwa model saturated (yang mencakup semua interaksi dua arah dan tiga arah) memiliki fit yang lebih baik dibandingkan dengan model homogen.
3. Pengujian Chi-Square
Nilai chi-square untuk uji perbandingan antara model homogen dan saturated dihitung sebagai 7.750792. Dengan derajat kebebasan yang sesuai, kita bisa menghitung p-value:
4. Hipotesis Pengujian
5. Interpretasi Hasil
Kesimpulan Akhir
Berdasarkan Deviance dan p-value, kita dapat menyimpulkan bahwa model saturated yang mencakup semua interaksi dua arah dan tiga arah lebih cocok untuk data ini dibandingkan dengan model homogen, yang hanya mencakup efek utama dan interaksi dua arah. Dengan demikian, model saturated memberikan fit yang lebih baik dan lebih tepat dalam menggambarkan hubungan antar variabel. Sehingga ada interaksi antara fakor gender, status, dan pendidikan
# Estimasi Model Log-Linear Tanpa Interaksi (Homogen)
model_homogen <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan + JenisKelamin*StatusPernikahan + JenisKelamin*Pendidikan + StatusPernikahan*Pendidikan, family = poisson(link = "log"), data = data_kontingensi)
# Menampilkan Ringkasan Model Homogen
summary(model_homogen)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * StatusPernikahan + JenisKelamin * Pendidikan +
## StatusPernikahan * Pendidikan, family = poisson(link = "log"),
## data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.30517 0.06628 80.037
## JenisKelaminWanita -0.11989 0.08930 -1.343
## StatusPernikahanMenikah -0.11989 0.08930 -1.343
## PendidikanPendidikan Rendah -0.80982 0.10803 -7.496
## PendidikanPendidikan Tinggi -1.07072 0.11820 -9.058
## JenisKelaminWanita:StatusPernikahanMenikah -0.04563 0.10363 -0.440
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.23369 0.12058 1.938
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.14777 0.13041 1.133
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.49514 0.12112 4.088
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.59475 0.13179 4.513
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.1794
## StatusPernikahanMenikah 0.1794
## PendidikanPendidikan Rendah 6.57e-14 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:StatusPernikahanMenikah 0.6597
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.0526 .
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.2572
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.35e-05 ***
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 6.40e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.8764 on 11 degrees of freedom
## Residual deviance: 7.7508 on 2 degrees of freedom
## AIC: 107.29
##
## Number of Fisher Scoring iterations: 4
# Estimasi Model Log-Linear Conditional pada X (Jenis Kelamin)
model_conditional_x <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan + JenisKelamin*StatusPernikahan + JenisKelamin*Pendidikan , family = poisson(link = "log"),
data = data_kontingensi)
# Menampilkan Ringkasan Model Conditional pada X
summary(model_conditional_x)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * StatusPernikahan + JenisKelamin * Pendidikan,
## family = poisson(link = "log"), data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.16698 0.06424 80.427
## JenisKelaminWanita -0.13003 0.09317 -1.396
## StatusPernikahanMenikah 0.15415 0.07182 2.146
## PendidikanPendidikan Rendah -0.54654 0.08472 -6.451
## PendidikanPendidikan Tinggi -0.74721 0.09048 -8.258
## JenisKelaminWanita:StatusPernikahanMenikah -0.02062 0.10255 -0.201
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.22809 0.11989 1.902
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.14108 0.12951 1.089
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.1629
## StatusPernikahanMenikah 0.0319 *
## PendidikanPendidikan Rendah 1.11e-10 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:StatusPernikahanMenikah 0.8406
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.0571 .
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.2760
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.876 on 11 degrees of freedom
## Residual deviance: 35.424 on 4 degrees of freedom
## AIC: 130.96
##
## Number of Fisher Scoring iterations: 4
# Menghitung Deviance untuk kedua model
deviance_homogen <- deviance(model_homogen)
deviance_conditional_x <- deviance(model_conditional_x)
# Selisih Deviance
delta_deviance_conditional_x <- deviance_conditional_x - deviance_homogen
# Derajat kebebasan
df_conditional_x <- df.residual(model_conditional_x) - df.residual(model_homogen)
# Menghitung nilai chi-square
chi_square_value_conditional_x <- delta_deviance_conditional_x
p_value_conditional_x <- 1 - pchisq(chi_square_value_conditional_x, df_conditional_x)
delta_deviance_conditional_x
## [1] 27.6733
chi_square_value_conditional_x
## [1] 27.6733
p_value_conditional_x
## [1] 9.790812e-07
Berdasarkan hasil analisis perbandingan antara model homogen dan model conditional pada \(X\), berikut adalah kesimpulannya:
1. Model Homogen vs Model Conditional pada \(X\)
2. Selisih Deviance
Selisih Deviance antara model conditional pada \(X\) dan model homogen adalah 27.6733. Nilai ini menunjukkan bahwa model conditional pada \(X\) memiliki fit yang lebih buruk dibandingkan dengan model homogen, karena selisih Deviance yang besar menunjukkan penurunan kualitas model.
3. Pengujian Chi-Square
Nilai chi-square untuk uji perbandingan antara model homogen dan model conditional pada \(X\) dihitung sebagai 27.6733. Dengan derajat kebebasan yang sesuai, kita dapat menghitung p-value:
4. Hipotesis Pengujian
5. Interpretasi Hasil
Kesimpulan Akhir
Berdasarkan Deviance, chi-square, dan p-value, kita dapat menyimpulkan bahwa model homogen, yang hanya mempertimbangkan efek utama dan interaksi dua arah, lebih baik dalam menggambarkan hubungan antar variabel dibandingkan dengan model conditional pada \(X\) yang memasukkan interaksi dua arah antara Status Pernikahan dan Pendidikan sambil mengontrol Jenis Kelamin. Sehingga dibuktikan adanya interaksi signifikan antara status dan pendidikan.
# Estimasi Model Log-Linear Tanpa Interaksi (Homogen)
model_homogen <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
JenisKelamin*StatusPernikahan + JenisKelamin*Pendidikan +
StatusPernikahan*Pendidikan, family = poisson(link = "log"),
data = data_kontingensi)
# Menampilkan Ringkasan Model Homogen
summary(model_homogen)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * StatusPernikahan + JenisKelamin * Pendidikan +
## StatusPernikahan * Pendidikan, family = poisson(link = "log"),
## data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.30517 0.06628 80.037
## JenisKelaminWanita -0.11989 0.08930 -1.343
## StatusPernikahanMenikah -0.11989 0.08930 -1.343
## PendidikanPendidikan Rendah -0.80982 0.10803 -7.496
## PendidikanPendidikan Tinggi -1.07072 0.11820 -9.058
## JenisKelaminWanita:StatusPernikahanMenikah -0.04563 0.10363 -0.440
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.23369 0.12058 1.938
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.14777 0.13041 1.133
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.49514 0.12112 4.088
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.59475 0.13179 4.513
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.1794
## StatusPernikahanMenikah 0.1794
## PendidikanPendidikan Rendah 6.57e-14 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:StatusPernikahanMenikah 0.6597
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.0526 .
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.2572
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.35e-05 ***
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 6.40e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.8764 on 11 degrees of freedom
## Residual deviance: 7.7508 on 2 degrees of freedom
## AIC: 107.29
##
## Number of Fisher Scoring iterations: 4
# Estimasi Model Log-Linear Conditional pada Y (Pendidikan)
model_conditional_y <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
JenisKelamin*Pendidikan + StatusPernikahan*Pendidikan, family = poisson(link = "log"),
data = data_kontingensi)
# Menampilkan Ringkasan Model Conditional pada Y
summary(model_conditional_y)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * Pendidikan + StatusPernikahan * Pendidikan,
## family = poisson(link = "log"), data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.31508 0.06209 85.608
## JenisKelaminWanita -0.14108 0.07525 -1.875
## StatusPernikahanMenikah -0.14108 0.07525 -1.875
## PendidikanPendidikan Rendah -0.80565 0.10719 -7.516
## PendidikanPendidikan Tinggi -1.06658 0.11737 -9.087
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.22809 0.11989 1.902
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.14108 0.12951 1.089
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.49248 0.12095 4.072
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.59306 0.13172 4.502
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.0608 .
## StatusPernikahanMenikah 0.0608 .
## PendidikanPendidikan Rendah 5.64e-14 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.0571 .
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.2760
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.67e-05 ***
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 6.72e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.8764 on 11 degrees of freedom
## Residual deviance: 7.9447 on 3 degrees of freedom
## AIC: 105.48
##
## Number of Fisher Scoring iterations: 4
# Menghitung Deviance untuk kedua model
deviance_homogen <- deviance(model_homogen)
deviance_conditional_y <- deviance(model_conditional_y)
# Selisih Deviance (model homogen - model conditional pada Y)
delta_deviance_conditional_y <- deviance_conditional_y - deviance_homogen
# Derajat kebebasan
df_conditional_y <- df.residual(model_conditional_y) - df.residual(model_homogen)
# Menghitung nilai chi-square
chi_square_value_conditional_y <- delta_deviance_conditional_y
p_value_conditional_y <- 1 - pchisq(chi_square_value_conditional_y, df_conditional_y)
# Menampilkan hasil
delta_deviance_conditional_y
## [1] 0.1939064
chi_square_value_conditional_y
## [1] 0.1939064
p_value_conditional_y
## [1] 0.659685
Berdasarkan hasil analisis perbandingan antara model homogen dan model conditional pada \(Y\), berikut adalah kesimpulannya:
1. Model Homogen vs Model Conditional pada \(Y\)
2. Selisih Deviance
Selisih Deviance antara model conditional pada \(Y\) dan model homogen adalah 0.1939. Nilai ini menunjukkan bahwa model conditional pada \(Y\) memiliki fit yang sedikit lebih buruk dibandingkan dengan model homogen, tetapi selisihnya sangat kecil, yang menunjukkan bahwa kedua model tersebut tidak jauh berbeda dalam hal fit.
3. Pengujian Chi-Square
Nilai chi-square untuk uji perbandingan antara model homogen dan model conditional pada \(Y\) dihitung sebagai 0.1939. Dengan derajat kebebasan yang sesuai, kita dapat menghitung p-value:
4. Hipotesis Pengujian
5. Interpretasi Hasil
Kesimpulan Akhir
Berdasarkan Deviance, chi-square, dan p-value, kita dapat menyimpulkan bahwa model homogen, yang hanya mempertimbangkan efek utama dan interaksi dua arah, adalah model yang lebih sesuai untuk data ini dibandingkan dengan model conditional pada \(Y\), yang mengontrol Pendidikan. Kedua model memiliki fit yang hampir sama, namun tidak ada perbedaan yang signifikan secara statistik antara keduanya. Sehingga membuktikan tidak adanya interaksi signifikan antara status dan gender.
# Estimasi Model Log-Linear Tanpa Interaksi (Homogen)
model_homogen <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
JenisKelamin*StatusPernikahan + JenisKelamin*Pendidikan +
StatusPernikahan*Pendidikan, family = poisson(link = "log"),
data = data_kontingensi)
# Menampilkan Ringkasan Model Homogen
summary(model_homogen)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * StatusPernikahan + JenisKelamin * Pendidikan +
## StatusPernikahan * Pendidikan, family = poisson(link = "log"),
## data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.30517 0.06628 80.037
## JenisKelaminWanita -0.11989 0.08930 -1.343
## StatusPernikahanMenikah -0.11989 0.08930 -1.343
## PendidikanPendidikan Rendah -0.80982 0.10803 -7.496
## PendidikanPendidikan Tinggi -1.07072 0.11820 -9.058
## JenisKelaminWanita:StatusPernikahanMenikah -0.04563 0.10363 -0.440
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.23369 0.12058 1.938
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.14777 0.13041 1.133
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.49514 0.12112 4.088
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.59475 0.13179 4.513
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.1794
## StatusPernikahanMenikah 0.1794
## PendidikanPendidikan Rendah 6.57e-14 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:StatusPernikahanMenikah 0.6597
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.0526 .
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.2572
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.35e-05 ***
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 6.40e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.8764 on 11 degrees of freedom
## Residual deviance: 7.7508 on 2 degrees of freedom
## AIC: 107.29
##
## Number of Fisher Scoring iterations: 4
# Estimasi Model Log-Linear Conditional pada Z (Status Pernikahan)
model_conditional_z <- glm(Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
JenisKelamin*StatusPernikahan + StatusPernikahan*Pendidikan,
family = poisson(link = "log"), data = data_kontingensi)
# Menampilkan Ringkasan Model Conditional pada Z
summary(model_conditional_z)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin + StatusPernikahan + Pendidikan +
## JenisKelamin * StatusPernikahan + StatusPernikahan * Pendidikan,
## family = poisson(link = "log"), data = data_kontingensi)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 5.26101 0.06325 83.174
## JenisKelaminWanita -0.02817 0.07507 -0.375
## StatusPernikahanMenikah -0.13097 0.09051 -1.447
## PendidikanPendidikan Rendah -0.69315 0.08885 -7.801
## PendidikanPendidikan Tinggi -0.99853 0.09887 -10.100
## JenisKelaminWanita:StatusPernikahanMenikah -0.02062 0.10255 -0.201
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.49248 0.12095 4.072
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.59306 0.13172 4.502
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## JenisKelaminWanita 0.707
## StatusPernikahanMenikah 0.148
## PendidikanPendidikan Rendah 6.14e-15 ***
## PendidikanPendidikan Tinggi < 2e-16 ***
## JenisKelaminWanita:StatusPernikahanMenikah 0.841
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.67e-05 ***
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 6.72e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 171.88 on 11 degrees of freedom
## Residual deviance: 11.71 on 4 degrees of freedom
## AIC: 107.25
##
## Number of Fisher Scoring iterations: 4
# Menghitung Deviance untuk kedua model
deviance_homogen <- deviance(model_homogen)
deviance_conditional_z <- deviance(model_conditional_z)
# Selisih Deviance (model homogen - model conditional pada Z)
delta_deviance_conditional_z <- deviance_conditional_z - deviance_homogen
# Derajat kebebasan
df_conditional_z <- df.residual(model_conditional_z) - df.residual(model_homogen)
# Menghitung nilai chi-square
chi_square_value_conditional_z <- delta_deviance_conditional_z
p_value_conditional_z <- 1 - pchisq(chi_square_value_conditional_z, df_conditional_z)
# Menampilkan hasil
delta_deviance_conditional_z
## [1] 3.959086
chi_square_value_conditional_z
## [1] 3.959086
p_value_conditional_z
## [1] 0.1381324
Berdasarkan hasil analisis perbandingan antara model homogen dan model conditional pada \(Z\), berikut adalah kesimpulannya:
1. Model Homogen vs Model Conditional pada \(Z\)
2. Selisih Deviance
Selisih Deviance antara model conditional pada \(Z\) dan model homogen adalah 3.9591. Nilai ini menunjukkan bahwa model conditional pada \(Z\) memiliki fit yang sedikit lebih buruk dibandingkan dengan model homogen, meskipun selisihnya tidak terlalu besar.
3. Pengujian Chi-Square
Nilai chi-square untuk uji perbandingan antara model homogen dan model conditional pada \(Z\) dihitung sebagai 3.9591. Dengan derajat kebebasan yang sesuai, kita dapat menghitung p-value:
4. Hipotesis Pengujian
5. Interpretasi Hasil
Kesimpulan Akhir
Berdasarkan Deviance, chi-square, dan p-value, kita dapat menyimpulkan bahwa model homogen, yang hanya mempertimbangkan efek utama dan interaksi dua arah, adalah model yang lebih sesuai untuk data ini dibandingkan dengan model conditional pada \(Z\), yang mengontrol Status Pernikahan. Kedua model memiliki fit yang sangat mirip, dan tidak ada perbedaan yang signifikan secara statistik antara keduanya. Sehingga menunjukkan tidak adanya interaksi antara pendidikan dan gender.
aic_homogen <- AIC(model_homogen)
aic_saturated <- AIC(model_saturated)
aic_conditional_x <- AIC(model_conditional_x)
aic_conditional_y <- AIC(model_conditional_y)
aic_conditional_z <- AIC(model_conditional_z)
# Membuat data frame untuk perbandingan Deviance dan AIC
model_comparison <- data.frame(
Model = c("Homogen", "Saturated", "Conditional X", "Conditional Y", "Conditional Z"),
Deviance = c(deviance_homogen, deviance_saturated, deviance_conditional_x,
deviance_conditional_y, deviance_conditional_z),
AIC = c(aic_homogen, aic_saturated, aic_conditional_x,
aic_conditional_y, aic_conditional_z)
)
# Menampilkan perbandingan
model_comparison
## Model Deviance AIC
## 1 Homogen 7.750792e+00 107.2901
## 2 Saturated -1.953993e-14 103.5393
## 3 Conditional X 3.542409e+01 130.9634
## 4 Conditional Y 7.944698e+00 105.4840
## 5 Conditional Z 1.170988e+01 107.2491
Menunjukkan bahwa Model Saturated merupakan model terbagus dengan nilai AIC terendah menunjukkan bahwa model saturated adalah model yang paling representatif
summary(model_saturated)
##
## Call:
## glm(formula = Frekuensi ~ JenisKelamin * StatusPernikahan * Pendidikan,
## family = poisson(link = "log"), data = data_kontingensi)
##
## Coefficients:
## Estimate
## (Intercept) 5.298e+00
## JenisKelaminWanita -1.054e-01
## StatusPernikahanMenikah -1.054e-01
## PendidikanPendidikan Rendah -6.931e-01
## PendidikanPendidikan Tinggi -1.204e+00
## JenisKelaminWanita:StatusPernikahanMenikah -7.696e-02
## JenisKelaminWanita:PendidikanPendidikan Rendah 6.190e-14
## JenisKelaminWanita:PendidikanPendidikan Tinggi 3.930e-01
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 2.877e-01
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 7.985e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 4.055e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi -3.930e-01
## Std. Error
## (Intercept) 7.071e-02
## JenisKelaminWanita 1.027e-01
## StatusPernikahanMenikah 1.027e-01
## PendidikanPendidikan Rendah 1.225e-01
## PendidikanPendidikan Tinggi 1.472e-01
## JenisKelaminWanita:StatusPernikahanMenikah 1.509e-01
## JenisKelaminWanita:PendidikanPendidikan Rendah 1.780e-01
## JenisKelaminWanita:PendidikanPendidikan Tinggi 1.993e-01
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 1.700e-01
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 1.886e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 2.427e-01
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi 2.651e-01
## z value
## (Intercept) 74.930
## JenisKelaminWanita -1.026
## StatusPernikahanMenikah -1.026
## PendidikanPendidikan Rendah -5.660
## PendidikanPendidikan Tinggi -8.179
## JenisKelaminWanita:StatusPernikahanMenikah -0.510
## JenisKelaminWanita:PendidikanPendidikan Rendah 0.000
## JenisKelaminWanita:PendidikanPendidikan Tinggi 1.972
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 1.693
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 4.235
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 1.671
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi -1.483
## Pr(>|z|)
## (Intercept) < 2e-16
## JenisKelaminWanita 0.3051
## StatusPernikahanMenikah 0.3051
## PendidikanPendidikan Rendah 1.52e-08
## PendidikanPendidikan Tinggi 2.85e-16
## JenisKelaminWanita:StatusPernikahanMenikah 0.6101
## JenisKelaminWanita:PendidikanPendidikan Rendah 1.0000
## JenisKelaminWanita:PendidikanPendidikan Tinggi 0.0486
## StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.0905
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi 2.29e-05
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah 0.0948
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi 0.1382
##
## (Intercept) ***
## JenisKelaminWanita
## StatusPernikahanMenikah
## PendidikanPendidikan Rendah ***
## PendidikanPendidikan Tinggi ***
## JenisKelaminWanita:StatusPernikahanMenikah
## JenisKelaminWanita:PendidikanPendidikan Rendah
## JenisKelaminWanita:PendidikanPendidikan Tinggi *
## StatusPernikahanMenikah:PendidikanPendidikan Rendah .
## StatusPernikahanMenikah:PendidikanPendidikan Tinggi ***
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah .
## JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 1.7188e+02 on 11 degrees of freedom
## Residual deviance: -1.9540e-14 on 0 degrees of freedom
## AIC: 103.54
##
## Number of Fisher Scoring iterations: 2
Model Saturated mencakup semua interaksi dua arah dan tiga arah antara variabel Jenis Kelamin, Status Pernikahan, dan Pendidikan. Berdasarkan output yang diperoleh, berikut adalah interpretasi koefisien dan signifikansi dari setiap variabel dan interaksi.
1. Koefisien (Estimate)
(Intercept): Koefisien 5.298 menunjukkan bahwa ketika semua variabel (Jenis Kelamin, Status Pernikahan, dan Pendidikan) berada pada nilai referensi (kategori dasar), maka log frekuensi peristiwa yang diamati adalah 5.298.
JenisKelaminWanita: Koefisien -0.1054 menunjukkan bahwa Wanita memiliki frekuensi yang lebih rendah (log frekuensinya) dibandingkan dengan Pria. Namun, nilai p-value = 0.3051 menunjukkan bahwa efek ini tidak signifikan pada tingkat signifikansi 0.05. Artinya, tidak ada bukti yang cukup untuk menyatakan bahwa jenis kelamin mempengaruhi frekuensi peristiwa secara signifikan.
StatusPernikahanMenikah: Koefisien -0.1054 menunjukkan bahwa Status Menikah menurunkan frekuensi log peristiwa dibandingkan dengan Belum Menikah. Namun, p-value = 0.3051 menunjukkan bahwa perbedaan ini tidak signifikan, artinya tidak ada bukti yang cukup untuk mendukung pengaruh status pernikahan terhadap frekuensi peristiwa.
PendidikanPendidikan Rendah: Koefisien -0.6931 menunjukkan bahwa Pendidikan Rendah mengurangi frekuensi peristiwa (secara logaritmik) dibandingkan dengan Pendidikan Tinggi atau Menengah. Nilai p-value yang sangat kecil (< 2e-16) menunjukkan bahwa efek ini sangat signifikan. Ini menunjukkan bahwa individu dengan pendidikan rendah cenderung mengalami peristiwa lebih sedikit dibandingkan dengan yang memiliki pendidikan lebih tinggi.
PendidikanPendidikan Tinggi: Koefisien -1.204 menunjukkan bahwa Pendidikan Tinggi secara signifikan mengurangi frekuensi peristiwa dibandingkan dengan Pendidikan Menengah atau Rendah. Nilai p-value yang sangat kecil (< 2e-16) menunjukkan bahwa perbedaan ini sangat signifikan, dan memberikan bukti yang kuat bahwa pendidikan tinggi berhubungan dengan penurunan frekuensi peristiwa.
2. Interaksi Dua Arah
JenisKelaminWanita:StatusPernikahanMenikah: Koefisien -0.07696 menunjukkan bahwa interaksi antara JenisKelaminWanita dan StatusPernikahanMenikah sedikit mempengaruhi frekuensi log peristiwa. Namun, p-value = 0.6101 menunjukkan bahwa interaksi ini tidak signifikan, artinya pengaruhnya tidak cukup kuat untuk dianggap signifikan.
JenisKelaminWanita:PendidikanPendidikan Rendah: Koefisien 6.19e-14 menunjukkan bahwa interaksi ini tidak berpengaruh sama sekali pada frekuensi peristiwa, dan p-value = 1.0000 menegaskan bahwa interaksi ini tidak signifikan. Ini menunjukkan bahwa tidak ada pengaruh interaksi antara Jenis Kelamin dan Pendidikan Rendah terhadap frekuensi peristiwa.
JenisKelaminWanita:PendidikanPendidikan Tinggi: Koefisien 0.3930 menunjukkan bahwa interaksi antara Wanita dan Pendidikan Tinggi meningkatkan frekuensi peristiwa secara signifikan. Nilai p-value = 0.0486 menunjukkan bahwa interaksi ini signifikan pada level 5%, yang berarti ada hubungan yang signifikan antara Jenis Kelamin Wanita dan Pendidikan Tinggi terhadap frekuensi peristiwa.
3. Interaksi Tiga Arah
JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Rendah: Koefisien 0.4055 menunjukkan bahwa interaksi antara ketiga variabel ini memberikan pengaruh positif terhadap frekuensi peristiwa. Namun, p-value = 0.0948 menunjukkan bahwa efek ini mendekati signifikan pada level 10%.
JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi: Koefisien -0.3930 menunjukkan bahwa interaksi antara ketiga variabel ini memberikan efek negatif terhadap frekuensi peristiwa. Nilai p-value = 0.1382 menunjukkan bahwa interaksi ini tidak signifikan, yang berarti pengaruhnya tidak cukup kuat untuk dianggap relevan.
4. Deviance dan AIC
Deviance untuk model Saturated adalah -1.953993e-14, yang menunjukkan bahwa model ini fit dengan sangat baik.
AIC untuk model Saturated adalah 103.5393, yang menunjukkan keseimbangan antara kompleksitas model dan fit model.
Kesimpulan
Model Saturated memberikan fit terbaik untuk data ini karena Deviance yang sangat rendah dan AIC yang rendah juga. Namun, model ini sangat kompleks karena mencakup semua interaksi dua arah dan tiga arah.
Beberapa interaksi dalam model Saturated tidak signifikan, seperti JenisKelaminWanita:StatusPernikahanMenikah, JenisKelaminWanita:PendidikanPendidikan Rendah, dan JenisKelaminWanita:StatusPernikahanMenikah:PendidikanPendidikan Tinggi, yang mungkin menunjukkan bahwa tidak semua interaksi perlu dipertahankan dalam model yang lebih sederhana.
Berdasarkan nilai p-value, beberapa interaksi, seperti StatusPernikahanMenikah:PendidikanPendidikan Tinggi, sangat signifikan, yang berarti ada hubungan penting antara kombinasi variabel-variabel tersebut.
Deskripsi Kasus
Dalam studi ini, digunakan data dari ASEC 2024 yang berisi informasi sosio-ekonomi individu di Amerika Serikat. Fokus analisis adalah untuk memodelkan hubungan antara pendapatan individu dan status kemiskinan menggunakan regresi logistik.
Jumlah data: 1000 observasi individu.
Tujuan
# Import pustaka
library(ggplot2)
library(dplyr)
library(broom)
library(numDeriv) # Untuk turunan numerik (Newton-Raphson)
# Import data asli
data <- read.csv("C:\\Users\\HP\\Documents\\KULIAH\\SEMESTER 4\\ADK\\ryder.csv", sep=";", dec=".")
# Lihat struktur data
head(data)
## SPM_POOR SPM_TOTVAL
## 1 0 50838
## 2 0 50838
## 3 1 9648
## 4 0 71435
## 5 0 71435
## 6 0 71435
glm() (MLE via IRLS)model <- glm(SPM_POOR ~ SPM_TOTVAL, data = data, family = binomial)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model)
##
## Call:
## glm(formula = SPM_POOR ~ SPM_TOTVAL, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.313e+00 3.228e-01 4.068 4.74e-05 ***
## SPM_TOTVAL -7.506e-05 8.818e-06 -8.512 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 486.33 on 999 degrees of freedom
## Residual deviance: 260.46 on 998 degrees of freedom
## AIC: 264.46
##
## Number of Fisher Scoring iterations: 9
exp(coef(model)) # Odds ratio
## (Intercept) SPM_TOTVAL
## 3.7178980 0.9999249
loglik <- function(beta) {
eta <- beta[1] + beta[2] * data$SPM_TOTVAL
p <- 1 / (1 + exp(-eta))
# Batasi nilai p biar gak jadi 0 atau 1 murni
p <- pmin(pmax(p, 1e-8), 1 - 1e-8)
-sum(data$SPM_POOR * log(p) + (1 - data$SPM_POOR) * log(1 - p))
}
init_beta <- c(0, 0)
mle_manual <- optim(par = init_beta, fn = loglik, hessian = TRUE)
mle_manual$par # Koefisien
## [1] -3.743094e-04 -4.693831e-05
exp(mle_manual$par) # Odds ratio
## [1] 0.9996258 0.9999531
f_grad <- function(beta) {
eta <- beta[1] + beta[2] * data$SPM_TOTVAL
p <- 1 / (1 + exp(-eta))
X <- model.matrix(~ SPM_TOTVAL, data)
t(X) %*% (data$SPM_POOR - p)
}
f_hess <- function(beta) {
eta <- beta[1] + beta[2] * data$SPM_TOTVAL
p <- 1 / (1 + exp(-eta))
w <- p * (1 - p)
X <- model.matrix(~ SPM_TOTVAL, data)
t(X) %*% (w * X)
}
beta <- c(0, 0)
for (i in 1:10) {
grad <- f_grad(beta)
hess <- f_hess(beta)
beta <- beta + solve(hess, grad)
}
beta
## [,1]
## (Intercept) 1.313158e+00
## SPM_TOTVAL -7.505978e-05
exp(beta)
## [,1]
## (Intercept) 3.7178980
## SPM_TOTVAL 0.9999249
summary_fit <- summary(model)
beta_hat <- summary_fit$coefficients[,1]
se_beta <- summary_fit$coefficients[,2]
wald_stat <- (beta_hat / se_beta)^2
p_wald <- 1 - pchisq(wald_stat, df = 1)
cbind(Estimate = beta_hat, SE = se_beta, Wald_Stat = wald_stat, P_Value = p_wald)
## Estimate SE Wald_Stat P_Value
## (Intercept) 1.313158e+00 3.228100e-01 16.54780 4.743889e-05
## SPM_TOTVAL -7.505978e-05 8.818109e-06 72.45421 0.000000e+00
# Tambahkan probabilitas prediksi ke data
data$prob_pred <- predict(model, type = "response")
# Visualisasi kurva logistik
ggplot(data, aes(x = SPM_TOTVAL, y = SPM_POOR)) +
geom_jitter(height = 0.1, alpha = 0.1) +
geom_line(aes(y = prob_pred), color = "blue", linewidth = 1) + # GANTI size → linewidth
labs(title = "Model Regresi Logistik",
x = "Total Nilai SPM_TOTVAL",
y = "Probabilitas Tidak Miskin") +
theme_minimal()
# Deviance
with(model, null.deviance - deviance)
## [1] 225.8725
# AIC
AIC(model)
## [1] 264.4616
# Confusion Matrix
pred_class <- ifelse(data$prob_pred > 0.5, 1, 0)
table(Prediksi = pred_class, Aktual = data$SPM_POOR)
## Aktual
## Prediksi 0 1
## 0 925 36
## 1 9 30
Berdasarkan hasil analisis regresi logistik terhadap data
status kemiskinan (SPM_POOR) yang
dipengaruhi oleh nilai sosial/ekonomi
(SPM_TOTVAL), diperoleh kesimpulan sebagai berikut:
Koefisien Regresi:
Signifikansi Statistik:
Hasil uji Wald menunjukkan bahwa kedua koefisien (\(\hat{\beta}_0\) dan \(\hat{\beta}_1\)) sangat signifikan secara statistik (p-value < 0.001).
Nilai Wald Statistic:
(Intercept): Wald = 16.55, p-value = 4.74e-05
SPM_TOTVAL: Wald = 72.45, p-value < 2e-16Evaluasi Model:
Deviance:
AIC (Akaike Information Criterion): 264.46
Confusion Matrix: Model berhasil mengklasifikasikan data dengan akurasi yang baik:
``` r
Prediksi vs Aktual:
Prediksi 0 Prediksi 1
Aktual 0: 925 36
Aktual 1: 9 30
```Akurasi Model: Akurasi model dapat dihitung sebagai:
\[ \text{Akurasi} = \frac{\text{True Positives} + \text{True Negatives}}{\text{Total Observasi}} = \frac{925 + 30}{925 + 36 + 9 + 30} = \frac{955}{1000} = 0.955 \]
Model ini memiliki akurasi 95.5%, yang berarti model dapat memprediksi dengan benar 95.5% dari total observasi.
SPM_TOTVAL) dan status
kemiskinan (SPM_POOR). Peningkatan nilai
SPM_TOTVAL sedikit menurunkan peluang individu
untuk tergolong miskin. Model ini menunjukkan bahwa faktor
sosial/ekonomi berpengaruh besar dalam menentukan status kemiskinan,
dengan hasil yang sangat signifikan secara statistik.Digunakan data berasal dari catatan polisi Kota Chicago, diambil 299 kasus dari Bulan Februari 2025 yang merekam jumlah pelaku kejahatanberdasarkan dua faktor utama:
Kelompok minoritas (Non-White) memiliki kemungkinan lebih besar untuk melakukan kejahatan violent, karena tekanan sosial yang lebih tinggi — termasuk ketimpangan ekonomi, diskriminasi struktural, dan keterbatasan akses terhadap pendidikan dan pekerjaan formal.
Data disajikan dalam tabel kontingensi 2x2 sebagai berikut:
| NON-WHITE | WHITE | Total | |
|---|---|---|---|
| NON-VIOLENT (Y = 0) | 139 | 63 | 202 |
| VIOLENT (Y = 1) | 56 | 41 | 97 |
| Total | 195 | 104 | 299 |
Untuk menghitung frekuensi yang diharapkan (\(\mu_{ij}\)):
\[ \mu_{ij} = \frac{(\text{Total baris ke-i}) \times (\text{Total kolom ke-j})}{\text{Total keseluruhan}} \]
Menggunakan data yang ada:
Sekarang kita hitung frekuensi yang diharapkan (\(\mu_{ij}\)) untuk setiap sel:
Frekuensi yang diharapkan untuk Non-Violent, Non-White: \[ \mu_{\text{Non-Violent, Non-White}} = \frac{195 \times 202}{299} = 130.79 \]
Frekuensi yang diharapkan untuk Violent, Non-White: \[ \mu_{\text{Violent, Non-White}} = \frac{195 \times 97}{299} = 64.21 \]
Frekuensi yang diharapkan untuk Non-Violent, White: \[ \mu_{\text{Non-Violent, White}} = \frac{104 \times 202}{299} = 71.21 \]
Frekuensi yang diharapkan untuk Violent, White: \[ \mu_{\text{Violent, White}} = \frac{104 \times 97}{299} = 32.79 \]
Untuk menghitung efek utama \(\lambda_A\) (ras), kita gunakan rumus:
\[ \lambda_A = \frac{1}{2} \left[ (\log(n_{11}) + \log(n_{12})) - (\log(n_{21}) + \log(n_{22})) \right] \]
Substitusi nilai logaritma dari setiap frekuensi:
Sekarang kita substitusi ke dalam rumus untuk menghitung \(\lambda_A\):
\[ \lambda_A = \frac{1}{2} \left[ (4.941 + 4.143) - (4.033 + 3.713) \right] \] \[ \lambda_A = \frac{1}{2} \left[ 9.084 - 7.746 \right] \] \[ \lambda_A = \frac{1}{2} \times 1.338 = 0.669 \]
Karena sum-to-zero constraint, kita dapatkan:
\[ \lambda_2 = -0.669 \]
Untuk menghitung efek utama \(\lambda_B\) (status kekerasan):
\[ \lambda_B = \frac{1}{2} \left[ (\log(n_{11}) + \log(n_{21})) - (\log(n_{12}) + \log(n_{22})) \right] \]
Substitusi nilai logaritma yang sudah dihitung:
\[ \lambda_B = \frac{1}{2} \left[ (\log(139) + \log(56)) - (\log(63) + \log(41)) \right] \] \[ \lambda_B = \frac{1}{2} \left[ (4.941 + 4.033) - (4.143 + 3.713) \right] \] \[ \lambda_B = \frac{1}{2} \left[ 8.974 - 7.856 \right] = \frac{1}{2} \times 1.118 = 0.559 \]
Karena sum-to-zero:
\[ \lambda_2 = -0.559 \]
Untuk menghitung efek interaksi \(\lambda_{AB}\):
\[ \lambda_{11} = \frac{1}{4} \left[ \log(n_{11}) - \log(n_{12}) - \log(n_{21}) + \log(n_{22}) \right] \]
Substitusi nilai logaritma yang sudah dihitung:
\[ \lambda_{11} = \frac{1}{4} \left[ 4.941 - 4.143 - 4.033 + 3.713 \right] \] \[ \lambda_{11} = \frac{1}{4} \left[ 4.941 - 4.143 - 4.033 + 3.713 \right] = \frac{1}{4} \times 0.478 \] \[ \lambda_{11} = 0.1195 \]
Sekarang, berdasarkan sum-to-zero constraint:
\[ \lambda_{12} = -\lambda_{11} = -0.1195 \] \[ \lambda_{21} = -\lambda_{11} = -0.1195 \] \[ \lambda_{22} = +\lambda_{11} = 0.1195 \]
Untuk menghitung Odds Ratio (OR):
\[ OR = \frac{(a/c)}{(b/d)} \]
Di mana: - \(a = 139\) (Non-Violent, Non-White) - \(b = 63\) (Non-Violent, White) - \(c = 56\) (Violent, Non-White) - \(d = 41\) (Violent, White)
Maka:
\[ OR = \frac{(139/56)}{(63/41)} = \frac{2.482}{1.537} = 1.614 \]
Ringkasan Parameter Model
Setelah menghitung semua parameter, berikut adalah ringkasan model:
# Data Tabel 2x2
data <- matrix(c(139, 63, 56, 41), nrow = 2, byrow = TRUE)
colnames(data) <- c("NON-WHITE", "WHITE")
rownames(data) <- c("NON-VIOLENT", "VIOLENT")
# Total
total <- sum(data)
# Total baris dan kolom
total_row <- rowSums(data)
total_col <- colSums(data)
# Mengonversi data menjadi tabel untuk model glm
data_frame <- as.data.frame(as.table(data))
# Estimasi Model Log-Linear Tanpa Interaksi (hanya efek utama)
model_no_interaction <- glm(Freq ~ Var1 + Var2, data = data_frame, family = poisson(link = "log"))
# Menampilkan Ringkasan Model Tanpa Interaksi
summary(model_no_interaction)
##
## Call:
## glm(formula = Freq ~ Var1 + Var2, family = poisson(link = "log"),
## data = data_frame)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.88082 0.08206 59.477 < 2e-16 ***
## Var1VIOLENT -0.73356 0.12353 -5.938 2.88e-09 ***
## Var2WHITE -0.62861 0.12142 -5.177 2.25e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 69.3098 on 3 degrees of freedom
## Residual deviance: 3.4991 on 1 degrees of freedom
## AIC: 33.678
##
## Number of Fisher Scoring iterations: 4
# Estimasi Model Log-Linear Dengan Interaksi
model_with_interaction <- glm(Freq ~ Var1 * Var2, data = data_frame, family = poisson(link = "log"))
# Menampilkan Ringkasan Model Dengan Interaksi
summary(model_with_interaction)
##
## Call:
## glm(formula = Freq ~ Var1 * Var2, family = poisson(link = "log"),
## data = data_frame)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.93447 0.08482 58.177 < 2e-16 ***
## Var1VIOLENT -0.90912 0.15828 -5.744 9.25e-09 ***
## Var2WHITE -0.79134 0.15188 -5.210 1.89e-07 ***
## Var1VIOLENT:Var2WHITE 0.47956 0.25557 1.876 0.0606 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 6.9310e+01 on 3 degrees of freedom
## Residual deviance: 6.8834e-15 on 0 degrees of freedom
## AIC: 32.179
##
## Number of Fisher Scoring iterations: 2
Berdasarkan data yang diberikan, kita menghitung frekuensi yang diharapkan untuk setiap sel dalam tabel kontingensi.
Efek utama untuk ras dihitung menggunakan rumus berikut:
\[ \lambda_A = \frac{1}{2} \left[ (\log(n_{11}) + \log(n_{12})) - (\log(n_{21}) + \log(n_{22})) \right] \]
Dengan substitusi nilai logaritma yang dihitung sebelumnya, kita memperoleh \(\lambda_A = 0.669\) dan \(\lambda_2 = -0.669\) berdasarkan sum-to-zero constraint.
Interpretasi \(\lambda_A\): - Perubahan dari Non-White ke White menghasilkan perubahan dalam log odds sebesar 0.669. - Karena sum-to-zero constraint, nilai untuk \(\lambda_2 = -0.669\) menunjukkan bahwa efek untuk White adalah kebalikan dari efek Non-White.
Efek utama untuk status kekerasan dihitung menggunakan rumus yang sama. Berdasarkan perhitungan, kita memperoleh \(\lambda_B = 0.559\) dan \(\lambda_2 = -0.559\).
Interpretasi \(\lambda_B\): - Perubahan dari Non-Violent ke Violent menghasilkan perubahan dalam log odds sebesar 0.559. - Dengan sum-to-zero constraint, nilai untuk \(\lambda_2 = -0.559\) menunjukkan bahwa efek untuk Violent adalah kebalikan dari efek Non-Violent.
Efek interaksi dihitung dengan rumus berikut:
\[ \lambda_{11} = \frac{1}{4} \left[ \log(n_{11}) - \log(n_{12}) - \log(n_{21}) + \log(n_{22}) \right] \]
Interpretasi \(\lambda_{AB}\): - \(\lambda_{11}\) menunjukkan peningkatan log odds untuk kategori Non-Violent, Non-White. - \(\lambda_{12}\) menunjukkan penurunan log odds untuk Non-Violent, White. - \(\lambda_{21}\) menunjukkan penurunan log odds untuk Violent, Non-White. - \(\lambda_{22}\) menunjukkan peningkatan log odds untuk Violent, White.
Odds Ratio (OR) dihitung dengan rumus:
\[ OR = \frac{(a/c)}{(b/d)} \]
Dengan nilai \(a = 139\), \(b = 63\), \(c = 56\), dan \(d = 41\), kita memperoleh:
\[ OR = \frac{(139/56)}{(63/41)} = \frac{2.482}{1.537} = 1.614 \]
Interpretasi Odds Ratio: - OR sebesar 1.614 menunjukkan bahwa orang Non-Violent, Non-White memiliki 1.614 kali lebih besar kemungkinan untuk tidak terlibat kekerasan dibandingkan dengan orang Violent, White.
Intercept: 4.88082 (Efek dasar log odds untuk kategori Non-Violent dan Non-White)
Var1VIOLENT: -0.73356 (Efek log odds untuk perubahan status kekerasan menjadi Violent)
Var2WHITE: -0.62861 (Efek log odds untuk perubahan status ras menjadi White)
Interpretasi: Model ini menggambarkan hubungan antara ras dan status kekerasan tanpa interaksi, dan Var1VIOLENT serta Var2WHITE menunjukkan seberapa besar perubahan log odds terkait dengan status kekerasan dan ras.
Intercept: 4.93447
Var1VIOLENT: -0.90912
Var2WHITE: -0.79134
Var1VIOLENT:Var2WHITE: 0.47956 (Interaksi antara kekerasan dan ras, menunjukkan bahwa interaksi ini mendekati signifikansi dengan p-value 0.0606)
Interpretasi:
Model dengan interaksi menambahkan interaksi antara status kekerasan dan ras, yang memperlihatkan efek kekerasan dan ras bersama-sama. Efek interaksi menunjukkan sedikit perbedaan dalam log odds bagi individu White yang terlibat kekerasan, meskipun tidak sangat signifikan.
Perbandingan Model
| Model | Deviance | AIC |
|---|---|---|
| Homogen | 3.4991 | 33.678 |
| Saturated | 6.8834e-15 | 32.179 |
Model Saturated memberikan fit yang lebih baik dengan nilai Deviance yang lebih rendah dan AIC yang lebih kecil dibandingkan dengan model Homogen.
Model Saturated memasukkan interaksi antara kedua variabel (ras dan status kekerasan), yang memberikan penjelasan lebih baik tentang hubungan antara keduanya.
Berdasarkan perhitungan dan analisis AIC dan Deviance, kita menyarankan menggunakan model Saturated untuk pengambilan keputusan lebih lanjut.
Agresti, A. (2007). An Introduction To Categorical Data Analysis. Gainesville: Wiley-Interscience.
Akinyemi, E. K., O. A. Ogunleye, H.O Olaoye, and J. Brakoru. 2021. “Binary Logistic Regression Analysis on Predicting Academics Performance”. Current Journal of Applied Science and Technology 40 (20):1-6. https://doi.org/10.9734/cjast/2021/v40i2031458.
City Of Chicago (2025). Arrests. https://data.cityofchicago.org/Public-Safety/Arrests/dpt3-jri9/about_data
Dewi, W. U., & Warsono, W. (2023). Log-Linear Model on Categorical Data of HIV Cases. Sciencestatistics: Journal of Statistics, Probability, and Its Application, 1(2), 56-64. https://doi.org/10.24127/sciencestatistics.v1i2.5022
Dobson, A. J. (1983). An Introduction To Statistical Modelling. New South Wales: Chapman and Hall.
Open Data Jabar (2023). Jumlah Kasus HIV Berdasarkan Kabupaten/Kota di Jawa Barat. https://opendata.jabarprov.go.id/id/dataset/jumlah-kasus-hiv-berdasarkan-kabupatenkota-di-jawa-barat
Open Data Jabar (2023). Jumlah Fasilitas Kesehatan Berdasarkan Jenis di Jawa Barat. https://opendata.jabarprov.go.id/id/dataset/jumlah-fasilitas-kesehatan-berdasarkan-jenis-di-jawa-barat
Setia, M. S. (2016). Methodology Series Module 1: Cohort Studies. Indian J Dermatol., 21-25.
United States Census Bureau (2024). Annual Social and Economic Supplements. https://www.census.gov/data/datasets/time-series/demo/cps/cps-asec.html
Y. Widyaningsih and Z. Budiawan, “POISSON REGRESSION MODELS TO ANALYZE FACTORS THAT INFLUENCE THE NUMBER OF TUBERCULOSIS CASES IN JAVA”, BAREKENG: J. Math. & App., vol. 17, no. 3, pp. 1761-1772, Sep. 2023.