Puji dan Syukur saya panjatkan kehadirat Allah SWT. karena atas berkat dan rahmat-Nya, e-book Analisis Data Kategori ini dapat saya susun dan saya selesaikan dengan baik
Saya ucapkan terimakasih kepada dosen saya Pak Mindra yang sudah membimbing saya dalam pembuatan e-book Analisis Data Kategori ini.
E-book ini saya susun sebagai bentuk rujukan pembelajaran yang membahas tentang berbagai metode dan materi dalam menganalisis data kategorik. Adapun pembahasan pada e-book ini mencakup materi antara lain: tabel kontingensi, ukuran asosiasi, model log-linear, dan penafsiran parameter.
Penyusunan e-book ini bertujuan untuk memberikan pemahaman yang komprehensif tentang analisis data kategorik, baik dari segi teori maupun praktik. Dengan adanya e-book ini, saya harap dapat memberikan bantuan kepada mahasiswa dan praktisi yang ingin mempelajari metodologi statistik yang terkait dengan data nominal dan ordinal.
Saya menyadari bahwa e-book ini masih memiliki beberapa keterbatasan dan ketidaklengkapan penjelasan. Oleh sebab itu, masukan dan tanggapan sangat saya butuhkan untuk perbaikan di masa depan.
Akhir kata, semoga e-book ini bermanfaat dan dapat memberikan kontribusi positif bagi pengembangan ilmu statistik, khususnya dalam bidang analisis data kategorik.
Dalam statistik, data kategori adalah jenis data yang dibagi ke dalam kelompok atau kategori dan bukan berupa angka yang bisa diukur. Data seperti ini sering digunakan di berbagai bidang untuk memahami pola, hubungan, dan tren yang tidak bisa dilihat langsung melalui angka. Contoh dari data kategori yaitu jenis kelamin (laki-laki/perempuan), status pernikahan (menikah/belum menikah), tingkat pendidikan (rendah/menengah/tinggi), serta preferensi konsumen (setuju/netral/tidak setuju). Analisis terhadap data kategori sangat penting untuk mengeksplorasi dan memahami informasi yang bersifat nominal atau ordinal.
Karena berbeda dari data numerik, data kategori perlu dianalisis dengan metode khusus, seperti tabel kontingensi, uji chi-square, regresi logistik, dan pendekatan berbasis probabilitas. Seiring berkembangnya teknologi, analisis data kategori juga makin sering digunakan dalam machine learning dan kecerdasan buatan.
Analisis Data Kategori memiliki banyak tujuan, diantaranya
Analisis data kategori, memungkinkan peneliti untuk melihat bagaimana frekuensi data tersebar dalam tiap kategori. Misalkan terdapat responden laki - laki dan perempuan, peneliti dapat mengetahui dominasi atau proporsi berdasarkan jenis kelamin tersebut
Dalam analisis data kategori, identifikasi pola atau tren bertujuan untuk menemukan kecenderungan atau perbedaan mencolok antar kelompok dalam data. Misalnya, melalui visualisasi seperti diagram batang atau diagram lingkaran, kita dapat melihat bahwa mayoritas responden dalam sebuah survei memilih merek A dibandingkan merek B dan C.
Dilanjut dari tujuan sebelumnya, peneliti juga dimudahkan dalam pengambilan keputusan dikarenakan tren atau polanya sudah diketahui.
Analisis data kategorik merupakan teknik statistik yang digunakan untuk menganalisis variabel yang bersifat kategori, dimana data bersifat nominal ataupun ordinal.
Data bersifat nominal berarti data tidak memiliki urutan, contohnya seperti warna, jenis kelamin, dan lain - lain. Sedangkan data yang bersifat ordinal adalah data yang memiliki urutan, contohnya seperti tingkat pendidikan, rating, dan lain - lain.
Dalam kategorik, data juga dapat dibedakan berdasarkan jumlah kategorinya. Data biner berarti data hanya memiliki dua kategori, misalnya lulus/tidak lulus. Sedangkan data multikategori berarti data memiliki lebih dari dua kategori.
| Aspek | Data Kategorik | Data Kuantitatif |
|---|---|---|
| Bentuk Nilai | Label/kategori | Angka/numerik |
| Sifat | Kualitatif | Kuantitatif |
| Operasi Matematis | Tidak bisa dihitung rata - rata | Bisa dihitung rata - ratanya |
| Alat Ukur | Skala nominal/ordinal | Skala Interval/ratio |
Analisis data kategori memiliki manfaat luas dalam berbagai bidang,berikut beberapa diantaranya:
| Bidang | Tujuan | Penerapannya |
|---|---|---|
| Pendidikan | Mengevaluasi metode pengarajan | Membuat survei kepuasan mengenai kinerja guru ataupun dosen. |
| Kesehatan | Mengetahui hubungan antara kondisi pasien dan kategori risiko | Melihat hubungan antara status merokok (Ya/Tidak) dan kejadian penyakit jantung |
| Sosial | Menganalisis pola sosial atau opini masyarakat | Menganalisis kepuasan terhadap layanan publik (Sangat Puas – Tidak Puas) berdasarkan wilayah |
| Ekonomi | M engkategorikan dan menganalisis jenis pekerjaan, status ekonomi | Hubungan antara jenis pekerjaan (formal/informal) dan tingkat pengeluaran rumah tangga |
| Pemasaran | Mengetahui preferensi konsumen berdasarkan demografi atau perilaku | Mengelompokkan pelanggan berdasarkan pilihan produk (A, B, C) dan usia (muda/dewasa/lansia) |
| Politik | Mempetakan dukungan terhadap partai atau isu politik tertentu | Hubungan antara usia pemilih dan pilihan partai dalam survei elektabilitas |
Dalam analisis data kategori, metode yang digunakan tidak hanya satu. Metode yang digunakan bergantung kepada tujuan penelitian. Diantaranya:
Uji chi - square bertujuan untuk menguji hubungan antara dua variabel. Contohnya menguji apakah ada hubungan antara jenis kelamin dan preferensi dari suatu produk.
Tujuannya sama seperti uji chi - square, hanya saya uji fisher’s exact digunakan ketika frekuensi data berjumlah kecil (<5).
Regresi logistik memiliki tujuan untuk memprediksi kemungkinan suatu kategori yang terjadi berdasarkan variabel prediktor. Misalnya memprediksi apakah siswa akan lulus berdasarkan presentase kehadiran, nilai kumulatif, dan lainnya.
Tabulasi silang atau yang biasa dikenal sebagai crosstab memiliki tujuan untuk menampilkan distribusi frekuensi dari dua variabel dalam bentuk tabel. Misalnya menampilkan jumlah laki - laki dan perempuan dalam tiap kelompok umur.
Analisis diskriminan bertujuan untuk mengkalsifikasikan objek ke dalam kategori berdasarkan beberapa variabel. Misalnya menentukan apakah pelanggan akan memilih produk A, B , atau C berdasarkan pendapatan dan usia.
Bisa dilihat analisis data kategorik memiliki banyak metode untuk digunakan. Oleh karena itu peneliti harus memiliki tujuan yang jelas dan pemahaman untuk bisa meneliti data kategorik dengan metode yang tepat.
Variabel acak kategori adalah variabel yang hanya dapat memiliki beberapa kategori diskrit sebagai hasilnya. Distribusi probabilitas dari variabel ini menggambarkan kemungkinan terjadinya setiap kategori.
Distribusi Bernoulli adalah distribusi probabilitas diskret yang hanya memiliki dua kemungkinan hasil: sukses (1) dan gagal (0). Distribusi ini digunakan untuk memodelkan percobaan yang hanya memiliki dua hasil, seperti lemparan koin (muncul kepala atau ekor).
Distribusi Bernoulli memiliki satu parameter, yaitu:
Jika \(X\) adalah peubah acak yang mengikuti distribusi Bernoulli, maka kita tulis:
\[ X \sim \text{Bernoulli}(p) \]
Fungsi probabilitas massal (PMF) dari distribusi Bernoulli didefinisikan sebagai:
\[ P(X = x) = \begin{cases} p & \text{jika } x = 1 \\\\ 1 - p & \text{jika } x = 0 \end{cases} \]
atau bisa ditulis dengan satu persamaan:
\[ P(X = x) = p^x (1 - p)^{1 - x}, \quad x \in \{0, 1\} \]
set.seed(123) # untuk replikasi hasil
n <- 100
hasil <- rbinom(n, size = 1, prob = 0.8)
# Lihat 10 hasil pertama
head(hasil, 10)
## [1] 1 1 1 0 0 1 1 0 1 1
Distribusi Binomial adalah distribusi probabilitas diskret yang menggambarkan jumlah keberhasilan dalam sejumlah percobaan Bernoulli yang independen dan identik. Setiap percobaan memiliki dua hasil: sukses atau gagal, dan probabilitas sukses tetap di setiap percobaan.
Jika \(X\) adalah peubah acak yang mengikuti distribusi binomial, maka ditulis:
\[ X \sim \text{Binomial}(n, p) \]
dengan:
Fungsi probabilitas massal (PMF) dari distribusi binomial:
\[ P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k}, \quad k = 0, 1, 2, ..., n \]
Dengan:
set.seed(123) # agar hasil bisa direproduksi
simulasi <- rbinom(1000, size = 10, prob = 0.9)
head(simulasi, 10)
## [1] 10 8 9 8 7 10 9 8 9 9
Distribusi Multinomial adalah perluasan dari distribusi Binomial ke lebih dari dua hasil. Distribusi ini digunakan untuk menghitung probabilitas hasil dari sejumlah percobaan independen di mana setiap percobaan memiliki lebih dari dua kemungkinan hasil yang saling eksklusif.
Jika terdapat \(k\) kategori dan setiap percobaan memiliki probabilitas:
\[ p_1, p_2, ..., p_k \quad \text{dengan} \quad \sum_{i=1}^k p_i = 1 \]
dan dilakukan \(n\) percobaan, maka jumlah hasil dari setiap kategori mengikuti distribusi multinomial:
\[ (X_1, X_2, ..., X_k) \sim \text{Multinomial}(n; p_1, p_2, ..., p_k) \]
Fungsi probabilitas massal (PMF):
\[ P(X_1 = x_1, ..., X_k = x_k) = \frac{n!}{x_1!x_2!...x_k!} \cdot p_1^{x_1} \cdot p_2^{x_2} \cdots p_k^{x_k} \]
Dengan syarat:
set.seed(123)
multinomial <- rmultinom(n = 1, size = 15, prob = c(0.2, 0.8, 0.6))
multinomial
## [,1]
## [1,] 1
## [2,] 7
## [3,] 7
Distribusi Poisson adalah distribusi probabilitas diskret yang menggambarkan jumlah kejadian dalam suatu interval waktu atau ruang tertentu, dengan asumsi bahwa:
Jika \(X\) adalah peubah acak yang mengikuti distribusi Poisson dengan parameter \(\lambda\), maka:
\[ X \sim \text{Poisson}(\lambda) \]
di mana:
Fungsi probabilitas massal (PMF) dari distribusi Poisson adalah:
\[ P(X = k) = \frac{e^{-\lambda} \lambda^k}{k!}, \quad k = 0, 1, 2, ... \]
Sifat-sifat penting:
set.seed(123)
poisson <- rpois(15, lambda = 5)
poisson
## [1] 4 7 4 8 9 2 5 8 5 5 9 5 6 5 2
Desain sampling adalah bagian dari tahap awal dalam proses penelitian, khususnya dalam pengumpulan data. Tujuannya adalah agar data yang dikumpulkan bisa digunakan untuk menarik kesimpulan yang akurat tentang populasi.
Dalam analisis data kategori, desain sampling (atau sampling design) merujuk pada cara atau metode yang digunakan untuk memilih sampel dari populasi agar data yang diperoleh dapat mewakili keseluruhan populasi dengan baik. Ini sangat penting karena pemilihan sampel akan memengaruhi validitas dan reliabilitas hasil analisis.
Secara umum, desain sampling dalam analisis data kategori dapat diklasifikasikan ke dalam dua pendekatan utama, yaitu prospective sampling dan retrosprective sampling. Masing - masing pendekatan ini memiliki karakteristik dan metode sampling yang berbeda.
Prospective sampling adalah metode pengambilan sampel di mana peneliti mengikuti partisipan dari waktu sekarang ke masa depan untuk mengamati kejadian atau hasil tertentu. Ini biasa digunakan dalam penelitian longitudinal atau studi kohort prospektif. Beberapa jenis desain sampling dalam metode ini meliputi :
Dalam studi eksperimental, subjek secara acak dialokasikan ke dalam kelompok perlakuan dan kontrol. Teknik sampling yang umum digunakan meliputi:
Simple Random Sampling (SRS) : Setiap individu dalam populasi memiliki probabilitas yang sama untuk dipilih.
Stratified Random Sampling : Populasi dibagi menjadi strata berdasarkan karakteristik tertentu, lalu sampel diambil secara acak dari setiap strata.
Cluster Sampling : Populasi dibagi menjadi kelompok - kelompok (cluster), kemudian beberapa cluster dipilih secara acak untuk dianalisis
Studi kohort adalah jenis penelitian observasional di mana sekelompok orang (kohort) yang memiliki karakteristik tertentu diikuti dalam jangka waktu tertentu untuk melihat bagaimana paparan (exposure) tertentu memengaruhi kejadian suatu outcome (misalnya penyakit, perilaku, atau kondisi tertentu). Jenis sampling yang umum dalam studi kohort meliputi :
Census Sampling : Seluruh anggota dalam populasi tertentu diikutsertakan dalam penelitian
Systematic Sampling : Subjek dipilih berdasarkan interval tertentu dari daftar populasi.
Matched Sampling : Setiap individu dalam kelompok kohort dipasangkan dengan individu serupa dalam kelompok lain berdasarkan variabel tertentu.
Retrospective sampling adalah metode pengambilan sampel dalam penelitian di mana peneliti melihat ke belakang (masa lalu) untuk mengidentifikasi subjek berdasarkan outcome (hasil) yang sudah terjadi, lalu menelusuri paparan (exposure) atau faktor penyebabnya sebelumnya.
Dalam studi kasus-kontrol, sekelompok individu dengan kondisi tertentu dibandingkan dengan kelompok tanpa kondisi tersebut. Teknik sampling yang sering digunakan meliputi :
Purposive Sampling : Pemilihan sampel berdasarkan karakteristik yang relevan dengan tujuan penelitian.
Snowball Sampling : Responden awal membantu merekrut subjek lain yang memiliki karakteristik serupa.
Incidence Density Sampling : Kasus dan kontrol dipilih dari populasi yang sama dengan memperhitungkan periode waktu kemunculan kasus.
Dalam studi kohort retrospektif, data historis digunakan untuk mengelompokkan individu berdasarkan paparan dan kemudian menganalisis hasil yang terjadi. Teknik sampling yang sering digunakan meliputi :
Convience Sampling : Subek dipilih berdasarkan ketersediaan data yang sudah ada.
Quota Sampling : Sampel dipilih untuk mencerminkan proporsi tertentu dalam populasi.
Case-Based Sampling : Sampel dipilih berdasarkan karakteristik kasus yang telah terjadi.
Tabel kontingensi 2x2 adalah tabel yang digunakan untuk menyajikan data kategorik dari dua variabel yang masing-masing memiliki dua kategori. Tabel ini sangat berguna untuk melihat hubungan atau asosiasi antara dua variabel, misalnya dalam uji chi-kuadrat atau perhitungan risiko relatif (relative risk), perbedaan risiko (risk difference) dan odds ratio.
Struktur umumnya:
| Kategori B1 | Kategori B2 | Total | |
|---|---|---|---|
| Kategori A1 | a | b | a + b |
| Kategori A2 | c | d | c + d |
| Total | a + c | b + d | n |
Peluang bersama adalah probabilitas bahwa kedua variabel terjadi secara bersamaan dalam suatu sel tabel kontingensi:
\[ P(A_i, B_j) = \frac{n_{ij}}{n} \]
Peluang marginal adalah probabilitas kejadian suatu variabel tanpa mempertimbangkan variabel lainnya.
\[ P(A_i) = \frac{n_{i.}}{n} \]
\[ P(B_j) = \frac{n_{.j}}{n} \]
Peluang bersyarat adalah probabilitas suatu kejadian terjadi dengan syarat kejadian lain telah terjadi:
\[ P(B_j | A_i) = \frac{P(A_i, B_j)}{P(A_i)} = \frac{n_{ij}}{n_{i.}} \]
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Langkah 1 : Hitung Peluang Bersama
Langkah 2 : Hitung Peluang Marginal
Langkah 3 : Hitung Peluang Bersyarat
\[ P(\text{Controlled}|\text{Surgery}) = \frac{21}{23} = 0.9130 \]
\[ P(\text{Controlled}|\text{Radiation}) = \frac{15}{18} = 0.8333 \]
\[ P(\text{Not Controlled}|\text{Surgery}) = \frac{2}{23} = 0.0870 \]
\[ P(\text{Not Controlled}|\text{Radiation}) = \frac{3}{18} = 0.1667 \]
#Data
data <- matrix(c(21,2,15,3), nrow = 2, byrow = TRUE)
colnames(data) <- c("Cancer Controlled", "Cancer Not Controlled")
rownames(data) <- c("Surgery","Radiation Therapy")
n <- sum(data)
#Peluang Bersama
p_bersama <- data/n
#Peluang Marginal
p_marginal_baris <- rowSums(data)/n
p_marginal_kolumn <- colSums(data)/n
#Peluang Bersyarat
p_bersyarat <- data / rowSums(data)
#Hasil
list(Peluang_Bersama = p_bersama, Peluang_Marginal_Baris = p_marginal_baris, Peluang_Marginal_Kolumn = p_marginal_kolumn, Peluang_Bersyarat = p_bersyarat)
## $Peluang_Bersama
## Cancer Controlled Cancer Not Controlled
## Surgery 0.5121951 0.04878049
## Radiation Therapy 0.3658537 0.07317073
##
## $Peluang_Marginal_Baris
## Surgery Radiation Therapy
## 0.5609756 0.4390244
##
## $Peluang_Marginal_Kolumn
## Cancer Controlled Cancer Not Controlled
## 0.8780488 0.1219512
##
## $Peluang_Bersyarat
## Cancer Controlled Cancer Not Controlled
## Surgery 0.9130435 0.08695652
## Radiation Therapy 0.8333333 0.16666667
Intepretasi : Dikarenakan 𝑃(Cancer Controlled|Surgery) >𝑃(Cancer Controlled|Radiation Therapy) maka dapat disimpulkan bahwa penyembuhan kanker lebih optimal dengan metode operasi dibandingkan dengan metode terapi radiasi.
Ukuran asosiasi dalam analisis data kategorik digunakan untuk mengukur kekuatan hubungan antara dua variabel kategorik. Ini penting untuk mengetahui apakah hubungan yang ada signifikan dan seberapa kuat hubungan tersebut. Berikut adalah beberapa ukuran asosiasi yang umum digunakan :
Risk Difference (juga dikenal sebagai Absolute Risk Reduction) mengukur selisih risiko antara dua kelompok. Nilai RD menunjukkan perbedaan proporsi kejadian antara kelompok yang terpapar dan tidak terpapar.
Rumus:
\[ RD = \frac{a}{a + b} - \frac{c}{c + d} \] Dengan
Jika RD>0, maka risiko kejadian lebih tinggi di Grup 1 dibandingkan Grup 2
Jika RD<0, maka risiko kejadian lebih rendah di Grup 1 dibandingkan Grup 2
Jika RD=0, maka tidak ada perbedaan risiko antara dua kelompok.
Relative Risk membandingkan kemungkinan terjadinya suatu kejadian (misalnya penyakit) pada kelompok yang terpapar terhadap kelompok yang tidak terpapar.
Rumus:
\[ RR = \frac{a / (a + b)}{c / (c + d)} \] Dengan
Jika RR>1, maka kejadian lebih sering terjadi di Grup 1 dibandingkan Grup 2.
Jika RR<1, maka kejadian lebih jarang terjadi di Grup 1 dibandingkan Grup 2.
Jika RR=1, maka tidak ada perbedaan risiko antara dua kelompok.
Odds Ratio digunakan untuk membandingkan peluang (odds) terjadinya suatu kejadian antara dua kelompok. Sangat umum dalam studi kasus-kontrol.
Rumus:
\[ OR = \frac{a \cdot d}{b \cdot c} \]
Dengan
Jika OR>1, maka peluang kejadian lebih besar di Grup 1 dibandingkan Grup 2.
Jika OR<1, maka peluang kejadian lebih kecil di Grup 1 dibandingkan Grup 2.
Jika OR=1, maka tidak ada perbedaan peluang kejadian antara dua kelompok.
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Risk Difference \[ RD = \frac{a}{a + b} - \frac{c}{c + d} = \frac{21}{23} - \frac{15}{18} = 0.9130 - 0.8333 = 0.0797 \]
Relative Risk \[ RR = \frac{a / (a + b)}{c / (c + d)} = \frac{21/23}{15/18} = 0.9130 / 0.8333 = 1.0952 \]
Odds Ratio \[ OR = \frac{a \cdot d}{b \cdot c} = \frac{21 \cdot 3}{2 \cdot 15} = \frac{63}{30} = 2.10 \]
# Data
a <- 21
b <- 2
c <- 15
d <- 3
# Risk Difference
RD <- (a / (a + b)) - (c / (c + d))
# Relative Risk
RR <- (a / (a + b)) / (c / (c + d))
# Odds Ratio
OR <- (a * d) / (b * c)
#Hasil
list(Risk_Difference = RD, Relative_Risk = RR, Odds_Ratio = OR)
## $Risk_Difference
## [1] 0.07971014
##
## $Relative_Risk
## [1] 1.095652
##
## $Odds_Ratio
## [1] 2.1
Intepretasi :
RD = 0.0797 → Terdapat perbedaan risiko sebesar 7.97% lebih tinggi pada pasien yang menjalani operasi dibanding terapi radiasi.
RR = 1.0952 → Pasien operasi memiliki kemungkinan 1.095 kali lebih besar untuk mengontrol kanker.
OR = 2.10 → Peluang kontrol kanker pada pasien operasi 2.1 kali lebih besar dibanding terapi radiasi.
Inferensi dalam statistik mengacu pada proses pengambilan kesimpulan mengenai populasi berdasarkan sampel data. Dalam konteks tabel kontingensi dua arah, inferensi digunakan untuk menganalisis hubungan antara dua variabel kategorikal yang disusun dalam tabel kontingensi. Inferensi dalam tabel kontingensi dua arah dapat dibagi menjadi dua kategori utama : - Estimasi - Pengujian
Estimasi bertujuan untuk memperkirakan parameter populasi berdasarkan data sampel. Estimasi dibagi menjadi :
Estimasi titik digunakan untuk menentukan satu nilai spesifik sebagai perkiraan terbaik dari parameter populasi.
\[ \hat{p} = \frac{x}{n} \]
dimana:
- \(\hat{p}\) adalah estimasi titik
proporsi,
- \(x\) adalah jumlah individu dalam
kategori tertentu,
- \(n\) adalah total jumlah individu
dalam sampel.
Estimasi interval bertujuan untuk memberikan rentang nilai yang diyakini mengandung parameter populasi dengan tingkat kepercayaan tertentu.
\[ \hat{p} \pm Z_{\alpha/2} \sqrt{ \frac{\hat{p}(1 - \hat{p})}{n} } \]
dimana:
Uji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok dalam tabel kontingensi, terutama untuk menentukan apkah terdapat perbedaan yang signifikan dalam proporsi kejadian antara dua kelompok yang berbeda.
Untk menguji hipotesis bahwa tidak ada perbedaan proporsi antara dua kelompok, kita menggunakan uji z dua proporsi, dengan hipotesis:
- Hipotesis Nol (H0) : tidak ada perbedaan proporsi antara dua kelompok
- Hipotesis Alternatif (H1) : terdapat perbedaan proporsi antara dua kelompok
Estimasi proporsi dalam masing - masing kelompok diberikan oleh :
\[ \hat{p}_1 = \frac{a}{a + b} \], \[ \hat{p}_2 = \frac{c}{c + d} \]
Estimasi proporsi gabungan
\[ \hat{p} = \frac{x_1 + x_2}{n_1 + n_2} \]
Statistik uji untuk uji proporsi dua sampel :
\[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p})\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}} \]
Setelah ketemu nilai Z, kita bisa melihat keputusan apakah tolak H0 atau terima H0 dengan cara apabila |Z| lebih besar dari nilai kritis tertentu untuk tingkat signifikansi tertentu, maka H0 ditolak.
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Proporsi pada Surgery:
\[ \hat{p}_1 = \frac{21}{23} \approx 0.913 \]
Proporsi pada Radiation Therapy:
\[ \hat{p}_2 = \frac{15}{18} \approx 0.833 \]
\[ \hat{p} = \frac{21 + 15}{23 + 18} = \frac{36}{41} \approx 0.878 \]
Rumus:
\[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p})\left(\frac{1}{n_1} + \frac{1}{n_2} \right)}} \]
\[ Z = \frac{0.913 - 0.833}{\sqrt{0.878(1 - 0.878)\left(\frac{1}{23} + \frac{1}{18} \right)}} \approx \frac{0.08}{\sqrt{0.1067 \cdot 0.1043}} \approx \frac{0.08}{0.1393} \approx 0.774\]
# Data
x1 <- 21 # success in surgery
n1 <- 23 # total in surgery
x2 <- 15 # success in radiation
n2 <- 18 # total in radiation
# Proporsi masing-masing kelompok
p1 <- x1 / n1
p2 <- x2 / n2
# Proporsi gabungan
p_pool <- (x1 + x2) / (n1 + n2)
# Statistik uji Z
Z <- (p1 - p2) / sqrt(p_pool * (1 - p_pool) * (1/n1 + 1/n2))
# Tampilkan hasil
p1
## [1] 0.9130435
p2
## [1] 0.8333333
p_pool
## [1] 0.8780488
Z
## [1] 0.7740508
Intepretasi : Jika kita menggunakan taraf signifikansinya 5%, kita menerima H0 karena nilai |Z| yaitu 0.0774 < dari 1.96 yang berarti bahwa tidak ada perbedaan proporsi antar kelompok.
Uji asosiasi dalam tabel kontingensi 2×2bertujuan untuk mengukur hubungan antara dua variabel kate gori. Untuk setiap uji asosiasi, hipotesis yang diuji adalah :
Tiga ukuran utama dalam uji asosiasi adalah:
Risk difference mengukur perbedaan absolut dalam probabilitas kejadian antara dua kelompok.
Rumus : \[ RD = \frac{a}{a + b} - \frac{c}{c + d} \] Standar Error untuk RD \[ SE(RD) = \sqrt{ \frac{p_1(1 - p_1)}{n_1} + \frac{p_2(1 - p_2)}{n_2} } \]
Statistik uji Z untuk RD \[ Z = \frac{RD}{SE(RD)} \]
Perbandingan antara risiko kejadian di kelompok 1 dibanding kelompok 2.
Rumus:
\[ RR = \frac{a / (a + b)}{c / (c + d)} \]
Standar Error untuk RR \[ SE(\log(RR)) = \sqrt{ \frac{1 - p_1}{n_1 p_1} + \frac{1 - p_2}{n_2 p_2} } \]
Statistik uji Z untuk RR \[ Z = \frac{\log(RR)}{SE(\log(RR))} \]
Perbandingan peluang kejadian antara dua kelompok
Rumus: \[ OR = \frac{a \cdot d}{b \cdot c} \] Standar error untuk log(OR) \[ SE(\log(OR)) = \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} } \]
Statistik uji Z untuk OR \[ Z = \frac{\log(OR)}{SE(\log(OR))} \]
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Perhitungan Manual :
\[ \hat{p}_1 = \frac{21}{23} = 0.9130, \quad \hat{p}_2 = \frac{15}{18} = 0.8333 \]
\[ RD = 0.9130 - 0.8333 = 0.0797 \]
Standard Error:
\[ SE(RD) = \sqrt{ \frac{0.9130 \times (1 - 0.9130)}{23} + \frac{0.8333 \times (1 - 0.8333)}{18} } \]
\[ = \sqrt{ \frac{0.0794}{23} + \frac{0.1389}{18} } = \sqrt{0.00345 + 0.00771} = \sqrt{0.01116} = 0.1056 \]
Statistik uji Z:
\[ Z_{RD} = \frac{RD}{SE(RD)} = \frac{0.0797}{0.1056} \approx 0.755 \]
\[ RR = \frac{0.9130}{0.8333} = 1.095 \]
Standard Error log(RR):
\[ SE(\log(RR)) = \sqrt{ \left( \frac{1}{21} - \frac{1}{23} \right) + \left( \frac{1}{15} - \frac{1}{18} \right) } \]
\[ = \sqrt{(0.0476 - 0.0435) + (0.0667 - 0.0556)} = \sqrt{0.0041 + 0.0111} = \sqrt{0.0152} = 0.1233 \]
Statistik uji Z:
\[ Z_{RR} = \frac{\log(1.095)}{0.1233} = \frac{0.0908}{0.1233} \approx 0.736 \]
\[ OR = \frac{a \cdot d}{b \cdot c} = \frac{21 \cdot 3}{2 \cdot 15} = \frac{63}{30} = 2.1 \]
Standard Error log(OR):
\[ SE(\log(OR)) = \sqrt{ \frac{1}{21} + \frac{1}{2} + \frac{1}{15} + \frac{1}{3} } = \sqrt{0.0476 + 0.5 + 0.0667 + 0.3333} = \sqrt{0.9476} = 0.9734 \]
Statistik uji Z:
\[ Z_{OR} = \frac{\log(2.1)}{0.9734} = \frac{0.7419}{0.9734} \approx 0.762 \]
Perhitungan dengan R
# Data dari tabel 2x2
a <- 21 # Surgery, Cancer Controlled
b <- 2 # Surgery, Not Controlled
c <- 15 # Radiation Therapy, Cancer Controlled
d <- 3 # Radiation Therapy, Not Controlled
# Total masing-masing grup
n1 <- a + b # Surgery
n2 <- c + d # Radiation Therapy
# Proporsi
p1 <- a / n1
p2 <- c / n2
### --- 1. Risk Difference (RD) ---
RD <- p1 - p2
# Standard Error RD
SE_RD <- sqrt((p1 * (1 - p1)) / n1 + (p2 * (1 - p2)) / n2)
# Z-test RD
Z_RD <- RD / SE_RD
cat("Risk Difference (RD):", RD, "\n")
## Risk Difference (RD): 0.07971014
cat("Standard Error RD:", SE_RD, "\n")
## Standard Error RD: 0.1056788
cat("Z statistic RD:", Z_RD, "\n\n")
## Z statistic RD: 0.754268
### --- 2. Relative Risk (RR) ---
RR <- p1 / p2
# SE log(RR)
SE_log_RR <- sqrt((1/a - 1/n1) + (1/c - 1/n2))
# Z-test RR
Z_RR <- log(RR) / SE_log_RR
cat("Relative Risk (RR):", RR, "\n")
## Relative Risk (RR): 1.095652
cat("Standard Error log(RR):", SE_log_RR, "\n")
## Standard Error log(RR): 0.1234986
cat("Z statistic RR:", Z_RR, "\n\n")
## Z statistic RR: 0.7396829
### --- 3. Odds Ratio (OR) ---
OR <- (a * d) / (b * c)
# SE log(OR)
SE_log_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
# Z-test OR
Z_OR <- log(OR) / SE_log_OR
cat("Odds Ratio (OR):", OR, "\n")
## Odds Ratio (OR): 2.1
cat("Standard Error log(OR):", SE_log_OR, "\n")
## Standard Error log(OR): 0.9734573
cat("Z statistic OR:", Z_OR, "\n")
## Z statistic OR: 0.7621674
Uji independensi digunakan untuk menentukan apakah ada hubungan statistik antara dua variabel kategorikal.
Uji Chi-Square digunakan untuk menguji apakah ada hubungan antara dua variabel kategorikal.
Rumus Chi-Square
\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]
di mana:
\[ E_{ij} = \frac{R_i \times C_j}{N} \]
dengan:
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Perhitungan Manual
Langkah 1: Hitung nilai yang diharapkan (E)
Nilai yang diharapkan \(E_{ij}\) dihitung dengan rumus:
\[ E_{ij} = \frac{R_i \times C_j}{N} \]
di mana:
Menghitung nilai yang diharapkan:
Untuk Surgery, Cancer Controlled (\(E_{11}\)):
\[ E_{11} = \frac{(23 \times 36)}{41} = 20.29 \]
Untuk Surgery, Cancer Not Controlled (\(E_{12}\)):
\[ E_{12} = \frac{(23 \times 5)}{41} = 2.81 \]
Untuk Radiation Therapy, Cancer Controlled (\(E_{21}\)):
\[ E_{21} = \frac{(18 \times 36)}{41} = 15.71 \]
Untuk Radiation Therapy, Cancer Not Controlled (\(E_{22}\)):
\[ E_{22} = \frac{(18 \times 5)}{41} = 2.19 \]
Langkah 2: Hitung Chi-Square (\(\chi^2\))
\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]
Dengan:
Untuk Surgery, Cancer Controlled (\(O_{11} = 21\), \(E_{11} = 20.29\)):
\[ \frac{(21 - 20.29)^2}{20.29} = \frac{0.5041}{20.29} = 0.0249 \]
Untuk Surgery, Cancer Not Controlled (\(O_{12} = 2\), \(E_{12} = 2.81\)):
\[ \frac{(2 - 2.81)^2}{2.81} = \frac{0.6561}{2.81} = 0.233 \]
Untuk Radiation Therapy, Cancer Controlled (\(O_{21} = 15\), \(E_{21} = 15.71\)):
\[ \frac{(15 - 15.71)^2}{15.71} = \frac{0.5041}{15.71} = 0.0321 \]
Untuk Radiation Therapy, Cancer Not Controlled (\(O_{22} = 3\), \(E_{22} = 2.19\)):
\[ \frac{(3 - 2.19)^2}{2.19} = \frac{0.6561}{2.19} = 0.2995 \]
Chi-Square Total:
\[ \chi^2 = 0.0249 + 0.233 + 0.0321 + 0.2995 = 0.5895 \]
Perhitungan dengan R
# Membuat data tabel 2x2
data <- matrix(c(21, 2, 15, 3), nrow = 2, byrow = TRUE)
# Menambahkan nama baris dan kolom
rownames(data) <- c("Surgery", "Radiation Therapy")
colnames(data) <- c("Cancer Controlled", "Cancer Not Controlled")
# Menampilkan data tabel
data
## Cancer Controlled Cancer Not Controlled
## Surgery 21 2
## Radiation Therapy 15 3
# Menghitung chi-square
chi_square_test <- chisq.test(data)
## Warning in chisq.test(data): Chi-squared approximation may be incorrect
# Menampilkan hasil uji chi-square
chi_square_test
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 0.085967, df = 1, p-value = 0.7694
Intepretasi : Jika kita menggunakan taraf signifikansi 5% dan denganderajat kebebasan (𝑑𝑓) = (2 − 1)(2 − 1) = 1, kita membandingkan dengan tabel 𝜒2, adalah 3.841 dan jika p-value < 0.05, kita menolak hipotesis nol. Bisa dilihat bahwa kita memiliki p value sebesar 0.7694 yang berarti kita menerima H0.
Partisi Chi-Square Partisi Chi-Square digunakan untuk mengidentifikasi kategori mana dalam tabel kontingensi yang bertanggung jawab atas hubungan yang signifikan. Jika uji Chi-Square pada tabel kontingensi I×Jsignifikan, maka partisi Chi-Square memungkinkan kita untuk menguraikan efek hubungan dalam subkelompok yang lebih kecil.
Penelitian ini dilakukan untuk mengevaluasi apakah terdapat hubungan antara tingkat kebiasaan merokok (dalam jumlah batang rokok per hari) dan risiko terkena myocardial infarction (MI) atau serangan jantung. Data diperoleh dari studi yang dilakukan oleh S. Shapiro et al. dan diterbitkan dalam The Lancet tahun 1979.
| 0 C i g a r ettes / day | 1-24 C i g a r ettes / day | >25 C i g a r ettes / day | Total | |
|---|---|---|---|---|
| C o ntrol | 25 | 25 | 12 | 62 |
| M y o c a rdial i n f a r ction | 0 | 1 | 3 | 4 |
| Total | 25 | 26 | 15 | 66 |
Perhitungan Manual Langkah 1: Menghitung Frekuensi yang Diharapkan
Frekuensi yang diharapkan dihitung menggunakan rumus:
\[ E_i = \frac{(Total \, \text{Baris}) \times (Total \, \text{Kolom})}{Grand \, \text{Total}} \]
Berdasarkan tabel di atas, kita dapat menghitung frekuensi yang diharapkan untuk setiap sel sebagai berikut:
\[ E_{1,1} = \frac{62 \times 25}{66} = 23.636 \] \[ E_{1,2} = \frac{62 \times 26}{66} = 24.545 \] \[ E_{1,3} = \frac{62 \times 15}{66} = 14.091 \] \[ E_{2,1} = \frac{4 \times 25}{66} = 1.515 \] \[ E_{2,2} = \frac{4 \times 26}{66} = 1.515 \] \[ E_{2,3} = \frac{4 \times 15}{66} = 0.909 \]
Langkah 2: Menghitung Statistik Chi-Square
Sekarang kita dapat menghitung statistik chi-square (\(\chi^2\)) dengan rumus:
\[ \chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} \]
Dimana \(O_i\) adalah frekuensi yang diamati dan \(E_i\) adalah frekuensi yang diharapkan. Berdasarkan data yang ada, kita menghitung chi-square untuk setiap sel:
\[ \chi^2 = \frac{(25 - 23.636)^2}{23.636} + \frac{(25 - 24.545)^2}{24.545} + \frac{(12 - 14.091)^2}{14.091} + \frac{(0 - 1.515)^2}{1.515} + \frac{(1 - 1.515)^2}{1.515} + \frac{(3 - 0.909)^2}{0.909} \]
\[ \chi^2 = 0.0785 + 0.0084 + 0.3107 + 1.513 + 0.1754 + 4.809 = 6.895 \]Pehitungan Dengan R
# Membuat matriks data
data_matrix <- matrix(c(25, 25, 12, 0, 1, 3), nrow = 2, byrow = TRUE)
colnames(data_matrix) <- c("0 Cigarettes / day", "1-24 Cigarettes / day", ">25 Cigarettes / day")
rownames(data_matrix) <- c("Control", "Myocardial infarction")
# Melakukan uji chi-square
chi_square_test <- chisq.test(data_matrix)
## Warning in chisq.test(data_matrix): Chi-squared approximation may be incorrect
# Menampilkan hasil uji
chi_square_test
##
## Pearson's Chi-squared test
##
## data: data_matrix
## X-squared = 6.9562, df = 2, p-value = 0.03087
Intepretasi : Jika kita menggunakan taraf signifikansi 5%, maka kita menolak H0 dikarenakan p value yang didapatkan adalah 0.03087 dimana lebih kecil dari 0.05. Karena menolak H0 berarti terdapat hubungan signifikan antara merokok dan kejadian infark miokard.
Uji Likelihood Ratio (G²) adalah alternatif dari uji chi-square yang digunakan untuk menguji hipotesis independensi dalam tabel kontingensi \(I \times J\). Statistik uji ini diberikan oleh:
\[ G^2 = 2 \sum_{i} \sum_{j} n_{ij} \ln \left( \frac{n_{ij}}{\hat{\mu}_{ij}} \right) \]
Dimana:
- \(n_{ij}\) adalah frekuensi observasi dalam tabel kontingensi.
\(\hat{\mu}_{ij} = n \cdot p_i \cdot p_j\) adalah frekuensi yang diharapkan.
\(p_i\) adalah proporsi untuk baris \(i\).
- \(p_j\) adalah proporsi untuk kolom \(j\).
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Langkah 1: Hitung Frekuensi Ekspektasi
Gunakan rumus: \[ \hat{\mu}_{ij} = \frac{(\text{Total Baris}_i) \times (\text{Total Kolom}_j)}{\text{Grand Total}} \]
\[ \begin{aligned} \hat{\mu}_{11} &= \frac{23 \times 36}{41} = 20.17 \\ \hat{\mu}_{12} &= \frac{23 \times 5}{41} = 2.80 \\ \hat{\mu}_{21} &= \frac{18 \times 36}{41} = 15.83 \\ \hat{\mu}_{22} &= \frac{18 \times 5}{41} = 2.20 \\ \end{aligned} \]
Langkah 2: Hitung Statistik Uji G²
\[ \begin{aligned} G^2 &= 2 \sum O_{ij} \ln \left( \frac{O_{ij}}{E_{ij}} \right) \\ &= 2 \left[ 21 \ln \left( \frac{21}{20.17} \right) + 2 \ln \left( \frac{2}{2.80} \right) + 15 \ln \left( \frac{15}{15.83} \right) + 3 \ln \left( \frac{3}{2.20} \right) \right] \end{aligned} \]
Setelah dihitung:
\[ \begin{aligned} G^2 &= 2 \times (0.04 - 0.45 - 0.04 + 0.32) \\ &= 2 \times (-0.13) = -0.26 \quad (\text{ambil nilai absolut}) \\ &= 0.26 \end{aligned} \]
Langkah 3: Bandingkan dengan Distribusi Chi-Square
Derajat bebas: \[ (I - 1)(J - 1) = (2 - 1)(2 - 1) = 1 \]
Nilai kritis \(\chi^2\) untuk \(\alpha = 0.05\) dan df = 1 adalah 3.841.
Karena \(G^2 = 0.26 < 3.841\), maka kita gagal menolak hipotesis nol, artinya tidak ada bukti yang cukup bahwa jenis terapi berpengaruh signifikan terhadap kontrol kanker.
Perhitungan dengan R
# Data Observasi
observed <- matrix(c(21, 2,
15, 3),
nrow = 2, byrow = TRUE)
# Menambahkan nama baris dan kolom
rownames(observed) <- c("Surgery", "Radiation Therapy")
colnames(observed) <- c("Cancer Controlled", "Cancer Not Controlled")
# Total per baris dan kolom
row_totals <- rowSums(observed)
col_totals <- colSums(observed)
grand_total <- sum(observed)
# Frekuensi harapan (Expected frequencies)
expected <- outer(row_totals, col_totals) / grand_total
# Hitung G²
G2 <- 2 * sum(observed * log(observed / expected), na.rm = TRUE)
# Derajat bebas
df <- (nrow(observed) - 1) * (ncol(observed) - 1)
# Nilai kritis chi-square
chi_critical <- qchisq(0.95, df)
# Output hasil
cat("Statistik G² =", round(G2, 3), "\n")
## Statistik G² = 0.595
cat("Derajat bebas =", df, "\n")
## Derajat bebas = 1
cat("Nilai kritis chi-square (0.05) =", round(chi_critical, 3), "\n")
## Nilai kritis chi-square (0.05) = 3.841
if (G2 > chi_critical) {
cat("Kesimpulan: Tolak H0 - Ada hubungan signifikan.\n")
} else {
cat("Kesimpulan: Gagal tolak H0 - Tidak ada hubungan signifikan.\n")
}
## Kesimpulan: Gagal tolak H0 - Tidak ada hubungan signifikan.
Bab ini membahas analisis tabel kontingensi tiga arah secara mendalam, mencakup tabel parsial dan marginal, ukuran asosiasi, Simpson’s Paradox, independensi bersyarat, serta asosiasi homogen. Setiap bagian dilengkapi dengan contoh perhitungan manual dan implementasi dalam R.
Tabel kontingensi tiga arah adalah perpanjangan dari tabel kontingensi dua arah yang digunakan untuk menganalisis hubungan antara tiga variabel kategori secara simultan. Dalam banyak situasi, hubungan antara dua variabel (misalnya X dan Y) dapat dipengaruhi oleh variabel ketiga Z, yang disebut sebagai variabel kontrol atau kovariat. Tabel ini sering digunakan dalam analisis data ketika ada potensi faktor pengganggu yang dapat mempengaruhi hubungan antara dua variabel utama. Misalnya:
Tabel kontingensi tiga arah dapat dibagi menjadi dua jenis:
Tabel Parsial: Tabel yang menyajikan hubungan antara X dan Y pada setiap kategori Z. Ini memungkinkan analisis hubungan bersyarat, di mana efek Z dikendalikan.
Tabel Marginal: Tabel yang diperoleh dengan mengabaikan Z, yaitu dengan menjumlahkan semua kategori Z. Ini memberikan gambaran umum hubungan antara X dan Y tanpa mempertimbangkan Z, yang bisa menyebabkan distorsi interpretasi, seperti dalam Simpson’s Paradox.
Kegunaan Tabel Marginal
Kegunaan tabel marginal adalah untuk melihat pola asosiasi secara agregat, tetapi sering kali mengabaikan efek kovariat yang dapat memberikan pemahaman lebih mendalam. Oleh karena itu, analisis yang mempertimbangkan tabel parsial biasanya lebih ditentukan untuk mendapatkan kesimpulan yang lebih akurat dalam penelitian ilmiah.
Tabel parsial adalah tabel yang mengelompokkan𝑋dan𝑌berdasarkan setiap level 𝑍, sedangkan tabel marginal adalah tabel yang mengabaikan𝑍,dengan menjumlahkan data dari semua level𝑍.
Contoh :
Tabel berikut menunjukkan data mengenai peristiwa pertama kali melakukan hubungan seksual pada remaja berusia 15 dan 16 tahun berdasarkan ras dan jenis kelamin.
| Ras | Jenis Kelamin | Ya (Intercourse) | Tidak (No) |
|---|---|---|---|
| Putih | Laki-laki | 43 | 134 |
| Putih | Perempuan | 26 | 149 |
| Hitam | Laki-laki | 29 | 23 |
| Hitam | Perempuan | 22 | 36 |
Sumber: S. P. Morgan dan J. D. Tenchman, J.{Marriage Fam.} 50: 929–936 (1988). Dicetak kembali dengan izin dari National Council on Family Relations.
Manual
Tabel frekuensi parsial menyajikan hubungan antara dua variabel kategori dalam tabel kontingensi tiga arah dengan mempertimbangkan satu variabel sebagai kontrol. Tabel ini membantu dalam menambah hubungan bersyarat antara variabel dalam analisis data kategori.
Tabel Frekuensi Parsial untuk Z (Ras) = Putih:
| Jenis Kelamin | Ya (Intercourse) | Tidak (No) |
|---|---|---|
| Laki-laki | 43 | 134 |
| Perempuan | 26 | 149 |
Tabel Frekuensi Parsial untuk Z (Ras) = Putih menunjukkan hubungan antara jenis kelamin dan apakah individu tersebut sudah atau belum melakukan hubungan seksual.
Tabel Frekuensi Parsial untuk Z (Ras) = Hitam:
| Jenis Kelamin | Ya (Intercourse) | Tidak (No) |
|---|---|---|
| Laki-laki | 29 | 23 |
| Perempuan | 22 | 36 |
Tabel Frekuensi Parsial untuk Z (Ras) = Hitam menunjukkan hubungan antara jenis kelamin dan apakah individu tersebut sudah atau belum melakukan hubungan seksual pada kelompok ras Hitam.
Dengan R
# Membuat data dengan array
data3 <- array(
c(43, 26, 134, 149, 29, 22, 23, 36),
dim = c(2, 2, 2),
dimnames = list(
Jenis_Kelamin = c("Laki-laki", "Perempuan"),
Intercourse = c("Ya", "Tidak"),
Ras = c("Putih", "Hitam")
)
)
# Tampilkan array untuk memastikan datanya
data3
## , , Ras = Putih
##
## Intercourse
## Jenis_Kelamin Ya Tidak
## Laki-laki 43 134
## Perempuan 26 149
##
## , , Ras = Hitam
##
## Intercourse
## Jenis_Kelamin Ya Tidak
## Laki-laki 29 23
## Perempuan 22 36
# Ekstrak tabel frekuensi parsial berdasarkan ras
freq_parsial_putih <- data3[, , "Putih"]
freq_parsial_hitam <- data3[, , "Hitam"]
# Tampilkan hasil frekuensi parsial
freq_parsial_putih
## Intercourse
## Jenis_Kelamin Ya Tidak
## Laki-laki 43 134
## Perempuan 26 149
freq_parsial_hitam
## Intercourse
## Jenis_Kelamin Ya Tidak
## Laki-laki 29 23
## Perempuan 22 36
Tabel frekuensi marginal menampilkan jumlah total observasi untuk setiap variabel dengan mengabaikan variabel lainnya dalam tabel kontingensi tiga arah. Tabel ini membantu dalam memahami distribusi kategori secara agregat tanpa mempertimbangkan hubungan antarvariabel. Tabel frekuensi marginal dihitung dengan menjumlahkan frekuensi dari tabel kontingensi tiga arah berdasarkan variabel yang tersisa.
Manual
Tabel Frekuensi Marginal untuk Race dan Intercourse
| Race | Yes | No | Total |
|---|---|---|---|
| White | 69 | 283 | 352 |
| Black | 51 | 59 | 110 |
| Total | 120 | 342 | 462 |
Tabel Frekuensi Marginal untuk Gender dan Intercourse
| Gender | Yes | No | Total |
|---|---|---|---|
| Male | 72 | 157 | 229 |
| Female | 48 | 185 | 233 |
| Total | 120 | 342 | 462 |
Dengan R
# Membuat data dengan array
data3 <- array(
c(43, 26, 134, 149, 29, 22, 23, 36),
dim = c(2, 2, 2),
dimnames = list(
Jenis_Kelamin = c("Laki-laki", "Perempuan"),
Intercourse = c("Ya", "Tidak"),
Ras = c("Putih", "Hitam")
)
)
# Tampilkan array untuk memastikan datanya
data3
## , , Ras = Putih
##
## Intercourse
## Jenis_Kelamin Ya Tidak
## Laki-laki 43 134
## Perempuan 26 149
##
## , , Ras = Hitam
##
## Intercourse
## Jenis_Kelamin Ya Tidak
## Laki-laki 29 23
## Perempuan 22 36
# Ekstrak tabel frekuensi parsial berdasarkan ras
freq_marginal_X<-apply(data3,1,sum)
freq_marginal_Z<-apply(data3,3,sum)
# Tampilkan hasil frekuensi parsial
freq_marginal_X
## Laki-laki Perempuan
## 229 233
freq_marginal_Z
## Putih Hitam
## 352 110
Misalkan
Tabel berikut menunjukkan data mengenai peristiwa pertama kali melakukan hubungan seksual pada remaja berusia 15 dan 16 tahun berdasarkan ras dan jenis kelamin.
| Ras | Jenis Kelamin | Ya (Intercourse) | Tidak (No) |
|---|---|---|---|
| Putih | Laki-laki | 43 | 134 |
| Putih | Perempuan | 26 | 149 |
| Hitam | Laki-laki | 29 | 23 |
| Hitam | Perempuan | 22 | 36 |
Sumber: S. P. Morgan dan J. D. Tenchman, J.{Marriage Fam.} 50: 929–936 (1988). Dicetak kembali dengan izin dari National Council on Family Relations.
Peluan bersama didefinisikan sebagai:
\[ P(Z, X, Y) = \frac{f(Z, X, Y)}{N} \] Contoh Perhitungan dengan Data diatas
# Load library yang diperlukan
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Data dalam format array 3D
data <- array(
c(43, 26, 134, 149, # Putih
29, 22, 23, 36), # Hitam
dim = c(2, 2, 2),
dimnames = list(
"Jenis Kelamin" = c("Lelaki", "Perempuan"),
"Intercouse" = c("Ya", "Tidak"),
"Ras" = c("Putih", "Hitam")
)
)
# Menampilkan tabel
print(data)
## , , Ras = Putih
##
## Intercouse
## Jenis Kelamin Ya Tidak
## Lelaki 43 134
## Perempuan 26 149
##
## , , Ras = Hitam
##
## Intercouse
## Jenis Kelamin Ya Tidak
## Lelaki 29 23
## Perempuan 22 36
total <- sum(data)
joint_prob <- data/ total
ftable(joint_prob)
## Ras Putih Hitam
## Jenis Kelamin Intercouse
## Lelaki Ya 0.09307359 0.06277056
## Tidak 0.29004329 0.04978355
## Perempuan Ya 0.05627706 0.04761905
## Tidak 0.32251082 0.07792208
Intepretasi : Pria yang tidak berhubungan seksual cenderung lebih banyak berkulit putih dibandingkan dengan kulit hitam, sedangkan wanita yang tidak berhubungan seksual cenderung lebih banyak berkulit putih juga.
Peluang marginal didefinisikan sebagai berikut
untuk Ras: \[ P(Z) = \frac{n(Z)}{N} \]
marginal_Z <- apply(joint_prob, 3, sum)
marginal_Z
## Putih Hitam
## 0.7619048 0.2380952
Intepretasi : Proporsi Ras Putih lebih banyak dibanding ras Hitam.
Untuk Gender: \[ P(X) = \frac{n(X)}{N} \]
marginal_X <- apply(joint_prob, 1, sum)
marginal_X
## Lelaki Perempuan
## 0.495671 0.504329
Intepretasi : Proporsi perempuan lebih banyak dibanding laki - laki
Contoh : Mencari peluang seseorang ber - ras tertentu jika ia laki - laki dan melakukan hubungan seksual: \[ P(Ras| X = Laki-laki,Y=1) = \frac{P(Ras,Laki-laki,Y=1)}{P(X=Laki - laki,Y=1)} \]
p_Z_given_X_Y <- prop.table(data, margin = c(1,2))
p_Z_given_X_Y
## , , Ras = Putih
##
## Intercouse
## Jenis Kelamin Ya Tidak
## Lelaki 0.5972222 0.8535032
## Perempuan 0.5416667 0.8054054
##
## , , Ras = Hitam
##
## Intercouse
## Jenis Kelamin Ya Tidak
## Lelaki 0.4027778 0.1464968
## Perempuan 0.4583333 0.1945946
Intepretasi : Peluang seseorang memiliki ras putih ketika ia laki - laki dan melakukan hubungan seksual adalah 0.597. Dan peluang seseorang memiliki ras hitam ketika ia laki - laki dan melakukan hubungan seksual adalah 0.403
\[ RD = \frac{a}{a + b} - \frac{c}{c + d} \]
# Hitung RD untuk masing-masing ras
rd_putih <- (data["Lelaki", "Ya", "Putih"] / sum(data["Lelaki", , "Putih"])) -
(data["Perempuan", "Ya", "Putih"] / sum(data["Perempuan", , "Putih"]))
rd_hitam <- (data["Lelaki", "Ya", "Hitam"] / sum(data["Lelaki", , "Hitam"])) -
(data["Perempuan", "Ya", "Hitam"] / sum(data["Perempuan", , "Hitam"]))
rd_putih
## [1] 0.09436642
rd_hitam
## [1] 0.178382
Intepretasi : Perbedaan peluang (RD) menunjukkan bahwa laki - laki meningkatkan potensi untuk melakukan hubungan seksual sekitar 0.0943 (9.4%) untuk ras putih dan sekitar 0.178382 untuk ras hitam.
\[ RR = \frac{a / (a + b)}{c / (c + d)} \]
#Menghitung RR untuk masing masing ras
rr_putih <- (data["Lelaki", "Ya", "Putih"] / sum(data["Lelaki", , "Putih"])) /
(data["Perempuan", "Ya", "Putih"] / sum(data["Perempuan", , "Putih"]))
rr_hitam <- (data["Lelaki", "Ya", "Hitam"] / sum(data["Lelaki", , "Hitam"])) /
(data["Perempuan", "Ya", "Hitam"] / sum(data["Perempuan", , "Hitam"]))
rr_putih
## [1] 1.635159
rr_hitam
## [1] 1.47028
Intepretasi : Risiko relatif (RR) menunjukkan bahwa laki - laki memiliki 1.5 kali lipat potensi melakukan hubungan seksual dibandingkan perempuan untuk ras putih , dan 1.47 kali lipat untuk ras hitam.
\[ OR = \frac{a \cdot d}{b \cdot c} \]
# Menghitung Odds Ratio untuk masing masing ras
or_putih <- (data["Lelaki", "Ya", "Putih"] / data["Lelaki", "Tidak", "Putih"]) /
(data["Perempuan", "Ya", "Putih"] / data["Perempuan", "Tidak", "Putih"])
or_hitam <- (data["Lelaki", "Ya", "Hitam"] / data["Lelaki", "Tidak", "Hitam"]) /
(data["Perempuan", "Ya", "Hitam"] / data["Perempuan", "Tidak", "Hitam"])
or_putih
## [1] 1.838978
or_hitam
## [1] 2.063241
Intepretasi : Odds Ratio (OR) menunjukkan bahwa peluang melakukan hubungan seksual bagi laki - laki 1.83 kali lebih tinggi pada ras putih dan 2.063 kali lebih tinggi pada ras hitam dibandingkan perempuan.
Tabel kontingensi tiga arah digunakan untuk menganalisis hubungan antara dua variabel kategorik dengan mempertimbangkan variabel kontrol.Contohnya adalah hubungan antara Gender (X) dan Perilaku melakukan hubungan seksual pertama kali di umur 16-17 tahun (Y) dengan variabel kontrol ras (Z).
Tabel ini terdiri dari beberapa tabel parsial (2×2) untuk setiap tingkat Z, serta tabel marginal yang mengabaikan Z. Ukuran asosiasi yang digunakan adalah odds ratio.
Jika odds ratio parsial relatif konstan, kita dapat menghitung odds ratio bersama menggunakan estimasi Mantel-Haenszel.
Independensi bersyarat adalah konsep penting dalam analisis tabel kontingensi tiga arah. Ini merujuk pada kondisi di mana dua variabel, 𝑋 dan 𝑌, independen dalam setiap level variabel ketiga, 𝑍. Pengujian independensi bersyarat dilakukan dengan metode statistik seperti uji Cochran-Mantel-Haenszel (CMH).
Definisi Independensi Bersyarat
Independensi Bersyarat: Dua variabel, 𝑋 dan 𝑌, dikatakan independen bersyarat terhadap variabel ketiga, 𝑍, jika rasio odds mereka dalam setiap strata 𝑍 sama dengan 1.
Metode Cochran-Mantel-Haenszel Tujuan Uji CMH Uji Cochran-Mantel-Haenszel (CMH) digunakan untuk menguji hubungan antara dua variabel kategori dengan mempertimbangkan efek dari variabel perancu (confounder).
Statistik uji Cochran-Mantel-Haenszel (CMH) dirumuskan sebagai:
\[ CMH = \frac{\sum_k \left( n_{1ik} - \mu_{1ik} \right)^2}{\sum_k \text{var}(n_{1ik})} \]
Keterangan
\[ \mu_{1ik} = E(n_{1ik}) = \frac{n_{1.k} \cdot n_{1ik}}{n_{.k}} \]
Varians dari \(n_{1ik}\) diberikan oleh:
\[ \text{var}(n_{1ik}) = \frac{n_{1.k} \cdot n_{2.k} \cdot n_{1ik} \cdot n_{2.k}}{n_{2.k}^2 \cdot (n_{.k} - 1)} \]
Contoh 1
Misalkan kita memiliki data mengenai jenis kelamin terhadap perlakuan hubungan seksual di bawah umur dengan, tetapi ingin mengontrol faktor ras. Data dikategorikan menjadi ras putih dan ras hitam dalam tabel kontingensi 2 x 2.
Tabel Kontingensi
Ras: Putih
| Intercourse (Ya) | Intercourse (Tidak) | Total | |
|---|---|---|---|
| Laki-laki | 43 | 134 | 177 |
| Perempuan | 26 | 149 | 175 |
Ras: Hitam
| Intercourse (Ya) | Intercourse (Tidak) | Total | |
|---|---|---|---|
| Laki-laki | 29 | 23 | 52 |
| Perempuan | 22 | 36 | 58 |
Perhitungan manual
Rumus nilai harapan \(\mu_{1ik}\) untuk setiap strata \(k\):
\[ \mu_{1ik} = \frac{(n_{i+k} \times n_{+ik})}{n_{++k}} \]
Di mana: - \(n_{i+k}\) = Total laki - laki dalam strata \(k\) - \(n_{+ik}\) = Total Intercourse dalam strata \(k\) - \(n_{++k}\) = Total individu dalam strata \(k\)
Untuk Ras Putih (k=1):
\[ \mu_{111} = \frac{(177 \times 69)}{352} = 34.696 \]
Untuk Ras Hitam (k=2):
\[ \mu_{112} = \frac{(52 \times 51)}{110} = 24,109 \]
Rumus varians:
\[ \text{Var}(n_{1ik}) = \frac{n_{i+k} \times n_{0+k} \times n_{+ik} \times n_{+0k}}{n_{++k}^2 \times (n_{++k} - 1)} \]
Untuk Ras Putih (k=1):
\[ \text{Var}(n_{111}) = \frac{(177 \times 134 \times 43 \times 149)}{352^2 \times (352 - 1)} = 13.91 \]
Untuk Ras Hitam (k=2):
\[ \text{Var}(n_{112}) = \frac{(175 \times 149 \times 26 \times 134)}{350^2 \times (350 - 1)} = 9.91 \]
Rumus statistik CMH:
\[ X^2_{CMH} = \frac{\sum_k (n_{1ik} - \mu_{1ik})^2}{\sum_k \text{Var}(n_{1ik})} \]
\[ X^2_{CMH} = \frac{((43 - 34.696) + (29 - 24.109))^2}{13.91 + 9.91} = 7.309 \]
Intepretasi : Misalkan dengan taraf signifikansi 5%, maka kita memiliki nilai kritis sebesar 3.841. Dikarenakan 7.309 > 3.841 maka hipotesis nol ditolak yang berarti terdapat hubungan signifikan antara jenis kelamin terhadap perlakuan intercourse setelah mengontrol variabel ras.
Perhitungan dengan R
data_cmh <- array(
c(43, 26, 134, 149, # Putih
29, 22, 23, 36), # Hitam
dim = c(2, 2, 2),
dimnames = list(
"Jenis Kelamin" = c("Lelaki", "Perempuan"),
"Intercouse" = c("Ya", "Tidak"),
"Ras" = c("Putih", "Hitam")
)
)
# Menampilkan tabel
print(data_cmh)
## , , Ras = Putih
##
## Intercouse
## Jenis Kelamin Ya Tidak
## Lelaki 43 134
## Perempuan 26 149
##
## , , Ras = Hitam
##
## Intercouse
## Jenis Kelamin Ya Tidak
## Lelaki 29 23
## Perempuan 22 36
cmh_base <- mantelhaen.test(data, correct = FALSE)
cmh_base
##
## Mantel-Haenszel chi-squared test without continuity correction
##
## data: data
## Mantel-Haenszel X-squared = 8.3751, df = 1, p-value = 0.003804
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.229343 2.967939
## sample estimates:
## common odds ratio
## 1.910135
Intepretasi : Dikarenakan p value 0.003804 < 0.05 maka keputusannya adalah menolak H0 yang berarti terdapat hubungan signifikan antara jenis kelamin terhadap perlakuan intercourse setelah mengontrol variabel ras.
Generalized Linear Model (GLM) merupakan perluasan dari model regresi linear klasik. GLM memungkinkan digunakan untuk memodelkan data dimana variabel respons tidak berdistribusi normal dan atau hubungan antara variabel prediktor dengan rata-rata dari variabel respons tidak linear. GLM terdiri dari tiga komponen utama:
Distribusi termasuk dalam exponential family jika dapat ditulis dalam bentuk:
\[ f(y; \theta, \phi) = \exp \left\{ \frac{y\theta - b(\theta)}{\phi} + c(y, \phi) \right\} \]
Contoh Distribusi yang Termasuk Exponential Family:
Contoh Pembuktian: Distribusi Binomial
Fungsi probabilitas distribusi binomial adalah:
\[ P(Y = y) = \binom{n}{y} \pi^y (1 - \pi)^{n - y} \]
Tuliskan ulang dalam bentuk exponential family:
\[ P(Y = y) = \exp \left\{ \log \binom{n}{y} + y \log \left( \frac{\pi}{1 - \pi} \right) + n \log (1 - \pi) \right\} \]
Dengan substitusi:
Kesimpulan : Dengan bentuk tersebut, maka distribusi binomial termasuk dalam keluarga exponential family.
Regresi Logistik memiliki kemiripan dengan regresi linear, yaitu menggabungkan nilai-nilai input secara linear dengan bobot (koefisien) untuk menghasilkan sebuah prediksi. Bedanya, regresi logistik membatasi hasil prediksinya agar berada dalam bentuk nilai biner 0 atau 1 dengan bantuan fungsi sigmoid sebagai fungsi aktivasi. Fungsi ini mengubah output menjadi nilai antara 0 sampai 1 dan membentuk kurva seperti huruf S.
Model ini digunakan untuk menganalisis hubungan antara satu atau lebih variabel independen dan mengklasifikasikan data ke dalam kelas-kelas yang bersifat diskrit. Artinya, regresi logistik cocok digunakan untuk masalah klasifikasi, terutama yang hanya memiliki dua kemungkinan kategori (dikenal dengan klasifikasi biner).
Contohnya, angka 0 bisa merepresentasikan gagal, sedangkan angka 1 merepresentasikan sukses.
Beberapa contoh penerapan regresi logistik dalam klasifikasi biner antara lain:
-Memprediksi kelulusan siswa: Model regresi logistik dapat digunakan untuk memperkirakan apakah seorang siswa akan lulus atau tidak berdasarkan variabel-variabel seperti kehadiran, nilai tugas, partisipasi kelas, dan nilai ujian.
-Deteksi penipuan transaksi keuangan: Dalam dunia perbankan dan keuangan, regresi logistik dapat membantu mendeteksi apakah sebuah transaksi tergolong normal atau mencurigakan (fraud) dengan menganalisis pola transaksi seperti frekuensi, jumlah uang, lokasi transaksi, dan waktu.
-Memprediksi hasil diagnosis penyakit: Dalam dunia medis, model ini bisa digunakan untuk menentukan apakah pasien menderita suatu penyakit (misalnya diabetes atau kanker) berdasarkan variabel seperti usia, tekanan darah, kadar gula, dan riwayat keluarga.
Keunggulan Utama Regresi Logistik yaitu mudah diterapkan dalam Machine Learning. Regresi logistik sangat cocok digunakan dalam Machine Learning karena proses pelatihan (training) dan pengujian (testing) nya cukup sederhana. Model ini belajar dari pola-pola dalam data input dan menghubungkannya dengan output (label). Karena tidak membutuhkan komputasi tinggi, regresi logistik tergolong mudah untuk diimplementasikan, dipahami, dan dilatih dibanding metode lain dalam Machine Learning.
Cocok untuk data yang bisa dipisahkan secara linear Jika dua kelas data bisa dipisahkan dengan garis lurus (linear), maka regresi logistik akan sangat efektif dalam mengklasifikasikan data tersebut ke dalam dua kelompok berbeda. Dalam konteks ini, variabel target (y) hanya memiliki dua nilai, sehingga model bisa menentukan batas yang jelas di antara keduanya.
Memberikan wawasan yang bermakna Regresi logistik juga bisa menunjukkan seberapa besar pengaruh suatu variabel terhadap hasil akhir, melalui koefisiennya. Selain itu, model ini juga menunjukkan apakah hubungan antar variabel bersifat positif atau negatif.
Persamaan dan Asumsi dalam Regresi Logistik Model ini menggunakan fungsi sigmoid, yaitu fungsi matematika berbentuk kurva S yang mengubah nilai output ke dalam rentang antara 0 dan 1. Jika hasil dari fungsi sigmoid (yang merepresentasikan probabilitas) lebih tinggi dari ambang batas tertentu, maka model akan mengklasifikasikan data sebagai bagian dari suatu kelas. Sebaliknya, jika di bawah ambang tersebut, maka data dianggap tidak termasuk dalam kelas itu.
Selain itu, jika keluaran dari fungsi sigmoid (yaitu probabilitas yang diperkirakan) lebih besar dari ambang batas yang telah ditentukan dalam grafik, maka model akan memprediksi bahwa suatu observasi termasuk dalam kelas tertentu. Sebaliknya, jika nilai probabilitas tersebut lebih kecil dari ambang batas, model akan memprediksi bahwa observasi tersebut tidak termasuk ke dalam kelas tersebut
Sebagai contoh:
-Jika hasil fungsi sigmoid lebih dari 0,5, maka output dianggap sebagai 1 (kelas positif). -Jika hasilnya kurang dari 0,5, maka output diklasifikasikan sebagai 0 (kelas negatif). -Jika grafik menuju ke arah negatif secara ekstrem, maka nilai prediksi y akan menjadi 0,dan sebaliknya.
Fungsi sigmoid digunakan dalam regresi logistik untuk mengubah nilai prediksi menjadi probabilitas. Rumus dari fungsi sigmoid yaitu: \[ f(x) = \frac{1}{1 + e^{-x}} \]
# Simulasi data untuk regresi logistik
set.seed(42)
n <- 100
x <- seq(-4, 4, length.out = n)
log_odds <- -0.5 + 1.5 * x
prob <- 1 / (1 + exp(-log_odds))
y <- rbinom(n, 1, prob)
# Buat data frame
data <- data.frame(x=x, y=y, prob = prob)
Plot Kurva Sigmoid
# Visualisasi menggunakan base R plot
# Visualisasi menggunakan base R
# Plot the data
plot(x, y,
pch = 16,
col = "gray60",
xlab = "X",
ylab = "Y / Probabilitas",
main = "Simulasi Regresi Logistik dengan Kurva Sigmoid")
lines(x, prob, col = "blue", lwd = 2)
abline(h = 0.5, col = "red", lty = 2)
legend("topleft", legend = c("Data Biner (0/1)", "Kurva Logistik", "Ambang 0.5"),
col = c("gray60", "blue", "red"),
pch = c(16, NA, NA),
lty = c(NA, 1, 2),
lwd = c(NA, 2, 1),
pt.cex = 1.5, bty = "n")
Kurva sigmoid dalam regresi logistik menunjukkan hubungan non-linear antaravariabel prediktor dan probabilitas output. Pendekatan ini efektif untuk klasifikasi biner seperti deteksi penyakit, kelulusan siswa, dan prediksi ya/tidak.
Fungsi Link (Logit): Fungsi link logit dapat dinyatakan dalam bentuk berikut:
\[ g(\mu) = \log \left( \frac{\mu}{1 - \mu} \right) \]
Model Regresi Logistik:
\[ \log \left( \frac{\mu}{1 - \mu} \right) = X\beta \]
Fungsi Inverse Link:
\[ \mu = \frac{\exp(X\beta)}{1 + \exp(X\beta)} \]
Estimasi Parameter
Metode estimasi parameter pada GLM umumnya menggunakan Maximum Likelihood Estimation (MLE).
Log-likelihood fungsi untuk regresi logistik:
\[ l(\beta) = \sum_{i=1}^{n} \left[ y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i) \right] \] Dengan:
\[ \pi_i = \frac{\exp(X\beta)}{1 + \exp(X\beta)} \]
Contoh Kasus dengan R
Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
# Buat data frame berdasarkan tabel
data <- data.frame(
Treatment = c(rep(1, 21), rep(1, 2), # Surgery: Controlled (21), Not Controlled (2)
rep(0, 15), rep(0, 3)), # Radiation: Controlled (15), Not Controlled (3)
CancerControlled = c(rep(1, 21), rep(0, 2),
rep(1, 15), rep(0, 3))
)
# Tampilkan data
head(data)
Estimasi Regresi Logistik Estimasi parameter model regresi logistik dapat menggunakan ‘glm’ function
model <- glm(CancerControlled ~ Treatment, data = data, family = binomial)
summary(model)
##
## Call:
## glm(formula = CancerControlled ~ Treatment, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.6094 0.6325 2.545 0.0109 *
## Treatment 0.7419 0.9735 0.762 0.4460
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 30.405 on 40 degrees of freedom
## Residual deviance: 29.810 on 39 degrees of freedom
## AIC: 33.81
##
## Number of Fisher Scoring iterations: 5
Interpretasi Koefisien
• Intercept ((Intercept)): nilai log-odds saat x=0
• Koefisien x: perubahan log-odds untuk setiap satu satuan peningkatan pada x
• Nilai p: menunjukkan signifikansi statistik dari prediktor
Koefisien log-odds dapat ditransformasikan ke odds ratio:
exp(coef(model))
## (Intercept) Treatment
## 5.0 2.1
Prediksi dan Visualisasi Kurva Logit
library(ggplot2)
data$pred <- predict(model, type = "response")
ggplot(data, aes(x=Treatment, y=CancerControlled)) +
geom_point(alpha = 0.5, color = "gray40") +
geom_line(aes(y=pred), color = "blue", linewidth = 1.5) +
labs(title = "Kurva Logit pada Regresi Logistik",
x="X (Prediktor)",
y="Probabilitas / Respons") +
theme_minimal()
GLM adalah kerangka model fleksibel untuk berbagai jenis data dan distribusi. Regresi logistik merupakan salah satu contoh penting dari GLM, sangat berguna dalam analisis data kategorik biner. Estimasi parameter dilakukan melalui metode MLE dan dapat diselesaikan secara efisien dengan fungsi glm di R.
Regresi Poisson digunakan ketika variabel respons adalah data cacah (count data),yaitu bilangan bulat non negatif. Model ini merupakan bagian dari Generalized Linear Model(GLM) dengan asumsi bahwa distribusi variabel respons adalah distribusi Poisson.
Distribusi Poisson memiliki fungsi probabilitas:
\[ P(Y = y) = \frac{e^{-\lambda} \lambda^y}{y!} \]
Distribusi Poisson dapat dituliskan dalam bentuk exponential family sebagai berikut:
\[ f(y; \theta) = \exp \left\{ y \log(\lambda) - \lambda - \log(y!) \right\} \]
dengan:
Maka distribusi Poisson termasuk dalam exponential family.
Fungsi Link
Fungsi link kanonik untuk distribusi Poisson adalah fungsi logaritma:
\[ g(\mu) = \log(\mu) \]
Sehingga modelnya menjadi:
\[ \log(\mu_i) = x_i^T \beta \]
dan fungsi inverse link:
\[ \mu_i = \exp(x_i^T \beta) \]
Estimasi Parameter
Estimasi parameter \(( \beta )\)
dilakukan dengan metode Maximum Likelihood Estimation
(MLE).
Log-likelihood fungsi untuk regresi Poisson:
\[ l(\beta) = \sum_{i=1}^n \left[ y_i x_i^T \beta - \exp(x_i^T \beta) - \log(y_i!) \right] \]
Nilai \(( \beta )\) dapat diperoleh melalui metode numerik seperti iterasi Newton-Raphson.
Contoh:
Misalkan kita memiliki data sebagai berikut:
# Buat data frame berdasarkan tabel
data <- data.frame(
Treatment = c(rep(1, 21), rep(1, 2), # Surgery: Controlled (21), Not Controlled (2)
rep(0, 15), rep(0, 3)), # Radiation: Controlled (15), Not Controlled (3)
CancerControlled = c(rep(1, 21), rep(0, 2),
rep(1, 15), rep(0, 3))
)
# Tampilkan data
head(data)
lambda <- exp(0.3 + 0.6 * data$Treatment)
Estimasi Regresi Poisson
poisson_model <- glm(CancerControlled ~ Treatment, data = data, family = poisson())
summary(poisson_model)
##
## Call:
## glm(formula = CancerControlled ~ Treatment, family = poisson(),
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.18232 0.25819 -0.706 0.480
## Treatment 0.09135 0.33806 0.270 0.787
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 9.3638 on 40 degrees of freedom
## Residual deviance: 9.2905 on 39 degrees of freedom
## AIC: 85.29
##
## Number of Fisher Scoring iterations: 4
Plot Hasil Prediksi
plot(data$Treatment, data$CancerControlled, pch = 16, col = "darkgray", main = "Data dan Hasil Prediksi")
newdata <- data.frame(Treatment=seq(min(data$Treatment), max(data$Treatment), length.out = 100))
pred <- predict(poisson_model, newdata = newdata, type = "response")
lines(newdata$Treatment, pred, col = "blue", lwd = 2)
Diagnostik dan Overdispersion
Salah satu asumsi penting dari model Poisson adalah bahwa mean dan varians dari variabel respons adalah sama (𝐸[𝑌]=𝑉𝑎𝑟[𝑌]). Jika varians lebih besar dari mean, maka terjadi overdispersion. Untuk mendeteksi overdispersion:
dispersion <- sum(residuals(poisson_model, type = "pearson")^2) / poisson_model$df.residual
dispersion
## [1] 0.1282051
Jika nilai dispersion > 1, maka overdispersion mungkin terjadi dan model alternatif seperti Negative Binomial Regression dapat digunakan.
exp(coef(poisson_model))
## (Intercept) Treatment
## 0.8333333 1.0956522
Visualisasi Prediksi
data$predicted <- predict(poisson_model, type = "response")
library(ggplot2)
ggplot(data, aes(x=data$Treatment, y=data$CancerControlled)) +
geom_jitter(width = 0.2, alpha = 0.6) +
geom_point(aes(CancerControlled=predicted), shape = 18, size = 3, color = "black") +
labs(title = "Prediksi", x="Treatment", y="CancerControlled") +
theme_minimal()
## Warning in geom_point(aes(CancerControlled = predicted), shape = 18, size = 3,
## : Ignoring unknown aesthetics: CancerControlled
## Warning: Use of `data$Treatment` is discouraged.
## ℹ Use `Treatment` instead.
## Warning: Use of `data$CancerControlled` is discouraged.
## ℹ Use `CancerControlled` instead.
## Warning: Use of `data$Treatment` is discouraged.
## ℹ Use `Treatment` instead.
## Warning: Use of `data$CancerControlled` is discouraged.
## ℹ Use `CancerControlled` instead.
Evaluasi Model
# Plot residuals
plot(poisson_model$residuals,
main = "Residual Plot",
ylab = "Residual",
xlab = "Index",
pch = 19,
col = "steelblue")
abline(h = 0, col = "red", lty = 2)
Dalam Generalized Linear Model (GLM), inferensi statistik membutuhkan pemahaman terhadap ekspektasi dan variansi dari estimator model, terutama untuk mengembangkan alat-alat uji seperti Wald test, Likelihood Ratio test, dan interval kepercayaan.
Ekspektasi dan Varians dalam GLM
Ekspektasi menunjukkan apakah suatu estimator tak bias, yaitu:
\[ \mathbb{E}[\hat{\beta}] = \beta \]
Dalam GLM, MLE dari \(\hat{\beta}\) bersifat asymptotically unbiased.
Varians menunjukkan presisi dari estimasi parameter:
\[ \text{Var}(\hat{\beta}) \approx (\mathbf{X}^T \mathbf{W} \mathbf{X})^{-1} \]
dimana \(\mathbf{W}\) adalah matriks bobot yang tergantung pada distribusi dan fungsi link.
Distribusi Asimptotik Estimator
Dengan ukuran sampel besar:
\[ \hat{\beta} \sim \mathcal{N}(\beta, \text{Var}(\hat{\beta})) \]
Distribusi ini adalah dasar dari:
Varians dalam GLM Tidak Konstan
Tidak seperti regresi linear (OLS) yang mengasumsikan homoskedastisitas:
\[ \text{Var}(Y_i) = \sigma^2 \]
Dalam GLM:
\[ \text{Var}(Y_i) = \phi V(\mu_i) \]
Contoh:
Contoh Regresi Poisson
# Buat data frame berdasarkan tabel
data <- data.frame(
Treatment = c(rep(1, 21), rep(1, 2), # Surgery: Controlled (21), Not Controlled (2)
rep(0, 15), rep(0, 3)), # Radiation: Controlled (15), Not Controlled (3)
CancerControlled = c(rep(1, 21), rep(0, 2),
rep(1, 15), rep(0, 3))
)
# Tampilkan data
head(data)
# Ringkasan model regresi Poisson
model <- glm(CancerControlled ~ Treatment, data = data, family = poisson())
summary(model)
##
## Call:
## glm(formula = CancerControlled ~ Treatment, family = poisson(),
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.18232 0.25819 -0.706 0.480
## Treatment 0.09135 0.33806 0.270 0.787
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 9.3638 on 40 degrees of freedom
## Residual deviance: 9.2905 on 39 degrees of freedom
## AIC: 85.29
##
## Number of Fisher Scoring iterations: 4
Kesimpulan:
Ekspektasi
Jika diturunkan berdasarkan fungsi momen:
\[ E(Y) = \int y f(y; \theta) \, dy = \mu \]
Untuk keluarga eksponensial:
\[ \log f(y; \theta) = a(y) + b(\theta) y + c(\theta) \]
atau:
\[ \log f(y; \theta) = y \theta - b(\theta) + c(y) \]
Maka ekspektasi turunan pertama:
\[ U(\theta) = \frac{\partial \ell}{\partial \theta} = y - b'(\theta) \] Dan ekspektasi turunan pertama:
\[ \mathbb{E}[U(\theta)] = \mathbb{E}[y - b'(\theta)] = \mu - b'(\theta) = 0 \]
Maka:
\[ \mu = b'(\theta) \]
Varians
Turunan kedua:
\[ \frac{\partial^2 \ell}{\partial \theta^2} = -b''(\theta) \]
Sehingga:
\[ \text{Var}(Y) = b''(\theta) = \phi V(\mu) \]
Maximum Likelihood Estimation (MLE)
Namun, karena bentuk GLM tidak eksplisit, digunakan metode numerik.
Metode Optimisasi: Newton-Raphson
Iterasi:
\[ \beta^{(t+1)} = \beta^{(t)} - H^{-1}(\beta^{(t)}) U(\beta^{(t)}) \] Fisher Scoring
IRLS (Iteratively Reweighted Least Square) - Modifikasi dari Fisher scoring, hasil estimasi mirip dengan Least Square.
Implementasi Newton-Raphson Statistik score ke-𝑗 Statistik score ke-𝑗:
\[ U_j(\beta) = \frac{\partial \log L(\beta)}{\partial \beta_j} \] Turunan kedua:
\[ H_{jk}(\beta) = \frac{\partial^2 \log L(\beta)}{\partial \beta_j \partial \beta_k} \]
Taylor expansion:
\[ U(\beta^*) \approx U(\beta) + H(\beta)(\beta^* - \beta) \]
Estimasi parameter:
\[ \hat{\beta} \approx \beta^{(t)} - H^{-1}(\beta^{(t)}) U(\beta^{(t)}) \]
Diagnostik digunakan untuk mengevaluasi apakah model sudah tepat.
Statistik Devians
\[ D = 2 \sum \left[ y_i \log \left( \frac{y_i}{\hat{\mu}_i} \right) - (y_i - \hat{\mu}_i) \right] \]
Statistik Chi-Kuadrat Pearson
\[ X^2 = \sum \left( \frac{(y_i - \hat{\mu}_i)^2}{\hat{\mu}_i} \right) \] • Jika signifikan → model lebih baik daripada tanpa model.
Catatan
• Untuk data yang dikelompokkan, statistik devians dan chi-kuadrat Pearson mengikuti distribusi ChiSquare.
• Untuk data tidak dikelompokkan, tidak mengikuti distribusi Chi-Square.
• Devians diminimalkan oleh MLE → cocok digunakan untuk evaluasi model.
Analisis Residual
• Residual adalah selisih antara observasi dengan prediksi.
• Dapat digunakan untuk memeriksa penyimpangan sistematis.
• Dapat diplot untuk menilai asumsi model
Regresi logistik digunakan untuk memodelkan probabilitas dari variabel respons biner (0/1) berdasarkan satu atau lebih variabel prediktor. Estimasi parameter dilakukan menggunakan Maximum Likelihood Estimation (MLE) karena model tidak linear dalam parameternya.
Fungsi model logistik:
\[ \pi(x) = \frac{\exp(\beta_0 + \beta_1 x)}{1 + \exp(\beta_0 + \beta_1 x)} \]
Log-likelihood untuk \(( n )\) observasi:
\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i) \right] \] Estimasi dengan Newton-Raphson
Metode Newton-Raphson digunakan untuk mencari nilai parameter \(( \beta )\) yang memaksimalkan fungsi log-likelihood pada model regresi logistik.
Fungsi Log-Likelihood
Model regresi logistik untuk probabilitas:
\[ \pi_i = \frac{1}{1 + \exp(-x_i^\top \beta)} \]
Log-likelihood untuk \(( n )\) observasi:
\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i) \right] \]
Langkah-langkah Newton-Raphson Turunan dalam Estimasi Logistik
\[ U(\beta) = \frac{\partial \ell(\beta)}{\partial \beta} = X^\top (y - \pi) \]
\[ H(\beta) = -X^\top W X, \quad \text{dengan } W = \text{diag}(\pi_i (1 - \pi_i)) \]
\[ \beta^{(t+1)} = \beta^{(t)} + (X^\top W^{(t)} X)^{-1} X^\top (y - \pi^{(t)}) \]
Estimasi MLE dengan Newton-Raphson (Manual di R)
# Buat data frame berdasarkan tabel
data <- data.frame(
Treatment = c(rep(1, 21), rep(1, 2), # Surgery: Controlled (21), Not Controlled (2)
rep(0, 15), rep(0, 3)), # Radiation: Controlled (15), Not Controlled (3)
CancerControlled = c(rep(1, 21), rep(0, 2),
rep(1, 15), rep(0, 3))
)
# Tampilkan data
head(data)
beta_true <- c(-1, 2)
X <- cbind(1, data$Treatment)
eta <- X %*% beta_true
p <- 1 / (1 + exp(-eta))
Newton-Raphson Iterasi Manual
# Inisialisasi
beta <- matrix(0, ncol = 1, nrow = ncol(X))
tol <- 1e-6
max_iter <- 100
# Iterasi Newton-Raphson
for (i in 1:max_iter) {
eta <- X %*% beta
pi_hat <- 1 / (1 + exp(-eta))
W <- diag(as.vector(pi_hat * (1 - pi_hat)))
z <- eta + (data$CancerControlled- pi_hat) / (pi_hat * (1 - pi_hat))
beta_new <- solve(t(X) %*% W %*% X) %*% (t(X) %*% W %*% z)
if (sum(abs(beta_new - beta)) < tol) break
beta <- beta_new
}
# Hasil akhir
beta
## [,1]
## [1,] 1.6094379
## [2,] 0.7419373
• Estimasi parameter pada model regresi logistik dilakukan dengan MLE. • Newton-Raphson adalah metode numerik yang digunakan untuk memaksimalkan log-likelihood.
• Iterasi didasarkan pada turunan pertama (score) dan kedua (Hessian).
• Prosedur identik dengan IRLS (Iteratively Reweighted Least Squares) dalam implementasi GLM.
Inferensi Parameter
Tujuan Uji Wald
Untuk menguji signifikansi parameter \((
\beta_j )\) dalam model regresi logistik:
Teori Wald Test
Dari teori estimasi MLE, estimator \((
\hat{\beta}_j )\) mendekati distribusi normal:
\[ \hat{\beta}_j \sim N(\beta_j, \text{Var}(\hat{\beta}_j)) \]
Jika \(( H_0 )\) benar (yaitu \(( \beta_j = 0 )\)), maka:
\[ Z = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim N(0,1) \]
Dengan Statistik Wald:
\[ W = Z^2 = \left( \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \right)^2 \sim \chi^2_1 \]
Uji Wald Langkah demi Langkah
# Buat data frame berdasarkan tabel
data <- data.frame(
Treatment = c(rep(1, 21), rep(1, 2), # Surgery: Controlled (21), Not Controlled (2)
rep(0, 15), rep(0, 3)), # Radiation: Controlled (15), Not Controlled (3)
CancerControlled = c(rep(1, 21), rep(0, 2),
rep(1, 15), rep(0, 3))
)
log_odds <- -0.5 + 1.2 * data$Treatment
p <- 1 / (1 + exp(-log_odds))
model <- glm(CancerControlled ~ Treatment, data = data, family = binomial)
summary(model)
##
## Call:
## glm(formula = CancerControlled ~ Treatment, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.6094 0.6325 2.545 0.0109 *
## Treatment 0.7419 0.9735 0.762 0.4460
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 30.405 on 40 degrees of freedom
## Residual deviance: 29.810 on 39 degrees of freedom
## AIC: 33.81
##
## Number of Fisher Scoring iterations: 5
Langkah 1: Ambil nilai koefisien dan standard error (SE)
beta_hat <- coef(model)["Treatment"]
se_beta <- summary(model)$coefficients["Treatment", "Std. Error"]
Langkah 2: Hitung Statistik Z
Z <- beta_hat / se_beta
Z
## Treatment
## 0.7621674
Langkah 3: Hitung Statistik Wald
Wald_stat <- Z^2
Wald_stat
## Treatment
## 0.5808991
Langkah 4: Hitung p-value
p_value <- 1 - pchisq(Wald_stat, df = 1)
p_value
## Treatment
## 0.4459601
Interpretasi
• Jika p-value < 0.05, maka koefisien signifikan → variabel prediktor berpengaruh.
• Jika p-value > 0.05, maka tidak ada cukup bukti untuk menolak - \(( H_0 )\)
Kesimpulan
Uji Wald didasarkan pada rasio antara estimasi parameter dan standar error-nya. Dengan menaikkan nilai Z menjadi kuadrat (Z²), kita memperoleh distribusi Chi-Square untuk pengujian hipotesis parameter individual dalam model regresi logistik
Bandingkan model penuh dengan model tanpa prediktor
# Model null
model_null <- glm(CancerControlled ~ 1, data = data, family = binomial)
# Likelihood ratio test
anova(model_null, model, test = "Chisq")
Evaluasi Kebaikan Model
Semakin kecil AIC, semakin baik model.
AIC(model)
## [1] 33.81041
Alternatif terhadap AIC, menghukum kompleksitas model.
BIC(model)
## [1] 37.23755
• Estimasi regresi logistik dilakukan dengan MLE melalui iterasi Newton-Raphson.
• Inferensi parameter dapat dilakukan dengan uji Wald dan likelihood ratio (uji Chi-Square).
• AIC dan BIC digunakan untuk mengevaluasi kompleksitas dan kecocokan model.
Model regresi Poisson digunakan untuk memodelkan data count (jumlah kejadian) dimana variabel respons mengikuti distribusi Poisson. Estimasi dilakukan dengan Maximum Likelihood Estimation (MLE), dan inferensi dilakukan dengan uji Wald dan Likelihood Ratio Test.
Model Regresi Poisson
Distribusi Poisson:
\[ P(Y_i = y_i) = \frac{e^{-\lambda_i} \lambda_i^{y_i}}{y_i!} \]
Model regresi Poisson:
\[ \log(\lambda_i) = x_i^T \beta \] Estimasi Parameter (MLE)
Log-likelihood fungsi:
\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(\lambda_i) - \lambda_i - \log(y_i!) \right] \]
Dengan:
\[ \lambda_i = \exp(x_i^T \beta) \]
Estimasi dilakukan dengan metode iterasi (IRLS)
Estimasi parameter model regresi Poisson menggunakan pendekatan
Maximum Likelihood Estimation (MLE) dengan metode
Iteratively Reweighted Least Squares (IRLS) secara
manual, tanpa menggunakan glm().
Tahap 1: Definisikan Model Regresi Poisson
\[ \log(\lambda_i) = x_i^T \beta \quad \Rightarrow \quad \lambda_i = \exp(x_i^T \beta) \]
Tahap 2: Mencari Log-likelihood yang dimaksimumkan
\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(\lambda_i) - \lambda_i - \log(y_i!) \right] \] Tahap 3: Formulasi iteratif:
\[ \beta^{(t+1)} = \left( \mathbf{X}^T \mathbf{W}^{(t)} \mathbf{X} \right)^{-1} \mathbf{X}^T \mathbf{W}^{(t)} \mathbf{z}^{(t)} \]
Dengan:
dan
\[ \eta_i = \log(\lambda_i) = x_i^T \beta \] Simulasi Data
# Buat data frame berdasarkan tabel
data <- data.frame(
Treatment = c(rep(1, 21), rep(1, 2), # Surgery: Controlled (21), Not Controlled (2)
rep(0, 15), rep(0, 3)), # Radiation: Controlled (15), Not Controlled (3)
CancerControlled = c(rep(1, 21), rep(0, 2),
rep(1, 15), rep(0, 3))
)
X <- cbind(1, data$Treatment) # Tambah intercept
beta_true <- c(0.5, 0.8)
eta <- X %*% beta_true
lambda <- exp(eta)
IRLS Manual Step-by-Step
# Inisialisasi
beta <- c(0, 0)
tol <- 1e-6
max_iter <- 100
for (i in 1:max_iter) {
eta <- X %*% beta
lambda <- exp(eta)
W <- diag(as.numeric(lambda))
z <- eta + (data$CancerControlled - lambda) / lambda
beta_new <- solve(t(X) %*% W %*% X) %*% t(X) %*% W %*% z
if (sum(abs(beta_new - beta)) < tol) {
cat("Konvergen pada iterasi ke-", i, "\n")
break
}
beta <- beta_new
}
## Konvergen pada iterasi ke- 4
beta # hasil estimasi
## [,1]
## [1,] -0.18232155
## [2,] 0.09134977
Perbandingan dengan glm
model_glm <- glm(data$CancerControlled ~ data$Treatment, family = poisson())
summary(model_glm)
##
## Call:
## glm(formula = data$CancerControlled ~ data$Treatment, family = poisson())
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.18232 0.25819 -0.706 0.480
## data$Treatment 0.09135 0.33806 0.270 0.787
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 9.3638 on 40 degrees of freedom
## Residual deviance: 9.2905 on 39 degrees of freedom
## AIC: 85.29
##
## Number of Fisher Scoring iterations: 4
• IRLS memberikan cara iteratif untuk menghitung estimasi MLE dalam regresi Poisson.
• Hasil manual IRLS sangat mendekati hasil glm() dari R.
• Metode ini memberikan pemahaman mendalam atas mekanisme di balik fungsi glm().
Pengujian hipotesis Uji Wald
Untuk menguji H0: = 0
# Koefisien dan standar error
coef_val <- coef(model)[2]
se_val <- summary(model)$coefficients[2, 2]
wald_z <- coef_val / se_val
wald_chisq <- wald_z^2
p_value <- 1 - pchisq(wald_chisq, df = 1)
cat("Z:", wald_z, "\nChi-Square:", wald_chisq, "\np-value:", p_value)
## Z: 0.7621674
## Chi-Square: 0.5808991
## p-value: 0.4459601
Uji Likelihood Ratio (Chi-Square)
model_null <- glm(data$CancerControlled ~ 1, family = poisson(), data = data)
anova(model_null, model, test = "Chisq")
## Warning in anova.glmlist(c(list(object), dotargs), dispersion = dispersion, :
## models with response '"CancerControlled"' removed because response differs from
## model 1
Evaluasi Model (AIC & BIC)
AIC(model)
## [1] 33.81041
BIC(model)
## [1] 37.23755
• Estimasi parameter regresi Poisson dilakukan menggunakan MLE
• Uji Wald dan Likelihood Ratio digunakan untuk pengujian hipotesis
• AIC dan BIC digunakan untuk evaluasi dan pemilihan model terbaik
Regresi logistik digunakan untuk menganalisis hubungan antara satu variabel respon biner dengan satu atau lebih variabel prediktor. Prediktor dapat berupa:
Nominal: Tidak memiliki urutan, contoh: jenis pelatihan (online/offline).
Ordinal: Memiliki urutan, contoh: frekuensi latihan (jarang - sering).
Rasio: Skala numerik dengan nol mutlak, contoh: nilai ujian praktik.
Sebuah lembaga pelatihan ingin mengetahui faktor-faktor yang memengaruhi kemungkinan kelulusan peserta ujian sertifikasi. Tiga variabel dipertimbangkan:
Jenis pelatihan (Online / Offline)
Frekuensi latihan mandiri (Rarely, Sometimes, Often, Always)
Nilai ujian praktik (0-100)
library(dplyr)
library(ggplot2)
library(broom)
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rowsset.seed(123)
n <- 500
training_type <- sample(c("Online", "Offline"), n, replace = TRUE)
practice_freq <- sample(c("Rarely", "Sometimes", "Often", "Always"),
size = n, replace = TRUE,
prob = c(0.2, 0.3, 0.3, 0.2))
practice_freq <- factor(practice_freq, levels = c("Rarely", "Sometimes", "Often", "Always"), ordered = TRUE)
practical_score <- round(rnorm(n, mean = 75, sd = 12), 1)
practical_score <- pmin(pmax(practical_score, 0), 100)
logit_p <- -1.8 +
0.5 * (training_type == "Offline") +
0.7 * as.numeric(practice_freq) +
0.06 * practical_score
p <- 1 / (1 + exp(-logit_p))
passed <- rbinom(n, 1, p)
library(tibble)
sim_data <- tibble(passed, training_type, practice_freq, practical_score)
head(sim_data)
sim_data_nominal <- sim_data %>%
mutate(practice_freq = factor(practice_freq, levels = c("Rarely", "Sometimes", "Often", "Always")))
options(contrasts = c("contr.treatment", "contr.treatment"))
model_nominal <- glm(passed ~ training_type + practice_freq + practical_score,
data = sim_data_nominal, family = binomial)
summary(model_nominal)
##
## Call:
## glm(formula = passed ~ training_type + practice_freq + practical_score,
## family = binomial, data = sim_data_nominal)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.71055 2.23981 1.210 0.2262
## training_typeOnline -2.15725 1.06493 -2.026 0.0428 *
## practice_freqSometimes -0.23778 0.78829 -0.302 0.7629
## practice_freqOften 0.66534 0.92967 0.716 0.4742
## practice_freqAlways 0.73760 1.17327 0.629 0.5296
## practical_score 0.03549 0.02801 1.267 0.2052
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 98.039 on 499 degrees of freedom
## Residual deviance: 88.110 on 494 degrees of freedom
## AIC: 100.11
##
## Number of Fisher Scoring iterations: 8
Keterangan : baseline dari model ini adalah training type offline dan practice rarely
Intercept (2.71055):
- Training Type: "Offline" (baseline)
- Practice Frequency: "Rarely" (baseline)
- Practical Score: 0
training_typeOnline (-2.15725):
Peserta dengan pelatihan online memiliki log-odds kelulusan lebih rendah sebesar 2.15725 dibandingkan peserta pelatihan offline.
Efek ini signifikan secara statistik (p = 0.0428), yang menunjukkan bahwa jenis pelatihan memiliki pengaruh terhadap peluang kelulusan.
practice_freqSometimes (-0.23778):
practice_freqOften (0.66534):
practice_freqAlways (0.73760):
practical_score (0.03549):
sim_data_numeric <- sim_data %>%
mutate(practice_numeric = case_when(
practice_freq == "Rarely" ~ 1,
practice_freq == "Sometimes" ~ 2,
practice_freq == "Often" ~ 3,
practice_freq == "Always" ~ 4
))
model_numeric <- glm(passed ~ training_type + practice_numeric + practical_score,
family = binomial, data = sim_data_numeric)
summary(model_numeric)
##
## Call:
## glm(formula = passed ~ training_type + practice_numeric + practical_score,
## family = binomial, data = sim_data_numeric)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.29027 2.31649 0.989 0.3228
## training_typeOnline -2.10258 1.06180 -1.980 0.0477 *
## practice_numeric 0.30335 0.32169 0.943 0.3457
## practical_score 0.03378 0.02794 1.209 0.2267
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 98.039 on 499 degrees of freedom
## Residual deviance: 88.766 on 496 degrees of freedom
## AIC: 96.766
##
## Number of Fisher Scoring iterations: 8
Keterangan : model ini membuat dari ordinal menjadi bentuk angka 1-4 untuk masing-masing tingkatan
Intercept (2.29027):
- Peserta dengan training_type = Offline,
- practice_numeric = 0 (asumsi setara dengan kategori "Rarely"),
- practical_score = 0.
training_typeOnline (-2.10258):
Peserta pelatihan online memiliki log-odds kelulusan lebih rendah 2.10258 poin dibandingkan dengan pelatihan offline.
Efek ini signifikan secara statistik (p = 0.0477).
practice_numeric (0.30335):
Setiap kenaikan 1 tingkat dalam frekuensi latihan (misal dari “Rarely” ke “Sometimes”, atau dari “Sometimes” ke “Often”) meningkatkan log-odds kelulusan sebesar 0.30335.
Namun, efek ini tidak signifikan (p = 0.3457). Sehingga setiap kenaikan 1 tingkat frekuensi latihan tidak membuat kenaikan yang signifikan untuk peluang lulus
practical_score (0.03378):
Setiap kenaikan 1 poin skor praktik meningkatkan log-odds kelulusan sebesar 0.03378.
Tapi efek ini juga tidak signifikan (p = 0.2267).
list(AIC_Nominal = AIC(model_nominal),
AIC_Numeric = AIC(model_numeric))
## $AIC_Nominal
## [1] 100.1095
##
## $AIC_Numeric
## [1] 96.76567
nullmod <- glm(passed ~ 1, data = sim_data, family = binomial)
r2_nominal <- 1 - (logLik(model_nominal)/logLik(nullmod))
r2_numeric <- 1 - (logLik(model_numeric)/logLik(nullmod))
list(McFadden_R2_Nominal = r2_nominal,
McFadden_R2_Numeric = r2_numeric)
## $McFadden_R2_Nominal
## 'log Lik.' 0.1012817 (df=6)
##
## $McFadden_R2_Numeric
## 'log Lik.' 0.09458919 (df=4)
Keterangan :
Dari hasil pengujian dengan Goodness of Fit, didapatkan bahwa nilai AIC lebih kecil pada model numeric sehingga model ini lebih baik, sedangkan dengan McFadden didapatkan bahwa yang lebih baik adalah model yang ordinal. Namun akan diambil yang model numeric karena model ini memiliki model yang lebih efisien dan nilai pada McFadden tidak berbeda jauh antara model ordinal dan model numeric (sekitar 1%)
sim_data_nominal <- sim_data_nominal %>%
mutate(predicted_nominal = predict(model_nominal, type = "response"))
sim_data_numeric <- sim_data_numeric %>%
mutate(predicted_numeric = predict(model_numeric, type = "response"))
sim_data_nominal %>%
ggplot(aes(x = practical_score, y = predicted_nominal, color = practice_freq)) +
geom_point(alpha = 0.6) +
labs(title = "Probabilitas Lulus (Latihan Sebagai Nominal)",
x = "Nilai Ujian Praktik",
y = "Probabilitas Prediksi") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
sim_data_numeric %>%
mutate(practice_numeric = factor(practice_numeric)) %>%
ggplot(aes(x = practical_score, y = predicted_numeric, color = practice_numeric)) +
geom_point(alpha = 0.6) +
labs(title = "Probabilitas Lulus (Latihan Sebagai Numeric)",
x = "Nilai Ujian Praktik",
y = "Probabilitas Prediksi") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
Koefisien model ordinal :
| term | estimate | std.error | statistic | p.value | conf.low | conf.high |
|---|---|---|---|---|---|---|
| (Intercept) | 2.711 | 2.240 | 1.210 | 0.226 | -1.532 | 7.392 |
| training_typeOnline | -2.157 | 1.065 | -2.026 | 0.043 | -5.083 | -0.456 |
| practice_freqSometimes | -0.238 | 0.788 | -0.302 | 0.763 | -1.904 | 1.318 |
| practice_freqOften | 0.665 | 0.930 | 0.716 | 0.474 | -1.163 | 2.717 |
| practice_freqAlways | 0.738 | 1.173 | 0.629 | 0.530 | -1.359 | 3.764 |
| practical_score | 0.035 | 0.028 | 1.267 | 0.205 | -0.019 | 0.092 |
Koefisien model numeric :
| term | estimate | std.error | statistic | p.value | conf.low | conf.high |
|---|---|---|---|---|---|---|
| (Intercept) | 2.290 | 2.316 | 0.989 | 0.323 | -2.133 | 7.080 |
| training_typeOnline | -2.103 | 1.062 | -1.980 | 0.048 | -5.025 | -0.409 |
| practice_numeric | 0.303 | 0.322 | 0.943 | 0.346 | -0.313 | 0.973 |
| practical_score | 0.034 | 0.028 | 1.209 | 0.227 | -0.020 | 0.091 |
Training : training type offline memiliki peluang yang lebih tinggi dibandingkan dengan online
Frekuensi latihan mandiri :
jika dianggap dummy : tiap frekuensi latihan dibandingkan dengan Rarely
jika dianggap numeric : tiap kenaikan satu frekuensi latihan meningkatkan peluang lulus
Nilai ujian praktik : nilai ujian lebih tinggi, maka peluang lulus semakin tinggi
Catatan : data merupakan data dummy, hasil dari data asli akan berbeda dengan data ini
Dalam analisis regresi logistik, pemilihan model sangat krusial untuk mendapatkan model yang baik dalam memprediksi probabilitas kejadian suatu peristiwa (respon biner). Dua pendekatan utama dalam membangun model adalah pendekatan Confirmatory dan Exploratory
1. Confirmatory (Pendekatan Konfirmator)
Pendekatan ini digunakan ketika peneliti telah memiliki teori atau hipotesis yang jelas mengenai efek atau hubungan antara variabel prediktor dan respon.
Ciri-ciri:
• Model dibangun berdasarkan teori atau hasil penelitian sebelumnya.
• Tujuan utamanya adalah menguji apakah efek tersebut benar-benar signifkan, bukan sekadar mencari model terbaik.
• Peneliti biasanya menyusun model penuh terlebih dahulu, lalu menguji apakah penambahan atau pengurangan suatu efek (misalnya, interaksi) memberikan peningkatan model secara signifkan.
• Uji signifkansi dilakukan dengan membandingkan model dengan efek tertentu dan model tanpa efek tersebut, misalnya dengan Likelihood Ratio Test.
Contoh penggunaan: Misalnya, teori menyatakan bahwa faktor x1 dan x2 mempengaruhi probabilitas seseorang membeli produk. Maka model logistik dibangun langsung dengan x1 dan x2, lalu diuji apakah kontribusi x2 benar-benar signifikan.
2. Exploratory (Pendekatan Eksploratori)
Pendekatan ini digunakan ketika peneliti belum memiliki teori yang pasti atau ingin mengeksplorasi hubungan potensial antar variabel.
Ciri-ciri:
• Model dibangun secara bertahap dengan tujuan menemukan kombinasi prediktor terbaik.
• Pemilihan variabel dilakukan berdasarkan kriteria statistik, seperti AIC, deviance, atau log-likelihood. Proses seleksi dilakukan melalui:
• Forward Selection: Mulai dari model kosong, satu per satu variabel dimasukkan jika signifkan.
• Backward Elimination: Mulai dari model penuh, variabel yang tidak signifkan dikeluarkan.
• Stepwise Selection: Gabungan dari keduanya, variabel dapat masuk dan keluar secara dinamis.
Tujuan:
Menemukan model yang parsimonious, yaitu cukup sederhana namun memiliki performa prediksi yang baik. Pemilihan antara pendekatan Confrmatory dan Exploratory bergantung pada tujuan penelitian. Jika ingin menguji hipotesis tertentu, gunakan pendekatan Confrmatory. Jika ingin menemukan model terbaik berdasarkan data, gunakan pendekatan Exploratory. Dalam praktiknya, kedua pendekatan ini sering digunakan secara komplementer: teori digunakan sebagai dasar, dan seleksi eksploratori dilakukan untuk menyempurnakan model.
Simulasi Data Sebuah lembaga keuangan mikro ingin memprediksi risiko gagal bayar pinjaman (y) berdasarkan data calon peminjam, yaitu pendapatan bulanan (x1), status kepemilikan kartu kredit (x2), dan jumlah pinjaman aktif saat ini (x3). Dengan memanfaatkan data historis dan model klasifikasi biner, lembaga berharap dapat mengidentifikasi peminjam berisiko tinggi sejak awal, sehingga dapat mengurangi kerugian dan meningkatkan efektivitas penyaluran kredit.
library(knitr)
library(dplyr)
library(ggplot2)
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(caret)
## Loading required package: lattice
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(DescTools)
##
## Attaching package: 'DescTools'
## The following objects are masked from 'package:caret':
##
## MAE, RMSE
set.seed(123)
n <- 150
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -0.6 + 1.4 * x1 - 0.3 * x2 + 0.8 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
df <- data.frame(y = as.factor(y), x1, x2, x3)
head(df)
Pemilihan Model
Model Full
model_full <- glm(y ~ x1 + x2 + x3, data = df, family = binomial)
summary(model_full)
##
## Call:
## glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.6865 0.2942 -2.333 0.0196 *
## x1 1.8343 0.3549 5.168 2.36e-07 ***
## x2 -1.1866 0.4793 -2.476 0.0133 *
## x3 1.2334 0.2928 4.212 2.53e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 188.06 on 149 degrees of freedom
## Residual deviance: 127.53 on 146 degrees of freedom
## AIC: 135.53
##
## Number of Fisher Scoring iterations: 5
null_model <- glm(y ~ 1, data = df, family = binomial)
step_forward <- step(null_model, direction = "forward", scope = formula(model_full), trace = FALSE)
step_backward <- step(model_full, direction = "backward", trace = FALSE)
step_both <- step(null_model, direction = "both", scope = formula(model_full), trace = FALSE)
AIC(model_full, step_forward, step_backward, step_both)
pred_prob <- predict(step_both, type = "response")
roc_obj <- roc(df$y, pred_prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, main = "Kurva ROC", col = "purple")
auc(roc_obj)
## Area under the curve: 0.8556
PseudoR2(step_both, which = c("CoxSnell", "Nagelkerke", "McFadden"))
## CoxSnell Nagelkerke McFadden
## 0.3320686 0.4647147 0.3218930
pred_class <- ifelse(pred_prob >= 0.5, 1, 0)
conf_matrix <- confusionMatrix(factor(pred_class), df$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 88 19
## 1 14 29
##
## Accuracy : 0.78
## 95% CI : (0.7051, 0.8435)
## No Information Rate : 0.68
## P-Value [Acc > NIR] : 0.004537
##
## Kappa : 0.4802
##
## Mcnemar's Test P-Value : 0.486234
##
## Sensitivity : 0.6042
## Specificity : 0.8627
## Pos Pred Value : 0.6744
## Neg Pred Value : 0.8224
## Prevalence : 0.3200
## Detection Rate : 0.1933
## Detection Prevalence : 0.2867
## Balanced Accuracy : 0.7335
##
## 'Positive' Class : 1
##
conf_matrix$byClass[c("Sensitivity", "Specificity")]
## Sensitivity Specificity
## 0.6041667 0.8627451
library(MASS)
library(broom)
library(DescTools)
Simulasi Data Sebuah lembaga keuangan mikro ingin memprediksi risiko gagal bayar pinjaman (y) berdasarkan data calon peminjam, yaitu pendapatan bulanan (x1), status kepemilikan kartu kredit (x2), dan jumlah pinjaman aktif saat ini (x3). Dengan memanfaatkan data historis dan model klasifikasi biner, lembaga berharap dapat mengidentifikasi peminjam berisiko tinggi sejak awal, sehingga dapat mengurangi kerugian dan meningkatkan efektivitas penyaluran kredit.
set.seed(123)
n <- 150
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -1.2 + 1.6 * x1 - 0.4 * x2 + 0.5 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)
head(data)
Pembuatan Model
model1 <- glm(y ~ x1, data = data, family = binomial)
model2 <- glm(y ~ x1 + x2, data = data, family = binomial)
model3 <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
Perbandingan AIC dan Deviance
model_comp <- data.frame(
Model = c("Model 1", "Model 2", "Model 3"),
AIC = c(AIC(model1), AIC(model2), AIC(model3)),
Deviance = c(deviance(model1), deviance(model2), deviance(model3))
)
model_comp
anova(model1, model2, test = "LRT")
anova(model2, model3, test = "LRT")
Model yang kompleks sering memiliki AIC dan deviance yang lebih kecil, namun Model sederhana lebih mudah diinterpretasikan.
Jika penurunan AIC tidak signifikan, pilih model lebih sederhana.
Parsimony mencegah overfitting.
Rumus dan Penjelasan
Rumus AIC
\[ \text{AIC} = -2(\log L - k) = -2 \log L + 2k \]
Penjelasan:
AIC adalah ukuran untuk menilai model berdasarkan kombinasi antara
goodness-of-fit (melalui log-likelihood) dan kompleksitas
(melalui jumlah parameter \(k\)).
Semakin kecil AIC, semakin baik model tersebut secara keseluruhan karena
AIC menghukum model yang terlalu kompleks meskipun memiliki likelihood
tinggi.
Rumus Deviance
\[ D = -2 \left[\log L(\text{model}) - \log L(\text{model saturasi})\right] \]
Penjelasan: Deviance mengukur seberapa jauh model saat ini dibandingkan dengan model sempurna (model saturasi). Nilai deviance yang kecil menu
Rumus Likelihood-Ratio
\[ G^2 = -2 (\log L_0 - \log L_1) \]
Penjelasan:
Statistik Likelihood Ratio digunakan untuk menguji apakah penambahan
variabel dalam model secara signifikan meningkatkan kecocokan model.
Jika \(G^2\) besar dan p-value
kecil, maka model kompleks lebih baik dari model sederhana secara
statistik.
pred_prob <- predict(model3, type = "response")
pred_class <- factor(ifelse(pred_prob >= 0.5, 1, 0))
conf_matrix <- confusionMatrix(pred_class, data$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 112 16
## 1 4 18
##
## Accuracy : 0.8667
## 95% CI : (0.8016, 0.9166)
## No Information Rate : 0.7733
## P-Value [Acc > NIR] : 0.00283
##
## Kappa : 0.5655
##
## Mcnemar's Test P-Value : 0.01391
##
## Sensitivity : 0.5294
## Specificity : 0.9655
## Pos Pred Value : 0.8182
## Neg Pred Value : 0.8750
## Prevalence : 0.2267
## Detection Rate : 0.1200
## Detection Prevalence : 0.1467
## Balanced Accuracy : 0.7475
##
## 'Positive' Class : 1
##
Sensitivitas: Kemampuan model mendeteksi kelas positif secara benar (True Positive Rate)
\[ \text{Sensitivity} = \frac{\text{TP}}{\text{TP} + \text{FN}} \]
Spesifisitas: Kemampuan model mendeteksi kelas negatif secara benar (True Negative Rate)
\[ \text{Specificity} = \frac{\text{TN}}{\text{TN} + \text{FP}} \]
conf_matrix$byClass[c("Sensitivity", "Specificity")]
## Sensitivity Specificity
## 0.5294118 0.9655172Kesimpulan
• Deviance yang kecil menunjukkan kecocokan model yang lebih baik.
• AIC yang rendah menunjukkan keseimbangan antara kecocokan dan kompleksitas.
• Likelihood Ratio Test mengevaluasi apakah model kompleks secara signifkan lebih baik.
• Tabel klasifkasi membantu menilai kinerja prediksi aktual vs prediksi model.
• Prinsip Parsimony mengutamakan model sederhana jika performanya mirip.
Kurva ROC adalah alat visual yang digunakan untuk mengevaluasi performa model klasifkasi biner. Kurva ini menunjukkan trade-of antara True Positive Rate (Sensitivity) dan False Positive Rate (1 - Specificity) pada berbagai threshold klasifkasi.
• Sumbu Y: Sensitivity = True Positive Rate = TP / (TP + FN)
• Sumbu X: 1 - Specifcity = False Positive Rate = FP / (FP + TN)
• Garis diagonal (dari kiri bawah ke kanan atas) menunjukkan performa acak (random guess).
• Kurva yang mendekati pojok kiri atas menunjukkan performa klasifkasi yang lebih baik.
Saat cut-off menurun, model mengklasifkasikan lebih banyak pengamatan sebagai positif:
• Sensitivitas naik
• Spesifisitas turun
Saat cut-off naik, model menjadi lebih konservatif:
• Sensitivitas turun
• Spesifisitas naik
Kurva ideal memiliki bentuk:
• Naik tajam secara vertikal hingga mencapai sensitivitas = 1
• Lalu bergerak secara horizontal menuju 1 - specifcity = 1
• Area under the curve (AUC) mendekati 1
• AUC = 0.5: model tidak lebih baik dari tebak acak
• AUC > 0.7: model cukup baik
• AUC > 0.9: model sangat baik
• AUC dikenal juga sebagai concordance index, yaitu probabilitas bahwa model memberikan nilai skor probabilitas yang lebih tinggi untuk kasus positif daripada kasus negatif.
• Untuk membandingkan performa beberapa model klasifkasi
• Untuk memilih threshold (cut-of) optimal berdasarkan kebutuhan aplikasi (misalnya: lebih penting menghindari false negative atau false positive)
library(pROC)
set.seed(123)
x1 <- rnorm(150)
x2 <- rbinom(150, 1, 0.5)
x3 <- rnorm(15)
lin_pred <- -1.1 + 1.6 * x1 - 0.8 * x2 + 0.5 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(150, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
pred <- predict(model, type = "response")
roc_obj <- roc(data$y, pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj)
auc(roc_obj)
## Area under the curve: 0.8355
Untuk memilih threshold terbaik, kita bisa mengevaluasi sensitivitas dan spesifsitas pada berbagai cut-off.
thresholds <- seq(0.1, 0.9, by = 0.05)
results <- data.frame(Threshold = thresholds)
true_y <- factor(data$y, levels = c(0, 1))
results$Sensitivity <- sapply(thresholds, function(t) {
pred_class <- factor(ifelse(pred >= t, 1, 0), levels = c(0, 1))
cm <- table(Pred = pred_class, Obs = true_y)
TP <- ifelse("1" %in% rownames(cm) && "1" %in% colnames(cm), cm["1", "1"], 0)
FN <- ifelse("0" %in% rownames(cm) && "1" %in% colnames(cm), cm["0", "1"], 0)
if ((TP + FN) == 0) return(NA)
TP / (TP + FN)
})
results$Specificity <- sapply(thresholds, function(t) {
pred_class <- factor(ifelse(pred >= t, 1, 0), levels = c(0, 1))
cm <- table(Pred = pred_class, Obs = true_y)
TN <- ifelse("0" %in% rownames(cm) && "0" %in% colnames(cm), cm["0", "0"], 0)
FP <- ifelse("1" %in% rownames(cm) && "0" %in% colnames(cm), cm["1", "0"], 0)
if ((TN + FP) == 0) return(NA)
TN / (TN + FP)
})
print(results)
## Threshold Sensitivity Specificity
## 1 0.10 0.93939394 0.5128205
## 2 0.15 0.87878788 0.6666667
## 3 0.20 0.87878788 0.7094017
## 4 0.25 0.66666667 0.7863248
## 5 0.30 0.63636364 0.8205128
## 6 0.35 0.54545455 0.8717949
## 7 0.40 0.51515152 0.8888889
## 8 0.45 0.42424242 0.9145299
## 9 0.50 0.36363636 0.9487179
## 10 0.55 0.33333333 0.9487179
## 11 0.60 0.21212121 0.9658120
## 12 0.65 0.21212121 0.9829060
## 13 0.70 0.18181818 0.9829060
## 14 0.75 0.15151515 0.9914530
## 15 0.80 0.15151515 0.9914530
## 16 0.85 0.09090909 1.0000000
## 17 0.90 0.00000000 1.0000000
Cut-off optimal bisa dipilih berdasarkan:
Maksimum dari Sensitivity + Specificity
Atau mempertimbangkan trade-of sesuai tujuan aplikasi (misalnya: jika False Negative harus dihindari, maka prioritaskan sensitivitas tinggi)
ROC cocok saat proporsi kelas seimbang
Untuk data dengan kelas tidak seimbang, precision-recall curve bisa lebih informatif
Penjelasan Precision-Recall Curve
Kurva Precision-Recall (PR) adalah alat evaluasi performa model klasifikasi, khususnya sangat berguna saat bekerja dengan data yang tidak seimbang (class imbalance).
1. Definisi
Precision (Presisi): Proporsi prediksi positif yang benar-benar positif
\[ \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} \]
Recall (Sensitivitas): Proporsi kasus positif yang berhasil diprediksi positif
\[ \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} \]
2. Interpretasi
3. Area Under PR Curve
4. PR Curve vs ROC Curve
| Aspek | ROC Curve | Precision-Recall Curve |
|---|---|---|
| Fokus | Semua kelas | Kelas positif saja |
| Kuat di | Data seimbang | Data tidak seimbang |
| Sumbu Y | Sensitivitas (Recall) | Precision |
| Sumbu X | 1 - Spesifisitas | Recall |
5. Visualisasi PR Curve di R
library(PRROC)
## Loading required package: rlang
set.seed(123)
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
x3 <- rnorm(200)
lin_pred <- -1 + 1.5 * x1 - 0.7 * x2 + 0.6 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(200, 1, p)
data <- data.frame(y = y, x1, x2, x3)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
prob <- predict(model, type = "response")
pr <- pr.curve(scores.class0 = prob[data$y == 1],
scores.class1 = prob[data$y == 0],
curve = TRUE)
plot(pr)
6. Catatan
• PR Curve sangat informatif untuk aplikasi seperti deteksi penipuan atau diagnosis penyakit langka.
• Gunakan PR Curve saat:
– Kelas positif jauh lebih jarang daripada kelas negatif
– Tujuan aplikasi lebih mementingkan presisi terhadap kelas minoritas
Simulasi Data
Misalkan kita ingin memprediksi apakah seorang mahasiswa akan lulus ujian akhir atau tidak, berdasarkan dua variabel prediktor:
motivasi: skor motivasi belajar (skala 0–10)belajar: rata-rata jam belajar per hariset.seed(42)
n <- 300
motivasi <- runif(n, 0, 10)
belajar <- rnorm(n, mean = 3, sd = 1)
belajar[belajar < 0] <- 0
lin_pred <- -2 + 0.5 * motivasi + 0.8 * belajar
p <- 1 / (1 + exp(-lin_pred))
lulus <- rbinom(n, 1, p)
data <- data.frame(lulus = as.factor(lulus), motivasi, belajar)
Model Logistik dan Null Model
model <- glm(lulus ~ motivasi + belajar, data = data, family = binomial)
model_null <- glm(lulus ~ 1, data = data, family = binomial)
Rumus Likelihood:
\[ R^2_{\text{Cox and Snell}} = 1 - \left( \frac{L_0}{L_M} \right)^{2/n} \]
\[ R^2_{\text{McFadden}} = 1 - \frac{\log L_M}{\log L_0} \]
Dengan:
Perhitungan Manual R-squared
logL0 <- logLik(model_null)
logLM <- logLik(model)
L0 <- exp(logL0)
LM <- exp(logLM)
n <- nobs(model)
cox_snell <- 1 - (L0 / LM)^(2 / n)
mcfadden <- 1 - (as.numeric(logLM) / as.numeric(logL0))
r2 <- data.frame(
R2_Cox_Snell = cox_snell,
R2_McFadden = mcfadden
)
r2
Perhitungan Otomatis dengan Package Tambahan
Menggunakan pscl
if (!require(pscl)) install.packages("pscl"); library(pscl)
## Loading required package: pscl
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
pR2(model)
## fitting null model for pseudo-r2
## llh llhNull G2 McFadden r2ML r2CU
## -86.7357454 -117.8023402 62.1331895 0.2637180 0.1870703 0.3438543
Menggunakan DescTools
if (!require(DescTools)) install.packages("DescTools"); library(DescTools)
PseudoR2(model, which = "all")
## McFadden McFaddenAdj CoxSnell Nagelkerke AldrichNelson
## 0.2637180 0.2382516 0.1870703 0.3438543 0.1715755
## VeallZimmermann Efron McKelveyZavoina Tjur AIC
## 0.3900459 0.2427183 0.5084978 0.2367773 179.4714909
## BIC logLik logLik0 G2
## 190.5828383 -86.7357454 -117.8023402 62.1331895
Interpretasi
Distribusi multinomial adalah perluasan dari distribusi binomial untuk lebih dari dua kategori.
Jika \(X_1, X_2, \ldots, X_k\) menyatakan banyaknya kejadian dalam masing-masing dari \(k\) kategori, maka:
\[ P(X_1 = x_1, \ldots, X_k = x_k) = \frac{n!}{x_1! x_2! \ldots x_k!} p_1^{x_1} p_2^{x_2} \ldots p_k^{x_k} \]
dengan \(\sum_{i=1}^k x_i = n\) dan \(\sum_{i=1}^k p_i = 1\).
Sebuah survei dilakukan terhadap 20 orang yang diminta memilih satu dari tiga jenis warna favorit: Merah (M), Hitam (H), dan Putih (P).
Hasil survei:
Probabilitas teoretik preferensi:
Pertanyaannya: Berapa peluang bahwa dalam 20 orang akan ada 6 yang memilih Merah, 8 memilih Hitam dan 6 memilih Putih?
Rumus Distribusi Multinomial
Distribusi peluang multinomial:
\[ P(X_1 = x_1, \ldots, X_k = x_k) = \frac{n!}{x_1! x_2! \ldots x_k!} p_1^{x_1} p_2^{x_2} \ldots p_k^{x_k} \]
Dengan:
Perhitungan Manual di R
n <- 20
x <- c(6, 8, 6)
p <- c(0.3, 0.4, 0.3)
# Hitung komponen-koefisien
faktorial_total <- factorial(n)
faktorial_x <- prod(factorial(x))
koefisien <- faktorial_total / faktorial_x
# Hitung peluang
peluang <- koefisien * prod(p^x)
peluang
## [1] 0.0405391
Probabilitas bahwa 6 orang memilih Merah, 8 Hitam, dan 6 Putih (dengan proporsi preferensi 0.3, 0.4, dan 0.3) adalah 0.0405391. Distribusi multinomial digunakan untuk menghitung peluang dalam percobaan dengan beberapa kategori hasil. Rumus dasarnya merupakan generalisasi dari binomial untuk lebih dari dua kategori.
Model ini digunakan untuk memodelkan hubungan antara satu variabel respon kategorik (>2 kategori) dan satu atau lebih variabel prediktor.
Misalkan \(Y\) memiliki \(K\) kategori, dan kita pilih referensi (baseline) kategori \(K\), maka model logit untuk kategori \(j\) adalah:
\[ \log \left( \frac{P(Y = j)}{P(Y = K)} \right) = \beta_{0} + \beta_{1j}x_{1} + \cdots + \beta_{pj}x_{p} \]
untuk \(j = 1, 2, \ldots, K - 1\).
Baseline-category logit model adalah model regresi logistik untuk variabel respon kategorik dengan lebih dari dua kategori (nominal). Model ini menggunakan satu kategori sebagai acuan (baseline) dan membandingkan kategori lainnya terhadap baseline tersebut dalam bentuk logit:
\[ \log \left( \frac{\pi_j}{\pi_c} \right), \quad j = 1, \ldots, c - 1 \]
dengan:
Maka, terdapat sebanyak \((c - 1)\) fungsi logit.
Catatan: Kategori baseline bisa ditentukan secara eksplisit, tetapi default di R adalah kategori terakhir.
Model Regresi
Jika terdapat satu prediktor \(x\), maka bentuk umum model logit-nya adalah:
\[ \log \left( \frac{\pi_j}{\pi_c} \right) = \alpha_j + \beta_j x, \quad j = 1, \ldots, c - 1 \]
Contoh Kasus: 3 Kategori Respon
Misalkan respon \(Y\) memiliki tiga kategori: \(Y \in \{1, 2, 3\}\), dan kita gunakan kategori ke-3 sebagai baseline. Maka:
\[ \log \left( \frac{\pi_1}{\pi_3} \right) = \alpha_1 + \beta_1 x \]
\[ \log \left( \frac{\pi_2}{\pi_3} \right) = \alpha_2 + \beta_2 x \]
Terdapat dua model logit, satu untuk perbandingan kategori 1 dengan 3, dan satu lagi untuk kategori 2 dengan 3.
Relasi Antar Kategori
Jika ingin menghitung logit antara kategori 1 dan 2:
\[ \log \left( \frac{\pi_1}{\pi_2} \right) = \log \left( \frac{\pi_1 / \pi_3}{\pi_2 / \pi_3} \right) = \log \left( \frac{\pi_1}{\pi_3} \right) - \log \left( \frac{\pi_2}{\pi_3} \right) \] \[ = (\alpha_1 + \beta_1 x) - (\alpha_2 + \beta_2 x) = (\alpha_1 - \alpha_2) + (\beta_1 - \beta_2)x \] Model Baseline-category Logit:
multinom() dari
package nnet, dan kategori baseline bisa ditentukan
dengan relevel().Estimasi dilakukan menggunakan metode maximum likelihood dengan algoritma iteratif seperti Newton-Raphson.
Log-likelihood:
\[ l(\beta) = \sum_{i=1}^n \sum_{j=1}^K y_{ij} \log (\pi_{ij}) \]
dengan \(\pi_{ij} = P(Y = j | x_i)\) dan \(y_{ij} = 1\) jika \(Y_i = j\), 0 jika tidak.
Sebuah perusahaan logistik ingin memahami faktor-faktor yang mempengaruhi preferensi kendaraan yang digunakan oleh karyawan: Mobil Pribadi, Transportasi Umum, atau Sepeda Motor.
Perusahaan melakukan survei terhadap 150 karyawan dan mengumpulkan data berikut:
• Kendaraan: Kendaraan yang dipilih (Mobil Pribadi, Transportasi Umum, Sepeda Motor)
• Age: Usia karyawan
• Status : Status pernikahan karyawan (Lajang,nikah,cerai)
• Jarak Tempuh: Waktu tempuh dari rumah ke kantor (dalam km)
Tujuannya adalah untuk mengetahui bagaimana usia, status, dan jarak tempuh memengaruhi pilihan kendaraan.
set.seed(123)
n <- 300
Status <- sample(c("Lajang", "Menikah", "Cerai"), n, replace = TRUE)
Age <- round(rnorm(n, mean = 30, sd = 5))
Jarak <- round(pmax(rnorm(n, mean = 15, sd = 7), 0))
# Simulasikan Device berdasarkan probabilitas berbeda per status
Kendaraan <- sapply(Status, function(dep) {
if (dep == "Lajang") {
sample(c("Mobil", "Transum", "Motor"), size = 1, prob = c(0.1, 0.2, 0.7))
} else if (dep == "Nikah") {
sample(c("Mobil", "Transum", "Motor"), size = 1, prob = c(0.8, 0.1, 0.1))
} else {
sample(c("Mobil", "Transum", "Motor"), size = 1, prob = c(0.3, 0.5, 0.2))
}
})
df <- data.frame(Kendaraan = factor(Kendaraan), Age, Status = factor(Status), Jarak)
df$Kendaraan <- relevel(df$Kendaraan, ref = "Mobil") # baseline
head(df)
library(nnet)
model_mnlogit <- multinom(Kendaraan ~ Age + Status + Jarak, data = df)
## # weights: 18 (10 variable)
## initial value 329.583687
## iter 10 value 287.466571
## final value 286.839538
## converged
summary(model_mnlogit)
## Call:
## multinom(formula = Kendaraan ~ Age + Status + Jarak, data = df)
##
## Coefficients:
## (Intercept) Age StatusLajang StatusMenikah Jarak
## Motor -0.7453106 0.009001284 2.0864444 -0.2324477 0.02481585
## Transum -1.4672665 0.056041178 0.2223544 -0.1886799 0.01784910
##
## Std. Errors:
## (Intercept) Age StatusLajang StatusMenikah Jarak
## Motor 1.0119714 0.03155276 0.4314462 0.3961032 0.02459451
## Transum 0.9754311 0.03026287 0.4487523 0.3454233 0.02371642
##
## Residual Deviance: 573.6791
## AIC: 593.6791
z <- summary(model_mnlogit)$coefficients / summary(model_mnlogit)$standard.errors
pval <- 2 * (1 - pnorm(abs(z)))
round(pval, 4)
## (Intercept) Age StatusLajang StatusMenikah Jarak
## Motor 0.4614 0.7754 0.0000 0.5573 0.3130
## Transum 0.1325 0.0641 0.6203 0.5849 0.4517
Interpretasi:
• Koefsien untuk kategori “Motor” dan “Transum” dibandingkan dengan baseline “Laptop”
• Nilai p-value kecil (<0.05) menunjukkan variabel tersebut signifkan memengaruhi preferensi perangkat.
df$Predicted <- predict(model_mnlogit)
table(Predicted = df$Predicted, Actual = df$Kendaraan)
## Actual
## Predicted Mobil Motor Transum
## Mobil 8 10 9
## Motor 11 79 22
## Transum 51 36 74
Model regresi logistik multinomial berhasil digunakan untuk:
• Menganalisis hubungan antara atribut karyawan dan preferensi kendaraan
• Mengetahui faktor signifkan yang memengaruhi pilihan
• Memungkinkan prediksi jenis kendaraan yang dipilih oleh karyawan baru berdasarkan karakteristiknya
Regresi logistik ordinal digunakan ketika variabel respon \(Y\) bersifat ordinal (memiliki urutan), misalnya tingkat kepuasan: Rendah, Sedang, Tinggi.
Model ini berbeda dengan:
• Regresi logistik biner: hanya 2 kategori
• Regresi logistik multinomial: kategori > 2 tetapi tidak berurutan
Model yang digunakan adalah Cumulative Logit Model dengan asumsi proportional odds:
\[ \log \left( \frac{P(Y \leq j)}{P(Y > j)} \right) = \alpha_j + \beta x \]
Untuk \(c\) kategori, terdapat \((c - 1)\) model logit kumulatif.
Koefisien \(\beta\) menjelaskan efek \(x\) terhadap kemungkinan berada pada kategori yang lebih rendah atau sama.
Odds ratio ditulis:
\[ \text{OR} = e^\beta \]
Misal kita memiliki data fiktif tingkat kenyamanan warga perumahan (1: Tidak Nyaman, 2: Nyaman, 3: Sangat Nyaman) terhadap kinerja satpam:
set.seed(123)
n <- 175
kinerja <- round(runif(n, 1, 10))
kenyamanan <- cut(4 + 0.5*kinerja + rnorm(n),
breaks = c(-Inf, 5.5, 7.5, Inf),
labels = c("Tidak Nyaman", "Nyaman", "Sangat Nyaman"),
ordered_result = TRUE)
df <- data.frame(kenyamanan, kinerja)
head(df)
model_ord <- polr(kenyamanan ~ kinerja, data = df, Hess = TRUE)
summary(model_ord)
## Call:
## polr(formula = kenyamanan ~ kinerja, data = df, Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## kinerja 1.062 0.1187 8.94
##
## Intercepts:
## Value Std. Error t value
## Tidak Nyaman|Nyaman 3.5343 0.5055 6.9921
## Nyaman|Sangat Nyaman 7.2007 0.8082 8.9094
##
## Residual Deviance: 220.4452
## AIC: 226.4452
(ctable <- coef(summary(model_ord)))
## Value Std. Error t value
## kinerja 1.061508 0.1187355 8.940111
## Tidak Nyaman|Nyaman 3.534253 0.5054614 6.992131
## Nyaman|Sangat Nyaman 7.200681 0.8082091 8.909428
p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
(ctable <- cbind(ctable, "p value" = round(p, 4)))
## Value Std. Error t value p value
## kinerja 1.061508 0.1187355 8.940111 0
## Tidak Nyaman|Nyaman 3.534253 0.5054614 6.992131 0
## Nyaman|Sangat Nyaman 7.200681 0.8082091 8.909428 0
newdata <- data.frame(kinerja = 5:9)
predict(model_ord, newdata = newdata, type = "probs")
## Tidak Nyaman Nyaman Sangat Nyaman
## 1 0.145133725 0.7239792 0.1308870
## 2 0.055472471 0.6412270 0.3033005
## 3 0.019912261 0.4228699 0.5572178
## 4 0.006979217 0.2086389 0.7843818
## 5 0.002425417 0.0844105 0.9131641
Model cumulative logit mengasumsikan efek prediktor sama untuk setiap cutoff. Jika tidak, pertimbangkan model non-proportional odds seperti generalized ordinal model.
Selain cumulative logit, model ordinal lainnya:
• Adjacent-category logit
• Continuation-ratio (sequential) logit
Model tersebut dapat digunakan saat asumsi proportional odds tidak terpenuhi
polr() dari package
MASS.Jika diperlukan validasi lanjut, bisa digunakan uji devian atau likelihood ratio test.
Model regresi logistik ordinal yang paling umum digunakan adalah Cumulative Logit Model dengan asumsi Proportional Odds.
Asumsi ini dikenal juga sebagai asumsi paralelisme (parallel lines assumption).
Asumsi paralelisme menyatakan bahwa koefisien regresi (\(\beta\)) sama untuk setiap kategori kumulatif dari variabel respon.
Bentuk umum model:
\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]
Untuk \(j = 1, 2, \dots, c - 1\):
Visualisasi: Dalam asumsi paralelisme, kurva logit kumulatif dari tiap kategori terhadap prediktor akan memiliki kemiringan yang sama (paralel), hanya berbeda posisi (intercept).
Konsekuensi Pelanggaran Asumsi
Jika asumsi ini tidak terpenuhi:
Pengujian Asumsi Paralelisme
Untuk memeriksa validitas asumsi, dapat digunakan:
Kesimpulan
• Asumsi paralelisme penting untuk validitas model cumulative logit.
• Menyederhanakan interpretasi karena efek prediktor konstan.
• Jika tidak terpenuhi, gunakan model ordinal alternatif.
Analisis data kategorikal memegang peranan penting dalam statistika terapan karena banyak kejadian di dunia nyata menghasilkan data dalam kategori, seperti jenis kelamin, status pekerjaan, tingkat pendidikan, preferensi konsumen, atau diagnosis medis. Data yang berbentuk kategori ini biasanya dianalisis dengan menggunakan tabel kontingensi, model log-linier, dan model regresi logistik. Setiap metode memiliki keuntungan dan kerugian yang bervariasi tergantung pada tujuan analisis serta struktur data.
Tabel kontingensi berfungsi sebagai langkah awal untuk mengeksplorasi hubungan antara dua atau lebih variabel kategorikal. Contohnya, dalam penelitian mengenai dampak obat terhadap serangan jantung, tabel kontingensi dapat menunjukkan jumlah pasien yang mengalami atau tidak mengalami serangan jantung berdasarkan obat yang digunakan. Tabel ini berperan dalam mengidentifikasi pola-pola awal serta menghitung ukuran asosiasi seperti odds ratio, risk ratio, dan statistik chi-square untuk menguji independensi antara variabel.
Namun, untuk menciptakan model statistik yang dapat mengontrol efek dari berbagai variabel dan interaksinya secara bersamaan, model log-linier menjadi sangat bermanfaat. Model log-linier merupakan tipe khusus dari Generalized Linear Model (GLM) yang diterapkan pada frekuensi sel dalam tabel kontingensi dan mengasumsikan distribusi Poisson. Berbeda dengan regresi logistik, model log-linier tidak menentukan variabel mana yang dependen dan mana yang independen, melainkan memperlakukannya secara simetris. Model ini lebih sesuai bila tujuan analisis adalah untuk memahami struktur asosiasi atau independensi antar variabel, alih-alih untuk tujuan prediksi.
Struktur model log-linier ditentukan oleh efek utama dari masing-masing variabel serta interaksi di antara mereka. Sebagai contoh, dalam tabel kontingensi tiga arah (seperti: jenis kelamin, status merokok, dan penyakit paru-paru), model ini mampu mengidentifikasi apakah interaksi antara dua variabel cukup untuk menjelaskan data, atau apakah interaksi tiga arah diperlukan untuk memahami struktur asosiasi yang ada. Penyesuaian model bisa dilakukan melalui metode uji rasio kemungkinan untuk membandingkan model yang lebih sederhana dengan yang lebih rumit.
Sebaliknya, regresi logistik adalah metode yang paling umum dipakai ketika satu variabel kategorikal secara spesifik dianggap sebagai variabel dependen (misalnya, kejadian penyakit: ya/tidak) dan satu atau lebih variabel kategorik maupun numerik berfungsi sebagai prediktor. Model ini mengkaji logit dari probabilitas kejadian (atau log odds), dan sangat berguna dalam penelitian observasional serta eksperimental untuk menjelaskan atau meramalkan kemungkinan suatu hasil. Regresi logistik juga memiliki variasi untuk outcome kategorik yang lebih dari dua kelas, termasuk regresi logistik multinomial dan regresi logistik ordinal.
Oleh karena itu, meskipun ketiga metode ini beroperasi pada data kategorikal, tabel kontingensi bersifat deskriptif, model log-linier bersifat eksploratif dalam hubungan simetris, sedangkan regresi logistik adalah alat prediktif untuk outcome kategorikal. Pemilihan metode yang tepat sangat bergantung pada apakah analisis berfokus pada deskripsi, eksplorasi struktur, atau prediksi hasil berdasarkan variabel penjelas. Paduan ketiga metode ini sering dijumpai dalam praktik untuk memperoleh pemahaman yang lebih mendalam tentang data kategorikal yang dianalisis.
Ringkasan Dalam analisis data kategorikal, terdapat beberapa metode statistik yang umum dipakai, di antaranya: 1. Tabel Kontingensi: menampilkan frekuensi gabungan dari dua atau lebih variabel kategorikal. 2. Model Log-linier: digunakan untuk memodelkan struktur asosiasi di dalam tabel kontingensi tanpa menganggap adanya variabel dependen. 3. Model Regresi Logistik: digunakan untuk memodelkan probabilitas dari kategori variabel dependen berdasarkan variabel independen.
Meskipun ketiga metode ini dapat diaplikasikan pada data kategorikal, pendekatan dan cara interpretasinya sangatlah berbeda.
Tabel Kontingensi
Tabel kontingensi menyajikan jumlah frekuensi dari kombinasi kategori antar variabel.
Contoh tabel 2x2:
table_data <- matrix(c(21, 15, 2, 3), nrow=2,
dimnames = list(Metode = c("Surgery", "Radiation Therapy"),
Status = c("Sembuh", "Tidak")))
table_data
## Status
## Metode Sembuh Tidak
## Surgery 21 2
## Radiation Therapy 15 3
Tabel kontingensi bersifat deskriptif dan tidak melibatkan pemodelan probabilitas
Model Loglinear
Model loglinear memodelkan logaritma dari ekspektasi frekuensi sel dalam tabel kontingensi.
\[ \log(\mu_{ij}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]
Cocok untuk menyelidiki asosiasi dan independensi antar variabel.
Tidak membedakan antara variabel respon dan penjelas.
Umumnya digunakan pada tabel multi-dimensi (2 arah, 3 arah, dst).
library(MASS)
loglm(~ Metode + Status, data = table_data)
## Call:
## loglm(formula = ~Metode + Status, data = table_data)
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0.5947604 1 0.4405842
## Pearson 0.5991546 1 0.4389008
Model Regresi Logistik
Model regresi logistik biner:
\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 x \]
Contoh:
data_glm <- data.frame(
Status = c(1, 0, 1, 0),
Metode = factor(c("Surgery", "Surgery", "Radiation Therapy", "Radiation Therapy")),
Frek = c(21, 15, 2, 3)
)
model_logit <- glm(Status ~ Metode, weights = Frek, family = binomial, data = data_glm)
summary(model_logit)
##
## Call:
## glm(formula = Status ~ Metode, family = binomial, data = data_glm,
## weights = Frek)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.4055 0.9129 -0.444 0.657
## MetodeSurgery 0.7419 0.9735 0.762 0.446
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 56.227 on 3 degrees of freedom
## Residual deviance: 55.632 on 2 degrees of freedom
## AIC: 59.632
##
## Number of Fisher Scoring iterations: 4
Perbandingan Ketiga Pendekatan
| Aspek | Tabel Kontingensi | Model Loglinear | Regresi Logistik |
|---|---|---|---|
| Tujuan | Deskripsi frekuensi | Deteksi asosiasi | Prediksi probabilitas |
| Variabel dependen | Tidak ada | Tidak ada (intersit) | Ada (eksplisit) |
| Distribusi | Tidak diasumsikan | Poisson (frekuensi sel) | Binomial ( probabilitas) |
| Bentuk Model | Tidak ada | GLM: log(μ) ~ efek | GLM: logit(p) ~ prediktor |
| Cocok untuk | Eksplorasi awal | Tabel > 2 variabel | Studi prediktif |
Tabel kontingensi menyajikan frekuensi dari kombinasi kategori antar dua atau lebih variabel. Misal:
# Contoh tabel 2x2
matrix(c(21, 15, 2, 3), nrow=2,
dimnames = list(Metode = c("Surgery", "Radiation Therapy"),
Status = c("Sembuh", "Tidak")))
## Status
## Metode Sembuh Tidak
## Surgery 21 2
## Radiation Therapy 15 3
Model log-linier untuk tabel I x J dapat dituliskan: \[ \log(\mu_{ij}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]
Model saturated atau model penuh menyertakan seluruh efek utama dan interaksi:
• Cocok sempurna terhadap data
• Tidak mengasumsikan independensi antar variabel
Contoh formulasi untuk tabel 2x2:
# Data
library(MASS)
data <- matrix(c(21, 2, 15, 3), nrow=2, byrow=TRUE)
dimnames(data) <- list(Metode = c("Surgery", "Radiation Therapy"), Status = c("Sembuh", "Tidak"))
ftable(data)
## Status Sembuh Tidak
## Metode
## Surgery 21 2
## Radiation Therapy 15 3
Model saturated dapat dipasang dengan loglm dari package
{MASS}:
model_saturated <- loglm(~ Metode * Status, data = data)
summary(model_saturated)
## Formula:
## ~Metode * Status
## attr(,"variables")
## list(Metode, Status)
## attr(,"factors")
## Metode Status Metode:Status
## Metode 1 0 1
## Status 0 1 1
## attr(,"term.labels")
## [1] "Metode" "Status" "Metode:Status"
## attr(,"order")
## [1] 1 1 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0 0 1
## Pearson 0 0 1
Model independen mengasumsikan bahwa tidak ada interaksi antara variabel:
\[ \log(\mu_{ij}) = \mu + \lambda^T_i + \lambda^B_j \] Model ini menguji hipotesis bahwa variabel X dan Y saling independen.
model_indep <- loglm(~ Metode + Status, data = data)
summary(model_indep)
## Formula:
## ~Metode + Status
## attr(,"variables")
## list(Metode, Status)
## attr(,"factors")
## Metode Status
## Metode 1 0
## Status 0 1
## attr(,"term.labels")
## [1] "Metode" "Status"
## attr(,"order")
## [1] 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
##
## Statistics:
## X^2 df P(> X^2)
## Likelihood Ratio 0.5947604 1 0.4405842
## Pearson 0.5991546 1 0.4389008
Odds ratio untuk tabel 2x2:
\[ OR = \frac{n_{11}n_{22}}{n_{12}n_{21}} \]
Interpretasi nilai OR:
Dalam model saturated:
# Estimasi odds ratio dan log-odds
logOR <- log((data[1,1] * data[2,2]) / (data[1,2] * data[2,1]))
logOR
## [1] 0.7419373
Perbandingan antar model dilakukan dengan menggunakan statistik deviance (G²) atau likelihood ratio test.
anova(model_indep, model_saturated)
## LR tests for hierarchical log-linear models
##
## Model 1:
## ~Metode + Status
## Model 2:
## ~Metode * Status
##
## Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1 0.5947604 1
## Model 2 0.0000000 0 0.5947604 1 0.44058
## Saturated 0.0000000 0 0.0000000 0 1.00000
Model log-linear adalah model yang digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategorik yang disajikan dalam tabel kontingensi. Model ini mengasumsikan bahwa logaritma dari nilai ekspektasi frekuensi sel (\(\mu_{ij}\)) dapat dinyatakan sebagai penjumlahan efek variabel dan (bila perlu) interaksinya. Untuk tabel 2x2
\[
\log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij}
\]
Sistem Persamaan Model Log-Linear
\[ \begin{align*} \log(\mu_{11}) &= \lambda + \lambda^A_1 + \lambda^B_1 + \lambda^{AB}_{11} \\ \log(\mu_{12}) &= \lambda + \lambda^A_1 + \lambda^B_2 + \lambda^{AB}_{12} \\ \log(\mu_{21}) &= \lambda + \lambda^A_2 + \lambda^B_1 + \lambda^{AB}_{21} \\ \log(\mu_{22}) &= \lambda + \lambda^A_2 + \lambda^B_2 + \lambda^{AB}_{22} \end{align*} \] Constraint Sum-to-Zero
\[ \begin{aligned} &\lambda^A_1 + \lambda^A_2 = 0 \\ &\lambda^B_1 + \lambda^B_2 = 0 \\ &\lambda^{AB}_{11} + \lambda^{AB}_{12} + \lambda^{AB}_{21} + \lambda^{AB}_{22} = 0 \end{aligned} \]
Rumus Estimasi Parameter dengan Sum-to-Zero Constraint
\[ \lambda^A_1 = \frac{1}{2} \left[ (\log \mu_{11} + \log \mu_{12}) - (\log \mu_{21} + \log \mu_{22}) \right] \]
\[ \lambda^B_1 = \frac{1}{2} \left[ (\log \mu_{11} + \log \mu_{21}) - (\log \mu_{12} + \log \mu_{22}) \right] \]
\[ \lambda^{AB}_{12} = \frac{1}{4} \left[ \log \mu_{12} - \log \mu_{11} - \log \mu_{22} + \log \mu_{21} \right] \]
Diberikan data:
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Model log-linear pada tabel 2x2:
\[ \log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]
dengan constraint sum-to-zero:
\[ \sum_i \lambda^A_i = 0,\quad \sum_j \lambda^B_j = 0,\quad \sum_{i,j} \lambda^{AB}_{ij} = 0 \]
Misalkan:
Observasi:
\[ \begin{aligned} \log(\mu_{11}) &= \lambda + \lambda^A_1 + \lambda^B_1 + \lambda^{AB}_{11} \\ \log(\mu_{12}) &= \lambda + \lambda^A_1 + \lambda^B_2 + \lambda^{AB}_{12} \\ \log(\mu_{21}) &= \lambda + \lambda^A_2 + \lambda^B_1 + \lambda^{AB}_{21} \\ \log(\mu_{22}) &= \lambda + \lambda^A_2 + \lambda^B_2 + \lambda^{AB}_{22} \end{aligned} \]
Dengan constraint sum-to-zero:
\[ \begin{aligned} &\lambda^A_1 + \lambda^A_2 = 0 \\ &\lambda^B_1 + \lambda^B_2 = 0 \\ &\lambda^{AB}_{11} + \lambda^{AB}_{12} + \lambda^{AB}_{21} + \lambda^{AB}_{22} = 0 \end{aligned} \]
Langkah-langkah:
1. Hitung rata-rata log frekuensi sel:
\[ \lambda = \frac{1}{4} \sum_{i=1}^{2} \sum_{j=1}^{2} \log(n_{ij}) \]
\[ = \frac{1}{4} (\log(21) + \log(2) + \log(15) + \log(3)) \]
\[ = \frac{1}{4} (3.0445 + 0.6931 + 2.7081 + 1.0986) \]
\[ = 1.8861 \]
2. Efek utama A (Merokok):
\[ \lambda^A_1 = \frac{1}{2} \left[ (\log(21) + \log(2)) - (\log(15) + \log(3)) \right] \]
\[ = \frac{1}{2} \left[ (3.0445 + 0.6931) - (2.7081 + 1.0986) \right] \]
\[ = \frac{1}{2} (3.7376 - 3.8067) = \frac{1}{2} (-0.0691) \]
\[ = -0.0346 \]
\[ \lambda^A_2 = 0.0346 \]
3. Efek utama B (Status):
\[ \lambda^B_1 = \frac{1}{2} \left[ (\log(21) + \log(15)) - (\log(2) + \log(3)) \right] \]
\[ = \frac{1}{2} \left[ (3.0445 + 2.7081) - (0.6931 + 1.0986) \right] \]
\[ = \frac{1}{2} (5.7526 - 1.7917) = \frac{1}{2} (3.9609) \]
\[ = 1.9805 \]
\[ \lambda^B_2 = -1.9805 \]
4. Efek interaksi:
\[ \lambda^{AB}_{11} = \frac{1}{4} \left[ \log(21) - \log(2) - \log(15) + \log(3) \right] \]
\[ = \frac{1}{4} \left[ 3.0445 - 0.6931 - 2.7081 + 1.0986 \right] \]
\[ = \frac{1}{4} (0.7419) = 0.1855 \]
\[ \lambda^{AB}_{12} = -\lambda^{AB}_{11} = -0.1855 \]
\[ \lambda^{AB}_{21} = -0.1855 \]
\[ \lambda^{AB}_{22} = +0.1855 \]
Ringkasan parameter:
\[ \lambda = 1.8861 \]
\[ \lambda^A_1 = -0.0346, \quad \lambda^A_2 = +0.0346 \]
\[ \lambda^B_1 = +1.9805, \quad \lambda^B_2 = -1.9805 \]
\[ \lambda^{AB}_{11} = 0.1855, \quad \lambda^{AB}_{12} = -0.1855, \quad \lambda^{AB}_{21} = -0.1855, \quad \lambda^{AB}_{22} = 0.1855 \]
\[ \text{OR} = \frac{n_{11}n_{22}}{n_{12}n_{21}} = \frac{21 \times 3}{2 \times 15} = \frac{63}{30} = 2.1 \]
Log odds ratio:
\[ \log(\text{OR}) = \log(2.1) = 0.7419 \]
Standard error (SE):
\[ SE = \sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}} \]
\[ = \sqrt{\frac{1}{21} + \frac{1}{2} + \frac{1}{15} + \frac{1}{3}} = \sqrt{0.0476 + 0.5 + 0.0667 + 0.3333} = \sqrt{0.9476} = 0.9734 \]
95% Confidence Interval for log(OR):
\[ \log(OR) \pm 1.96 \times SE = 0.3222 \pm 1.96 \times 0.9734 \]
\[ = (0.3222 - 1.9079,\ 0.3222 + 1.9079) = (-1.5857,\ 2.2301) \] Back-transform to get CI for OR:
\[ \text{Lower} = \exp(-1.5857) = 0.2050 \]
\[ \text{Upper} = \exp(2.2301) = 9.3005 \]
Jadi, OR = 6 (95% CI: 0.2050 – 9.3005)
# Data 2x2
tabel <- matrix(c(21, 2, 15, 3), nrow = 2, byrow = TRUE)
colnames(tabel) <- c("Cancer Controlled", "Cancer Not Controlled")
rownames(tabel) <- c("Surgery", "Radiation Therapy")
tabel
## Cancer Controlled Cancer Not Controlled
## Surgery 21 2
## Radiation Therapy 15 3
data <- as.data.frame(as.table(tabel))
colnames(data) <- c("Metode", "Status", "Freq")
data
# Model tanpa interaksi
fit_no_inter <- glm(Freq ~ Metode + Status, family = poisson(), data = data)
summary(fit_no_inter)
##
## Call:
## glm(formula = Freq ~ Metode + Status, family = poisson(), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.0054 0.2165 13.883 < 2e-16 ***
## MetodeRadiation Therapy -0.2451 0.3147 -0.779 0.436
## StatusCancer Not Controlled -1.9741 0.4773 -4.136 3.53e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 27.63894 on 3 degrees of freedom
## Residual deviance: 0.59476 on 1 degrees of freedom
## AIC: 21.648
##
## Number of Fisher Scoring iterations: 4
# Model dengan interaksi
fit_inter <- glm(Freq ~ Metode * Status, family = poisson(), data = data)
summary(fit_inter)
##
## Call:
## glm(formula = Freq ~ Metode * Status, family = poisson(), data = data)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 3.0445 0.2182 13.952
## MetodeRadiation Therapy -0.3365 0.3381 -0.995
## StatusCancer Not Controlled -2.3514 0.7400 -3.177
## MetodeRadiation Therapy:StatusCancer Not Controlled 0.7419 0.9735 0.762
## Pr(>|z|)
## (Intercept) < 2e-16 ***
## MetodeRadiation Therapy 0.31959
## StatusCancer Not Controlled 0.00149 **
## MetodeRadiation Therapy:StatusCancer Not Controlled 0.44596
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2.7639e+01 on 3 degrees of freedom
## Residual deviance: -1.3323e-15 on 0 degrees of freedom
## AIC: 23.053
##
## Number of Fisher Scoring iterations: 3
Parameter utama (intercept) menunjukkan rata-rata log frekuensi sel.
Efek “Metode” dan “Status” menunjukkan perbedaan log frekuensi antar kategori.
Nilai log(2.1) = 0.7419 sama dengan efek interaksi output R
Suatu survei dilakukan untuk mengetahui hubungan antara Jenis Kelamin (Laki-laki/Perempuan) dan Kategori UPAH (Rendah (Dibawah UMR)/Standar (UMR)/Tinggi (Diatas UMR)):
| Upah Rendah | Upah Standar | Upah Tinggi | |
|---|---|---|---|
| Laki-laki | 24 | 40 | 32 |
| Perempuan | 9 | 12 | 20 |
Data merupakan data simulasi
Bentuk umum model log-linear untuk tabel 2x3 (dengan sum-to-zero constraint):
\[ \log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]
dengan:
Constraint: \[ \sum_i \lambda^A_i = 0,\quad \sum_j \lambda^B_j = 0,\quad \sum_i \lambda^{AB}_{ij} = 0,\quad \sum_j \lambda^{AB}_{ij} = 0 \]
Secara eksplisit:
\[
\log(\mu_{ij}) =
\lambda +
\begin{cases}
\lambda^A_1 & \text{(Laki-laki)} \\
\lambda^A_2 & \text{(Perempuan)}
\end{cases}
+
\begin{cases}
\lambda^B_1 & \text{(Rendah)} \\
\lambda^B_2 & \text{(Standar)} \\
\lambda^B_3 & \text{(Tinggi)}
\end{cases}
+
\lambda^{AB}_{ij} \text{ (interaksi jika ada)}
\]
# Membuat data frame dari tabel
tabel2x3 <- matrix(c(24, 40, 32, 9, 12, 20), nrow = 2, byrow = TRUE)
colnames(tabel2x3) <- c("Rendah", "Standar", "Tinggi")
rownames(tabel2x3) <- c("Laki-laki", "Perempuan")
tabel2x3
## Rendah Standar Tinggi
## Laki-laki 24 40 32
## Perempuan 9 12 20
# Ubah menjadi data.frame untuk glm
data2x3 <- as.data.frame(as.table(tabel2x3))
colnames(data2x3) <- c("JenisKelamin", "KategoriUpah", "Freq")
data2x3
# Model log-linear tanpa interaksi (asumsi independen)
fit_no_inter <- glm(Freq ~ JenisKelamin + KategoriUpah, family = poisson(), data = data2x3)
summary(fit_no_inter)
##
## Call:
## glm(formula = Freq ~ JenisKelamin + KategoriUpah, family = poisson(),
## data = data2x3)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.1409 0.1828 17.181 < 2e-16 ***
## JenisKelaminPerempuan -0.8508 0.1866 -4.560 5.11e-06 ***
## KategoriUpahStandar 0.4547 0.2226 2.043 0.041 *
## KategoriUpahTinggi 0.4547 0.2226 2.043 0.041 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 31.3485 on 5 degrees of freedom
## Residual deviance: 3.0599 on 2 degrees of freedom
## AIC: 40.155
##
## Number of Fisher Scoring iterations: 4
# Model log-linear dengan interaksi (untuk cek asosiasi)
fit_inter <- glm(Freq ~ JenisKelamin * KategoriUpah, family = poisson(), data = data2x3)
summary(fit_inter)
##
## Call:
## glm(formula = Freq ~ JenisKelamin * KategoriUpah, family = poisson(),
## data = data2x3)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.1781 0.2041 15.569 <2e-16
## JenisKelaminPerempuan -0.9808 0.3909 -2.509 0.0121
## KategoriUpahStandar 0.5108 0.2582 1.978 0.0479
## KategoriUpahTinggi 0.2877 0.2700 1.065 0.2867
## JenisKelaminPerempuan:KategoriUpahStandar -0.2231 0.5110 -0.437 0.6623
## JenisKelaminPerempuan:KategoriUpahTinggi 0.5108 0.4838 1.056 0.2910
##
## (Intercept) ***
## JenisKelaminPerempuan *
## KategoriUpahStandar *
## KategoriUpahTinggi
## JenisKelaminPerempuan:KategoriUpahStandar
## JenisKelaminPerempuan:KategoriUpahTinggi
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 3.1348e+01 on 5 degrees of freedom
## Residual deviance: -8.4377e-15 on 0 degrees of freedom
## AIC: 41.095
##
## Number of Fisher Scoring iterations: 3
Model log-linear tabel kontingensi tiga arah adalah model yang melibatkan tiga variabel kategorik, sehingga memungkinkan terjadinya berbagai bentuk interaksi yang lebih beragam dalam model tersebut. Dalam hal ini, bentuk interaksi tertinggi yang dapat dimodelkan adalah interaksi tiga arah, yaitu interaksi yang melibatkan ketiga variabel secara simultan.
Model log-linear yang melibatkan tiga variabel kategorik (misal: X, Y, dan Z) dapat dibangun dalam berbagai bentuk model, tergantung pada tingkat interaksi yang ingin dimasukkan. Berikut adalah beberapa alternatif model log-linear yang umum digunakan.
1. Model Saturated
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \]
Model ini memuat semua kemungkinan interaksi, termasuk interaksi tiga arah (X, Y, dan Z).
2. Model Homogen
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]
Model ini hanya mengakomodasi interaksi dua arah antar variabel tanpa memasukkan interaksi tiga arah.
3. Model Conditional
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \]
Memuat interaksi X dengan Y dan X dengan Z.
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \]
Memuat interaksi Y dengan X dan Y dengan Z.
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]
Memuat interaksi Z dengan X dan Z dengan Y.
4. Model Joint Independence
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \]
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \]
5. Model Tanpa Interaksi
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k \] Model ini hanya memasukkan efek utama tanpa interaksi antar variabel.
Dalam analisis model log-linear tiga arah, pengujian interaksi dilakukan untuk mengetahui ada atau tidaknya interaksi antar variabel. Pengujian ini dilakukan secara bertahap, dimulai dari tingkat interaksi tertinggi ke yang lebih rendah. Untuk model log-linear dengan tiga peubah (X, Y, dan Z), tahapan pengujian meliputi:
1) Pengujian Interaksi Tiga Arah (XYZ):
2) Pengujian Interaksi Dua Arah (XY, XZ, YZ):
Bandingkan model homogenous dengan model conditional.
Bandingkan model conditional dengan model joint independence.
Bandingkan model joint independence dengan model tanpa interaksi.
Setiap tahapan pengujian dilakukan untuk menilai kecocokan model dan menentukan struktur interaksi mana yang paling sesuai dengan data yang diamati.
Tabel berikut menunjukkan data mengenai peristiwa pertama kali melakukan hubungan seksual pada remaja berusia 15 dan 16 tahun berdasarkan ras dan jenis kelamin.
| Ras | Jenis Kelamin | Ya (Intercourse) | Tidak (No) |
|---|---|---|---|
| Putih | Laki-laki | 43 | 134 |
| Putih | Perempuan | 26 | 149 |
| Hitam | Laki-laki | 29 | 23 |
| Hitam | Perempuan | 22 | 36 |
library("epitools")
library("DescTools")
library("lawstat")
Input Data
# Input data sesuai tabel praktikum
z.race <- factor(rep(c("White", "Black"), each = 4))
x.sex <- factor(rep(c("Male", "Female"), each = 2, times = 2))
y.int <- factor(rep(c("Yes", "No"), times = 4))
counts <- c(43, 134, 26, 149, 29, 23, 22, 36)
data <- data.frame(
Race = z.race,
Jenis_Kelamin = x.sex,
Intercouse = y.int,
Frekuensi = counts
)
data
Membentuk Tabel Kontigensi 3 Arah
table3d <- xtabs(Frekuensi ~ Race + Jenis_Kelamin + Intercouse, data = data)
ftable(table3d)
## Intercouse No Yes
## Race Jenis_Kelamin
## Black Female 36 22
## Male 23 29
## White Female 149 26
## Male 134 43
Analisis Log-Linear: Tahap Pemodelan Kita akan memodelkan tabel ini menggunakan beberapa model log-linear dan membandingkan kecocokan model (parsimonious model)
x.sex <- relevel(x.sex, ref = "Female")
y.int <- relevel(y.int, ref = "No")
z.race <- relevel(z.race, ref = "Black")
Model Saturated Model log-linear saturated memasukkan semua interaksi hingga tiga arah:
\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \]
# Model saturated
model_saturated <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + x.sex*z.race + y.int*z.race +
x.sex*y.int*z.race,
family = poisson(link = "log"))
summary(model_saturated)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## x.sex * z.race + y.int * z.race + x.sex * y.int * z.race,
## family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.5835 0.1667 21.501 < 2e-16 ***
## x.sexMale -0.4480 0.2669 -1.678 0.09327 .
## y.intYes -0.4925 0.2706 -1.820 0.06878 .
## z.raceWhite 1.4204 0.1857 7.649 2.03e-14 ***
## x.sexMale:y.intYes 0.7243 0.3888 1.863 0.06251 .
## x.sexMale:z.raceWhite 0.3419 0.2923 1.170 0.24208
## y.intYes:z.raceWhite -1.2534 0.3441 -3.642 0.00027 ***
## x.sexMale:y.intYes:z.raceWhite -0.1151 0.4765 -0.241 0.80919
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2.8238e+02 on 7 degrees of freedom
## Residual deviance: 3.9968e-15 on 0 degrees of freedom
## AIC: 60.839
##
## Number of Fisher Scoring iterations: 3
exp(model_saturated$coefficients)
## (Intercept) x.sexMale
## 36.0000000 0.6388889
## y.intYes z.raceWhite
## 0.6111111 4.1388889
## x.sexMale:y.intYes x.sexMale:z.raceWhite
## 2.0632411 1.4076452
## y.intYes:z.raceWhite x.sexMale:y.intYes:z.raceWhite
## 0.2855400 0.8913055
Model yang digunakan adalah model log-linear saturated dengan semua efek utama, interaksi dua arah, dan interaksi tiga arah. Model ini memodelkan hubungan antara jenis kelamin (x.sex), perlakuan intercouse (y.int), dan ras (z.race) terhadap frekuensi responden.
library(knitr)
signif_stars <- function(pval) {
if (pval < 0.001) return("***")
else if (pval < 0.01) return("**")
else if (pval < 0.05) return("*")
else if (pval < 0.1) return(".")
else return("")
}
coef_saturated <- round(summary(model_saturated)$coefficients, 3)
colnames(coef_saturated) <- c("Est", "SE", "z", "p")
Signif <- sapply(coef_saturated[, "p"], signif_stars)
coef_table <- cbind(coef_saturated, Sig = Signif)
kable(coef_table, format = "pipe", caption = "Tabel Koefisien Model Saturated")
| Est | SE | z | p | Sig | |
|---|---|---|---|---|---|
| (Intercept) | 3.584 | 0.167 | 21.501 | 0 | *** |
| x.sexMale | -0.448 | 0.267 | -1.678 | 0.093 | . |
| y.intYes | -0.492 | 0.271 | -1.82 | 0.069 | . |
| z.raceWhite | 1.42 | 0.186 | 7.649 | 0 | *** |
| x.sexMale:y.intYes | 0.724 | 0.389 | 1.863 | 0.063 | . |
| x.sexMale:z.raceWhite | 0.342 | 0.292 | 1.17 | 0.242 | |
| y.intYes:z.raceWhite | -1.253 | 0.344 | -3.642 | 0 | *** |
| x.sexMale:y.intYes:z.raceWhite | -0.115 | 0.477 | -0.241 | 0.809 |
(Intercept): Rata-rata log jumlah kasus untuk kategori referensi (Perempuan, Tidak Intercouse, Black) adalah 3.584 (atau μ≈36).
x.sexMale: Laki-laki memiliki expected count sekitar 0.63 kali Perempuan dalam kategori referensi lainnya (p = 0.09). Akan tetapi karena p.value diatas 0.05, hasil tersebut tidak signifikan.
y.intYes: Mereka yang sudah melakukan Intercouse expected count sekitar 0.611 kali lipat dibanding yang belum (p = 0.069). Akan tetapi karena p.value diatas 0.05, hasil tersebut tidak signifikan.
z.raceWhite: Ras putih memiliki expected count 4.14 kali lebih besar dibanding Ras Hitam (signifikan, p = 2.03e-14).
Interaksi dua & tiga arah: Sebagian besar tidak signifikan (p > 0.05), artinya tidak ada bukti kuat adanya efek gabungan antar variabel.
Residual deviance ≈ 0 menandakan model saturated benar-benar fit terhadap data (seluruh variasi data dijelaskan oleh model). AIC = 60.839 dapat digunakan untuk perbandingan dengan model yang lebih sederhana
Efek utama yang paling signifikan adalah Ras putih memiliki expected count 4.14 kali lebih besar dibanding Ras Hitam
Tidak ditemukan bukti kuat interaksi tiga arah yang signifikan.
Ditemukan bukti kuat interaksi dua arah antara variabel Y dan Z yang signifikan.
Model yang lebih sederhana (tanpa interaksi tiga arah) perlu dipertimbangkan untuk model final yang lebih parsimonious.
Catatan interpretasi:
Nilai exp(coef) menyatakan rasio ekspektasi (expected count ratio) dibandingkan baseline.
Efek positif → menaikkan expected count; Efek negatif → menurunkan expected count.
Koefisien signifikan pada p-value < 0.05.
Model log-linear homogenous memasukkan semua efek utama dan semua interaksi dua arah, tanpa interaksi tiga arah. Secara matematis, model ini dapat dituliskan sebagai berikut:
\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \]
# Homogenous Model
model_homogenous <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + x.sex*z.race + y.int*z.race,
family = poisson(link = "log"))
summary(model_homogenous)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## x.sex * z.race + y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.5693 0.1571 22.724 < 2e-16 ***
## x.sexMale -0.4120 0.2206 -1.868 0.06176 .
## y.intYes -0.4555 0.2221 -2.050 0.04032 *
## z.raceWhite 1.4380 0.1718 8.372 < 2e-16 ***
## x.sexMale:y.intYes 0.6478 0.2250 2.879 0.00399 **
## x.sexMale:z.raceWhite 0.2987 0.2304 1.296 0.19483
## y.intYes:z.raceWhite -1.3135 0.2378 -5.524 3.32e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.378444 on 7 degrees of freedom
## Residual deviance: 0.058349 on 1 degrees of freedom
## AIC: 58.898
##
## Number of Fisher Scoring iterations: 3
Pengujian ini menggunakan residual deviance dari kedua model (saturated dan homogenous).
H0: Tidak ada interaksi tiga arah (model homogenous sudah cukup)
H1: Ada interaksi tiga arah (model saturated diperlukan)
# Deviance antar model
model_homogenous$deviance
## [1] 0.05834915
model_saturated$deviance
## [1] 3.996803e-15
Deviance.model <- model_homogenous$deviance - model_saturated$deviance
Deviance.model
## [1] 0.05834915
# Derajat bebas = db model homogenous - db model saturated
derajat.bebas <- (model_homogenous$df.residual - model_saturated$df.residual)
derajat.bebas
## [1] 1
chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)
chi.tabel
## [1] 3.841459
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima H0", "Tolak H0")
Keputusan
## [1] "Terima H0"
Interpretasi Pada taraf nyata 5%, Ditemukan bahwa hasil pengujian adalah Terima H0. Hal ini berarti bahwa belum ada cukup kuat untuk menyatakan adanya interaksi antara Jenis Kelamin, Ras dan perlakuan Intercouse.
Rangkuman
Pengujian Ada Tidaknya Interaksi Tiga Arah (Saturated Model vs Homogenous Model)
Hipotesis:
Tingkat Signifikansi:
Statistik Uji:
\[ \Delta \text{Deviance} = \text{Deviance model homogenous} - \text{Deviance model saturated} = 0.05834915 - 0.0 = 0.05834915 \]
\[ df = df\ \text{model homogenous} - df\ \text{model saturated} = 2 - 0 = 2 \]
Daerah Penolakan:
Keputusan:
Interpretasi:
Model log-linear conditional pada X memasukkan efek utama dan interaksi dua arah antara X dengan Y dan X dengan Z, tanpa interaksi antara Y dengan Z maupun interaksi tiga arah
\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} \]
# Conditional Association on X
model_conditional_X <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + x.sex*z.race,
family = poisson(link = "log"))
summary(model_conditional_X)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## x.sex * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.8298 0.1355 28.268 < 2e-16 ***
## x.sexMale -0.2560 0.1990 -1.287 0.19823
## y.intYes -1.3492 0.1620 -8.329 < 2e-16 ***
## z.raceWhite 1.1043 0.1515 7.289 3.13e-13 ***
## x.sexMale:y.intYes 0.5696 0.2156 2.641 0.00826 **
## x.sexMale:z.raceWhite 0.1206 0.2187 0.551 0.58147
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.378 on 7 degrees of freedom
## Residual deviance: 30.424 on 2 degrees of freedom
## AIC: 87.263
##
## Number of Fisher Scoring iterations: 4
• Hipotesis
\[ \begin{aligned} H_0 &: \lambda_{jk}^{YZ} = 0 \quad \text{(Tidak ada interaksi antara perlakuan Intercourse (Y) dan ras (Z))} \\ H_1 &: \lambda_{jk}^{YZ} \ne 0 \quad \text{(Ada interaksi antara perlakuan Intercourse (Y) dan ras (Z))} \end{aligned} \]
• Taraf Signifikansi \[ \alpha = 5\% \]
• Statistik Uji \[ \Delta \text{Deviance} = \text{Deviance model conditional on } X - \text{Deviance model homogenous} \]
\[ = 30.424 - 0.05834915 = 30.36578 \]
\[ db = db_{\text{model conditional on } X} - db_{\text{model homogenous}} = 2 - 1 = 1 \]
• Daerah Penolakan \[ \text{Tolak } H_0 \text{ jika } \Delta \text{Deviance} > \chi^2_{0.05, 1} = 3.841 \] • Keputusan
Karena 30.36578 < 3.841, maka tolak \(H_0\)
• Kesimpulan Dengan taraf nyata 5%, ditemukan bahwa hasil pengujian adalah tolak H0. Hal ini menyatakan adanya interaksi antara Ras dan perlakuan Intercouse.
# Selisih deviance antar model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance
Deviance.model
## [1] 30.36578
Hitung Derajat Bebas
# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (2 - 1)
derajat.bebas
## [1] 1
Nilai Chi-Square Tabel
chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 3.841459
Keputusan Uji
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Tolak"
Interpretasi Dengan taraf nyata 5%, ditemukan bahwa hasil pengujian adalah tolak H0. Hal ini menyatakan adanya interaksi antara Ras dan perlakuan Intercouse.
Model log-linear conditional pada Y memasukkan efek utama dan interaksi dua arah antara X dengan Y dan Y dengan Z, tanpa interaksi antara X dengan Z maupun interaksi tiga arah.
\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{jk}^{YZ} \]
# Conditional Association on Y
model_conditional_Y <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + y.int*z.race,
family = poisson(link = "log"))
summary(model_conditional_Y)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4631 0.1394 24.844 < 2e-16 ***
## x.sexMale -0.1641 0.1085 -1.512 0.13044
## y.intYes -0.4475 0.2270 -1.971 0.04868 *
## z.raceWhite 1.5679 0.1431 10.955 < 2e-16 ***
## x.sexMale:y.intYes 0.5696 0.2156 2.641 0.00826 **
## y.intYes:z.raceWhite -1.2656 0.2336 -5.417 6.05e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.3784 on 7 degrees of freedom
## Residual deviance: 1.7517 on 2 degrees of freedom
## AIC: 58.591
##
## Number of Fisher Scoring iterations: 4
• Hipotesis
\[ \begin{aligned} H_0 &: \lambda_{ik}^{XZ} = 0 \quad \text{(Tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z))} \\ H_1 &: \lambda_{ik}^{XZ} \ne 0 \quad \text{(Ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z))} \end{aligned} \]
• Tingkat Signifikansi
\[ \alpha = 5\% \]
• Statistik Uji
\[ \Delta \text{Deviance} = \text{Deviance model conditional on } Y - \text{Deviance model homogenous} \]
\[ = 1.7517 - 0.05834915 = 1.693301 \]
\[ db = \text{df}_{\text{model conditional on } Y} - \text{df}_{\text{model homogenous}} = 2 - 1 = 1 \]
• Daerah Penolakan
Tolak \(H_0\) jika \(\Delta\text{Deviance} > \chi^2_{0.05, 2} = 3.841\)
• Keputusan
\[ \text{Karena } 1.693301 < 3.841, \text{ maka terima } H_0 \] • Kesimpulan
# Deviance of Model
Deviance.model <- model_conditional_Y$deviance - model_homogenous$deviance
Deviance.model
## [1] 1.693301
Hitung Derajat Bebas
derajat.bebas <- (2 - 1)
derajat.bebas
## [1] 1
Nilai Chi-Square Tabel
chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 3.841459
Keputusan Uji
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"
Interpretasi
Dengan taraf nyata 5%, didapatkan bahwa hasilnya terima H0 yang berarti bahwa tidak ada bukti kuat interaksi antara Jenis kelamin dan Ras
Model log-linear conditional pada Z memasukkan efek utama dan interaksi dua arah antara X dengan Z dan Y dengan Z, tanpa interaksi antara X dengan Y maupun interaksi tiga arah. \[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \]
# Conditional Association on Z
model_conditional_Z <- glm(counts ~ x.sex + y.int + z.race +
x.sex*z.race + y.int*z.race,
family = poisson(link = "log"))
summary(model_conditional_Z)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * z.race +
## y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4375 0.1584 21.697 < 2e-16 ***
## x.sexMale -0.1092 0.1910 -0.572 0.567
## y.intYes -0.1457 0.1912 -0.762 0.446
## z.raceWhite 1.5091 0.1775 8.502 < 2e-16 ***
## x.sexMale:z.raceWhite 0.1206 0.2187 0.551 0.581
## y.intYes:z.raceWhite -1.2656 0.2336 -5.417 6.05e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.3784 on 7 degrees of freedom
## Residual deviance: 8.5403 on 2 degrees of freedom
## AIC: 65.38
##
## Number of Fisher Scoring iterations: 4
• Hipotesis
\[ \begin{aligned} H_0 &: \lambda_{ij}^{XY} = 0 \quad \text{(Tidak ada interaksi antara jenis kelamin (X) dan perlakuan intercourse (Y))} \\ H_1 &: \lambda_{ij}^{XY} \ne 0 \quad \text{(Ada interaksi antara jenis kelamin (X) dan perlakuan intercourse (Y))} \end{aligned} \]
• Tingkat Signifikansi
\[ \alpha = 5\% \]
• Statistik Uji
\[ \Delta \text{Deviance} = \text{Deviance model conditional on } Z - \text{Deviance model homogenous} \]
\[ = 8.5403 - 0.05834915 = 8.481991 \]
\[ db = \text{df}_{\text{model conditional on } Z} - \text{df}_{\text{model homogenous}} = 2 - 1 = 1 \]
• Daerah Penolakan
Tolak \(H_0\) jika \(\Delta\text{Deviance} > \chi^2_{0.05, 1} = 3.841\)
• Keputusan
\[ \text{Karena } 8.481991 > 3.841, \text{ maka tolak } H_0 \] • Kesimpulan
# Deviance of Model
Deviance.model <- model_conditional_Z$deviance - model_homogenous$deviance
Deviance.model
## [1] 8.481991
Hitung Derajat Bebas
derajat.bebas <- (2 - 1)
derajat.bebas
## [1] 1
Nilai Chi-Square Tabel
chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 3.841459
Keputusan Uji
Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Tolak"
Interpretasi
karena nilai Deviance model > chi tabel, maka dinyatakan tolak H0 yang berarti terdapat interaksi antara Jenis kelamin dan Perlakuan intercouse.
Model log linier dengan berbagai kombinasi parameter:
library(knitr) library(kableExtra)
model_loglin <- data.frame(
Model = c("Saturated", "Homogenous", "Conditional on X", "Conditional on Y", "Conditional on Z"),
Parameter = c(
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ"
),
Deviance = c("0.000", "0.058349", "30.424", "1.7517", "8.5403"),
Parameters = c(8, 7, 6, 6, 6),
df = c(0, 1, 2, 2, 2),
AIC = c(60.839, 58.898, 87.263, 58.591, 65.38)
)
knitr::kable(model_loglin, align = "l")
| Model | Parameter | Deviance | Parameters | df | AIC |
|---|---|---|---|---|---|
| Saturated | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ | 0.000 | 8 | 0 | 60.839 |
| Homogenous | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ | 0.058349 | 7 | 1 | 58.898 |
| Conditional on X | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ | 30.424 | 6 | 2 | 87.263 |
| Conditional on Y | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ | 1.7517 | 6 | 2 | 58.591 |
| Conditional on Z | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ | 8.5403 | 6 | 2 | 65.380 |
uji_interaksi <- data.frame(
Interaksi = c("XYZ", "YZ", "XZ", "XY"),
Pengujian = c("Saturated vs Homogenous",
"Conditional on X vs Homogenous",
"Conditional on Y vs Homogenous",
"Conditional on Z vs Homogenous"),
Delta_Deviance = c(0.58349, 30.36578, 1.6933, 8.482),
df = c(2, 1, 1, 1),
Chi_Square = c(5.991, 3.841, 3.841, 3.841),
Keputusan = c("Terima H₀", "Tolak H₀", "Terima H₀", "Tolak H₀"),
Keterangan = c("tidak ada interaksi", "ada interaksi", "tidak ada interaksi", "ada interaksi"),
stringsAsFactors = FALSE
)
knitr::kable(uji_interaksi, booktabs = TRUE, align = "l")
| Interaksi | Pengujian | Delta_Deviance | df | Chi_Square | Keputusan | Keterangan |
|---|---|---|---|---|---|---|
| XYZ | Saturated vs Homogenous | 0.58349 | 2 | 5.991 | Terima H₀ | tidak ada interaksi |
| YZ | Conditional on X vs Homogenous | 30.36578 | 1 | 3.841 | Tolak H₀ | ada interaksi |
| XZ | Conditional on Y vs Homogenous | 1.69330 | 1 | 3.841 | Terima H₀ | tidak ada interaksi |
| XY | Conditional on Z vs Homogenous | 8.48200 | 1 | 3.841 | Tolak H₀ | ada interaksi |
Dari hasil di atas diketahui bahwa asosiasi yang nyata hanya terdapat interaksi antara Intercouse dan Ras serta jenis kelamin dan intercouse. Sehingga, model terbaik adalah:
\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{YZ} + \lambda_{ij}^{XY} \]
Model terbaik dipilih berdasarkan pengujian interaksi yang signifkan, yaitu model conditional on Y yaitu model yang hanya terdapat interaksi dua arah antara intercouse (Y) dan ras (Z) serta jenis kelamin (X) dan intercouse (Y).
\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{YZ} + \lambda_{ij}^{XY} \]
# Model Terbaik
bestmodel <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + y.int*z.race,
family = poisson(link = "log"))
summary(bestmodel)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4631 0.1394 24.844 < 2e-16 ***
## x.sexMale -0.1641 0.1085 -1.512 0.13044
## y.intYes -0.4475 0.2270 -1.971 0.04868 *
## z.raceWhite 1.5679 0.1431 10.955 < 2e-16 ***
## x.sexMale:y.intYes 0.5696 0.2156 2.641 0.00826 **
## y.intYes:z.raceWhite -1.2656 0.2336 -5.417 6.05e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.3784 on 7 degrees of freedom
## Residual deviance: 1.7517 on 2 degrees of freedom
## AIC: 58.591
##
## Number of Fisher Scoring iterations: 4
# Interpretasi koefisien model terbaik
data.frame(
koef = bestmodel$coefficients,
exp_koef = exp(bestmodel$coefficients)
)
\[ \exp(\lambda^{X}_{Male}) = \exp(-0.164) = 0.8486 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan ras dan intercouse, peluang seseorang berjenis kelamin laki-laki adalah 0.8486 kali dibandingkan perempuan.
\[ \exp(\lambda^{Y}_{Yes}) = \exp(-0.448) = 0.639 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan jenis kelamin dan ras, peluang seseorang melakukan intercouse adalah 0.639 kali dibandingkan yang tidak.
\[ \exp(\lambda^{Z}_{White}) = \exp(1.568) = 4.797 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan jenis kelamin dan intercouse, peluang seseorang memiliki ras putih adalah 4.797 kali dibandingkan ras hitam.
\[ \exp(\lambda^{XY}_{Male,Yes}) = \exp(0.570) = 1.768 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan ras, odds seseorang melakukan intercouse (dibandingkan tidak) jika dia laki - laki adalah 1.768 dibandingkan odds yang sama dibandingkan dia perempuan.
\[ \exp(\lambda^{YZ}_{Yes,White}) = \exp(-1.266) = 0.282 \Rightarrow \text{nilai odds ratio} \] Tanpa memperhatikan jenis kelamin, odds seseorang memiliki ras putih (dibandingkan ras hitam) jika dia melakukan intercouse adalah 0.282 dibandingkan odds yang sama jika dia belum melakukan intercouse.
# Fitted values dari model terbaik
data.frame(
race = z.race,
sex = x.sex,
int = y.int,
counts = counts,
fitted = bestmodel$fitted.values
)
Secara manual, nilai fitted value diperoleh dengan cara sebagai berikut:
\[ \hat{\mu}_{111} = \exp(\lambda + \lambda^x_{\text{male}} + \lambda^y_{\text{yes}} + \lambda^z_{\text{white}} + \lambda^{xy}_{\text{male, yes}}) \]
\[ = \exp(3.463 - 0.164 - 0.448 + 1.568 + 0.570) \]
\[ = \exp(4.989) = 146.153 \]
\[ \hat{\mu}_{112} = \exp(\lambda + \lambda^x_{\text{male}} + \lambda^y_{\text{yes}} + \lambda^z_{\text{black}} + \lambda^{xy}_{\text{male, yes}}) \]
\[ = \exp(3.463 - 0.164 - 0.448 + 0 + 0.570) \]
\[ = \exp(3.421) = 30.60 \]
\[ \hat{\mu}_{121} = \exp(\lambda + \lambda^x_{\text{male}} + \lambda^y_{\text{no}} + \lambda^z_{\text{white}} + \lambda^{xy}_{\text{male, no}}) \]
\[ = \exp(3.463 - 0.164 + 0 + 1.568 + 0) \]
\[ = \exp(4.867) = 129.768 \]
\[ \hat{\mu}_{122} = \exp(\lambda + \lambda^x_{\text{male}} + \lambda^y_{\text{no}} + \lambda^z_{\text{black}} + \lambda^{xy}_{\text{male, no}}) \]
\[ = \exp(3.463 - 0.164 + 0 + 0 + 0) \]
\[ = \exp(3.299) = 27.072 \]
\[ \hat{\mu}_{211} = \exp(\lambda + \lambda^x_{\text{female}} + \lambda^y_{\text{yes}} + \lambda^z_{\text{white}} + \lambda^{xy}_{\text{female, yes}}) \]
\[ = \exp(3.463 + 0 - 0.448 + 1.568 + 0) \]
\[ = \exp(4.583) = 97.806 \]
\[ \hat{\mu}_{212} = \exp(\lambda + \lambda^x_{\text{female}} + \lambda^y_{\text{yes}} + \lambda^z_{\text{black}} + \lambda^{xy}_{\text{female, yes}}) \]
\[ = \exp(3.463 + 0 - 0.448 + 0 + 0) \]
\[ = \exp(3.015) = 20.404 \]
\[ \hat{\mu}_{221} = \exp(\lambda + \lambda^x_{\text{female}} + \lambda^y_{\text{no}} + \lambda^z_{\text{white}} + \lambda^{xy}_{\text{female, no}}) \]
\[ = \exp(3.463 + 0 + 0 + 1.568 + 0) \]
\[ = \exp(5.031) = 153.040 \]
\[ \hat{\mu}_{222} = \exp(\lambda + \lambda^x_{\text{female}} + \lambda^y_{\text{no}} + \lambda^z_{\text{black}} + \lambda^{xy}_{\text{female, no}}) \]
\[ = \exp(3.463 + 0 + 0 + 0 + 0) \]
\[ = \exp(3.463) = 31.939 \]
Keterangan: nilai bisa berbeda dikarenakan pembulatan. Untuk kasus \[\hat{\mu}_{111}\] dan \[\hat{\mu}_{211}\]terdapat perbedaan nilai dikarenakan kesalahan dalam berhitung.
Diketahui data mengenai hubungan metode pengobatan dan penyembuhan penyakit kanker
| Cancer Controlled | Cancer Not Controlled | Total | |
|---|---|---|---|
| Surgery | 21 | 2 | 23 |
| Radiation Therapy | 15 | 3 | 18 |
| Total | 36 | 5 | 41 |
Source : Reprinted with permisiion from W.M. Mendenhall, R.R. Million D.E. Sharkey, and N.J. Cassisi, Internat. J. Radiat. Oncol. Biol. Phys. 10: 357-363 (1984), Pergamon Press plc.
Tentukan Peluang bersama, peluang marginal, peluang bersyarat serta ukuran asosiasinya!
#Peluang bersama, peluang marginal, dan peluang bersyarat
#Data
data <- matrix(c(21,2,15,3), nrow = 2, byrow = TRUE)
colnames(data) <- c("Cancer Controlled", "Cancer Not Controlled")
rownames(data) <- c("Surgery","Radiation Therapy")
n <- sum(data)
#Peluang Bersama
p_bersama <- data/n
#Peluang Marginal
p_marginal_baris <- rowSums(data)/n
p_marginal_kolumn <- colSums(data)/n
#Peluang Bersyarat
p_bersyarat <- data / rowSums(data)
#Hasil
list(Peluang_Bersama = p_bersama, Peluang_Marginal_Baris = p_marginal_baris, Peluang_Marginal_Kolumn = p_marginal_kolumn, Peluang_Bersyarat = p_bersyarat)
## $Peluang_Bersama
## Cancer Controlled Cancer Not Controlled
## Surgery 0.5121951 0.04878049
## Radiation Therapy 0.3658537 0.07317073
##
## $Peluang_Marginal_Baris
## Surgery Radiation Therapy
## 0.5609756 0.4390244
##
## $Peluang_Marginal_Kolumn
## Cancer Controlled Cancer Not Controlled
## 0.8780488 0.1219512
##
## $Peluang_Bersyarat
## Cancer Controlled Cancer Not Controlled
## Surgery 0.9130435 0.08695652
## Radiation Therapy 0.8333333 0.16666667
Intepretasi : Dikarenakan 𝑃(Cancer Controlled|Surgery) >𝑃(Cancer Controlled|Radiation Therapy) maka dapat disimpulkan bahwa penyembuhan kanker lebih optimal dengan metode operasi dibandingkan dengan metode terapi radiasi.
#Ukuran Asosiasi
# Data
a <- 21
b <- 2
c <- 15
d <- 3
# Risk Difference
RD <- (a / (a + b)) - (c / (c + d))
# Relative Risk
RR <- (a / (a + b)) / (c / (c + d))
# Odds Ratio
OR <- (a * d) / (b * c)
#Hasil
list(Risk_Difference = RD, Relative_Risk = RR, Odds_Ratio = OR)
## $Risk_Difference
## [1] 0.07971014
##
## $Relative_Risk
## [1] 1.095652
##
## $Odds_Ratio
## [1] 2.1
Intepretasi : - RD = 0.0797 → Terdapat perbedaan risiko sebesar 7.97% lebih tinggi pada pasien yang menjalani operasi dibanding terapi radiasi.
RR = 1.0952 → Pasien operasi memiliki kemungkinan 1.095 kali lebih besar untuk mengontrol kanker.
OR = 2.10 → Peluang kontrol kanker pada pasien operasi 2.1 kali lebih besar dibanding terapi radiasi.
Tabel berikut menunjukkan data mengenai peristiwa pertama kali melakukan hubungan seksual pada remaja berusia 15 dan 16 tahun berdasarkan ras dan jenis kelamin.
| Ras | Jenis Kelamin | Ya (Intercourse) | Tidak (No) |
|---|---|---|---|
| Putih | Laki-laki | 43 | 134 |
| Putih | Perempuan | 26 | 149 |
| Hitam | Laki-laki | 29 | 23 |
| Hitam | Perempuan | 22 | 36 |
Sumber: S. P. Morgan dan J. D. Tenchman, J.{Marriage Fam.} 50: 929–936 (1988). Dicetak kembali dengan izin dari National Council on Family Relations.
Tentukan model terbaiknya menggunakan model apa dan intepretasikan hasil koefisiennya!
# Input data
z.race <- factor(rep(c("White", "Black"), each = 4))
x.sex <- factor(rep(c("Male", "Female"), each = 2, times = 2))
y.int <- factor(rep(c("Yes", "No"), times = 4))
counts <- c(43, 134, 26, 149, 29, 23, 22, 36)
data <- data.frame(
Race = z.race,
Jenis_Kelamin = x.sex,
Intercouse = y.int,
Frekuensi = counts
)
data
# Model saturated
model_saturated <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + x.sex*z.race + y.int*z.race +
x.sex*y.int*z.race,
family = poisson(link = "log"))
summary(model_saturated)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## x.sex * z.race + y.int * z.race + x.sex * y.int * z.race,
## family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.5835 0.1667 21.501 < 2e-16 ***
## x.sexMale -0.4480 0.2669 -1.678 0.09327 .
## y.intYes -0.4925 0.2706 -1.820 0.06878 .
## z.raceWhite 1.4204 0.1857 7.649 2.03e-14 ***
## x.sexMale:y.intYes 0.7243 0.3888 1.863 0.06251 .
## x.sexMale:z.raceWhite 0.3419 0.2923 1.170 0.24208
## y.intYes:z.raceWhite -1.2534 0.3441 -3.642 0.00027 ***
## x.sexMale:y.intYes:z.raceWhite -0.1151 0.4765 -0.241 0.80919
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2.8238e+02 on 7 degrees of freedom
## Residual deviance: 3.9968e-15 on 0 degrees of freedom
## AIC: 60.839
##
## Number of Fisher Scoring iterations: 3
# Homogenous Model
model_homogenous <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + x.sex*z.race + y.int*z.race,
family = poisson(link = "log"))
summary(model_homogenous)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## x.sex * z.race + y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.5693 0.1571 22.724 < 2e-16 ***
## x.sexMale -0.4120 0.2206 -1.868 0.06176 .
## y.intYes -0.4555 0.2221 -2.050 0.04032 *
## z.raceWhite 1.4380 0.1718 8.372 < 2e-16 ***
## x.sexMale:y.intYes 0.6478 0.2250 2.879 0.00399 **
## x.sexMale:z.raceWhite 0.2987 0.2304 1.296 0.19483
## y.intYes:z.raceWhite -1.3135 0.2378 -5.524 3.32e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.378444 on 7 degrees of freedom
## Residual deviance: 0.058349 on 1 degrees of freedom
## AIC: 58.898
##
## Number of Fisher Scoring iterations: 3
# Conditional Association on X
model_conditional_X <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + x.sex*z.race,
family = poisson(link = "log"))
summary(model_conditional_X)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## x.sex * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.8298 0.1355 28.268 < 2e-16 ***
## x.sexMale -0.2560 0.1990 -1.287 0.19823
## y.intYes -1.3492 0.1620 -8.329 < 2e-16 ***
## z.raceWhite 1.1043 0.1515 7.289 3.13e-13 ***
## x.sexMale:y.intYes 0.5696 0.2156 2.641 0.00826 **
## x.sexMale:z.raceWhite 0.1206 0.2187 0.551 0.58147
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.378 on 7 degrees of freedom
## Residual deviance: 30.424 on 2 degrees of freedom
## AIC: 87.263
##
## Number of Fisher Scoring iterations: 4
# Conditional Association on Y
model_conditional_Y <- glm(counts ~ x.sex + y.int + z.race +
x.sex*y.int + y.int*z.race,
family = poisson(link = "log"))
summary(model_conditional_Y)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * y.int +
## y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4631 0.1394 24.844 < 2e-16 ***
## x.sexMale -0.1641 0.1085 -1.512 0.13044
## y.intYes -0.4475 0.2270 -1.971 0.04868 *
## z.raceWhite 1.5679 0.1431 10.955 < 2e-16 ***
## x.sexMale:y.intYes 0.5696 0.2156 2.641 0.00826 **
## y.intYes:z.raceWhite -1.2656 0.2336 -5.417 6.05e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.3784 on 7 degrees of freedom
## Residual deviance: 1.7517 on 2 degrees of freedom
## AIC: 58.591
##
## Number of Fisher Scoring iterations: 4
# Conditional Association on Z
model_conditional_Z <- glm(counts ~ x.sex + y.int + z.race +
x.sex*z.race + y.int*z.race,
family = poisson(link = "log"))
summary(model_conditional_Z)
##
## Call:
## glm(formula = counts ~ x.sex + y.int + z.race + x.sex * z.race +
## y.int * z.race, family = poisson(link = "log"))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4375 0.1584 21.697 < 2e-16 ***
## x.sexMale -0.1092 0.1910 -0.572 0.567
## y.intYes -0.1457 0.1912 -0.762 0.446
## z.raceWhite 1.5091 0.1775 8.502 < 2e-16 ***
## x.sexMale:z.raceWhite 0.1206 0.2187 0.551 0.581
## y.intYes:z.raceWhite -1.2656 0.2336 -5.417 6.05e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 282.3784 on 7 degrees of freedom
## Residual deviance: 8.5403 on 2 degrees of freedom
## AIC: 65.38
##
## Number of Fisher Scoring iterations: 4
Model log linier dengan berbagai kombinasi parameter:
model_loglin <- data.frame(
Model = c("Saturated", "Homogenous", "Conditional on X", "Conditional on Y", "Conditional on Z"),
Parameter = c(
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ",
"λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ"
),
Deviance = c("0.000", "0.058349", "30.424", "1.7517", "8.5403"),
Parameters = c(8, 7, 6, 6, 6),
df = c(0, 1, 2, 2, 2),
AIC = c(60.839, 58.898, 87.263, 58.591, 65.38)
)
knitr::kable(model_loglin, align = "l")
| Model | Parameter | Deviance | Parameters | df | AIC |
|---|---|---|---|---|---|
| Saturated | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ | 0.000 | 8 | 0 | 60.839 |
| Homogenous | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ | 0.058349 | 7 | 1 | 58.898 |
| Conditional on X | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ | 30.424 | 6 | 2 | 87.263 |
| Conditional on Y | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ | 1.7517 | 6 | 2 | 58.591 |
| Conditional on Z | λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ | 8.5403 | 6 | 2 | 65.380 |
uji_interaksi <- data.frame(
Interaksi = c("XYZ", "YZ", "XZ", "XY"),
Pengujian = c("Saturated vs Homogenous",
"Conditional on X vs Homogenous",
"Conditional on Y vs Homogenous",
"Conditional on Z vs Homogenous"),
Delta_Deviance = c(0.58349, 30.36578, 1.6933, 8.482),
df = c(2, 1, 1, 1),
Chi_Square = c(5.991, 3.841, 3.841, 3.841),
Keputusan = c("Terima H₀", "Tolak H₀", "Terima H₀", "Tolak H₀"),
Keterangan = c("tidak ada interaksi", "ada interaksi", "tidak ada interaksi", "ada interaksi"),
stringsAsFactors = FALSE
)
knitr::kable(uji_interaksi, booktabs = TRUE, align = "l")
| Interaksi | Pengujian | Delta_Deviance | df | Chi_Square | Keputusan | Keterangan |
|---|---|---|---|---|---|---|
| XYZ | Saturated vs Homogenous | 0.58349 | 2 | 5.991 | Terima H₀ | tidak ada interaksi |
| YZ | Conditional on X vs Homogenous | 30.36578 | 1 | 3.841 | Tolak H₀ | ada interaksi |
| XZ | Conditional on Y vs Homogenous | 1.69330 | 1 | 3.841 | Terima H₀ | tidak ada interaksi |
| XY | Conditional on Z vs Homogenous | 8.48200 | 1 | 3.841 | Tolak H₀ | ada interaksi |
Dari hasil di atas diketahui bahwa asosiasi yang nyata hanya terdapat interaksi antara Intercouse dan Ras serta jenis kelamin dan intercouse. Sehingga, model terbaik adalah:
\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{YZ} + \lambda_{ij}^{XY} \]
# Interpretasi koefisien model terbaik
data.frame(
koef = bestmodel$coefficients,
exp_koef = exp(bestmodel$coefficients)
)
\[ \exp(\lambda^{X}_{Male}) = \exp(-0.164) = 0.8486 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan ras dan intercouse, peluang seseorang berjenis kelamin laki-laki adalah 0.8486 kali dibandingkan perempuan.
\[ \exp(\lambda^{Y}_{Yes}) = \exp(-0.448) = 0.639 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan jenis kelamin dan ras, peluang seseorang melakukan intercouse adalah 0.639 kali dibandingkan yang tidak.
\[ \exp(\lambda^{Z}_{White}) = \exp(1.568) = 4.797 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan jenis kelamin dan intercouse, peluang seseorang memiliki ras putih adalah 4.797 kali dibandingkan ras hitam.
\[ \exp(\lambda^{XY}_{Male,Yes}) = \exp(0.570) = 1.768 \Rightarrow \text{nilai odds} \] Tanpa memperhatikan ras, odds seseorang melakukan intercouse (dibandingkan tidak) jika dia laki - laki adalah 1.768 dibandingkan odds yang sama dibandingkan dia perempuan.
\[ \exp(\lambda^{YZ}_{Yes,White}) = \exp(-1.266) = 0.282 \Rightarrow \text{nilai odds ratio} \] Tanpa memperhatikan jenis kelamin, odds seseorang memiliki ras putih (dibandingkan ras hitam) jika dia melakukan intercouse adalah 0.282 dibandingkan odds yang sama jika dia belum melakukan intercouse.