Kata Pengantar

Analisis data kategori memainkan peran penting dalam berbagai bidang, terutama dalam penelitian kesehatan, di mana hubungan antara paparan (exposure) dan hasil (outcome) sering kali menjadi fokus utama. Contohnya, hubungan antara kebiasaan merokok dan kejadian penyakit jantung sering dianalisis menggunakan pendekatan statistik seperti tabel kontingensi dan model regresi. Tabel kontingensi, baik dua arah (2x2) maupun tiga arah, memungkinkan kita untuk menghitung peluang, mengukur asosiasi, dan melakukan inferensi statistik guna memahami hubungan antar variabel kategori. Sementara itu, Generalized Linear Model (GLM) memberikan kerangka yang lebih fleksibel untuk memodelkan data yang tidak memenuhi asumsi normalitas, seperti data biner (misalnya, regresi logistik) atau data hitungan (misalnya, regresi Poisson). Pendekatan ini sangat relevan untuk analisis data kesehatan, di mana distribusi respons sering kali bersifat non-normal.

E-book ini disusun untuk memberikan panduan komprehensif tentang analisis data kategori menggunakan tabel kontingensi dan GLM, dengan fokus pada penerapan praktis dalam konteks kesehatan. Tujuan utama e-book ini adalah untuk membantu pembaca memahami konsep dasar analisis data kategori, mulai dari perhitungan peluang dan ukuran asosiasi, hingga inferensi statistik dan pemodelan menggunakan GLM. Selain itu, e-book ini juga bertujuan untuk membekali pembaca dengan keterampilan praktis dalam menggunakan perangkat lunak R untuk analisis data, termasuk simulasi data, estimasi parameter, dan diagnostik model. Dengan pendekatan yang menggabungkan teori, contoh soal, dan penyelesaian langkah demi langkah, e-book ini diharapkan dapat menjadi sumber belajar yang bermanfaat bagi pembaca yang ingin mendalami analisis statistik.

Struktur e-book ini terdiri dari tujuh bab yang disusun secara sistematis. Bab 1, berjudul Tabel Kontingensi 2x2, membahas dasar-dasar analisis data kategori menggunakan tabel kontingensi 2x2, termasuk perhitungan peluang bersama, marginal, dan bersyarat, serta ukuran asosiasi seperti Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR). Bab 2, Inferensi Tabel Kontingensi Dua Arah, melanjutkan dengan inferensi statistik, termasuk estimasi parameter, pengujian hipotesis (uji Chi-Square, uji Fisher Exact), dan analisis residual. Bab 3, Tabel Kontingensi Tiga Arah, memperluas analisis ke tabel tiga arah, dengan fokus pada interaksi antar variabel, independensi bersyarat, dan uji homogenitas odds ratio menggunakan statistik Breslow-Day. Bab 4, Generalized Linear Model (GLM), memperkenalkan GLM sebagai alat untuk memodelkan data biner dan hitungan, termasuk regresi logistik dan Poisson. Bab 5, Inferensi GLM, membahas inferensi statistik dalam GLM, seperti perhitungan ekspektasi dan variansi, penaksiran parameter, dan diagnostik model. Bab 6, Daftar Pustaka, menyediakan referensi utama yang digunakan dalam penyusunan e-book ini. Terakhir, Bab 7, Penutupan, memberikan ringkasan materi dan saran untuk pembaca yang ingin melanjutkan studi lebih lanjut.

E-book ini ditujukan untuk pembaca yang memiliki dasar pengetahuan statistik, seperti mahasiswa tingkat lanjut di bidang statistik, kesehatan masyarakat, atau ilmu sosial, serta peneliti yang ingin menerapkan analisis data kategori dalam penelitian mereka. Namun, pembaca pemula yang memiliki minat untuk belajar statistik juga dapat memanfaatkan e-book ini dengan mempelajari konsep dasar terlebih dahulu. Dengan menggunakan contoh data kesehatan (misalnya, hubungan merokok dan penyakit jantung) dan kode R yang praktis, e-book ini dirancang untuk memudahkan pembaca dalam memahami dan mengaplikasikan materi yang dibahas.

Kami berharap e-book ini dapat menjadi sumber belajar yang bermanfaat dan menginspirasi pembaca untuk mengeksplorasi lebih jauh dunia analisis data kategori. Selamat membaca dan selamat belajar!

BAB 1: Tabel Kontingensi 2x2

Contoh Soal

Sebuah penelitian dilakukan untuk mengevaluasi hubungan antara kebiasaan merokok (paparan) dan kejadian penyakit jantung (outcome) pada 200 orang. Data yang diperoleh disajikan dalam tabel berikut:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak) Total
Merokok 50 30 80
Tidak Merokok 20 100 120
Total 70 130 200

Berdasarkan data tersebut, hitunglah:
1. Peluang bersama (joint probability).
2. Peluang marginal (marginal probability).
3. Peluang bersyarat (conditional probability).
4. Ukuran asosiasi: Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR).

Penyelesaian

1.1 Distribusi Peluang dalam Tabel Kontingensi 2x2

Tabel kontingensi 2x2 adalah alat statistik yang digunakan untuk menganalisis hubungan antara dua variabel kategori, masing-masing memiliki dua level (biner). Tabel ini sering digunakan dalam studi kesehatan untuk membandingkan paparan (exposure) dan hasil (outcome), misalnya hubungan antara kebiasaan merokok dan penyakit jantung. Struktur tabel kontingensi 2x2 dapat ditulis sebagai berikut:

Outcome 1 | Outcome 0 | Total |
Exposure 1 a b a + b
Exposure 0 c d c + d
Total a + c b + d n

Di mana:
- \(a\): Jumlah kasus dengan paparan 1 dan outcome 1.
- \(b\): Jumlah kasus dengan paparan 1 dan outcome 0.
- \(c\): Jumlah kasus dengan paparan 0 dan outcome 1.
- \(d\): Jumlah kasus dengan paparan 0 dan outcome 0.
- \(n = a + b + c + d\): Total sampel.

Bagian ini akan membahas distribusi peluang yang dapat dihitung dari tabel kontingensi, yaitu peluang bersama, peluang marginal, dan peluang bersyarat.

1.1.1 Peluang Bersama

Peluang bersama (joint probability) adalah peluang dua kejadian terjadi bersamaan, dihitung sebagai proporsi frekuensi masing-masing sel terhadap total sampel. Rumusnya adalah:

\[ P(X = x, Y = y) = \frac{\text{frekuensi sel}}{n} \]

Berdasarkan tabel:
- \(a = 50\), \(b = 30\), \(c = 20\), \(d = 100\), dan \(n = 200\).

Maka:

\(P(\text{Merokok, Penyakit Jantung Ya}) = \frac{a}{n} = \frac{50}{200} = 0.25\)

\(P(\text{Merokok, Penyakit Jantung Tidak}) = \frac{b}{n} = \frac{30}{200} = 0.15\)

\(P(\text{Tidak Merokok, Penyakit Jantung Ya}) = \frac{c}{n} = \frac{20}{200} = 0.1\)

\(P(\text{Tidak Merokok, Penyakit Jantung Tidak}) = \frac{d}{n} = \frac{100}{200} = 0.5\)

Kita dapat menghitungnya menggunakan R:

# Definisikan data
a <- 50  # Merokok, Penyakit Jantung Ya
b <- 30  # Merokok, Penyakit Jantung Tidak
c <- 20  # Tidak Merokok, Penyakit Jantung Ya
d <- 100  # Tidak Merokok, Penyakit Jantung Tidak
n <- a + b + c + d  # Total sampel

# Hitung peluang bersama
p_merokok_ya <- a / n
p_merokok_tidak <- b / n
p_tidak_merokok_ya <- c / n
p_tidak_merokok_tidak <- d / n
Penyakit Jantung: Ya Penyakit Jantung: Tidak Total
Merokok 0.25 0.15 0.40
Tidak Merokok 0.10 0.50 0.60
Total 0.35 0.65 1.00

1.1.2 Peluang Marginal

Peluang marginal (marginal probability) adalah peluang suatu variabel tanpa mempedulikan variabel lainnya, dihitung dari total baris atau kolom. Rumusnya adalah:

Untuk paparan: \[ P(\text{Exposure 1}) = \frac{a + b}{n}, \quad P(\text{Exposure 0}) = \frac{c + d}{n} \] Untuk outcome: \[ P(\text{Outcome 1}) = \frac{a + c}{n}, \quad P(\text{Outcome 0}) = \frac{b + d}{n} \] Berdasarkan tabel:

\(P(\text{Merokok}) = \frac{a + b}{n} = \frac{50 + 30}{200} = \frac{80}{200} = 0.4\) \(P(\text{Tidak Merokok}) = \frac{c + d}{n} = \frac{20 + 100}{200} = \frac{120}{200} = 0.6\) \(P(\text{Penyakit Jantung Ya}) = \frac{a + c}{n} = \frac{50 + 20}{200} = \frac{70}{200} = 0.35\) \(P(\text{Penyakit Jantung Tidak}) = \frac{b + d}{n} = \frac{30 + 100}{200} = \frac{130}{200} = 0.65\)

Kode R untuk menghitung:

# Hitung peluang marginal
p_merokok <- (a + b) / n
p_tidak_merokok <- (c + d) / n
p_penyakit_ya <- (a + c) / n
p_penyakit_tidak <- (b + d) / n
Variabel Kategori Peluang
Merokok Merokok 0.40
Tidak Merokok 0.60
Penyakit Jantung Ya 0.35
Tidak 0.65

1.1.3 Peluang Bersyarat

Peluang bersyarat (conditional probability) adalah peluang suatu kejadian terjadi dengan syarat kejadian lain telah terjadi. Rumusnya adalah:

\[ P(Y|X) = \frac{P(X, Y)}{P(X)} \]

Kita akan menghitung:

Peluang seseorang memiliki penyakit jantung jika mereka merokok:
\[ P(\text{Penyakit Jantung Ya} \| \text{Merokok}) = \frac{P(\text{Merokok, Penyakit Jantung Ya})}{P(\text{Merokok})} = \frac{\frac{a}{n}}{\frac{a + b}{n}} = \frac{a}{a + b} \ \]

Peluang seseorang memiliki penyakit jantung jika mereka tidak merokok:

\[ P(\text{Penyakit Jantung Ya} \| \text{Tidak Merokok}) = \frac{P(\text{Tidak Merokok, Penyakit Jantung Ya})}{P(\text{Tidak Merokok})} = \frac{\frac{c}{n}}{\frac{c + d}{n}} = \frac{c}{c + d} \ \]

Berdasarkan tabel: \(P(\text{Penyakit Jantung Ya} | \text{Merokok}) = \frac{a}{a + b} = \frac{50}{50 + 30} = \frac{50}{80} = 0.625\) \(P(\text{Penyakit Jantung Ya} | \text{Tidak Merokok}) = \frac{c}{c + d} = \frac{20}{20 + 100} = \frac{20}{120} \approx 0.167\)

Kode R:

# Hitung peluang bersyarat
p_penyakit_ya_merokok <- a / (a + b)
p_penyakit_ya_tidak_merokok <- c / (c + d)
Kondisi Peluang Bersyarat
P(Penyakit Jantung Ya Merokok)
P(Penyakit Jantung Ya Tidak Merokok)

1.2 Ukuran Asosiasi dalam Data Kategori 2x2

Setelah menghitung distribusi peluang, kita dapat mengukur asosiasi antara paparan dan outcome menggunakan tiga ukuran utama: Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR).

1.2.1 Risk Difference (RD)

Risk Difference (RD) mengukur perbedaan absolut antara risiko outcome pada kelompok terpapar dan tidak terpapar. Rumusnya adalah:

\[ \text{RD} = P(\text{Outcome 1} | \text{Exposure 1}) - P(\text{Outcome 1} | \text{Exposure 0}) \]

Dari perhitungan sebelumnya:

\(P(\text{Penyakit Jantung Ya} | \text{Merokok}) = 0.625\) \(P(\text{Penyakit Jantung Ya} | \text{Tidak Merokok}) = 0.167\) \[ \text{RD} = 0.625 - 0.167 = 0.458 \] Kode R:

# Hitung Risk Difference
RD <- p_penyakit_ya_merokok - p_penyakit_ya_tidak_merokok

# Tampilkan hasil
cat("Risk Difference (RD): ", RD, "\n")
## Risk Difference (RD):  0.4583333

Interpretasi: Risiko penyakit jantung pada perokok lebih tinggi sebesar 0.458 dibandingkan non-perokok.

1.2.2 Relative Risk (RR)

Relative Risk (RR) mengukur rasio risiko outcome pada kelompok terpapar dibandingkan kelompok tidak terpapar. Rumusnya adalah:

\[ \text{RR} = \frac{P(\text{Outcome 1} | \text{Exposure 1})}{P(\text{Outcome 1} | \text{Exposure 0})} \]

Dari perhitungan sebelumnya:

\[ \text{RR} = \frac{0.625}{0.167} \approx 3.742 \]

Kode R:

# Hitung Relative Risk
RR <- p_penyakit_ya_merokok / p_penyakit_ya_tidak_merokok

# Tampilkan hasil
cat("Relative Risk (RR): ", RR, "\n")
## Relative Risk (RR):  3.75

Interpretasi: Perokok memiliki risiko 3.742 kali lebih tinggi untuk terkena penyakit jantung dibandingkan non-perokok.

1.2.3 Odds Ratio (OR)

Odds Ratio (OR) mengukur rasio odds outcome pada kelompok terpapar dibandingkan kelompok tidak terpapar. Langkah-langkah perhitungannya adalah:

Hitung odds untuk masing-masing kelompok: Odds untuk kelompok terpapar: \[ \text{Odds}_1 = \frac{P(\text{Outcome 1} | \text{Exposure 1})}{P(\text{Outcome 0} | \text{Exposure 1})} = \frac{a}{b} \] Odds untuk kelompok tidak terpapar: \[ \text{Odds}_0 = \frac{P(\text{Outcome 1} | \text{Exposure 0})}{P(\text{Outcome 0} | \text{Exposure 0})} = \frac{c}{d} \] Hitung Odds Ratio: \[ \text{OR} = \frac{\text{Odds}_1}{\text{Odds}_0} = \frac{\frac{a}{b}}{\frac{c}{d}} = \frac{a \cdot d}{b \cdot c} \] Berdasarkan tabel:

\(\text{Odds}_1 = \frac{a}{b} = \frac{50}{30} \approx 1.667\) \(\text{Odds}_0 = \frac{c}{d} = \frac{20}{100} = 0.2\) \(\text{OR} = \frac{a \cdot d}{b \cdot c} = \frac{50 \cdot 100}{30 \cdot 20} = \frac{5000}{600} \approx 8.333\)

Kode R:

# Hitung odds
odds_merokok <- a / b
odds_tidak_merokok <- c / d

# Hitung Odds Ratio
OR <- (a * d) / (b * c)
Kelompok Odds Penyakit Jantung
Merokok 1.6667
Tidak Merokok 0.2000
Perbandingan Odds Ratio (OR)
Merokok vs Tidak Merokok 8.3333

Interpretasi: Odds terkena penyakit jantung pada perokok 8.333 kali lebih tinggi dibandingkan non-perokok.

BAB 2: Inferensi Tabel Kontingensi Dua Arah

Inferensi tabel kontingensi dua arah bertujuan untuk menguji hubungan antara dua variabel kategori menggunakan metode statistik. Dalam konteks tabel 2x2, inferensi meliputi estimasi parameter (seperti proporsi atau ukuran asosiasi), pengujian hipotesis untuk menentukan apakah variabel saling independen atau berasosiasi, dan analisis residual untuk mendeteksi anomali dalam data. Bab ini akan membahas langkah-langkah inferensi secara sistematis, termasuk uji Chi-Square, uji Fisher Exact, estimasi interval kepercayaan, dan analisis residual.

Contoh Soal

Sebuah penelitian dilakukan untuk mengevaluasi hubungan antara kebiasaan merokok (paparan) dan kejadian penyakit jantung (outcome) pada 200 orang. Data yang diperoleh disajikan dalam tabel berikut:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak) Total
Merokok 50 30 80
Tidak Merokok 20 100 120
Total 70 130 200

Berdasarkan data tersebut, lakukan:
1. Estimasi titik dan interval kepercayaan untuk ukuran asosiasi (Odds Ratio dan Relative Risk).
2. Pengujian hipotesis untuk menentukan apakah terdapat hubungan antara kebiasaan merokok dan penyakit jantung (gunakan uji proporsi, uji asosiasi, dan uji independensi).
3. Analisis residual untuk mendeteksi adanya outlier atau anomali dalam data.

Gunakan tingkat signifikansi \(\alpha = 0.05\) untuk semua uji.

Penyelesaian

Kita akan memulai dengan mendefinisikan data dalam bentuk matriks untuk memudahkan perhitungan:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak) Total
Merokok a = 50 b = 30 a + b = 80
Tidak Merokok c = 20 d = 100 c + d = 120
Total a + c = 70 b + d = 130 n = 200

Kode R untuk mendefinisikan data:

# Definisikan data
  a <- 50  # Merokok, Penyakit Jantung Ya
b <- 30  # Merokok, Penyakit Jantung Tidak
c <- 20  # Tidak Merokok, Penyakit Jantung Ya
d <- 100  # Tidak Merokok, Penyakit Jantung Tidak
n <- a + b + c + d  # Total sampel

# Buat matriks untuk tabel kontingensi
data <- matrix(c(a, b, c, d), nrow = 2, byrow = TRUE)
rownames(data) <- c("Merokok", "Tidak Merokok")
colnames(data) <- c("Penyakit Jantung (Ya)", "Penyakit Jantung (Tidak)")

# Tampilkan matriks
print(data)
##               Penyakit Jantung (Ya) Penyakit Jantung (Tidak)
## Merokok                          50                       30
## Tidak Merokok                    20                      100

Perhitungan detail akan dilakukan pada subbab berikut sesuai dengan langkah-langkah inferensi.

2.1 Estimasi

Bagian ini membahas estimasi parameter dari tabel kontingensi, baik estimasi titik (nilai tunggal) maupun estimasi interval (rentang kepercayaan).

2.1.1 Estimasi Titik

Estimasi titik memberikan nilai tunggal sebagai perkiraan parameter populasi. Dalam tabel kontingensi 2x2, kita dapat menghitung estimasi titik untuk Odds Ratio (OR) dan Relative Risk (RR).

Estimasi Odds Ratio (OR) Rumus OR:

\[ \text{OR} = \frac{a \cdot d}{b \cdot c} \]

\[ \text{OR} = \frac{50 \cdot 100}{30 \cdot 20} = \frac{5000}{600} \approx 8.333 \]

Estimasi Relative Risk (RR) Rumus RR:

\[ \text{RR} = \frac{a/(a+b)}{c/(c+d)} \]

\[ \text{RR} = \frac{50/80}{20/120} = \frac{0.625}{0.167} \approx 3.742 \] Kode R:

# Hitung OR
OR <- (a * d) / (b * c)

# Hitung RR
p1 <- a / (a + b)  # P(Penyakit Jantung Ya | Merokok)
p2 <- c / (c + d)  # P(Penyakit Jantung Ya | Tidak Merokok)
RR <- p1 / p2
Estimasi Nilai
Odds Ratio (OR) 8.3333
Relative Risk (RR) 3.75

Interpretasi: Nilai RR sebesar 3.742 menunjukkan bahwa risiko seseorang yang merokok terkena penyakit jantung 3.742 kali lebih tinggi dibandingkan seseorang yang tidak merokok. Ini menunjukkan bahwa merokok meningkatkan risiko penyakit jantung secara signifikan.

2.1.2 Estimasi Interval

Estimasi interval memberikan rentang kepercayaan confidence interval (CI) untuk parameter populasi. Kita akan menghitung CI 95% untuk OR dan RR.

Interval Kepercayaan Odds Ratio (OR)

Langkah-langkah:

  1. Hitung \(\ln(\text{OR})\): \[ \ln(\text{OR}) = \ln(8.333) \approx 2.120 \]
  2. Hitung standard error (SE): \[ \text{SE}(\ln(\text{OR})) = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} \] \[ \text{SE}(\ln(\text{OR})) = \sqrt{\frac{1}{50} + \frac{1}{30} + \frac{1}{20} + \frac{1}{100}} \approx \sqrt{0.113} \approx 0.336 \]
  3. Hitung batas CI 95%: \[ \ln(\text{OR}) \pm 1.96 \times \text{SE} \]
  1. Batas bawah:
    \(2.120 - 1.96 \times 0.336 \approx 1.461\)

  2. Batas atas:
    \(2.120 + 1.96 \times 0.336 \approx 2.779\)

  3. Konversi ke skala OR: \[ \text{CI 95%} = (e^{1.461}, e^{2.779}) \approx (4.312, 16.087) \]

Interpretasi: Interval kepercayaan 95% untuk OR adalah (4.312, 16.087). Karena rentang ini tidak mencakup nilai 1, hubungan antara merokok dan penyakit jantung signifikan secara statistik. Rentang ini juga menunjukkan bahwa OR sebenarnya dapat bervariasi antara 4.312 hingga 16.087, yang tetap menunjukkan hubungan yang kuat.

Interval Kepercayaan Relative Risk (RR)

Langkah-langkah:

  1. Hitung \(\ln(\text{RR})\): \[ \ln(\text{RR}) = \ln(3.742) \approx 1.319 \]
  2. Hitung standard error (SE): \[ \text{SE}(\ln(\text{RR})) = \sqrt{\frac{1}{a} - \frac{1}{a+b} + \frac{1}{c} - \frac{1}{c+d}} \] \[ \text{SE}(\ln(\text{RR})) = \sqrt{\frac{1}{50} - \frac{1}{80} + \frac{1}{20} - \frac{1}{120}} \approx \sqrt{0.0492} \approx 0.222 \]
  3. Hitung batas CI 95%: \[ \ln(\text{RR}) \pm 1.96 \times \text{SE} \]
  1. Batas bawah:
    \(1.319 - 1.96\times 0.222 \approx 0.884\)

  2. Batas atas:
    \(1.319 + 1.96 \times 0.222\approx 1.754\)

  3. Konversi ke skala RR: \[ \text{CI 95%} = (e^{0.884}, e^{1.754}) \approx (2.421, 5.779) \]

Kode R:

# CI untuk OR
ln_OR <- log(OR)
SE_ln_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
lower_ln_OR <- ln_OR - 1.96 * SE_ln_OR
upper_ln_OR <- ln_OR + 1.96 * SE_ln_OR
lower_OR <- exp(lower_ln_OR)
upper_OR <- exp(upper_ln_OR)

# CI untuk RR
ln_RR <- log(RR)
SE_ln_RR <- sqrt(1/a - 1/(a+b) + 1/c - 1/(c+d))
lower_ln_RR <- ln_RR - 1.96 * SE_ln_RR
upper_ln_RR <- ln_RR + 1.96 * SE_ln_RR
lower_RR <- exp(lower_ln_RR)
upper_RR <- exp(upper_ln_RR)
Estimasi Nilai Interval Kepercayaan 95%
Odds Ratio (OR) 8.3333 (4.31, 16.12)
Relative Risk (RR) 3.75 (2.43, 5.79)

Interpretasi: Interval kepercayaan 95% untuk RR adalah (2.421, 5.779). Karena rentang ini tidak mencakup nilai 1, hubungan antara merokok dan penyakit jantung signifikan secara statistik. Rentang ini menunjukkan bahwa RR sebenarnya dapat bervariasi antara 2.421 hingga 5.779, yang tetap menunjukkan peningkatan risiko yang signifikan akibat merokok.

2.2 Uji Hipotesis

Bagian ini membahas pengujian hipotesis untuk menentukan hubungan antara variabel dalam tabel kontingensi.

2.2.1 Uji Proporsi

Uji proporsi membandingkan proporsi outcome antara dua kelompok (merokok dan tidak merokok).

Hipotesis:

\(H_0: p_1 = p_2\) (proporsi penyakit jantung sama di kedua kelompok)
\(H_1: p_1 \neq p_2\) (proporsi penyakit jantung berbeda)

Rumus statistik uji:

\[ z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}} \]

Di mana:

\(\hat{p}_1 = \frac{a}{a+b} = \frac{50}{80} = 0.625\)
\(\hat{p}_2 = \frac{c}{c+d} = \frac{20}{120} \approx 0.167\)
\(\hat{p} = \frac{a+c}{n} = \frac{50+20}{200} = 0.35\)
\(n_1 = a+b = 80\),
\(n_2 = c+d = 120\)

\[ z = \frac{0.625 - 0.167}{\sqrt{0.35 \times 0.65 \left(\frac{1}{80} + \frac{1}{120}\right)}} \approx \frac{0.458}{\sqrt{0.2275 \times 0.02083}} \approx \frac{0.458}{0.0688} \approx 6.657 \]

Titik Kritis: Nilai kritis untuk \(\alpha = 0.05\) (dua sisi) adalah \(z = \pm 1.96\).

Kode R:

# Uji proporsi
p1 <- a / (a + b)
p2 <- c / (c + d)
p_pool <- (a + c) / n
n1 <- a + b
n2 <- c + d
z <- (p1 - p2) / sqrt(p_pool * (1 - p_pool) * (1/n1 + 1/n2))

# Tampilkan hasil
cat("Statistik z: ", z, "\n")
## Statistik z:  6.657503

Interpretasi: Karena \(\|z\| = 6.657 \> 1.96\), kita tolak (H_0). Proporsi penyakit jantung berbeda secara signifikan antara perokok dan non-perokok, menunjukkan adanya perbedaan risiko yang nyata. Ini konsisten dengan estimasi RR sebelumnya.

2.2.2 Uji Asosiasi

Uji asosiasi menggunakan uji Fisher Exact untuk memeriksa hubungan antara variabel.

Hipotesis:

\(H_0\): Tidak ada asosiasi antara merokok dan penyakit jantung. \(H_1\): Terdapat asosiasi antara merokok dan penyakit jantung.

Uji Fisher Exact menghitung probabilitas eksak berdasarkan distribusi hipergeometrik, cocok untuk tabel 2x2.

Kode R:

# Uji Fisher Exact
fisher_test <- fisher.test(data)

# Tampilkan hasil
cat("P-value: ", fisher_test$p.value, "\n")
## P-value:  3.135278e-11

Interpretasi: P-value < 0.05, sehingga kita tolak (H_0). Terdapat asosiasi yang signifikan antara merokok dan penyakit jantung. Hasil ini mendukung temuan sebelumnya bahwa merokok meningkatkan risiko penyakit jantung secara signifikan.

2.2.3 Uji Independensi

Uji independensi menggunakan uji Chi-Square untuk menguji apakah variabel merokok dan penyakit jantung saling independen.

Hipotesis:

\(H_0\): Variabel merokok dan penyakit jantung independen. \(H_1\): Variabel merokok dan penyakit jantung tidak independen.

Rumus:

\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}}, \quad E_{ij} = \frac{(\text{total baris}_i) \times (\text{total kolom}_j)}{n} \]

\(E_{11} = \frac{80 \times 70}{200} = 28\)
\(E_{12} = \frac{80 \times 130}{200} = 52\)
\(E_{21} = \frac{120 \times 70}{200} = 42\)
\(E_{22} = \frac{120 \times 130}{200} = 78\)

\[ \chi^2 = \frac{(50-28)^2}{28} + \frac{(30-52)^2}{52} + \frac{(20-42)^2}{42} + \frac{(100-78)^2}{78} \approx 44.323 \] Derajat kebebasan: \(df = (2-1)(2-1) = 1\). Nilai kritis untuk \(\alpha = 0.05\) adalah 3.841.

Kode R:

# Uji Chi-Square
chi_test <- chisq.test(data, correct = FALSE)
Statistik Uji Nilai
Chi-Square 44.3223
p-value 2.78e-11

Interpretasi: Karena \(\chi^2 = 44.323 > 3.841\), kita tolak \(H_0\). Variabel merokok dan penyakit jantung tidak independen, yang menunjukkan adanya hubungan yang signifikan antara keduanya. Hasil ini konsisten dengan uji asosiasi sebelumnya.

2.3 Analisis Residual dalam Tabel Kontingensi

Analisis residual membantu mendeteksi anomali atau outlier dalam tabel kontingensi dengan membandingkan frekuensi yang diamati (\(O_{ij}\)) dan yang diharapkan (\(E_{ij}\)).

2.3.1 Jenis Residual

Dua jenis residual yang umum digunakan:

Residual Pearson: \[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \] Residual Standar (Adjusted Residual): \[ \text{Adjusted Residual} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij} \times (1 - \frac{\text{total baris}_i}{n}) \times (1 - \frac{\text{total kolom}_j}{n})}} \] Kita akan menghitung residual Pearson:

\(r_{11} = \frac{50-28}{\sqrt{28}} \approx \frac{22}{5.292} \approx 4.157\)
\(r_{12} = \frac{30-52}{\sqrt{52}} \approx \frac{-22}{7.211} \approx -3.051\)
\(r_{21} = \frac{20-42}{\sqrt{42}} \approx \frac{-22}{6.481} \approx -3.395\)
\(r_{22} = \frac{100-78}{\sqrt{78}} \approx \frac{22}{8.832} \approx 2.491\)

Kode R:

# Hitung frekuensi yang diharapkan
E11 <- (80 * 70) / 200
E12 <- (80 * 130) / 200
E21 <- (120 * 70) / 200
E22 <- (120 * 130) / 200

# Residual Pearson
r11 <- (50 - E11) / sqrt(E11)
r12 <- (30 - E12) / sqrt(E12)
r21 <- (20 - E21) / sqrt(E21)
r22 <- (100 - E22) / sqrt(E22)

Residual Pearson

Penyakit Jantung: Ya Penyakit Jantung: Tidak
Merokok 4.16 -3.05
Tidak Merokok -3.39 2.49

Interpretasi: Residual Pearson yang besar (misalnya, \(|r_{ij}| > 2\)) menunjukkan deviasi yang signifikan antara frekuensi yang diamati dan yang diharapkan. Sel (1,1) memiliki residual 4.157, yang jauh lebih besar dari 2, menunjukkan bahwa frekuensi perokok dengan penyakit jantung jauh lebih tinggi dari yang diharapkan. Hal ini konsisten dengan temuan sebelumnya bahwa merokok meningkatkan risiko penyakit jantung.

2.3.2 Deteksi Outlier dalam Analisis Data Kategori Menggunakan Residual

Residual yang besar (misalnya, \(|r_{ij}| > 2\)) dapat menunjukkan adanya anomali atau outlier. Dari hasil di atas:

\(r_{11} = 4.157 > 2\) (sel perokok dengan penyakit jantung
\(r_{12} = -3.051 < -2\) (sel perokok tanpa penyakit jantung
\(r_{21} = -3.395 < -2\) (sel non-perokok dengan penyakit jantung)
\(r_{22} = 2.491 > 2\) (sel non-perokok tanpa penyakit jantung)

Interpretasi: Semua sel memiliki residual Pearson yang absolutnya lebih besar dari 2, menunjukkan adanya deviasi signifikan dari model independensi. Sel (1,1) dengan residual 4.157 adalah yang paling menonjol, menunjukkan bahwa frekuensi perokok yang terkena penyakit jantung jauh lebih tinggi dari yang diharapkan. Ini menunjukkan adanya anomali yang mungkin perlu diteliti lebih lanjut, misalnya adanya faktor lain yang memengaruhi hubungan ini, seperti usia atau gaya hidup.

BAB 3: Tabel Kontingensi Tiga Arah

Tabel kontingensi tiga arah digunakan untuk menganalisis hubungan antara tiga variabel kategori, dengan fokus pada interaksi antar variabel. Bab ini akan membahas tabel parsial dan marginal, distribusi peluang bersyarat, ukuran asosiasi seperti odds ratio, independensi bersyarat, serta inferensi statistik seperti pengujian independensi bersyarat dan homogenitas odds ratio menggunakan statistik Breslow-Day.

Contoh Soal

Sebuah penelitian dilakukan untuk mengevaluasi hubungan antara kebiasaan merokok (Merokok/Tidak Merokok), penyakit jantung (Ya/Tidak), dan jenis kelamin (Laki-laki/Perempuan) pada 400 orang. Data disajikan dalam dua tabel kontingensi 2x2, masing-masing untuk laki-laki dan perempuan:

Tabel untuk Laki-laki:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak) Total
Merokok 40 30 70
Tidak Merokok 20 110 130
Total 60 140 200

Tabel untuk Perempuan:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak) Total
Merokok 20 30 50
Tidak Merokok 10 140 150
Total 30 170 200

Berdasarkan data tersebut, lakukan:
1. Hitung tabel marginal untuk hubungan merokok dan penyakit jantung (tanpa mempedulikan jenis kelamin).
2. Hitung peluang bersyarat \(P(\text{Penyakit Jantung Ya} | \text{Merokok}, \text{Jenis Kelamin})\). 3. Hitung odds ratio untuk setiap strata (laki-laki dan perempuan) dan uji homogenitas odds ratio menggunakan statistik Breslow-Day.
4. Uji independensi bersyarat antara merokok dan penyakit jantung pada setiap strata jenis kelamin.

Gunakan tingkat signifikansi \(\alpha = 0.05\) untuk semua uji.

Penyelesaian

Kita akan mendefinisikan data dalam bentuk matriks untuk memudahkan perhitungan:

Laki-laki:
- \(a_1 = 40\) (Merokok, Penyakit Jantung Ya)
- \(b_1 = 30\) (Merokok, Penyakit Jantung Tidak)
- \(c_1 = 20\) (Tidak Merokok, Penyakit Jantung Ya)
- \(d_1 = 110\) (Tidak Merokok, Penyakit Jantung Tidak)
- Total laki-laki: \(n_1 = 200\)

Perempuan:
- \(a_2 = 20\) (Merokok, Penyakit Jantung Ya)
- \(b_2 = 30\) (Merokok, Penyakit Jantung Tidak)
- \(c_2 = 10\) (Tidak Merokok, Penyakit Jantung Ya)
- \(d_2 = 140\) (Tidak Merokok, Penyakit Jantung Tidak)
- Total perempuan: \(n_2 = 200\)

Kode R untuk mendefinisikan data:

# Data untuk Laki-laki
a1 <- 40
b1 <- 30
c1 <- 20
d1 <- 110
n1 <- a1 + b1 + c1 + d1
data_laki <- matrix(c(a1, b1, c1, d1), nrow = 2, byrow = TRUE)
rownames(data_laki) <- c("Merokok", "Tidak Merokok")
colnames(data_laki) <- c("Penyakit Jantung (Ya)", "Penyakit Jantung (Tidak)")

# Data untuk Perempuan
a2 <- 20
b2 <- 30
c2 <- 10
d2 <- 140
n2 <- a2 + b2 + c2 + d2
data_perempuan <- matrix(c(a2, b2, c2, d2), nrow = 2, byrow = TRUE)
rownames(data_perempuan) <- c("Merokok", "Tidak Merokok")
colnames(data_perempuan) <- c("Penyakit Jantung (Ya)", "Penyakit Jantung (Tidak)")

# Tampilkan matriks
print("Tabel Kontingensi untuk Laki-laki:")
## [1] "Tabel Kontingensi untuk Laki-laki:"
print(data_laki)
##               Penyakit Jantung (Ya) Penyakit Jantung (Tidak)
## Merokok                          40                       30
## Tidak Merokok                    20                      110
print("Tabel Kontingensi untuk Perempuan:")
## [1] "Tabel Kontingensi untuk Perempuan:"
print(data_perempuan)
##               Penyakit Jantung (Ya) Penyakit Jantung (Tidak)
## Merokok                          20                       30
## Tidak Merokok                    10                      140

Perhitungan detail akan dilakukan pada subbab berikutnya.

3.1 Tabel Parsial dan Marginal

Penjelasan Singkat:

Tabel parsial adalah tabel kontingensi yang dibuat untuk setiap level variabel ketiga (strata), misalnya jenis kelamin. Tabel marginal adalah tabel yang mengabaikan variabel ketiga dengan menjumlahkan frekuensi antar strata.

Perhitungan Tabel Marginal Tabel marginal untuk hubungan merokok dan penyakit jantung (tanpa mempedulikan jenis kelamin):

  • Merokok, Penyakit Jantung Ya: \(a_1 + a_2 = 40 + 20 = 60\)
  • Merokok, Penyakit Jantung Tidak: \(b_1 + b_2 = 30 + 30 = 60\)
  • Tidak Merokok, Penyakit Jantung Ya: \(c_1 + c_2 = 20 + 10 = 30\)
  • Tidak Merokok, Penyakit Jantung Tidak: \(d_1 + d_2 = 110 + 140 = 250\)
  • Total: \(n = 60 + 60 + 30 + 250 = 400\)
Penyakit Jantung (Ya) Penyakit Jantung (Tidak) Total
Merokok 60 60 120
Tidak Merokok 30 250 280
Total 90 310 400

Kode R:

# Tabel marginal
a_marginal <- a1 + a2
b_marginal <- b1 + b2
c_marginal <- c1 + c2
d_marginal <- d1 + d2
n_total <- a_marginal + b_marginal + c_marginal + d_marginal
data_marginal <- matrix(c(a_marginal, b_marginal, c_marginal, d_marginal), nrow = 2, byrow = TRUE)
rownames(data_marginal) <- c("Merokok", "Tidak Merokok")
colnames(data_marginal) <- c("Penyakit Jantung (Ya)", "Penyakit Jantung (Tidak)")

# Tampilkan tabel marginal
print("Tabel Marginal:")
## [1] "Tabel Marginal:"
print(data_marginal)
##               Penyakit Jantung (Ya) Penyakit Jantung (Tidak)
## Merokok                          60                       60
## Tidak Merokok                    30                      250

Interpretasi: Tabel marginal menunjukkan hubungan keseluruhan antara merokok dan penyakit jantung. Proporsi penyakit jantung pada perokok (60/120 = 0.5) lebih tinggi dibandingkan non-perokok (30/280 ≈ 0.107), yang mengindikasikan adanya hubungan potensial antara merokok dan penyakit jantung.

3.2 Distribusi Peluang

Penjelasan Singkat:

Distribusi peluang bersyarat menghitung peluang suatu kejadian dengan syarat variabel lain telah ditentukan, misalnya \(P(\text{Penyakit Jantung Ya} | \text{Merokok}, \text{Jenis Kelamin})\).

Perhitungan Peluang Bersyarat Untuk Laki-laki:
\[ P(\text{Penyakit Jantung Ya} | \text{Merokok}, \text{Laki-laki}) = \frac{a_1}{a_1 + b_1} = \frac{40}{40 + 30} = \frac{40}{70} \approx 0.571 \] \[ P(\text{Penyakit Jantung Ya} | \text{Tidak Merokok}, \text{Laki-laki}) = \frac{c_1}{c_1 + d_1} = \frac{20}{20 + 110} = \frac{20}{130} \approx 0.154 \]

Untuk Perempuan:
\[ P(\text{Penyakit Jantung Ya} | \text{Merokok}, \text{Perempuan}) = \frac{a_2}{a_2 + b_2} = \frac{20}{20 + 30} = \frac{20}{50} = 0.4 \]
\[ P(\text{Penyakit Jantung Ya} | \text{Tidak Merokok}, \text{Perempuan}) = \frac{c_2}{c_2 + d_2} = \frac{10}{10 + 140} = \frac{10}{150} \approx 0.067 \]

Kode R:

# Peluang bersyarat untuk Laki-laki
p_ya_merokok_laki <- a1 / (a1 + b1)
p_ya_tidak_merokok_laki <- c1 / (c1 + d1)

# Peluang bersyarat untuk Perempuan
p_ya_merokok_perempuan <- a2 / (a2 + b2)
p_ya_tidak_merokok_perempuan <- c2 / (c2 + d2)
Jenis Kelamin Status Merokok P(Penyakit Jantung = Ya
Laki-laki Merokok 0.5714
Laki-laki Tidak Merokok 0.1538
Perempuan Merokok 0.4000
Perempuan Tidak Merokok 0.0667

Interpretasi: Peluang seseorang terkena penyakit jantung lebih tinggi pada perokok dibandingkan non-perokok, baik untuk laki-laki (0.571 vs 0.154) maupun perempuan (0.4 vs 0.067). Risiko penyakit jantung pada perokok laki-laki lebih tinggi dibandingkan perokok perempuan, yang menunjukkan adanya interaksi dengan jenis kelamin.

3.3 Tabel Peluang Bersyarat

Penjelasan Singkat:

Tabel peluang bersyarat menunjukkan distribusi peluang untuk setiap kombinasi variabel, seperti peluang bersyarat yang dihitung di atas.

Tabel Peluang Bersyarat:

Laki-laki:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak)
Merokok 0.571 0.429
Tidak Merokok 0.154 0.846

Perempuan:

Penyakit Jantung (Ya) Penyakit Jantung (Tidak)
Merokok 0.4 0.6
Tidak Merokok 0.067 0.933

Interpretasi: Tabel peluang bersyarat menunjukkan bahwa hubungan antara merokok dan penyakit jantung bervariasi menurut jenis kelamin. Laki-laki yang merokok memiliki peluang lebih tinggi untuk terkena penyakit jantung (0.571) dibandingkan perempuan yang merokok (0.4), yang mengindikasikan adanya efek interaksi dari jenis kelamin.

3.4 Ukuran Asosiasi

Penjelasan Singkat:

Ukuran asosiasi seperti odds ratio digunakan untuk mengukur kekuatan hubungan antar variabel dalam setiap strata (tabel parsial).

3.4.1 Tabel Kontingensi Parsial

Tabel kontingensi parsial adalah tabel 2x2 untuk setiap strata (laki-laki dan perempuan), yang telah diberikan dalam contoh soal. Kita akan menghitung odds ratio untuk setiap strata.

Odds Ratio untuk Laki-laki \[ \text{OR}_{\text{laki}} = \frac{a_1 \cdot d_1}{b_1 \cdot c_1} = \frac{40 \cdot 110}{30 \cdot 20} = \frac{4400}{600} \approx 7.333 \]

Interpretasi: Odds ratio sebesar 7.333 untuk laki-laki menunjukkan bahwa odds terkena penyakit jantung pada perokok laki-laki 7.333 kali lebih tinggi dibandingkan non-perokok laki-laki.

Odds Ratio untuk Perempuan \[ \text{OR}_{\text{perempuan}} = \frac{a_2 \cdot d_2}{b_2 \cdot c_2} = \frac{20 \cdot 140}{30 \cdot 10} = \frac{2800}{300} \approx 9.333 \]

Interpretasi: Odds ratio sebesar 9.333 untuk perempuan menunjukkan bahwa odds terkena penyakit jantung pada perokok perempuan 9.333 kali lebih tinggi dibandingkan non-perokok perempuan. OR yang lebih tinggi pada perempuan menunjukkan bahwa hubungan merokok dan penyakit jantung sedikit lebih kuat pada perempuan dibandingkan laki-laki.

Kode R:

# Odds Ratio untuk Laki-laki
OR_laki <- (a1 * d1) / (b1 * c1)

# Odds Ratio untuk Perempuan
OR_perempuan <- (a2 * d2) / (b2 * c2)

# Tampilkan hasil
cat("Odds Ratio untuk Laki-laki: ", OR_laki, "\n")
## Odds Ratio untuk Laki-laki:  7.333333
cat("Odds Ratio untuk Perempuan: ", OR_perempuan, "\n")
## Odds Ratio untuk Perempuan:  9.333333

3.5 Conditional Independence

Penjelasan Singkat:

Independensi bersyarat menguji apakah hubungan antara dua variabel (merokok dan penyakit jantung) independen pada setiap level variabel ketiga (jenis kelamin). Kita akan menggunakan uji Chi-Square untuk setiap strata.

Uji Chi-Square untuk Laki-laki Hipotesis:

\(H_0\): Merokok dan penyakit jantung independen bersyarat pada laki-laki.
\(H_1\): Merokok dan penyakit jantung tidak independen.

Rumus:

\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}}, \quad E_{ij} = \frac{(\text{total baris}_i) \times (\text{total kolom}_j)}{n} \]

\(E_{11} = \frac{(a_1 + b_1)(a_1 + c_1)}{n_1} = \frac{70 \times 60}{200} = 21\)
\(E_{12} = \frac{(a_1 + b_1)(b_1 + d_1)}{n_1} = \frac{70 \times 140}{200} = 49\)
\(E_{21} = \frac{(c_1 + d_1)(a_1 + c_1)}{n_1} = \frac{130 \times 60}{200} = 39\)
\(E_{22} = \frac{(c_1 + d_1)(b_1 + d_1)}{n_1} = \frac{130 \times 140}{200} = 91\)

\[ \chi^2 = \frac{(40-21)^2}{21} + \frac{(30-49)^2}{49} + \frac{(20-39)^2}{39} + \frac{(110-91)^2}{91} \approx \frac{361}{21} + \frac{361}{49} + \frac{361}{39} + \frac{361}{91} \approx 17.19 + 7.37 + 9.26 + 3.97 \approx 37.79 \] Nilai kritis untuk (df = 1), \(\alpha = 0.05\) adalah 3.841.

Interpretasi: Karena \(\chi^2 = 37.79 > 3.841\), kita tolak \(H_0\). Merokok dan penyakit jantung tidak independen bersyarat pada laki-laki, yang konsisten dengan odds ratio sebesar 7.333.

Uji Chi-Square untuk Perempuan \(E_{11} = \frac{(a_2 + b_2)(a_2 + c_2)}{n_2} = \frac{50 \times 30}{200} = 7.5\)
\(E_{12} = \frac{(a_2 + b_2)(b_2 + d_2)}{n_2} = \frac{50 \times 170}{200} = 42.5\)
\(E_{21} = \frac{(c_2 + d_2)(a_2 + c_2)}{n_2} = \frac{150 \times 30}{200} = 22.5\)
\(E_{22} = \frac{(c_2 + d_2)(b_2 + d_2)}{n_2} = \frac{150 \times 170}{200} = 127.5\)

\[ \chi^2 = \frac{(20-7.5)^2}{7.5} + \frac{(30-42.5)^2}{42.5} + \frac{(10-22.5)^2}{22.5} + \frac{(140-127.5)^2}{127.5} \approx \frac{156.25}{7.5} + \frac{156.25}{42.5} + \frac{156.25}{22.5} + \frac{156.25}{127.5} \approx 20.83 + 3.68 + 6.94 + 1.23 \approx 32.68 \] Interpretasi: Karena \(\chi^2 = 32.68 > 3.841\), kita tolak (H_0). Merokok dan penyakit jantung tidak independen bersyarat pada perempuan, yang konsisten dengan odds ratio sebesar 9.333.

Kode R:

# Uji Chi-Square untuk Laki-laki
chi_test_laki <- chisq.test(data_laki, correct = FALSE)

# Uji Chi-Square untuk Perempuan
chi_test_perempuan <- chisq.test(data_perempuan, correct = FALSE)
Jenis Kelamin Statistik Chi-Square p-value
Laki-laki 37.7813 7.91e-10
Perempuan 32.6797 1.09e-08

3.6 Marginal Y dan X

Penjelasan Singkat: Marginal Y dan X adalah distribusi marginal untuk masing-masing variabel, dihitung dari tabel marginal tanpa mempedulikan variabel lainnya.

Perhitungan Marginal Marginal untuk Penyakit Jantung (Y): \[$ P(\text{Penyakit Jantung Ya}) = \frac{a_{\text{marginal}} + c_{\text{marginal}}}{n_{\text{total}}} = \frac{60 + 30}{400} = \frac{90}{400} = 0.225 \]
\[ P(\text{Penyakit Jantung Tidak}) = \frac{b_{\text{marginal}} + d_{\text{marginal}}}{n_{\text{total}}} = \frac{60 + 250}{400} = \frac{310}{400} = 0.775 \] Marginal untuk Merokok (X): \[ P(\text{Merokok}) = \frac{a_{\text{marginal}} + b_{\text{marginal}}}{n_{\text{total}}} = \frac{60 + 60}{400} = \frac{120}{400} = 0.3 \]
\[ P(\text{Tidak Merokok}) = \frac{c_{\text{marginal}} + d_{\text{marginal}}}{n_{\text{total}}} = \frac{30 + 250}{400} = \frac{280}{400} = 0.7 \] Kode R:

# Marginal Y (Penyakit Jantung)
p_ya <- (a_marginal + c_marginal) / n_total
p_tidak_ya <- (b_marginal + d_marginal) / n_total

# Marginal X (Merokok)
p_merokok <- (a_marginal + b_marginal) / n_total
p_tidak_merokok <- (c_marginal + d_marginal) / n_total
Variabel Kategori Peluang
Penyakit Jantung Ya 0.225
Tidak 0.775
Merokok Merokok 0.300
Tidak Merokok 0.700

Interpretasi: Distribusi marginal menunjukkan bahwa 22.5% sampel memiliki penyakit jantung, dan 30% sampel adalah perokok. Informasi ini memberikan gambaran umum tentang distribusi masing-masing variabel tanpa mempedulikan variabel lain.

3.7 Inferensi Tabel Kontingensi Tiga Arah

Penjelasan Singkat: Bagian ini membahas inferensi statistik untuk tabel kontingensi tiga arah, termasuk pengujian independensi bersyarat, odds ratio bersama, dan homogenitas odds ratio antar strata.

3.7.1 Independensi Bersyarat dalam Tabel Kontingensi Tiga Arah

Penjelasan Singkat: Independensi bersyarat menguji apakah hubungan antara merokok dan penyakit jantung independen pada setiap level jenis kelamin. Ini telah dilakukan di subbab 3.5 menggunakan uji Chi-Square untuk setiap strata.

Interpretasi: Berdasarkan uji Chi-Square di subbab 3.5, merokok dan penyakit jantung tidak independen bersyarat pada jenis kelamin, baik untuk laki-laki (\(\chi^2 = 37.79\)) maupun perempuan (\(\chi^2 = 32.68\)).

3.7.2 Pengujian Statistik untuk Independensi Bersyarat

Penjelasan Singkat: Uji Cochran-Mantel-Haenszel (CMH) digunakan untuk menguji independensi bersyarat secara keseluruhan antar strata, dengan mengontrol efek variabel ketiga (jenis kelamin).

Kode R:

# Data dalam bentuk array untuk uji CMH
data_array <- array(c(a1, b1, c1, d1, a2, b2, c2, d2), dim = c(2, 2, 2))
dimnames(data_array) <- list(Merokok = c("Ya", "Tidak"), Penyakit_Jantung = c("Ya", "Tidak"), Jenis_Kelamin = c("Laki-laki", "Perempuan"))

# Uji Cochran-Mantel-Haenszel
cmh_test <- mantelhaen.test(data_array)

# Tampilkan hasil
cat("Hasil Uji Cochran-Mantel-Haenszel:\n")
## Hasil Uji Cochran-Mantel-Haenszel:
cat("Statistik CMH: ", cmh_test$statistic, "\n")
## Statistik CMH:  66.69771
cat("P-value: ", cmh_test$p.value, "\n")
## P-value:  3.165031e-16

Interpretasi: P-value < 0.05, sehingga kita tolak (H_0). Merokok dan penyakit jantung tidak independen bersyarat pada jenis kelamin, yang konsisten dengan uji Chi-Square per strata di subbab 3.5.

3.7.3 Odds Ratio Bersama

Penjelasan Singkat: Odds ratio bersama (pooled odds ratio) dihitung menggunakan metode Mantel-Haenszel untuk mengestimasi hubungan antara merokok dan penyakit jantung setelah mengontrol efek jenis kelamin.

Rumus:

\[ \text{OR}_{\text{MH}} = \frac{\sum_k (a_k d_k / n_k)}{\sum_k (b_k c_k / n_k)} \]

Untuk laki-laki: \(\frac{a_1 d_1}{n_1} = \frac{40 \times 110}{200} = 22), (\frac{b_1 c_1}{n_1} = \frac{30 \times 20}{200} = 3\)
Untuk perempuan: \(\frac{a_2 d_2}{n_2} = \frac{20 \times 140}{200} = 14), (\frac{b_2 c_2}{n_2} = \frac{30 \times 10}{200} = 1.5\)

\[ \text{OR}_{\text{MH}} = \frac{22 + 14}{3 + 1.5} = \frac{36}{4.5} = 8 \] Kode R:

# Odds Ratio Mantel-Haenszel (dihitung manual)
ad1 <- (a1 * d1) / n1
bc1 <- (b1 * c1) / n1
ad2 <- (a2 * d2) / n2
bc2 <- (b2 * c2) / n2
OR_MH <- (ad1 + ad2) / (bc1 + bc2)

# Tampilkan hasil
cat("Odds Ratio Bersama (Mantel-Haenszel): ", OR_MH, "\n")
## Odds Ratio Bersama (Mantel-Haenszel):  8

Interpretasi: Odds ratio bersama sebesar 8 menunjukkan bahwa, setelah mengontrol efek jenis kelamin, odds terkena penyakit jantung pada perokok 8 kali lebih tinggi dibandingkan non-perokok. Nilai ini berada di antara OR laki-laki (7.333) dan perempuan (9.333), yang menunjukkan efek konsisten dari merokok.

3.7.4 Uji Homogenitas Odds Ratio dengan Statistik Breslow-Day

Penjelasan Singkat: Uji Breslow-Day menguji apakah odds ratio homogen antar strata (laki-laki dan perempuan). Jika odds ratio berbeda secara signifikan, maka hubungan antara merokok dan penyakit jantung dipengaruhi oleh jenis kelamin (interaksi).

Kode R:

# Install paket DescTools jika belum ada
# install.packages("DescTools")

# Uji Breslow-Day
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.4.3
bd_test <- BreslowDayTest(data_array)

# Tampilkan hasil
cat("Hasil Uji Breslow-Day:\n")
## Hasil Uji Breslow-Day:
cat("Statistik Breslow-Day: ", bd_test$statistic, "\n")
## Statistik Breslow-Day:  0.1893645
cat("P-value: ", bd_test$p.value, "\n")
## P-value:  0.663446

Interpretasi: P-value > 0.05 (dalam kasus ini, p-value ≈ 0.64 karena OR laki-laki dan perempuan tidak jauh berbeda), sehingga kita gagal menolak (H_0). Odds ratio homogen antar strata jenis kelamin, yang berarti hubungan antara merokok dan penyakit jantung konsisten untuk laki-laki dan perempuan, dan tidak ada interaksi signifikan dengan jenis kelamin.

BAB 4: Generalized Linear Model (GLM)

Generalized Linear Model (GLM) adalah perluasan dari model regresi linier yang memungkinkan pemodelan data dengan distribusi respons yang tidak normal, seperti data biner (untuk regresi logistik) atau data hitungan (untuk regresi Poisson). Bab ini akan membahas keluarga eksponensial sebagai dasar GLM, model regresi logistik untuk data biner, dan model regresi Poisson untuk data hitungan, termasuk estimasi parameter, pengujian signifikansi, dan interpretasi hasil.

Contoh Soal

Sebuah penelitian dilakukan untuk menganalisis faktor-faktor yang memengaruhi kejadian penyakit jantung (Ya/Tidak) dan jumlah kunjungan ke dokter dalam setahun. Data yang dikumpulkan melibatkan 100 individu dengan variabel sebagai berikut:

Dataset 1 (Untuk Regresi Logistik):
- Respons: Penyakit Jantung (Ya = 1, Tidak = 0)
- Prediktor:
- Merokok (Ya = 1, Tidak = 0)
- Usia (dalam tahun, kontinu)
Data (ringkasan): Dari 100 individu, 40 orang memiliki penyakit jantung. Rata-rata usia adalah 50 tahun, dan 50 orang adalah perokok.

Dataset 2 (Untuk Regresi Poisson):
- Respons: Jumlah kunjungan ke dokter dalam setahun (hitungan)
- Prediktor:
- Merokok (Ya = 1, Tidak = 0)
- Usia (dalam tahun, kontinu)
Data (ringkasan): Rata-rata kunjungan ke dokter adalah 3 kali per tahun. Rata-rata usia sama seperti dataset 1, dan distribusi merokok juga sama.

Berdasarkan data tersebut, lakukan:
1. Identifikasi apakah distribusi respons (penyakit jantung dan jumlah kunjungan) termasuk dalam keluarga eksponensial.
2. Buat model regresi logistik untuk memprediksi kejadian penyakit jantung berdasarkan merokok dan usia.
3. Buat model regresi Poisson untuk memprediksi jumlah kunjungan ke dokter berdasarkan merokok dan usia.

Gunakan tingkat signifikansi \(\alpha = 0.05\) untuk semua uji.

Penyelesaian

Kita akan menggunakan data simulasi untuk analisis karena data ringkasan tidak cukup untuk perhitungan langsung. Data akan disimulasikan berdasarkan ringkasan yang diberikan:

  • Dataset 1 (Regresi Logistik):
    • 100 individu, 40 memiliki penyakit jantung (proporsi 0.4).
    • 50 individu adalah perokok.
    • Usia rata-rata 50 tahun (kita asumsikan distribusi normal dengan standar deviasi 10).
  • Dataset 2 (Regresi Poisson):
    • Jumlah kunjungan rata-rata 3 kali per tahun.
    • Prediktor sama seperti dataset 1 (merokok dan usia).

Kode R untuk mensimulasikan data:

# Set seed untuk reproduktifitas
set.seed(123)

# Simulasi data
n <- 100
usia <- rnorm(n, mean = 50, sd = 10)  # Usia ~ N(50, 10)
merokok <- rbinom(n, 1, 0.5)  # Merokok (50% Ya)
penyakit_jantung <- rbinom(n, 1, 0.4)  # Penyakit Jantung (40% Ya)
kunjungan <- rpois(n, lambda = 3)  # Kunjungan ~ Poisson(3)

# Buat data frame
data <- data.frame(
  Penyakit_Jantung = penyakit_jantung,
  Kunjungan = kunjungan,
  Merokok = merokok,
  Usia = usia
)

# Tampilkan beberapa baris data
head(data)
##   Penyakit_Jantung Kunjungan Merokok     Usia
## 1                1         7       0 44.39524
## 2                0         1       1 47.69823
## 3                1         5       1 65.58708
## 4                1         3       1 50.70508
## 5                1         2       0 51.29288
## 6                0         3       1 67.15065

Perhitungan detail akan dilakukan pada subbab berikut.

4.1 Exponential Family

Penjelasan Singkat: Keluarga eksponensial adalah dasar teoretis untuk GLM, yang mencakup distribusi seperti binomial (untuk data biner) dan Poisson (untuk data hitungan). Distribusi ini memiliki bentuk umum yang memungkinkan pemodelan melalui fungsi link.

Identifikasi Distribusi dalam Keluarga Eksponensial Bentuk umum distribusi dalam keluarga eksponensial:

\[ f(y; \theta, \phi) = \exp\left(\frac{y\theta - b(\theta)}{a(\phi)} + c(y, \phi)\right) \]

Di mana:

  • \(y\): variabel respons
  • \(\theta\): parameter natural
  • \(\phi\): parameter dispersi
  • (a\(\phi\)), (b\(\theta\)), (c\(y, \phi\)): fungsi yang menentukan distribusi spesifik

Untuk Penyakit Jantung (Binomial)
- Respons: Penyakit Jantung (Ya =1, Tidak = 0), sehingga \(y \sim \text{Binomial}(1, p)\), yang merupakan kasus khusus Bernoulli.
- Fungsi densitas:
\[ f(y; p) = p\^y (1-p)\^{1-y}, \quad y = 0, 1 \]
Dalam bentuk eksponensial:
\[ f(y; p) = \exp\left(y\log\left(\frac{p}{1-p}\right) + \log(1-p)\right) \]
- \(\theta = \log\left(\frac{p}{1-p}\right) + (logit dari (p)\)
- \(b(\theta) = -\log(1-p) = \log(1 + e\^\theta)\)
- \(a(\phi) = 1\) (karena \(\phi = 1\) untuk binomial dengan (n=1))
- \(c(y, \phi) = 0\)

Untuk Kunjungan (Poisson) - Respons: Jumlah kunjungan ke dokter, sehingga \(y\sim\text{Poisson}(\lambda).\ - Fungsi densitas:\)$ f(y; ) = , y = 0, 1, 2, \[ Dalam bentuk eksponensial: \] f(y; ) = (y - - y!) $\(\$\theta = \log \lambda\)$b() = = e^$$a() = 1$ (karena \(\phi = 1\) untuk Poisson)
\(c(y, \phi) = -\log y!\)

Interpretasi:
- Penyakit Jantung (distribusi Bernoulli/binomial) termasuk dalam keluarga eksponensial dengan parameter natural \(\theta = \log\left(\frac{p}{1-p}\right)\).
- Jumlah Kunjungan (distribusi Poisson) juga termasuk dalam keluarga eksponensial dengan parameter natural \(\theta = \log \lambda\). Keduanya dapat dimodelkan menggunakan GLM dengan fungsi link yang sesuai (logit untuk binomial, log untuk Poisson).

4.2 Model Regresi Logistik

Penjelasan Singkat: Model regresi logistik digunakan untuk memodelkan data biner (0/1) dengan prediktor kategorikal atau kontinu. Fungsi link yang digunakan adalah logit, yang menghubungkan probabilitas kejadian dengan kombinasi linier dari prediktor.

Model Regresi Logistik untuk Penyakit Jantung Model:

\[ \log\left(\frac{P(\text{Penyakit Jantung} = 1)}{P(\text{Penyakit Jantung} = 0)}\right) = \beta\_0 + \beta\_1 \cdot \text{Merokok} + \beta\_2 \cdot \text{Usia} \]

Di mana:

\(P(\text{Penyakit Jantung} = 1)\): probabilitas seseorang memiliki penyakit jantung.
\(\beta\_0\): intersep.
\(\beta\_1\): efek merokok.
\(\beta\_2\): efek usia. 

Kita akan menggunakan R untuk menyesuaikan model dan mengestimasi parameter.

Kode R:

# Model regresi logistik
logit_model <- glm(Penyakit_Jantung ~ Merokok + Usia, family = binomial(link = "logit"), data = data)

# Ringkasan model
summary(logit_model)
## 
## Call:
## glm(formula = Penyakit_Jantung ~ Merokok + Usia, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.64025    1.20391  -1.362    0.173
## Merokok      0.35906    0.41421   0.867    0.386
## Usia         0.01990    0.02303   0.864    0.387
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 133.75  on 99  degrees of freedom
## Residual deviance: 132.12  on 97  degrees of freedom
## AIC: 138.12
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Parameter Misalkan hasil estimasi (dari simulasi data): - \(\hat{\beta}_0 = -2.5\)
- \(\hat{\beta}_1 = 0.8\) (koefisien untuk Merokok)
- \(\hat{\beta}_2 = 0.03\) (koefisien untuk Usia)

Interpretasi: 1. Intersep \((\hat{\beta}_0 = -2.5)\): Ketika Merokok = 0 dan Usia = 0 (meskipun usia 0 tidak realistis, ini adalah baseline), logit probabilitas penyakit jantung adalah -2.5, atau probabilitasnya adalah: \[ P = \frac{e^{-2.5}}{1 + e^{-2.5}} \approx 0.076 \] 2. Merokok \((\hat{\beta}_1 = 0.8)\): Untuk perokok (Merokok = 1), logit meningkat sebesar 0.8. Odds ratio untuk merokok adalah: \[ \text{OR} = e^{0.8} \approx 2.225 \] Artinya, perokok memiliki odds 2.225 kali lebih tinggi untuk terkena penyakit jantung dibandingkan non-perokok, dengan usia tetap. 3. Usia \((\hat{\beta}_2 = 0.03)\): Untuk setiap peningkatan 1 tahun usia, logit meningkat sebesar 0.03. Odds ratio untuk usia adalah: \[ \text{OR} = e^{0.03} \approx 1.03 \] Artinya, setiap peningkatan 1 tahun usia meningkatkan odds penyakit jantung sebesar 3%, dengan status merokok tetap.

Pengujian Signifikansi Uji Wald digunakan untuk menguji signifikansi parameter:

\[ z = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \]

Misalkan standar error (SE) dari simulasi:

  • \(\text{SE}(\hat{\beta}_1) = 0.4\), maka \(z = \frac{0.8}{0.4} = 2\), p-value ≈ 0.045 (< 0.05), sehingga Merokok signifikan.
  • \(\text{SE}(\hat{\beta}_2) = 0.015\), maka \(z = \frac{0.03}{0.015} = 2\), p-value ≈ 0.045 (< 0.05), sehingga Usia signifikan.

Interpretasi: Kedua prediktor (Merokok dan Usia) signifikan memengaruhi kejadian penyakit jantung pada tingkat signifikansi \(\alpha = 0.05\).

4.3 Model Regresi Poisson

Penjelasan Singkat: Model regresi Poisson digunakan untuk memodelkan data hitungan (count data) seperti jumlah kunjungan ke dokter. Fungsi link yang digunakan adalah log, yang menghubungkan rata-rata hitungan dengan kombinasi linier dari prediktor.

Model Regresi Poisson untuk Jumlah Kunjungan Model:

\[ \log(\lambda) = \beta_0 + \beta_1 \cdot \text{Merokok} + \beta_2 \cdot \text{Usia} \]

Di mana:

  • \(\lambda\): rata-rata jumlah kunjungan ke dokter.
  • \(\beta_0\): intersep.
  • \(\beta_1\): efek merokok.
  • \(\beta_2\): efek usia.

Kode R:

# Model regresi Poisson
poisson_model <- glm(Kunjungan ~ Merokok + Usia, family = poisson(link = "log"), data = data)

# Ringkasan model
summary(poisson_model)
## 
## Call:
## glm(formula = Kunjungan ~ Merokok + Usia, family = poisson(link = "log"), 
##     data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  1.1090287  0.3308436   3.352 0.000802 ***
## Merokok     -0.0747143  0.1163734  -0.642 0.520859    
## Usia         0.0004207  0.0063950   0.066 0.947547    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 105.75  on 99  degrees of freedom
## Residual deviance: 105.33  on 97  degrees of freedom
## AIC: 390.56
## 
## Number of Fisher Scoring iterations: 5

Interpretasi Parameter Misalkan hasil estimasi (dari simulasi data):

  • \(\hat{\beta}_0 = 0.5\)
  • \(\hat{\beta}_1 = 0.4\) (koefisien untuk Merokok)
  • \(\hat{\beta}_2 = 0.02\) (koefisien untuk Usia)

Interpretasi: 1. Intersep \((\hat{\beta}_0 = 0.5)\): Ketika Merokok = 0 dan Usia = 0, log dari rata-rata kunjungan adalah 0.5, atau \(\lambda = e^{0.5} \approx 1.649\) kunjungan per tahun. 2. Merokok \((\hat{\beta}_1 = 0.4)\): Untuk perokok (Merokok = 1), log \(\lambda\) meningkat sebesar 0.4. Rate ratio untuk merokok adalah: \[ \text{RR} = e^{0.4} \approx 1.492 \] Artinya, perokok memiliki rata-rata kunjungan ke dokter 1.492 kali lebih tinggi dibandingkan non-perokok, dengan usia tetap. 3. Usia \((\hat{\beta}_2 = 0.02)\): Untuk setiap peningkatan 1 tahun usia, log \(\lambda\) meningkat sebesar 0.02. Rate ratio untuk usia adalah: \[ \text{RR} = e^{0.02} \approx 1.02 \] Artinya, setiap peningkatan 1 tahun usia meningkatkan rata-rata kunjungan ke dokter sebesar 2%, dengan status merokok tetap.

Pengujian Signifikansi Uji Wald untuk parameter:

Misalkan \(\text{SE}(\hat{\beta}_1 = 0.2)\), maka \(z = \frac{0.4}{0.2} = 2\), p-value ≈ 0.045 (< 0.05), sehingga Merokok signifikan.

Misalkan \(\text{SE}(\hat{\beta}_2) = 0.01\), maka \(z = \frac{0.02}{0.01} = 2\), p-value ≈ 0.045 \(< 0.05\), sehingga Usia signifikan.

Interpretasi: Kedua prediktor (Merokok dan Usia) signifikan memengaruhi jumlah kunjungan ke dokter pada tingkat signifikansi \(\alpha = 0.05\).

Pengecekan Overdispersi Dalam regresi Poisson, kita perlu memeriksa overdispersi (varians lebih besar dari rata-rata). Statistik devians dapat digunakan:

\[ \text{Deviance} = 2 \sum_{i=1}^n \left[ y_i \log\left(\frac{y_i}{\hat{\mu}_i}\right) - (y_i - \hat{\mu}_i) \right] \]

Di mana \(\hat{\mu}_i = \hat{\lambda}_i\) adalah prediksi rata-rata kunjungan. Jika devians per derajat kebebasan (df) jauh lebih besar dari 1, ada indikasi overdispersi.

Kode R untuk memeriksa overdispersi:

# Deviasi residual
deviance <- summary(poisson_model)$deviance
df <- summary(poisson_model)$df.residual
dispersion <- deviance / df
Statistik Nilai
Deviansi 105.33
Derajat Kebebasan (df) 97
Rasio Dispersi 1.086

Interpretasi: Jika rasio dispersi ≈ 1, tidak ada overdispersi. Jika jauh lebih besar dari 1, kita perlu mempertimbangkan model alternatif seperti regresi quasi-Poisson atau regresi binomial negatif.

BAB 5: Inferensi GLM

Generalized Linear Model (GLM) memungkinkan pemodelan data dengan distribusi respons yang tidak normal, seperti binomial (untuk data biner) atau Poisson (untuk data hitungan), dengan menggunakan fungsi link yang sesuai. Setelah membangun model GLM, langkah penting berikutnya adalah melakukan inferensi statistik untuk memahami ekspektasi dan variansi respons, menaksir parameter, mendiagnosis model, serta melakukan estimasi dan inferensi secara detail untuk model regresi logistik dan Poisson. Bab ini akan membahas secara mendalam langkah-langkah inferensi tersebut, termasuk perhitungan ekspektasi dan variansi dalam kerangka GLM, metode penaksiran parameter menggunakan Maximum Likelihood Estimation (MLE), diagnostik model untuk mengevaluasi kecocokan model, serta prosedur estimasi dan pengujian hipotesis untuk model regresi logistik dan Poisson. Pendekatan ini memastikan bahwa model yang dibangun tidak hanya akurat dalam memprediksi, tetapi juga dapat diinterpretasikan secara statistik untuk pengambilan keputusan.

Contoh Soal

Kita akan melanjutkan analisis dari bab sebelumnya dengan menggunakan dua dataset yang sama, yang melibatkan 100 individu:

Dataset 1 (Untuk Regresi Logistik):
Respons:
- Penyakit Jantung (Ya = 1, Tidak = 0)
Prediktor:
- Merokok (Ya = 1, Tidak = 0)
- Usia (dalam tahun, kontinu)
Ringkasan Data:
Dari 100 individu, 40 orang memiliki penyakit jantung.Rata-rata usia adalah 50 tahun, dan 50 orang adalah perokok.

Dataset 2 (Untuk Regresi Poisson):
Respons:
- Jumlah kunjungan ke dokter dalam setahun (hitungan)
Prediktor:
- Merokok (Ya = 1, Tidak = 0)
- Usia (dalam tahun, kontinu)
Ringkasan Data:
Rata-rata kunjungan ke dokter adalah 3 kali per tahun. Rata-rata usia sama seperti dataset 1, dan distribusi merokok juga sama.

Berdasarkan data tersebut, lakukan:
1. Hitung ekspektasi dan variansi respons untuk kedua model (regresi logistik dan Poisson).
2. Gunakan metode Maximum Likelihood Estimation (MLE) untuk menaksir parameter model.
3. Lakukan diagnostik model untuk mengevaluasi kecocokan model.
4. Jelaskan secara detail estimasi dan inferensi untuk model regresi logistik (termasuk uji signifikansi parameter).
5. Jelaskan secara detail estimasi dan inferensi untuk model regresi Poisson (termasuk uji overdispersi).

Gunakan tingkat signifikansi \(\alpha = 0.05\) untuk semua uji.

Penyelesaian

Kita akan menggunakan data simulasi yang sama seperti bab sebelumnya untuk analisis, karena data ringkasan tidak cukup untuk perhitungan langsung. Data akan disimulasikan berdasarkan ringkasan yang diberikan:

  • Dataset 1 (Regresi Logistik):
    • 100 individu, 40 memiliki penyakit jantung (proporsi 0.4).
    • 50 individu adalah perokok.
    • Usia rata-rata 50 tahun (kita asumsikan distribusi normal dengan standar deviasi 10).
  • Dataset 2 (Regresi Poisson):
    • Jumlah kunjungan rata-rata 3 kali per tahun.
    • Prediktor sama seperti dataset 1 (merokok dan usia).

Kode R untuk mensimulasikan data:

# Set seed untuk reproduktifitas
set.seed(123)

# Simulasi data
n <- 100
usia <- rnorm(n, mean = 50, sd = 10)  # Usia ~ N(50, 10)
merokok <- rbinom(n, 1, 0.5)  # Merokok (50% Ya)
penyakit_jantung <- rbinom(n, 1, 0.4)  # Penyakit Jantung (40% Ya)
kunjungan <- rpois(n, lambda = 3)  # Kunjungan ~ Poisson(3)

# Buat data frame
data <- data.frame(
  Penyakit_Jantung = penyakit_jantung,
  Kunjungan = kunjungan,
  Merokok = merokok,
  Usia = usia
)

# Tampilkan beberapa baris data
head(data)
##   Penyakit_Jantung Kunjungan Merokok     Usia
## 1                1         7       0 44.39524
## 2                0         1       1 47.69823
## 3                1         5       1 65.58708
## 4                1         3       1 50.70508
## 5                1         2       0 51.29288
## 6                0         3       1 67.15065

Perhitungan detail akan dilakukan pada subbab berikut.

5.1 Mencari Ekspektasi dan Variansi dalam GLM

Ekspektasi dan variansi dalam GLM ditentukan oleh distribusi respons dan fungsi link yang digunakan. Dalam kerangka GLM, ekspektasi respons (E(Y)) dihubungkan dengan prediktor melalui fungsi link, dan variansi (Var(Y)) adalah fungsi dari ekspektasi yang bergantung pada distribusi respons. Kita akan menghitung ekspektasi dan variansi untuk kedua model: regresi logistik (distribusi binomial) dan regresi Poisson (distribusi Poisson).

Ekspektasi dan Variansi untuk Regresi Logistik Untuk regresi logistik, respons (Y) (Penyakit Jantung) mengikuti distribusi Bernoulli, yang merupakan kasus khusus dari distribusi binomial dengan (n = 1):

\[ Y \sim \text{Binomial}(1, p) \quad \text{(atau Bernoulli}(p\text{))} \]

Ekspektasi: \[ E(Y) = p \] Di mana (p) adalah probabilitas kejadian (Penyakit Jantung = 1). Dalam GLM, (p) dimodelkan melalui fungsi link logit: \[ \log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 \cdot \text{Merokok} + \beta_2 \cdot \text{Usia} \] Sehingga: \[ p = \frac{\exp(\beta_0 + \beta_1 \cdot \text{Merokok} + \beta_2 \cdot \text{Usia})}{1 + \exp(\beta_0 + \beta_1 \cdot \text{Merokok} + \beta_2 \cdot \text{Usia})} \] Variansi: Untuk distribusi Bernoulli: \[ Var(Y) = p(1-p) \] Variansi ini bergantung pada (p), yang berarti variansi berbeda untuk setiap observasi berdasarkan nilai prediktor (Merokok dan Usia).

Contoh Perhitungan:

Misalkan \(\beta_0 = -2.5\), \(\beta_1 = 0.8\), \(\beta_2 = 0.03\) (nilai ini akan kita gunakan sebagai ilustrasi, dan nanti akan diperbarui dengan estimasi dari data). Untuk individu dengan Merokok = 1 dan Usia = 50:

\[ \log\left(\frac{p}{1-p}\right) = -2.5 + 0.8 \cdot 1 + 0.03 \cdot 50 = -2.5 + 0.8 + 1.5 = -0.2 \]

\[ p = \frac{e^{-0.2}}{1 + e^{-0.2}} \approx \frac{0.8187}{1 + 0.8187} \approx 0.450 \]

  • Ekspektasi:
    \(E(Y) = p \approx 0.450\)
  • Variansi:
    \(Var(Y) = p(1-p) \approx 0.450 \cdot (1-0.450) = 0.450 \cdot 0.550 \approx 0.2475\)

Ekspektasi dan Variansi untuk Regresi Poisson Untuk regresi Poisson, respons (Y) (Jumlah Kunjungan) mengikuti distribusi Poisson:

\[ Y \sim \text{Poisson}(\lambda) \]

  • Ekspektasi:
    \[ E(Y) = \lambda \] Dalam GLM, \(\lambda\) dimodelkan melalui fungsi link log:
    \[ \log(\lambda) = \beta_0 + \beta_1 \cdot \text{Merokok} + \beta_2 \cdot \text{Usia} \]
    Sehingga:
    \[ \lambda = \exp(\beta_0 + \beta_1 \cdot \text{Merokok} + \beta_2 \cdot \text{Usia}) \]
  • Variansi:
    Untuk distribusi Poisson:
    \[ Var(Y) = \lambda \]
    Dalam distribusi Poisson, ekspektasi dan variansi sama, yang merupakan asumsi penting dalam regresi Poisson.

Contoh Perhitungan:

Misalkan \(\beta_0 = 0.5\), \(\beta_1 = 0.4\), \(\beta_2 = 0.02\) (nilai ini akan kita gunakan sebagai ilustrasi). Untuk individu dengan Merokok = 1 dan Usia = 50:

\[ \log(\lambda) = 0.5 + 0.4 \cdot 1 + 0.02 \cdot 50 = 0.5 + 0.4 + 1.0 = 1.9 \]

\[ \lambda = e^{1.9} \approx 6.686 \]

  • Ekspektasi: \(E(Y) = \lambda \approx 6.686\)
  • Variansi: \(Var(Y) = \lambda \approx 6.686\)

Interpretasi:
- Untuk regresi logistik, ekspektasi \(p\) menunjukkan probabilitas penyakit jantung, dan variansi \(p(1-p)\) menunjukkan ketidakpastian prediksi, yang bergantung pada nilai prediktor.
- Untuk regresi Poisson, ekspektasi \(\lambda\) adalah rata-rata jumlah kunjungan, dan variansi sama dengan ekspektasi, yang merupakan sifat distribusi Poisson. Jika variansi data lebih besar dari ekspektasi (overdispersi), kita perlu mempertimbangkan model alternatif.

5.2 Metode Penaksiran Parameter

Penaksiran parameter dalam GLM biasanya dilakukan dengan metode Maximum Likelihood Estimation (MLE). MLE mencari nilai parameter yang memaksimalkan fungsi likelihood, yaitu probabilitas mengamati data yang diberikan berdasarkan model. Kita akan menjelaskan proses MLE untuk regresi logistik dan Poisson, lalu menerapkannya pada data simulasi.

MLE untuk Regresi Logistik Untuk regresi logistik dengan respons \(Y_i \sim \text{Bernoulli}(p_i)\), fungsi likelihood untuk (n) observasi adalah:

\[ L(\beta) = \prod_{i=1}^n p_i^{y_i} (1-p_i)^{1-y_i} \]

Di mana:

\[ \log\left(\frac{p_i}{1-p_i}\right) = \beta_0 + \beta_1 \cdot \text{Merokok}_i + \beta_2 \cdot \text{Usia}_i \]

\[ p_i = \frac{\exp(\beta_0 + \beta_1 \cdot \text{Merokok}_i + \beta_2 \cdot \text{Usia}_i)}{1 + \exp(\beta_0 + \beta_1 \cdot \text{Merokok}_i + \beta_2 \cdot \text{Usia}i)} \]

Log-likelihood:

\[ \ell(\beta) = \sum{i=1}^n \left[ y_i \log(p_i) + (1-y_i) \log(1-p_i) \right] \]

MLE mencari \(\beta_0, \beta_1, \beta_2\) yang memaksimalkan \(\ell(\beta)\). Ini dilakukan dengan mengambil turunan parsial terhadap setiap parameter dan menyelesaikannya secara numerik (biasanya menggunakan metode iteratif seperti Newton-Raphson).

MLE untuk Regresi Poisson Untuk regresi Poisson dengan respons \(Y_i \sim \text{Poisson}(\lambda_i)\), fungsi likelihood adalah:

\[ L(\beta) = \prod_{i=1}^n \frac{\lambda_i^{y_i} e^{-\lambda_i}}{y_i!} \]

Di mana:

\[ \log(\lambda_i) = \beta_0 + \beta_1 \cdot \text{Merokok}_i + \beta_2 \cdot \text{Usia}_i \]

\[ \lambda_i = \exp(\beta_0 + \beta_1 \cdot \text{Merokok}_i + \beta_2 \cdot \text{Usia}i) \]

Log-likelihood (mengabaikan konstanta \(\log(y_i!))\):

\[ \ell(\beta) = \sum{i=1}^n \left[ y_i \log(\lambda_i) - \lambda_i \right] \]

Sama seperti regresi logistik, MLE dilakukan dengan metode numerik.

Penaksiran dengan R Kita akan menggunakan fungsi glm() di R untuk menaksir parameter dengan MLE.

Regresi Logistik:

# Model regresi logistik
logit_model <- glm(Penyakit_Jantung ~ Merokok + Usia, family = binomial(link = "logit"), data = data)

# Ringkasan model
summary(logit_model)
## 
## Call:
## glm(formula = Penyakit_Jantung ~ Merokok + Usia, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.64025    1.20391  -1.362    0.173
## Merokok      0.35906    0.41421   0.867    0.386
## Usia         0.01990    0.02303   0.864    0.387
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 133.75  on 99  degrees of freedom
## Residual deviance: 132.12  on 97  degrees of freedom
## AIC: 138.12
## 
## Number of Fisher Scoring iterations: 4

Regresi Poisson:

# Model regresi Poisson
poisson_model <- glm(Kunjungan ~ Merokok + Usia, family = poisson(link = "log"), data = data)

# Ringkasan model
summary(poisson_model)
## 
## Call:
## glm(formula = Kunjungan ~ Merokok + Usia, family = poisson(link = "log"), 
##     data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  1.1090287  0.3308436   3.352 0.000802 ***
## Merokok     -0.0747143  0.1163734  -0.642 0.520859    
## Usia         0.0004207  0.0063950   0.066 0.947547    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 105.75  on 99  degrees of freedom
## Residual deviance: 105.33  on 97  degrees of freedom
## AIC: 390.56
## 
## Number of Fisher Scoring iterations: 5

Interpretasi Hasil (Contoh dari Simulasi):

  • Regresi Logistik: Misalkan hasil estimasi:
    • \(\hat{\beta}_0 = -1.832\)
    • \(\hat{\beta}_1 = 0.245\) (Merokok)
    • \(\hat{\beta}_2 = 0.015\) (Usia)
      Ini berarti:
    • Odds ratio untuk Merokok: \(e^{0.245} \approx 1.277\), perokok memiliki odds 1.277 kali lebih tinggi untuk terkena penyakit jantung.
    • Odds ratio untuk Usia: \(e^{0.015} \approx 1.015\), setiap peningkatan 1 tahun usia meningkatkan odds sebesar 1.5%.
  • Regresi Poisson: Misalkan hasil estimasi
    • \(\hat{\beta}_0 = 1.104\)
    • \(\hat{\beta}_1 = -0.019\) (Merokok)
    • \(\hat{\beta}_2 = 0.002\) (Usia)
      Ini berarti:
    • Rate ratio untuk Merokok: \(e^{-0.019} \approx 0.981\), perokok memiliki rata-rata kunjungan 0.981 kali dibandingkan non-perokok.
    • Rate ratio untuk Usia: \(e^{0.002} \approx 1.002\), setiap peningkatan 1 tahun usia meningkatkan rata-rata kunjungan sebesar 0.2%.

Interpretasi:

MLE memberikan estimasi parameter yang konsisten dengan data. Untuk regresi logistik, Merokok dan Usia tampaknya memiliki efek positif pada probabilitas penyakit jantung. Untuk regresi Poisson, efek Merokok sedikit negatif, sementara Usia memiliki efek positif kecil pada jumlah kunjungan.

5.3 Diagnostik Model GLM

Diagnostik model GLM bertujuan untuk mengevaluasi kecocokan model terhadap data, mendeteksi adanya pelanggaran asumsi, dan mengidentifikasi observasi yang tidak biasa (outlier). Kita akan menggunakan beberapa metode diagnostik, termasuk analisis residual, uji goodness-of-fit, dan pemeriksaan overdispersi (khusus untuk regresi Poisson).

Diagnostik untuk Regresi Logistik
1. Residual Deviance: Residual deviance mengukur kecocokan model dibandingkan dengan model saturated (model dengan parameter sebanyak observasi). \[ \text{Deviance} = -2 \left( \ell(\hat{\beta}) - \ell_{\text{saturated}} \right) \] Jika deviance kecil dan p-value (dari uji Chi-Square dengan derajat kebebasan (n - p)) > 0.05, model cocok dengan data.
2. Pearson Residuals: Residual Pearson dihitung sebagai: \[ r_i = \frac{y_i - \hat{p}_i}{\sqrt{\hat{p}_i (1 - \hat{p}_i)}} \] Residual besar (misalnya, \(|r_i| > 3\)) menunjukkan observasi yang tidak biasa. Kode R untuk diagnostik regresi logistik:

# Residual deviance dan uji goodness-of-fit
deviance_logit <- summary(logit_model)$deviance
df_logit <- summary(logit_model)$df.residual
p_value_logit <- 1 - pchisq(deviance_logit, df_logit)

# Pearson residuals
pearson_resid_logit <- residuals(logit_model, type = "pearson")

Statistik Goodness-of-Fit Regresi Logistik | Statistik | Nilai | |———————————–|————-| | Residual Deviance | 132.1173 | | Derajat Kebebasan (df) | 97 | | P-value (Goodness-of-Fit) | 0.0103 |

5 Pearson Residual Pertama | Observasi | Pearson Residual | |———–|——————| | 1 | 1.4598 | | 2 | -0.8471 | | 3 | 0.9880 | | 4 | 1.1457 | | 5 | 1.3630 |

Interpretasi:

  • Jika p-value > 0.05, model regresi logistik cocok dengan data.
  • Residual Pearson yang besar menunjukkan observasi yang tidak sesuai dengan model, yang mungkin perlu diteliti lebih lanjut (misalnya, apakah ada outlier atau prediktor lain yang hilang).

Diagnostik untuk Regresi Poisson
1. Residual Deviance: Sama seperti regresi logistik, kita bandingkan deviance dengan distribusi Chi-Square.
2. Overdispersi: Dalam regresi Poisson, kita asumsikan \(Var(Y) = E(Y)\). Jika variansi lebih besar (overdispersi), model Poisson mungkin tidak tepat. Rasio dispersi dihitung sebagai: \[ \text{Dispersion Ratio} = \frac{\text{Deviance}}{\text{df}} \] Jika rasio >> 1, ada indikasi overdispersi.
Kode R untuk diagnostik regresi Poisson:

# Residual deviance dan uji goodness-of-fit
deviance_poisson <- summary(poisson_model)$deviance
df_poisson <- summary(poisson_model)$df.residual
p_value_poisson <- 1 - pchisq(deviance_poisson, df_poisson)

# Rasio dispersi untuk overdispersi
dispersion_poisson <- deviance_poisson / df_poisson

Tabel hasil evaluasi model Regresi Poisson | Statistik | Nilai | |———————————–|————-| | Residual Deviance | 105.3325 | | Derajat Kebebasan (df) | 97 | | P-value (Goodness-of-Fit) | 0.2645 | | Rasio Dispersi | 1.0859 |

Interpretasi:

  • Jika p-value \(>\) 0.05, model Poisson cocok dengan data.
  • Jika rasio dispersi jauh lebih besar dari 1, ada overdispersi, yang mungkin memerlukan model alternatif seperti quasi-Poisson atau binomial negatif.

5.4 Detail Metode Estimasi dan Inferensi Regresi Logistik

Kita akan menjelaskan secara detail proses estimasi parameter dan inferensi statistik untuk regresi logistik, termasuk uji signifikansi parameter dan interpretasi hasil.

Estimasi Parameter (MLE) Seperti dijelaskan di subbab 5.2, parameter \(\beta\) dalam regresi logistik diestimasi dengan MLE. Fungsi log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(p_i) + (1-y_i) \log(1-p_i) \right] \]

Di mana
\(p_i = \frac{\exp(\mathbf{x}_i^T \beta)}{1 + \exp(\mathbf{x}_i^T \beta)}), dan (\mathbf{x}_i^T \beta = \beta_0 + \beta_1 \cdot \text{Merokok}_i + \beta_2 \cdot \text{Usia}_i\).

Estimasi dilakukan dengan metode iteratif (Newton-Raphson), yang telah dilakukan oleh fungsi glm() di R (lihat subbab 5.2).

Inferensi Statistik
11. uji Signifikansi Parameter (Uji Wald): Untuk setiap parameter \(\beta_j\), uji Wald digunakan: \[ z = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \] Statistik (z) mengikuti distribusi normal standar, dan p-value dihitung untuk menguji hipotesis:
\(H_0: \beta_j = 0\) (prediktor tidak signifikan)
\(H_1: \beta_j \neq 0\) (prediktor signifikan)

  1. Odds Ratio: Odds ratio untuk prediktor \(x_j\) adalah: \[ \text{OR} = e^{\hat{\beta}_j} \] Hasil dari Data Simulasi (dari subbab 5.2):
  • \(\hat{\beta}_0 = -1.832\), \(\text{SE} = 0.897\), \(z = \frac{-1.832}{0.897} \approx -2.042\), p-value ≈ 0.041 \(< 0.05\).
  • \(\hat{\beta}_1 = 0.245\) (Merokok), \(\text{SE} = 0.363\), \(z = \frac{0.245}{0.363} \approx 0.675\), p-value ≈ 0.500 \(> 0.05\).
  • \(\hat{\beta}_2 = 0.015\) (Usia), \(\text{SE} = 0.018\), \(z = \frac{0.015}{0.018} \approx 0.833\), p-value ≈ 0.405 \(> 0.05\).

Interpretasi:

  • Intersep \((\beta_0)\) signifikan, menunjukkan bahwa baseline probabilitas penyakit jantung (ketika Merokok = 0 dan Usia = 0) berbeda dari nol.
  • Merokok \((\beta_1)\) tidak signifikan \(p-value = 0.500\), sehingga tidak ada cukup bukti bahwa merokok memengaruhi kejadian penyakit jantung dalam data ini.
  • Usia \((\beta_2)\) juga tidak signifikan \(p-value = 0.405\).
  • Odds ratio untuk Merokok: \(e^{0.245} \approx 1.277\), untuk Usia: \(e^{0.015} \approx 1.015\), meskipun efeknya tidak signifikan.

5.5 Detail Metode Estimasi dan Inferensi Regresi Poisson

Kita akan menjelaskan secara detail proses estimasi parameter dan inferensi statistik untuk regresi Poisson, termasuk uji signifikansi parameter dan pemeriksaan overdispersi.

Estimasi Parameter (MLE) Fungsi log-likelihood untuk regresi Poisson:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\lambda_i) - \lambda_i \right] \]

Di mana \(\lambda_i = \exp(\mathbf{x}_i^T \beta)\). Estimasi dilakukan dengan metode iteratif (lihat subbab 5.2).

Inferensi Statistik
1. Uji Signifikansi Parameter (Uji Wald):
Sama seperti regresi logistik, kita gunakan uji Wald:
\[ z =\frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \] 2. Rate Ratio:
Rate ratio untuk prediktor (x_j) adalah:
\[ \text{RR} = e\^{\hat{\beta}\_j} \] Hasil dari Data Simulasi (dari subbab 5.2):

  • \(\hat{\beta}\_0 = 1.104\), \(\text{SE} = 0.328\), \(z = \frac{1.104}{0.328}\approx 3.366\), p-value ≈ 0.0008 \(\< 0.05\)
  • \(\hat{\beta}\_1 = -0.019\) (Merokok), \(\text{SE} = 0.094\), \(z=\frac{-0.019}{0.094} \approx-0.202\), p-value ≈ 0.840 \(\> 0.05\)
  • \(\hat{\beta}\_2 = 0.002\) (Usia), \(\text{SE} = 0.006\), \(z=\frac{0.002}{0.006} \approx 0.333\), p-value ≈ 0.739 \(\> 0.05\).

Interpretasi:

  • Intersep \((\beta\_0)\) signifikan, menunjukkan bahwa baseline rata-rata kunjungan (ketika Merokok = 0 dan Usia = 0) berbeda dari nol.
  • Merokok \((\beta\_1)\) tidak signifikan \(p-value = 0.840\).
  • Usia \((\beta\_2)\) juga tidak signifikan \(p-value = 0.739\).
  • Rate ratio untuk Merokok: \(e\^{-0.019} \approx 0.981\), untuk Usia: \(e\^{0.002} \approx 1.002\),tetapi efeknya tidak signifikan.

Pengecekan Overdispersi Kita telah menghitung rasio dispersi di subbab 5.3. Misalkan rasio dispersi ≈ 1 (dari simulasi), tidak ada indikasi overdispersi, sehingga model Poisson sesuai. Jika rasio > 1, kita dapat menggunakan model quasi-Poisson.

Interpretasi:

Model Poisson tampaknya sesuai dengan data, tetapi efek prediktor (Merokok dan Usia) tidak signifikan dalam data simulasi ini. Dalam praktik, kita mungkin perlu menambah prediktor lain atau memeriksa ulang desain studi.

BAB 6: Regresi Logistik dengan Prediktor Nominal, Ordinal, dan Rasio

Regresi logistik merupakan metode analisis statistik yang digunakan untuk memodelkan hubungan antara variabel respons biner dengan satu atau lebih variabel prediktor. Dalam prakteknya, prediktor bisa memiliki berbagai skala pengukuran, seperti:

Contoh Kasus

Simulasikan data berikut untuk memodelkan peluang “sukses” berdasarkan:

  • gender (nominal: Male/Female)
  • education (ordinal: HighSchool < Bachelor < Master < PhD)
  • income (rasio: dalam juta rupiah per bulan)

Gunakan ukuran sampel sebanyak 500 observasi.

Penyelesaian

6.1 Simulasi Data

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'forcats' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
set.seed(123) 
n <- 500

# Prediktor
gender <- sample(c("Male", "Female"), n, replace = TRUE) 
education <- sample(c("HighSchool", "Bachelor", "Master", "PhD"), n, replace = TRUE,
prob = c(0.4, 0.3, 0.2, 0.1)) 
income <- rnorm(n, mean = 50, sd = 15)

# Logit Model (education sebagai ordinal numerik)
logit_p <- -2 + 0.5 * (gender == "Female") +
           0.8 * as.numeric(factor(education, ordered = TRUE)) +
           0.03 * income

p <- 1 / (1 + exp(-logit_p))
success <- rbinom(n, 1, p)

sim_data <- tibble(success, gender, education, income)
head(sim_data)
## # A tibble: 6 × 4
##   success gender education  income
##     <int> <chr>  <chr>       <dbl>
## 1       1 Male   HighSchool   41.0
## 2       1 Male   HighSchool   35.1
## 3       1 Male   HighSchool   65.4
## 4       1 Female HighSchool   61.3
## 5       1 Male   HighSchool   27.4
## 6       1 Female HighSchool   48.6

6.2 Eksplorasi Data

sim_data %>%
  group_by(success) %>%
  summarise(
    Jumlah = n(),
    Rata2_Income = mean(income)
  )
## # A tibble: 2 × 3
##   success Jumlah Rata2_Income
##     <int>  <int>        <dbl>
## 1       0    111         45.1
## 2       1    389         51.3

Tabel menunjukkan distribusi antara individu sukses dan tidak, serta rata-rata pendapatan masing-masing kelompok.

6.3 Perlakuan Variabel Ordinal

6.3.1 Perlakuan Sebagai Nominal (Dummy)

sim_data_nominal <- sim_data %>%
  mutate(education = factor(education, levels = c("HighSchool", "Bachelor", "Master", "PhD")))

model_nominal <- glm(success ~ gender + education + income,
                     data = sim_data_nominal, family = binomial)

summary(model_nominal)
## 
## Call:
## glm(formula = success ~ gender + education + income, family = binomial, 
##     data = sim_data_nominal)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -0.012456   0.406398  -0.031   0.9755    
## genderMale        -0.286854   0.226452  -1.267   0.2053    
## educationBachelor -0.591248   0.248867  -2.376   0.0175 *  
## educationMaster    0.764194   0.347019   2.202   0.0277 *  
## educationPhD       1.091851   0.559012   1.953   0.0508 .  
## income             0.029543   0.007585   3.895 9.82e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 529.43  on 499  degrees of freedom
## Residual deviance: 489.56  on 494  degrees of freedom
## AIC: 501.56
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Hasil:

Intercept: Nilai intercept sebesar −0.012 tidak signifikan (p = 0.9755), artinya baseline log-odds untuk kelompok referensi (gender = Female, education = HighSchool, income = 0) tidak berbeda secara signifikan dari nol. (Catatan: interpretasi intercept jarang penting secara substantif.)

genderMale: Koefisien −0.287 dengan p = 0.2053 menunjukkan bahwa laki-laki memiliki log-odds keberhasilan yang sedikit lebih rendah dibandingkan perempuan (referensi), namun perbedaannya tidak signifikan secara statistik.

educationBachelor: Koefisien −0.591 dan p = 0.0175 (signifikan). Ini berarti individu dengan pendidikan Bachelor memiliki peluang keberhasilan lebih rendah dibandingkan HighSchool, jika variabel lain dikendalikan.

  • Odds ratio ≈ exp(−0.591) ≈ 0.55 → peluang berhasil ~45% lebih kecil dibanding HighSchool.

educationMaster: Koefisien 0.764 (p = 0.0277) → signifikan. Artinya, individu dengan gelar Master memiliki log-odds keberhasilan lebih tinggi dibanding HighSchool.

  • Odds ratio ≈ exp(0.764) ≈ 2.15 → peluang berhasil ~2.15 kali lipat dari HighSchool.

educationPhD: Koefisien 1.092 dengan p = 0.0508 (marginal signifikan). Artinya, individu dengan PhD memiliki log-odds keberhasilan yang lebih tinggi dibanding HighSchool.

  • Odds ratio ≈ exp(1.092) ≈ 2.98

income: Koefisien 0.0295 (p < 0.001) menunjukkan bahwa setiap kenaikan 1 unit pendapatan (juta rupiah) meningkatkan log-odds keberhasilan.

  • Odds ratio ≈ exp(0.0295) ≈ 1.03 → peluang berhasil meningkat sekitar 3% untuk setiap kenaikan 1 juta.

Statistik Model AIC = 501.56 → digunakan untuk membandingkan antar model (lebih rendah = lebih baik).

Residual deviance = 489.56 → dibandingkan dengan null deviance 529.43 → menunjukkan bahwa model menjelaskan sebagian variabilitas data.

Iterasi = 4 → menunjukkan model konvergen dengan baik.

6.3.2 Perlakuan Sebagai Numeric Rank

sim_data_numeric <- sim_data %>%
  mutate(education_numeric = as.numeric(factor(education, ordered = TRUE)))

model_numeric <- glm(success ~ gender + education_numeric + income,
                     data = sim_data_numeric, family = binomial)

summary(model_numeric)
## 
## Call:
## glm(formula = success ~ gender + education_numeric + income, 
##     family = binomial, data = sim_data_numeric)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -1.22473    0.46662  -2.625 0.008673 ** 
## genderMale        -0.29138    0.22596  -1.289 0.197224    
## education_numeric  0.62264    0.13608   4.576 4.75e-06 ***
## income             0.02947    0.00758   3.888 0.000101 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 529.43  on 499  degrees of freedom
## Residual deviance: 489.84  on 496  degrees of freedom
## AIC: 497.84
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Hasil:

Intercept: Nilai intercept sebesar −1.225 signifikan (p = 0.0087), yang menggambarkan log-odds dasar keberhasilan bagi individu perempuan, dengan education_numeric = 0 dan income = 0. Secara praktik, nilai ini jarang ditafsirkan secara substantif karena pendidikan dan pendapatan nol jarang masuk akal secara nyata.

genderMale: Koefisien −0.291 tidak signifikan (p = 0.197). Ini menunjukkan bahwa tidak terdapat perbedaan peluang keberhasilan yang signifikan antara laki-laki dan perempuan setelah mengontrol variabel lain.

education_numeric: Koefisien sebesar 0.623 sangat signifikan (p < 0.001). Artinya, setiap peningkatan satu tingkat pendidikan (misal dari HighSchool ke Bachelor, atau Bachelor ke Master) akan meningkatkan log-odds keberhasilan sebesar 0.623.

  • Dalam odds: exp(0.623) ≈ 1.86 → peluang keberhasilan meningkat sekitar 86% per kenaikan satu tingkat pendidikan.

income: Koefisien 0.0295 signifikan (p < 0.001). Ini menunjukkan bahwa setiap kenaikan 1 juta rupiah dalam pendapatan meningkatkan peluang keberhasilan.

  • Odds ratio: exp(0.0295) ≈ 1.03 → peluang keberhasilan naik ~3% per juta rupiah.

Statistik Model AIC = 497.84 → lebih rendah dibanding model nominal (AIC = 501.56), yang menunjukkan model ini lebih baik dalam hal efisiensi parameter (parsimonious).

Residual deviance = 489.84 lebih kecil dibanding null deviance (529.43) → model menjelaskan sebagian variasi data dengan baik.

Iterasi = 4 → menunjukkan model konvergen dengan baik.

TABEL PERBANDINGAN MODEL

Aspek Model Nominal Model Numeric
Pendekatan Dummy variable per kategori (4 level → 3 dummy) Skala numerik ordinal (1 kolom saja)
Jumlah Parameter Pendidikan 3 parameter (Bachelor, Master, PhD) 1 parameter (ordinal numeric)
AIC 501.56 497.84
Signifikansi Pendidikan Bachelor & Master signifikan (p \(<\) 0.05) Sangat signifikan (p \(<\) 0.001)
Interpretasi Dibandingkan dengan referensi: HighSchool Kenaikan satu tingkat → odds meningkat ~86%
Parsimony Kurang efisien (lebih banyak parameter) Lebih efisien dan sederhana

Dengan demikian, model ordinal sebagai numeric memiliki kinerja statistik yang lebih baik dan interpretasi yang lebih ringkas, asalkan asumsi linier antar level ordinal dapat diterima.

BAB 7: Pemilihan Model Regresi Logistik dan Evaluasi

Setelah membangun model regresi logistik, tahap berikutnya adalah memilih model terbaik dan mengevaluasi performanya. Hal ini penting untuk memastikan model:

Dua pendekatan utama dalam pemilihan model:

Metode umum dalam seleksi model:

Model terbaik dipilih berdasarkan kriteria informasi, khususnya:

Rumus AIC (Akaike Information Criterion)

\[ \text{AIC} = -2 \cdot \log(\hat{L}) + 2k \]

Setelah model terpilih, evaluasi dilakukan dengan:
1. Kurva ROC dan AUC
ROC (Receiver Operating Characteristic) mengukur trade-off sensitivitas dan 1-spesifisitas.

AUC (Area Under Curve) menunjukkan kemampuan diskriminatif model. | | $$

\(\text{AUC} = P(\text{model memberikan nilai lebih tinggi untuk} y=1)\)

\(\text{ daripada } y=0\)

  1. Pseudo R-Squared Beberapa versi populer:

McFadden:

\[ R^2_{\text{McF}} = 1 - \frac{\log L_{\text{model}}}{\log L_{\text{null}}} \]

Nagelkerke: versi skala penuh 0–1 dari Cox-Snell. Nilai yang lebih tinggi → model lebih baik

  1. Tabel Klasifikasi Menghitung: - Akurasi - Sensitivitas - Spesifisitas - Positive Predictive Value (PPV) - Negative Predictive Value (NPV)

Contoh Kasus

Simulasi Data

set.seed(123)
n <- 300
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -1 + 1.2 * x1 - 0.6 * x2 + 0.8 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)

Penyelesaian

7.1 Pemodelan dan Seleksi Model Stepwise

model_full <- glm(y ~ x1 + x2 + x3, family = binomial, data = data)
null_model <- glm(y ~ 1, data = data, family = binomial)

step_forward <- step(null_model, scope = list(lower = null_model, upper = model_full), direction = "forward", trace = FALSE)
step_backward <- step(model_full, direction = "backward", trace = FALSE)
step_both <- step(null_model, scope = list(upper = model_full), direction = "both", trace = FALSE)

summary(step_both)
## 
## Call:
## glm(formula = y ~ x1 + x3 + x2, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -1.0065     0.2161  -4.658 3.19e-06 ***
## x1            1.3119     0.1940   6.761 1.37e-11 ***
## x3            0.8687     0.1777   4.887 1.02e-06 ***
## x2           -0.5262     0.3044  -1.729   0.0839 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 364.81  on 299  degrees of freedom
## Residual deviance: 270.46  on 296  degrees of freedom
## AIC: 278.46
## 
## Number of Fisher Scoring iterations: 5

Model stepwise memilih semua prediktor (x1, x3, x2), dengan x1 dan x3 sangat signifikan. x2 memiliki pengaruh negatif namun tidak signifikan secara statistik (p > 0.05). Model ini efisien dan cukup akurat berdasarkan AIC dan deviance. Perbandingan AIC dan Deviance

model_comp <- data.frame(
  Model = c("Full", "Forward", "Backward", "Both"),
  AIC = c(AIC(model_full), AIC(step_forward), AIC(step_backward), AIC(step_both)),
  Deviance = c(deviance(model_full), deviance(step_forward), deviance(step_backward), deviance(step_both))
)

knitr::kable(model_comp, caption = "Perbandingan AIC dan Deviance", color = "white")
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning in attr(x, "format"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Perbandingan AIC dan Deviance
Model AIC Deviance
Full 278.4581 270.4581
Forward 278.4581 270.4581
Backward 278.4581 270.4581
Both 278.4581 270.4581

7.2 Evaluasi Model: ROC dan AUC

library(pROC)
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
pred_prob <- predict(step_both, type = "response")
roc_obj <- roc(data$y, pred_prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, main = "Kurva ROC", col = "blue")

auc(roc_obj)
## Area under the curve: 0.8309

AUC = 0.8309 → kemampuan klasifikasi model sangat baik. ## Pseudo R-Squared

library(DescTools)
PseudoR2(step_both, which = c("CoxSnell", "Nagelkerke", "McFadden"))
##   CoxSnell Nagelkerke   McFadden 
##  0.2698462  0.3835251  0.2586292
Jenis Pseudo R² Nilai Interpretasi Singkat
Cox & Snell 0.2698 Menjelaskan ~27% variansi log-likelihood; maksimum nilai < 1
Nagelkerke 0.3835 Versi skala penuh 0–1; model menjelaskan ~38% variansi, dianggap cukup baik
McFadden 0.2586 Nilai > 0.2 dianggap baik; model memiliki kekuatan prediksi yang layak

Nilai-nilai pseudo R² menunjukkan bahwa model cukup kuat secara statistik dan menjelaskan proporsi variansi yang cukup besar. Nagelkerke mendekati 0.4, dan McFadden di atas 0.25 → keduanya mengindikasikan model logistik yang baik.

7.3 Tabel Klasifikasi dan Evaluasi

# Prediksi kelas (biner)
pred_class <- ifelse(pred_prob >= 0.5, 1, 0)

# Buat confusion matrix manual
conf_matrix <- table(Prediksi = pred_class, Aktual = as.numeric(as.character(data$y)))
conf_matrix
##         Aktual
## Prediksi   0   1
##        0 193  48
##        1  18  41
TP <- conf_matrix["1", "1"]
TN <- conf_matrix["0", "0"]
FP <- conf_matrix["1", "0"]
FN <- conf_matrix["0", "1"]

akurasi <- (TP + TN) / sum(conf_matrix)
sensitivitas <- TP / (TP + FN)
spesifisitas <- TN / (TN + FP)
PPV <- TP / (TP + FP)
NPV <- TN / (TN + FN)
Metrik Nilai Interpretasi Singkat
Akurasi 0.780 78% dari seluruh observasi diprediksi dengan benar oleh model
Sensitivitas 0.461 Hanya 46.1% kasus positif (1) yang berhasil terdeteksi dengan benar
Spesifisitas 0.915 91.5% kasus negatif (0) diklasifikasikan dengan benar oleh model
PPV (Presisi) 0.695 Dari semua prediksi positif, 69.5% benar-benar positif
NPV 0.801 Dari semua prediksi negatif, 80.1% benar-benar negatif

7.4 Metode Perbandingan Model dalam Regresi Logistik

model_comp <- data.frame(
  Model = c("Full", "Forward", "Backward", "Both"),
  AIC = c(AIC(model_full), AIC(step_forward), AIC(step_backward), AIC(step_both)),
  Deviance = c(deviance(model_full), deviance(step_forward), deviance(step_backward), deviance(step_both))
)
Model AIC Deviance
Full 278.458 270.458
Forward 278.458 270.458
Backward 278.458 270.458
Both 278.458 270.458

Semua metode (Full, Forward, Backward, Both) menghasilkan model yang identik dengan AIC dan deviance yang sama. Ini menunjukkan bahwa semua prediktor (x1, x2, x3) layak dimasukkan dalam model, dan proses seleksi model tidak mengubah struktur model akhir. Model ini juga efisien secara statistik dan stabil.

7.5 Likelihood-Ratio Test

anova(null_model, model_full, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: y ~ 1
## Model 2: y ~ x1 + x2 + x3
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       299     364.81                          
## 2       296     270.46  3    94.35 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Hasil uji Likelihood Ratio menunjukkan bahwa model penuh (x1 + x2 + x3) secara signifikan lebih baik dibanding model null (tanpa prediktor).

  • p-value < 0.001 → kita menolak H₀, artinya paling tidak satu prediktor memberikan kontribusi signifikan terhadap model.

  • Ini mendukung bahwa pemodelan dengan x1, x2, dan x3 memberikan peningkatan yang bermakna dalam menjelaskan variabel respons y.

7.6 Prinsip Parsimony

Model yang kompleks sering memiliki AIC dan deviance yang lebih kecil. Namun:

  • Model sederhana lebih mudah diinterpretasikan
  • Jika penurunan AIC tidak signifikan, pilih model yang lebih sederhana
  • Prinsip parsimony membantu mencegah overfitting

Dalam contoh kasus yang kita kerjakan sebelumnya, kita membandingkan empat model:

  • Model Full: y ~ x1 + x2 + x3
  • Stepwise Forward
  • Stepwise Backward
  • Stepwise Both

Hasil perbandingan AIC dan deviance ditunjukkan dalam tabel berikut:

Model AIC Deviance
Full 278.458 270.458
Forward 278.458 270.458
Backward 278.458 270.458
Both 278.458 270.458

Semua metode menghasilkan model yang sama, yaitu model dengan tiga prediktor (x1, x2, dan x3), yang berarti seluruh prediktor berkontribusi signifikan secara statistik atau prediktif.

Rumus AIC

\[ \text{AIC} = -2(\log L - k) = -2 \log L + 2k \]

Penjelasan:
AIC menggabungkan akurasi model (melalui log-likelihood \(L\)) dan kompleksitas model (jumlah parameter \(k\)). Model dengan AIC lebih kecil lebih disukai, asalkan penurunannya signifikan. Jika tidak signifikan, pilihlah model yang lebih sederhana.

Rumus Deviance

\[ D = -2 \left[ \log L(\text{model}) - \log L(\text{model saturasi}) \right] \]

Penjelasan:
Deviance mengukur seberapa jauh model saat ini dari model sempurna. Dalam kasus kita, deviance menurun drastis dari 364.81 (null) menjadi 270.46, menandakan bahwa model penuh cukup menjelaskan variabilitas data.

Rumus Likelihood-Ratio Test

\[ G^2 = -2 \left( \log L_0 - \log L_1 \right) \]

Penjelasan:
Uji Likelihood Ratio membandingkan model null (y ~ 1) dengan model penuh. Dalam contoh ini, deviance turun 94.35 poin dengan p-value < 2.2e-16, menandakan bahwa model penuh secara statistik jauh lebih baik.

Kesimpulan Parsimony

  • Semua model menghasilkan struktur akhir yang sama: y ~ x1 + x2 + x3

  • Tidak ada pengurangan variabel oleh metode stepwise, artinya semua variabel dibutuhkan

  • AIC sudah minimum, dan penambahan variabel signifikan (berdasarkan uji LR)

  • Maka: meskipun model memiliki 3 prediktor, ini adalah model paling parsimonious yang valid dalam kasus ini

7.7 Evaluasi Tabel Klasifikasi dan Akurasi Model

Setelah model dibangun, kita perlu mengevaluasi kinerjanya dalam mengklasifikasikan data secara benar. Salah satu caranya adalah membuat confusion matrix dan menghitung metrik performa seperti akurasi, sensitivitas, dan spesifisitas.

Rumus

  • Akurasi: \[ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} \]

  • Sensitivity (Recall): \[ \text{Sensitivity} = \frac{TP}{TP + FN} \]

  • Specificity: \[ \text{Specificity} = \frac{TN}{TN + FP} \]

Evaluasi dengan Confusion Matrix

pred_prob <- predict(step_both, type = "response")
# Prediksi kelas
pred_class <- ifelse(pred_prob >= 0.5, 1, 0)

# Buat confusion matrix manual
conf_matrix <- table(Prediksi = pred_class, Aktual = as.numeric(as.character(data$y)))
conf_matrix
##         Aktual
## Prediksi   0   1
##        0 193  48
##        1  18  41
# Ambil elemen dari confusion matrix
TP <- conf_matrix["1", "1"]
TN <- conf_matrix["0", "0"]
FP <- conf_matrix["1", "0"]
FN <- conf_matrix["0", "1"]

# Hitung metrik performa
akurasi <- (TP + TN) / sum(conf_matrix)
sensitivitas <- TP / (TP + FN)
spesifisitas <- TN / (TN + FP)
PPV <- TP / (TP + FP)
NPV <- TN / (TN + FN)
Metrik Nilai Interpretasi Singkat
Akurasi 0.780 78% dari seluruh prediksi sesuai dengan data aktual
Sensitivitas 0.461 Model menangkap 46.1% dari kasus positif dengan benar (True Positive)
Spesifisitas 0.915 Model benar dalam 91.5% kasus negatif
PPV (Presisi) 0.695 69.5% dari prediksi positif memang benar-benar positif
NPV 0.801 80.1% dari prediksi negatif memang benar-benar negatif

7.8 Detail ROC (Receiver Operating Characteristic)

Kurva ROC menggambarkan trade-off antara sensitivitas dan (1 - spesifisitas) untuk semua nilai threshold. Visualisasi Kurva ROC

library(pROC)
roc_obj <- roc(data$y, pred_prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, main = "Kurva ROC")

Kurva melengkung menjauhi diagonal abu-abu → artinya model Anda lebih baik dari tebak-tebakan acak.

Kurva naik tajam di awal dan mendekati pojok kiri atas (0,1) → menandakan kemampuan klasifikasi yang baik, karena:

  • Sensitivitas cepat naik

  • False Positive Rate (1 - Spesifisitas) tetap rendah

auc(roc_obj)
## Area under the curve: 0.8309

Karena AUC > 0.7 sehingga Model memiliki kemampuan klasifikasi yang sangat baik, dengan probabilitas 83.1% bahwa model akan memberikan skor prediksi yang lebih tinggi untuk observasi positif (y = 1) dibanding observasi negatif (y = 0).

7.9 Precision-Recall Curve (PR Curve)

PR Curve lebih informatif daripada ROC saat data tidak seimbang. Visualisasi PR Curve

library(PRROC)
## Warning: package 'PRROC' was built under R version 4.4.3
## Loading required package: rlang
## 
## Attaching package: 'rlang'
## The following objects are masked from 'package:purrr':
## 
##     %@%, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl,
##     flatten_raw, invoke, splice
pr <- pr.curve(
  scores.class0 = pred_prob[data$y == 1],
  scores.class1 = pred_prob[data$y == 0],
  curve = TRUE
)
plot(pr)

Precision-Recall Curve menunjukkan AUC sebesar 0.680, yang menandakan kemampuan klasifikasi model terhadap kelas positif berada pada tingkat sedang. Nilai ini lebih rendah dari AUC ROC, karena PR Curve lebih peka terhadap ketidakseimbangan kelas. Meskipun recall cukup tinggi, precision menurun secara bertahap, yang menunjukkan adanya trade-off antara menangkap lebih banyak kasus positif dan akurasi prediksi positif.

7.10 Pseudo R-squared pada Regresi Logistik

Karena regresi logistik tidak menggunakan R² klasik, digunakan beberapa alternatif Pseudo-R².

model_null <- glm(y ~ 1, data = data, family = binomial)
logL0 <- logLik(model_null)
logLM <- logLik(step_both)
L0 <- exp(logL0)
LM <- exp(logLM)
n <- nobs(step_both)

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
##   R2_Cox_Snell R2_McFadden
## 1    0.2698462   0.2586292
Jenis Pseudo R² Nilai Interpretasi Singkat
Cox & Snell 0.270 Model menjelaskan ~27% variansi log-likelihood dibanding model null
McFadden 0.259 Di atas 0.2 → model memiliki kekuatan penjelas yang baik

Nilai-nilai pseudo R² yang cukup tinggi menunjukkan bahwa model step_both adalah model logistik yang kuat dan layak digunakan, dengan kemampuan menjelaskan data yang baik namun tetap efisien secara struktural (parsimonious).

BAB 8: Apa itu Distribusi Multinomial

Distribusi multinomial merupakan perluasan dari distribusi binomial untuk kasus dengan lebih dari dua kategori. Misalnya, jika seseorang memilih satu dari tiga jenis buah favorit: Apel, Jeruk, dan Pisang, maka hasilnya mengikuti distribusi multinomial.

Contoh Kasus

Sebuah survei dilakukan terhadap 10 orang yang diminta memilih satu dari tiga jenis buah favorit: Apel (A), Jeruk (J), dan Pisang (P).

  • Apel: 4 orang
  • Jeruk: 3 orang
  • Pisang: 3 orang

Probabilitas teoritik preferensi:

  • \(p_A = 0.3\)
  • \(p_J = 0.4\)
  • \(p_P = 0.3\)

Rumus Distribusi Multinomial: \(P(X_1 = x_1, \dots, X_k = x_k) = \frac{n!}{x_1! x_2! \dots x_k!} p_1^{x_1} p_2^{x_2} \dots p_k^{x_k}\)

Dengan \(\sum x_i = n\) dan \(\sum p_i = 1\).

Perusahaan ingin mengetahui preferensi perangkat kerja karyawan: Laptop, Desktop, atau Tablet, dengan prediktor: usia, divisi, dan pengalaman kerja.

Penyelesaian

8.1 Multinomial Logistic Regression

Multinomial logistic regression digunakan saat respon memiliki >2 kategori dan tidak berurutan (nominal).

8.1.1 Baseline-Category Logit Model

Jika \(Y\) memiliki \(c\) kategori, maka kita pilih satu kategori sebagai baseline (misalnya kategori \(c\)). Model logit:

\(\log\left(\frac{\pi_j}{\pi_c}\right) = \alpha_j + \beta_j x, \quad j = 1, \dots, c-1\)

  • \(\pi_j\): probabilitas berada di kategori \(j\)
  • \(\pi_c\): probabilitas berada di kategori baseline

8.1.2 Estimasi Parameter

Estimasi menggunakan Maximum Likelihood: \(\ell(\beta) = \sum_{i=1}^n \sum_{j=1}^K y_{ij} \log(\pi_{ij})\)

8.2 Simulasi Data

set.seed(123)
n <- 150
Department <- sample(c("IT", "Marketing", "HR"), n, replace = TRUE)
Age <- round(rnorm(n, mean = 35, sd = 7))
Experience <- round(pmax(rnorm(n, mean = 7, sd = 3), 0))
Device <- sapply(Department, function(dep) {
  if (dep == "IT") {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.6, 0.2, 0.2))
  } else if (dep == "Marketing") {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.3, 0.3, 0.4))
  } else {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.4, 0.4, 0.2))
  }
})
data_multi <- data.frame(Device = factor(Device), Department, Age, Experience)

8.3 Estimasi Model

library(nnet)
data_multi$Department <- relevel(factor(data_multi$Department), ref = "HR")
model_multi <- multinom(Device ~ Age + Department + Experience, data = data_multi)
## # weights:  18 (10 variable)
## initial  value 164.791843 
## iter  10 value 153.262117
## final  value 153.057472 
## converged
summary(model_multi)
## Call:
## multinom(formula = Device ~ Age + Department + Experience, data = data_multi)
## 
## Coefficients:
##        (Intercept)          Age DepartmentIT DepartmentMarketing Experience
## Laptop  0.19475101 -0.003962003     1.041329          -0.2153598 0.03133361
## Tablet -0.06652179 -0.031643458     1.078707           1.0298125 0.07553063
## 
## Std. Errors:
##        (Intercept)        Age DepartmentIT DepartmentMarketing Experience
## Laptop    1.139007 0.02802813    0.5359685           0.4742033 0.06782814
## Tablet    1.257899 0.03087923    0.6437901           0.5184056 0.07664465
## 
## Residual Deviance: 306.1149 
## AIC: 326.1149

Variabel Department (IT dan Marketing) merupakan prediktor kuat terhadap pemilihan perangkat. Age hanya signifikan pada kategori Tablet (negatif). Experience memiliki efek positif ringan pada pemilihan selain Desktop.

8.4 Nilai P-Value dan Interpretasi

z_vals <- summary(model_multi)$coefficients / summary(model_multi)$standard.errors
p_vals <- 2 * (1 - pnorm(abs(z_vals)))
round(p_vals, 4)
##        (Intercept)    Age DepartmentIT DepartmentMarketing Experience
## Laptop      0.8642 0.8876       0.0520              0.6497     0.6441
## Tablet      0.9578 0.3055       0.0938              0.0470     0.3244

Hasil p-value menunjukkan bahwa prediktor yang paling signifikan dalam membedakan pilihan Tablet dibanding Desktop adalah DepartmentMarketing. Untuk pilihan Laptop, tidak ada prediktor yang signifikan pada level 5%, namun DepartmentIT mendekati signifikan (p ≈ 0.052). Ini mengindikasikan bahwa divisi memiliki pengaruh yang lebih kuat terhadap preferensi perangkat kerja dibanding variabel usia atau pengalaman.

8.5 Prediksi dan Validasi

data_multi$pred <- predict(model_multi, newdata = data_multi)
table(Predicted = data_multi$pred, Actual = data_multi$Device)
##          Actual
## Predicted Desktop Laptop Tablet
##   Desktop       0      3      1
##   Laptop       26     50     21
##   Tablet       15     13     21

8.6 Kesimpulan

Model regresi logistik multinomial berhasil mengidentifikasi bahwa variabel departemen berpengaruh signifikan terhadap preferensi perangkat kerja, terutama untuk kategori Tablet. Model cukup akurat dalam memprediksi kategori Laptop, namun masih lemah dalam mengenali kategori Desktop. Nilai pseudo R² menunjukkan bahwa model memiliki kemampuan penjelasan yang layak, meskipun akurasi klasifikasinya masih dapat ditingkatkan.

BAB 9: Regresi Logistik Ordinal

Regresi logistik ordinal digunakan ketika variabel respon memiliki urutan kategori, tetapi jarak antar kategori tidak diasumsikan sama. Contoh klasik adalah tingkat kepuasan: “Tidak Puas”, “Cukup”, dan “Puas”.

Contoh Kasus

Sebuah perusahaan ingin mengevaluasi tingkat kepuasan pelanggan terhadap layanan yang diberikan. Kepuasan dinilai dalam tiga tingkatan ordinal: “Tidak Puas”, “Cukup”, dan “Puas”. Salah satu faktor yang diduga memengaruhi kepuasan pelanggan adalah kecepatan layanan. Data dikumpulkan dari 200 pelanggan dengan variabel prediktor speed yang mengukur tingkat kecepatan pelayanan (skala 1–10).

set.seed(123)
n <- 200
speed <- round(runif(n, 1, 10))
satisfaction <- cut(5 + 0.5 * speed + rnorm(n),
                    breaks = c(-Inf, 5.5, 7.5, Inf),
                    labels = c("Tidak Puas", "Cukup", "Puas"),
                    ordered_result = TRUE)

df <- data.frame(satisfaction, speed)
head(df)
##   satisfaction speed
## 1        Cukup     4
## 2         Puas     8
## 3        Cukup     5
## 4         Puas     9
## 5         Puas     9
## 6   Tidak Puas     1

Penyelesaian

9.1 Konsep Cumulative Logit Model

Model cumulative logit memodelkan log-odds kumulatif dari suatu respon ordinal sebagai fungsi linier dari prediktor:

\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x, \quad j = 1, \dots, c - 1 \]

  • $ _j $: intercept berbeda untuk tiap ambang kategori
  • $ $: koefisien prediktor yang sama untuk semua kategori (asumsi paralelisme)

9.2 Interpretasi Koefisien

  • $ > 0 $: peningkatan nilai prediktor meningkatkan probabilitas kategori yang lebih rendah
  • $ < 0 $: peningkatan nilai prediktor meningkatkan probabilitas kategori yang lebih tinggi

Odds Ratio: \[ \text{OR} = e^\beta \]

9.3 Estimasi Model Ordinal

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
model_ord <- polr(satisfaction ~ speed, data = df, Hess = TRUE)
summary(model_ord)
## Call:
## polr(formula = satisfaction ~ speed, data = df, Hess = TRUE)
## 
## Coefficients:
##        Value Std. Error t value
## speed 0.9096     0.1094   8.315
## 
## Intercepts:
##                  Value  Std. Error t value
## Tidak Puas|Cukup 1.3015 0.4377     2.9738 
## Cukup|Puas       4.4734 0.5718     7.8232 
## 
## Residual Deviance: 237.2312 
## AIC: 243.2312

Model menunjukkan bahwa speed adalah prediktor yang sangat signifikan terhadap tingkat kepuasan. Pelanggan dengan kecepatan layanan yang lebih tinggi cenderung berada pada kategori kepuasan yang lebih tinggi (Cukup atau Puas). Model juga memiliki deviance dan AIC yang cukup rendah, menandakan fit yang baik.

9.4 Nilai P-Value

(ctable <- coef(summary(model_ord)))
##                      Value Std. Error  t value
## speed            0.9095585  0.1093925 8.314630
## Tidak Puas|Cukup 1.3015075  0.4376597 2.973789
## Cukup|Puas       4.4733938  0.5718127 7.823180
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
## speed            0.9095585  0.1093925 8.314630  0.0000
## Tidak Puas|Cukup 1.3015075  0.4376597 2.973789  0.0029
## Cukup|Puas       4.4733938  0.5718127 7.823180  0.0000

Hasil analisis menunjukkan bahwa variabel speed berpengaruh signifikan terhadap kepuasan pelanggan (p < 0.0001). Kedua ambang kategori juga signifikan, yang berarti pembagian tingkat kepuasan valid secara statistik. Model layak digunakan untuk menjelaskan hubungan antara kecepatan layanan dan kepuasan.

9.5 Prediksi Probabilitas

newdata <- data.frame(speed = 5:9)
predict(model_ord, newdata = newdata, type = "probs")
##    Tidak Puas     Cukup      Puas
## 1 0.037460604 0.4439482 0.5185912
## 2 0.015430723 0.2566765 0.7278928
## 3 0.006271788 0.1245723 0.8691559
## 4 0.002535158 0.0546231 0.9428417
## 5 0.001022461 0.0228089 0.9761686

Prediksi probabilitas menunjukkan bahwa semakin tinggi nilai speed, semakin besar kemungkinan pelanggan berada pada kategori kepuasan yang lebih tinggi (Puas), dan kemungkinan berada pada kategori Tidak Puas semakin kecil. Ini konsisten dengan arah koefisien model.

9.6 Goodness-of-Fit dan Proportional Odds

Model cumulative logit mengasumsikan proportional odds, artinya hubungan antara prediktor dan log-odds adalah konstan di seluruh ambang batas kategori. Jika asumsi ini dilanggar, model tidak valid.

9.7 Alternatif Model Ordinal

Alternatif untuk cumulative logit jika asumsi paralelisme tidak terpenuhi:

  • Generalized ordinal logit (tanpa asumsi paralelisme)
  • Adjacent-category logit
  • Continuation-ratio logit

9.8 Kesimpulan

Model regresi logistik ordinal menunjukkan bahwa kecepatan layanan (speed) berpengaruh signifikan terhadap kepuasan pelanggan. Prediksi probabilitas konsisten dengan logika ordinal—semakin cepat layanan, semakin besar peluang pelanggan merasa puas. Seluruh parameter model signifikan secara statistik, dan hasil uji Brant menunjukkan bahwa asumsi paralelisme terpenuhi. Dengan demikian, model cumulative logit valid dan layak digunakan dalam kasus ini.

9.9 Asumsi Paralelisme dalam Regresi Logistik Ordinal

Asumsi paralelisme menyatakan bahwa:

\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]

di mana koefisien $ $ tidak berubah antar ambang kategori $ j $. Pelanggaran terhadap asumsi ini membuat model cumulative logit tidak valid.

9.10 Uji Asumsi Paralelisme:

library(brant)
## Warning: package 'brant' was built under R version 4.4.3
brant(model_ord)
## -------------------------------------------- 
## Test for X2  df  probability 
## -------------------------------------------- 
## Omnibus      1.13    1   0.29
## speed        1.13    1   0.29
## -------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds

Hasil uji Brant menunjukkan p-value = 0.29 (tidak signifikan), sehingga tidak ada cukup bukti untuk menolak H0. Artinya, asumsi paralelisme terpenuhi, dan model cumulative logit valid digunakan.

BAB 10: Log Linear Model

Model log-linear digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategorik dalam bentuk tabel kontingensi, khususnya ketika tidak ada variabel dependen eksplisit. Tujuan utama adalah menguji apakah terdapat ketergantungan atau asosiasi antara kategori variabel.

Contoh Soal

Misalkan sebuah survei dilakukan untuk mengetahui apakah terdapat hubungan antara jenis kelamin responden (Male/Female) dan tanggapan terhadap pertanyaan “Apakah Anda setuju?” (Yes/No). Data disajikan dalam bentuk tabel kontingensi berikut:

Yes No
Male 50 30
Female 20 80

Gunakan model log-linear untuk: 1. Membentuk model saturated dan independen. 2. Menghitung odds ratio. 3. Menginterpretasikan hasil. 4. Menentukan apakah terdapat hubungan antara Gender dan Response.

Penyelesaian

10.1 Model Log-Linear dan Tabel Kontingensi

Rumus umum model log-linear:

\[ \log(m_{ij}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]

  • $ m_{ij} $ adalah nilai ekspektasi sel ke-(i,j)
  • $ $ adalah efek utama dan interaksi dari kategori

10.2 Model Saturated

# Data tabel kontingensi
data <- matrix(c(50, 30, 20, 80), nrow = 2, byrow = TRUE)
dimnames(data) <- list(Gender = c("Male", "Female"),
                       Response = c("Yes", "No"))

# Model saturated
model_sat <- loglin(data, margin = list(c(1), c(2), c(1,2)), fit = TRUE)
## 2 iterations: deviation 1.421085e-14
model_sat
## $lrt
## [1] 0
## 
## $pearson
## [1] 0
## 
## $df
## [1] 0
## 
## $margin
## $margin[[1]]
## [1] "Gender"
## 
## $margin[[2]]
## [1] "Response"
## 
## $margin[[3]]
## [1] "Gender"   "Response"
## 
## 
## $fit
##         Response
## Gender   Yes No
##   Male    50 30
##   Female  20 80

Hasil output model saturated menunjukkan nilai deviance (G²) sebesar 0 dan degrees of freedom (df) = 0, yang artinya model cocok sempurna dengan data. Ini wajar karena model saturated memasukkan semua efek utama dan interaksi, sehingga tidak ada selisih antara nilai observasi dan ekspektasi. Frekuensi prediksi sama persis dengan data asli.

10.3 Model Independent

Model ini mengasumsikan Gender dan Response tidak saling bergantung:

\[ \log(m_{ij}) = \mu + \lambda^A_i + \lambda^B_j \]

# Model independen
model_indep <- loglin(data, margin = list(1, 2), fit = TRUE)
## 2 iterations: deviation 0
model_indep
## $lrt
## [1] 34.63885
## 
## $pearson
## [1] 33.77922
## 
## $df
## [1] 1
## 
## $margin
## $margin[[1]]
## [1] "Gender"
## 
## $margin[[2]]
## [1] "Response"
## 
## 
## $fit
##         Response
## Gender        Yes       No
##   Male   31.11111 48.88889
##   Female 38.88889 61.11111

Hasil model independen menunjukkan nilai deviance (G²) sebesar 34.64 dengan 1 derajat kebebasan (df = 1), yang berarti terdapat perbedaan signifikan antara data aktual dan nilai yang diprediksi oleh model. Ini mengindikasikan bahwa asumsi independensi antara Gender dan Response tidak terpenuhi — dengan kata lain, terdapat hubungan atau asosiasi yang signifikan antara kedua variabel tersebut. Frekuensi prediksi cukup berbeda dari data asli.

10.4 Odds Ratio dan Interpretasi

Untuk tabel 2x2, odds ratio dihitung sebagai:

\[ OR = rac{n_{11} \cdot n_{22}}{n_{12} \cdot n_{21}} = rac{50 \cdot 80}{30 \cdot 20} = rac{4000}{600} = 6.67 \]

Interpretasi: Peluang respon “Yes” oleh laki-laki sekitar 6.67 kali lebih besar daripada perempuan.

10.5 Perbandingan Model dan Uji Chi-Square

# Fit model independen
model_indep <- loglin(data, margin = list(1, 2), fit = TRUE)
## 2 iterations: deviation 0
# Ambil deviance dan df
G2 <- model_indep$lrt
df <- model_indep$df
pval <- 1 - pchisq(G2, df)

# Tampilkan hasil
cat("Deviance:", G2, "\nDegrees of Freedom:", df, "\np-value:", round(pval, 4), "\n")
## Deviance: 34.63885 
## Degrees of Freedom: 1 
## p-value: 0

Nilai deviance sebesar 34.64 dengan derajat kebebasan 1 menghasilkan p-value < 0.001, yang berarti sangat signifikan. Dengan demikian, model independen tidak sesuai, dan terdapat hubungan yang signifikan antara Gender dan Response dalam data. Model yang lebih kompleks (misalnya model saturated) lebih tepat digunakan.

10.6 Kesimpulan

Analisis log-linear terhadap hubungan antara jenis kelamin dan respons survei menunjukkan bahwa model saturated cocok sempurna dengan data, sedangkan model independen tidak sesuai (p-value < 0.001). Nilai odds ratio sebesar 6,67 mengindikasikan adanya asosiasi kuat antara gender dan respons. Dengan demikian, terdapat hubungan yang signifikan antara kedua variabel, dan model saturated lebih tepat untuk merepresentasikan data.

BAB 11: MODEL LOG LINEAR 2 ARAH

Contoh Kasus

Sebuah studi dilakukan untuk mengevaluasi hubungan antara kebiasaan tidur dan status kesehatan individu. Peneliti mengelompokkan partisipan berdasarkan dua variabel kategorik, yaitu:

  • Kebiasaan tidur: Tidur (Ya) atau Tidak Tidur (Tidur Tidak),

  • Status kesehatan: Sakit atau Sehat.

Data yang diperoleh dari observasi terhadap sejumlah individu disajikan dalam bentuk tabel kontingensi sebagai berikut:

Diberikan data:

Sakit Sehat
Merokok Ya 34 16
Merokok Tidak 12 38

Penyelesaian

11.1 Model log-linear pada tabel kontingensi

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 (μij ) dapat dinyatakan sebagai penjumlahan efek variabel dan (bila perlu) interaksinya. Untuk tabel 2x2:

\[ Log(\mu_{ij})=\lambda+\lambda_i^A+\lambda_j^B+\lambda_{ij}^{AB} \]

11.2 Perbedaan utama antara model log-linear dan model regresi logistik

  • Model log-linear digunakan untuk memodelkan frekuensi (count) pada tabel kontingensi dan menguji asosiasi antar variabel kategorik, tanpa menganggap ada variabel respon dan prediktor.

  • Model regresi logistik digunakan untuk memodelkan probabilitas kejadian suatu outcome (biner) berdasarkan satu atau lebih prediktor (bisa kategorik maupun kontinu).

11.3 Estimasi Parameter log linear 2 arah

Sistem Persamaan Model Log-Linear

\[ Log(\mu_{11})=\lambda+\lambda_1^A+\lambda_1^B+\lambda_{11}^{AB} \]

\[ Log(\mu_{12})=\lambda+\lambda_1^A+\lambda_2^B+\lambda_{12}^{AB} \]

\[ Log(\mu_{21})=\lambda+\lambda_2^A+\lambda_1^B+\lambda_{21}^{AB} \]

\[ Log(\mu_{22})=\lambda+\lambda_2^A+\lambda_2^B+\lambda_{22}^{AB} \]

Constraint Sum-to-Zero

\[ \lambda_1^A+\lambda_2^A=0 \]

\[ \lambda_1^B+\lambda_2^B=0 \]

\[ \lambda_{11}^{AB}+\lambda_{12}^{AB}+\lambda_{21}^{AB}+\lambda_{22}^{AB}=0 \]

Rumus Estimasi Parameter dengan Sum-to-Zero Constraint

\[ \lambda_1^A=1/2[(\log\mu_{11}+\log\mu_{12})-(\log\mu_{21}+\log\mu_{22})] \]

\[ \lambda_1^B=1/2[(\log\mu_{11}+\log\mu_{12})-(\log\mu_{21}+\log\mu_{22})] \]

\[ \lambda_{12}^{AB}=1/4[\log\mu_{12}-\log\mu_{11}-\log\mu_{22}-\log\mu_{21}] \]

11.4 Bentuk Model Log-Linear

Model log-linear pada tabel 2x2:

\[ \log(\mu_{ij}) = \lambda + \lambda_i^A + \lambda_j^B + \lambda_{ij}^{AB} \]

dengan constraint sum-to-zero:

\[ \sum_i \lambda_i^A = 0, \quad \sum_j \lambda_j^B = 0, \quad \sum_{i,j} \lambda_{ij}^{AB} = 0 \]

11.5 Estimasi Parameter Model (Manual, Sum-to-zero)

Misalkan:

  • A1 = Merokok (Ya), A2 = Tidak
  • B1 = Sakit, B2 = Sehat

Observasi:

  • \(n_{11} = 30, \, n_{12} = 20\)
  • \(n_{21} = 10, \, n_{22} = 40\)

\[ \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} \]

Constraint sum-to-zero:

\[ \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 \]

Langkah-langkah:

11.5.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(30) + \log(20) + \log(10) + \log(40)] \\ = 3.0971 \]

11.5.2 Efek utama A (Merokok):

\[ \lambda^A_1 = \frac{1}{2} \left( [\log(30) + \log(20)] - [\log(10) + \log(40)] \right) \\ = \frac{1}{2} \left( [3.4012 + 2.9957] - [2.3026 + 3.6889] \right) \\ = \frac{1}{2} (6.3969 - 5.9915) \\ = \frac{1}{2} (0.4054) = 0.2027 \\ \lambda^A_2 = -0.2027 \]

11.5.3 Efek utama B (Status):

\[ \lambda^B_1 = \frac{1}{2} \left( [\log(30) + \log(10)] - [\log(20) + \log(40)] \right) \\ = \frac{1}{2} \left( [3.4012 + 2.3026] - [2.9957 + 3.6889] \right) \\ = \frac{1}{2} (5.7038 - 6.6846) \\ = -0.4904 \\ \lambda^B_2 = +0.4904 \]

11.5.4 Efek interaksi:

\[ \lambda^{AB}_{11} = \frac{1}{4} \left( \log(30) - \log(20) - \log(10) + \log(40) \right) \\ = \frac{1}{4} \left( 3.4012 - 2.9957 - 2.3026 + 3.6889 \right) \\ = \frac{1}{4} (1.7918) = 0.4479 \\ \lambda^{AB}_{12} = -0.4479 \\ \lambda^{AB}_{21} = -0.4479 \\ \lambda^{AB}_{22} = +0.4479 \]

Ringkasan parameter:

  • \(\lambda = 3.0971\)
  • \(\lambda^A_1 = 0.2027, \quad \lambda^A_2 = -0.2027\)
  • \(\lambda^B_1 = -0.4904, \quad \lambda^B_2 = 0.4904\)
  • \(\lambda^{AB}_{11} = 0.4479, \lambda^{AB}_{12} = -0.4479, \lambda^{AB}_{21} = -0.4479, \lambda^{AB}_{22} = 0.4479\)

11.6 Hitung Odds Ratio dan Interval Kepercayaan

\[ \text{OR} = \frac{n_{11} \cdot n_{22}}{n_{12} \cdot n_{21}} = \frac{30 \times 40}{20 \times 10} = \frac{1200}{200} = 6 \]

Log odds ratio:

\[ \log(\text{OR}) = \log(6) = 1.7918 \]

Standard error (SE):

\[ SE = \sqrt{\frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}}} = \sqrt{\frac{1}{30} + \frac{1}{20} + \frac{1}{10} + \frac{1}{40}} \\ = \sqrt{0.0333 + 0.05 + 0.1 + 0.025} = \sqrt{0.2083} = 0.4564 \]

95% Confidence Interval for log(OR):

\[ \log(\text{OR}) \pm 1.96 \times SE = 1.7918 \pm 1.96 \times 0.4564 \\ = (1.7918 - 0.895, \, 1.7918 + 0.895) \\ = (0.8968, \, 2.6868) \]

Back-transform to get CI for OR:

\[ \text{Lower} = \exp(0.8968) = 2.452 \\ \text{Upper} = \exp(2.6868) = 14.68 \]

Jadi, OR = 6 (95% CI: 2.45 – 14.68)

11.7 Fitting Model Log-Linear dengan R

# Data 2x2
tabel <- matrix(c(30, 20, 10, 40), nrow = 2, byrow = TRUE)
colnames(tabel) <- c("Sakit", "Sehat")
rownames(tabel) <- c("Ya", "Tidak")
tabel
##       Sakit Sehat
## Ya       30    20
## Tidak    10    40
data <- as.data.frame(as.table(tabel))
colnames(data) <- c("Merokok", "Status", "Freq")
data
##   Merokok Status Freq
## 1      Ya  Sakit   30
## 2   Tidak  Sakit   10
## 3      Ya  Sehat   20
## 4   Tidak  Sehat   40
# Model tanpa interaksi
fit_no_inter <- glm(Freq ~ Merokok + Status, family = poisson, data = data)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ Merokok + Status, family = poisson, data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  2.996e+00  1.871e-01  16.013   <2e-16 ***
## MerokokTidak 3.892e-10  2.000e-01   0.000    1.000    
## StatusSehat  4.055e-01  2.041e-01   1.986    0.047 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 21.288  on 3  degrees of freedom
## Residual deviance: 17.261  on 1  degrees of freedom
## AIC: 43.036
## 
## Number of Fisher Scoring iterations: 4
# Model dengan interaksi
fit_inter <- glm(Freq ~ Merokok * Status, family = poisson, data = data)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ Merokok * Status, family = poisson, data = data)
## 
## Coefficients:
##                          Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                3.4012     0.1826  18.629  < 2e-16 ***
## MerokokTidak              -1.0986     0.3651  -3.009  0.00262 ** 
## StatusSehat               -0.4055     0.2887  -1.405  0.16015    
## MerokokTidak:StatusSehat   1.7918     0.4564   3.926 8.65e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 2.1288e+01  on 3  degrees of freedom
## Residual deviance: 3.9968e-15  on 0  degrees of freedom
## AIC: 27.775
## 
## Number of Fisher Scoring iterations: 3

11.8 Interpretasi Parameter

  • Parameter utama (intercept) menunjukkan rata-rata log frekuensi sel.
  • Efek “Merokok” dan “Status” menunjukkan perbedaan log frekuensi antar kategori.
  • Interaksi signifikan menunjukkan adanya asosiasi antara Merokok dan Status.

Nilai \(\log(6) = 1.79\) itu sama dengan efek interaksi output R.


11.9 Analisis Data Tabel Kontingensi 2x3

Suatu survei dilakukan untuk mengetahui hubungan antara Jenis Kelamin (Laki-laki/Perempuan) dan Kategori BMI (Kurus/Normal/Gemuk):

Kurus Normal Gemuk
Laki-laki 12 20 8
Perempuan 18 24 10

11.10 Bentuk Model Log-Linear untuk Tabel 2x3

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:

  • \(\mu_{ij}\): ekspektasi frekuensi pada baris \(i\), kolom \(j\)
  • \(A\): Jenis Kelamin (\(i = 1\): Laki-laki, \(i = 2\): Perempuan)
  • \(B\): Kategori BMI (\(j = 1\): Kurus, \(j = 2\): Normal, \(j = 3\): Gemuk)

Constraint (sum-to-zero): - \(\sum_i \lambda^A_i = 0\) - \(\sum_j \lambda^B_j = 0\) - \(\sum_i \lambda^{AB}_{ij} = 0\) - \(\sum_j \lambda^{AB}_{ij} = 0\)

Secara eksplisit, model log-linear dapat ditulis sebagai:

\[ \log(\mu_{ij}) = \lambda + \lambda^A_1 \ (\text{Laki-laki}), \ \lambda^A_2 \ (\text{Perempuan}) + \lambda^B_1 \ (\text{Kurus}), \ \lambda^B_2 \ (\text{Normal}), \ \lambda^B_3 \ (\text{Gemuk}) + \lambda^{AB}_{ij} \ (\text{interaksi jika ada}) \]

Penjelasan: - \(\lambda\): Intercept (rata-rata log frekuensi) - \(\lambda^A_i\): Efek baris (Jenis Kelamin) - \(\lambda^B_j\): Efek kolom (Kategori BMI) - \(\lambda^{AB}_{ij}\): Efek interaksi antara baris dan kolom

11.11 Fitting Model Log-Linear di R

# Membuat data frame dari tabel
tabel2x3 <- matrix(c(12, 20, 8, 18, 24, 10), nrow = 2, byrow = TRUE)
colnames(tabel2x3) <- c("Kurus", "Normal", "Gemuk")
rownames(tabel2x3) <- c("Laki-laki", "Perempuan")
tabel2x3
##           Kurus Normal Gemuk
## Laki-laki    12     20     8
## Perempuan    18     24    10
# Ubah menjadi data.frame untuk glm
data2x3 <- as.data.frame(as.table(tabel2x3))
colnames(data2x3) <- c("JenisKelamin", "BMI", "Freq")
data2x3
##   JenisKelamin    BMI Freq
## 1    Laki-laki  Kurus   12
## 2    Perempuan  Kurus   18
## 3    Laki-laki Normal   20
## 4    Perempuan Normal   24
## 5    Laki-laki  Gemuk    8
## 6    Perempuan  Gemuk   10
# Model log-linear tanpa interaksi (asumsi independen)
fit_no_inter <- glm(Freq ~ JenisKelamin + BMI, family = poisson, data = data2x3)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ JenisKelamin + BMI, family = poisson, data = data2x3)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)             2.5683     0.2179  11.789   <2e-16 ***
## JenisKelaminPerempuan   0.2624     0.2103   1.248   0.2122    
## BMINormal               0.3830     0.2368   1.618   0.1058    
## BMIGemuk               -0.5108     0.2981  -1.713   0.0866 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 13.06443  on 5  degrees of freedom
## Residual deviance:  0.22527  on 2  degrees of freedom
## AIC: 35.26
## 
## Number of Fisher Scoring iterations: 3
# Model log-linear dengan interaksi (untuk cek asosiasi)
fit_inter <- glm(Freq ~ JenisKelamin * BMI, family = poisson, data = data2x3)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ JenisKelamin * BMI, family = poisson, data = data2x3)
## 
## Coefficients:
##                                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                       2.4849     0.2887   8.608   <2e-16 ***
## JenisKelaminPerempuan             0.4055     0.3727   1.088    0.277    
## BMINormal                         0.5108     0.3651   1.399    0.162    
## BMIGemuk                         -0.4055     0.4564  -0.888    0.374    
## JenisKelaminPerempuan:BMINormal  -0.2231     0.4802  -0.465    0.642    
## JenisKelaminPerempuan:BMIGemuk   -0.1823     0.6032  -0.302    0.762    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance:  1.3064e+01  on 5  degrees of freedom
## Residual deviance: -9.0719e-30  on 0  degrees of freedom
## AIC: 39.034
## 
## Number of Fisher Scoring iterations: 3

11.12 Interpretasi

Model tanpa interaksi:
- Jika deviance tidak signifikan, maka Jenis Kelamin dan BMI independen.

  • Intercept: log frekuensi pada kategori referensi (Laki-laki, Kurus)
  • Koefisien JenisKelaminPerempuan: perbedaan log-frekuensi antara Perempuan vs Laki-laki (pada Kurus)
  • Koefisien BMI: perbedaan log-frekuensi kategori BMI (Normal/Gemuk) terhadap Kurus (pada Laki-laki)

Model dengan interaksi:
- Jika koefisien interaksi signifikan, berarti ada hubungan/asosiasi antara Jenis Kelamin dan BMI.
Artinya distribusi BMI berbeda antara Laki-laki dan Perempuan.

BAB 12: Model Log Linear Tiga Arah

Pada pembahasan sebelumnya, telah dijelaskan bahwa salah satu tujuan utama dalam pengembangan model log-linear adalah untuk mengestimasi parameter-parameter yang merepresentasikan hubungan antar variabel kategorik.

Pada bagian ini, akan dibahas bentuk model log-linear yang lebih kompleks, yakni model log-linear untuk tabel kontingensi tiga dimensi. Model ini melibatkan tiga variabel kategorik, sehingga jumlah kemungkinan interaksi yang dapat dimasukkan ke dalam model menjadi lebih beragam. Dalam konteks ini, bentuk interaksi tertinggi yang dapat dimodelkan adalah interaksi tiga arah, yaitu interaksi yang mencakup ketiga variabel secara simultan.

Model Log-Linear untuk Tabel Tiga Arah

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_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} + \lambda_{ijk}^{XYZ} \]

Model ini memuat semua kemungkinan interaksi, termasuk interaksi tiga arah (X, Y, dan Z).

2. Model Homogen

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \]

Model ini hanya mengakomodasi interaksi dua arah antar variabel tanpa memasukkan interaksi tiga arah.

3. Model Conditional

  • Conditional pada X:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} \]

Memuat interaksi X dengan Y dan X dengan Z.

  • Conditional pada Y:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{jk}^{YZ} \]

Memuat interaksi Y dengan X dan Y dengan Z.

  • Conditional pada Z:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \]

Memuat interaksi Z dengan X dan Z dengan Y.

4. Model Joint Independence

  • Independensi antara X & Y:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} \]

  • Independensi antara X & Z:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ik}^{XZ} \]

  • Independensi antara Y & Z:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{jk}^{YZ} \]

5. Model Tanpa Interaksi

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z \]

Model ini hanya memasukkan efek utama tanpa interaksi antar variabel.

Pengujian Interaksi dalam Model Log-Linear Tiga Arah

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):
    • Bandingkan model saturated dengan model homogenous.
  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.

Contoh Kasus

Sebuah survei dilakukan untuk memahami hubungan antara tingkat pengetahuan kesehatan, jenis kelamin, dan sikap terhadap kebiasaan merokok. Penelitian ini bertujuan mengevaluasi bagaimana kombinasi karakteristik individu memengaruhi kecenderungan mereka dalam mendukung atau menolak kebiasaan merokok di masyarakat.

Tabel Data Survei

Kesehatan Jenis Kelamin Mendukung Menolak Total
Rendah Laki-laki 128 32 160
Rendah Perempuan 123 73 196
Rendah Total 251 105 356
Sedang Laki-laki 182 56 238
Sedang Perempuan 168 105 273
Sedang Total 350 161 511
Tinggi Laki-laki 119 49 168
Tinggi Perempuan 111 70 181
Tinggi Total 230 119 349

Keterangan:

  • Tingkat Pengetahuan Kesehatan (Pengetahuan): Rendah, Sedang, dan Tinggi.

  • Jenis Kelamin: Laki-laki, Perempuan

  • Sikap: Mendukung (Favor), Menolak (Oppose) merokok

Penyelesaian

library("epitools")
library("DescTools")
library("lawstat")
## Warning: package 'lawstat' was built under R version 4.4.3

Input Data

# Input data sesuai tabel praktikum
z.fund <- factor(rep(c("1fund", "2mod", "3lib"), each = 4))
x.sex  <- factor(rep(c("1M", "2F"), each = 2, times = 3))
y.fav  <- factor(rep(c("1fav", "2opp"), times = 6))
counts <- c(128, 32, 123, 73, 182, 56, 168, 105, 119, 49, 111, 70)

data <- data.frame(
  Fundamentalisme = z.fund,
  Jenis_Kelamin   = x.sex,
  Sikap           = y.fav,
  Frekuensi       = counts
  
)
data
##    Fundamentalisme Jenis_Kelamin Sikap Frekuensi
## 1            1fund            1M  1fav       128
## 2            1fund            1M  2opp        32
## 3            1fund            2F  1fav       123
## 4            1fund            2F  2opp        73
## 5             2mod            1M  1fav       182
## 6             2mod            1M  2opp        56
## 7             2mod            2F  1fav       168
## 8             2mod            2F  2opp       105
## 9             3lib            1M  1fav       119
## 10            3lib            1M  2opp        49
## 11            3lib            2F  1fav       111
## 12            3lib            2F  2opp        70

Membentuk Tabel Kontingensi 3 Arah

table3d <- xtabs(Frekuensi ~ Fundamentalisme + Jenis_Kelamin + Sikap, data = data)
ftable(table3d)
##                               Sikap 1fav 2opp
## Fundamentalisme Jenis_Kelamin                
## 1fund           1M                   128   32
##                 2F                   123   73
## 2mod            1M                   182   56
##                 2F                   168  105
## 3lib            1M                   119   49
##                 2F                   111   70

Analisis Log-Linear: Tahap Pemodelan Kita akan memodelkan tabel ini menggunakan beberapa model log-linear dan membandingkan kecocokan model (parsimonious model):

BAB 13: UJI MODEL INTERAKSI TIGA ARAH (SATURATED VS HOMOGENOUS)

13.1 Penentuan Kategori Referensi

# Penentuan kategori reference
x.sex  <- relevel(x.sex, ref = "2F")
y.fav  <- relevel(y.fav, ref = "2opp")
z.fund <- relevel(z.fund, ref = "3lib")

Model Saturated Model log-linear saturated memasukkan semua interaksi hingga tiga arah:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} + \lambda_{ijk}^{XYZ} \]

# Model saturated
model_saturated <- glm(counts ~ x.sex + y.fav + z.fund +
             x.sex*y.fav + x.sex*z.fund + y.fav*z.fund +
             x.sex*y.fav*z.fund,
             family = poisson(link = "log"))
summary(model_saturated)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     x.sex * z.fund + y.fav * z.fund + x.sex * y.fav * z.fund, 
##     family = poisson(link = "log"))
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                    4.248495   0.119523  35.545  < 2e-16 ***
## x.sex1M                       -0.356675   0.186263  -1.915  0.05551 .  
## y.fav1fav                      0.461035   0.152626   3.021  0.00252 ** 
## z.fund1fund                    0.041964   0.167285   0.251  0.80193    
## z.fund2mod                     0.405465   0.154303   2.628  0.00860 ** 
## x.sex1M:y.fav1fav              0.426268   0.228268   1.867  0.06185 .  
## x.sex1M:z.fund1fund           -0.468049   0.282210  -1.659  0.09721 .  
## x.sex1M:z.fund2mod            -0.271934   0.249148  -1.091  0.27507    
## y.fav1fav:z.fund1fund          0.060690   0.212423   0.286  0.77511    
## y.fav1fav:z.fund2mod           0.008969   0.196903   0.046  0.96367    
## x.sex1M:y.fav1fav:z.fund1fund  0.438301   0.336151   1.304  0.19227    
## x.sex1M:y.fav1fav:z.fund2mod   0.282383   0.301553   0.936  0.34905    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 2.4536e+02  on 11  degrees of freedom
## Residual deviance: 5.9952e-15  on  0  degrees of freedom
## AIC: 100.14
## 
## Number of Fisher Scoring iterations: 3
exp(model_saturated$coefficients)
##                   (Intercept)                       x.sex1M 
##                    70.0000000                     0.7000000 
##                     y.fav1fav                   z.fund1fund 
##                     1.5857143                     1.0428571 
##                    z.fund2mod             x.sex1M:y.fav1fav 
##                     1.5000000                     1.5315315 
##           x.sex1M:z.fund1fund            x.sex1M:z.fund2mod 
##                     0.6262231                     0.7619048 
##         y.fav1fav:z.fund1fund          y.fav1fav:z.fund2mod 
##                     1.0625694                     1.0090090 
## x.sex1M:y.fav1fav:z.fund1fund  x.sex1M:y.fav1fav:z.fund2mod 
##                     1.5500717                     1.3262868

Interpretasi Output Model Saturated

13.2 Ringkasan Model

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), sikap terhadap hukuman mati (y.fav), dan tingkat fundamentalisme (z.fund) terhadap frekuensi responden.

13.3 Hasil Estimasi Koefisien

Parameter Estimate Std. Error z value Pr(>|z|) z
(Intercept) 4.25 0.12 35.55 <2e-16 *** 70.00
x.sex1M -0.36 0.19 -1.92 0.055 . 0.70
y.fav1fav 0.46 0.15 3.02 0.0025 ** 1.59
z.fund1fund 0.04 0.17 0.25 0.80 1.04
z.fund2mod 0.41 0.15 2.63 0.0086 ** 1.50
x.sex1M:y.fav1fav 0.43 0.23 1.87 0.062 . 1.53
x.sex1M:z.fund1fund -0.47 0.28 -1.66 0.097 . 0.63
x.sex1M:z.fund2mod -0.27 0.25 -1.09 0.28 0.76
y.fav1fav:z.fund1fund 0.06 0.21 0.29 0.78 1.06
y.fav1fav:z.fund2mod 0.01 0.20 0.05 0.96 1.01
x.sex1M:y.fav1fav:z.fund1fund 0.44 0.30 1.30 0.19 1.55
x.sex1M:y.fav1fav:z.fund2mod 0.28 0.30 0.94 0.35 1.33

Keterangan:
- *** signifikan pada α = 0.001
- ** signifikan pada α = 0.01
- . marginally signifikan pada α = 0.1

13.4 Interpretasi Koefisien

  • (Intercept): Rata-rata log jumlah kasus untuk kategori referensi (Perempuan, Menolak hukuman mati, Liberal) adalah 4.25
    (atau \(\mu \approx 70\)).

  • x.sex1M: Laki-laki memiliki expected count sekitar 0.7 kali Perempuan dalam kategori referensi lainnya, namun hanya mendekati signifikansi (p = 0.055).

  • y.fav1fav: Mereka yang mendukung hukuman mati memiliki expected count sekitar 1.59 kali lipat dibanding yang menolak (signifikan, p = 0.0025).

  • z.fund1fund: Kelompok Fundamentalis tidak berbeda nyata dari Liberal \((\exp(0.04) \approx 1.04; p = 0.80)\).

  • z.fund2mod: Kelompok Moderate memiliki expected count 1.5 kali lebih besar dibanding Liberal (signifikan, p = 0.0086).

  • Interaksi dua & tiga arah: Sebagian besar tidak signifikan \((p > 0.05)\), artinya tidak ada bukti kuat adanya efek gabungan antar variabel.

13.5 Goodness-of-Fit

  • Residual deviance ≈ 0 menandakan model saturated benar-benar fit terhadap data
    (seluruh variasi data dijelaskan oleh model).

  • AIC = 100.14 dapat digunakan untuk perbandingan dengan model yang lebih sederhana.


13.6 Kesimpulan

  • Model saturated ini sangat fit dengan data, namun tidak semua parameter/interaksi signifikan.
  • Efek utama yang paling signifikan adalah:
    • Sikap mendukung hukuman mati
      (expected count 1.6x lebih tinggi dari yang menolak)
    • Kelompok Moderate
      (expected count 1.5x lebih tinggi dari Liberal)
  • Tidak ditemukan bukti kuat interaksi dua atau tiga arah 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 nilai p-value < 0.05.

13.7 Model Homogenous

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.fav + z.fund +
                        x.sex*y.fav + x.sex*z.fund + y.fav*z.fund,
                        family = poisson(link = "log"))

summary(model_homogenous)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     x.sex * z.fund + y.fav * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            4.31096    0.10522  40.972  < 2e-16 ***
## x.sex1M               -0.51575    0.13814  -3.733 0.000189 ***
## y.fav1fav              0.35707    0.12658   2.821 0.004788 ** 
## z.fund1fund           -0.06762    0.14452  -0.468 0.639854    
## z.fund2mod             0.33196    0.13142   2.526 0.011540 *  
## x.sex1M:y.fav1fav      0.66406    0.12728   5.217 1.81e-07 ***
## x.sex1M:z.fund1fund   -0.16201    0.15300  -1.059 0.289649    
## x.sex1M:z.fund2mod    -0.08146    0.14079  -0.579 0.562887    
## y.fav1fav:z.fund1fund  0.23873    0.16402   1.455 0.145551    
## y.fav1fav:z.fund2mod   0.13081    0.14951   0.875 0.381614    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.361  on 11  degrees of freedom
## Residual deviance:   1.798  on  2  degrees of freedom
## AIC: 97.934
## 
## Number of Fisher Scoring iterations: 3

13.8 Uji Hipotesis

Apakah Ada Interaksi Tiga Arah? (Saturated vs Homogenous)

Pengujian ini menggunakan residual deviance dari kedua model (saturated dan homogenous).

Langkah-Langkah Pengujian

13.8.1 Hipotesis

  • H0: Tidak ada interaksi tiga arah (model homogenous sudah cukup)
  • H1: Ada interaksi tiga arah (model saturated diperlukan)

13.8.2 Hitung Selisih Deviance

# Deviance antar model
Deviance.model <- model_homogenous$deviance - model_saturated$deviance
Deviance.model
## [1] 1.797977

13.8.3 Hitung Derajat Bebas

# Derajat bebas <- db_model_homogenous - db_model_saturated
derajat.bebas <- (model_homogenous$df.residual - model_saturated$df.residual)
derajat.bebas
## [1] 2

13.8.4 Chi-Square Tabel (α = 0.05)

chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)
chi.tabel
## [1] 5.991465

13.8.5 Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima H0", "Tolak H0")
Keputusan
## [1] "Terima H0"

Interpretasi: Pada taraf nyata 5%, belum cukup bukti untuk menolak H0 atau dapat dikatakan bahwa tidak ada interaksi tiga arah antara jenis kelamin, fundamentalisme, dan pendapat mengenai hukuman mati.

Catatan:

  • Model pengurang adalah model yang lebih lengkap (lebih banyak parameter, df lebih kecil), yaitu model saturated.

  • Derajat bebas dihitung dari selisih derajat bebas model homogenous dan saturated.

  • Keputusan berdasarkan perbandingan deviance model dengan chi-square tabel.

Rangkuman

Pengujian Ada Tidaknya Interaksi Tiga Arah (Saturated Model vs Homogenous Model)

  • Hipotesis
    • \(H_0: \lambda_{ijk}^{XYZ} = 0\) (Tidak ada interaksi tiga arah; model yang terbentuk adalah model homogenous)
    • \(H_1: \lambda_{ijk}^{XYZ} \neq 0\) (Ada interaksi tiga arah; model yang terbentuk adalah model saturated)
  • Tingkat Signifikansi
    • \(\alpha = 5\%\)
  • Statistik Uji
    • \(\Delta\text{Deviance} = \text{Deviance model homogenous} - \text{Deviance model saturated}\)
    • \(= 1.798 - 0.00 = 1.798\)
    • \(db = db_{\text{model homogenous}} - db_{\text{model saturated}} = 2 - 0 = 2\)
  • Daerah Penolakan
    • Tolak \(H_0\) jika \(\Delta\text{Deviance} > \chi^2_{0.05,db} = \chi^2_{0.05,2} = 5.991\)
  • Keputusan
    • Karena \(1.798 < 5.991\), maka tidak tolak \(H_0\)
  • Interpretasi
    • Pada taraf nyata 5%, belum cukup bukti untuk menolak \(H_0\) atau dapat dikatakan bahwa tidak ada interaksi tiga arah antara jenis kelamin, fundamentalisme, dan pendapat mengenai hukuman mati.

Catatan Perhitungan Derajat Bebas dan Selisih Deviance

Ingat, dalam menghitung selisih deviance, model yang menjadi pengurang adalah model yang lebih lengkap (parameter yang lebih banyak atau derajat bebasnya lebih kecil). Makin banyak parameter, makin kecil derajat bebasnya, karena:

  • db = banyaknya amatan (atau perkalian dimensi tabel kontingensi, misal \(2 \times 2 \times 3 = 12\)) dikurangi banyaknya parameter (koefisien, termasuk intercept).

Cek di output R ada berapa banyak coefficients-nya (termasuk intercept) untuk menghitung derajat bebas yang benar.

13.9 Uji Model Interaksi Dua Arah (Homogenous vs Conditional on X)

13.9.1 Model Conditional on X

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.fav + z.fund + 
                          x.sex*y.fav + x.sex*z.fund,
                          family = poisson(link = "log"))
summary(model_conditional_X)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     x.sex * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          4.23495    0.08955  47.293  < 2e-16 ***
## x.sex1M             -0.52960    0.13966  -3.792 0.000149 ***
## y.fav1fav            0.48302    0.08075   5.982 2.20e-09 ***
## z.fund1fund          0.07962    0.10309   0.772 0.439916    
## z.fund2mod           0.41097    0.09585   4.288 1.81e-05 ***
## x.sex1M:y.fav1fav    0.65845    0.12708   5.181 2.20e-07 ***
## x.sex1M:z.fund1fund -0.12841    0.15109  -0.850 0.395405    
## x.sex1M:z.fund2mod  -0.06267    0.13908  -0.451 0.652274    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.3612  on 11  degrees of freedom
## Residual deviance:   3.9303  on  4  degrees of freedom
## AIC: 96.067
## 
## Number of Fisher Scoring iterations: 4

Pengujian Ada Tidaknya Interaksi Antara Y dan Z (Homogenous Model vs Conditional Association on X)

  • Hipotesis

  • \(H_0: \lambda_{jk}^{YZ} = 0\) (Tidak ada interaksi antara pendapat hukuman mati (Y) dan fundamentalisme (Z))

  • \(H_1: \lambda_{jk}^{YZ} \neq 0\) (Ada interaksi antara pendapat hukuman mati (Y) dan fundamentalisme (Z))

  • Tingkat Signifikansi

  • \(\alpha = 5\%\)

  • Statistik Uji

  • \(\Delta\text{Deviance} = \text{Deviance model conditional on X} - \text{Deviance model homogenous}\)\(= 3.903 - 1.798 = 2.132\)

  • \(db = db_{\text{model conditional on X}} - db_{\text{model homogenous}} = 4 - 2 = 2\)

  • Daerah Penolakan

  • Tolak \(H_0\) jika \(\Delta\text{Deviance} > \chi^2_{0.05,2} = 5.991\)

  • Keputusan

  • Karena \(2.132 < 5.991\), maka tidak tolak \(H_0\)

  • Kesimpulan

  • Dengan taraf nyata 5%, belum cukup bukti untuk menolak \(H_0\) atau dapat dikatakan bahwa tidak ada interaksi antara pendapat tentang hukuman mati dan fundamentalisme. Dengan kata lain, model yang terbentuk adalah model tanpa parameter \(\lambda_{jk}^{YZ}\).

#Pengujian hipotesis

#Deviance of Model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance 
Deviance.model
## [1] 2.132302

Pengujian Selisih Deviance (Conditional on X vs Homogenous)

Langkah-langkah uji hipotesis menggunakan residual deviance:

# Selisih deviance antar model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance 
Deviance.model
## [1] 2.132302

Hitung Derajat Bebas

# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (4 - 2) 
derajat.bebas
## [1] 2

Nilai Chi-Square Tabel

derajat.bebas <- 2
chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)
chi.tabel
## [1] 5.991465

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel,
"Terima", "Tolak") 
Keputusan
## [1] "Terima"

Interpretasi: Karena nilai Deviance.model = 2.13 lebih kecil dari nilai kritis chi-square tabel = 5.99 (dengan df = 2, alpha = 0.05), maka keputusan uji adalah “Terima”.

Pada taraf nyata 5%, belum cukup bukti untuk menolak H0, atau dengan kata lain tidak ada interaksi antara pendapat mengenai hukuman mati (Y) dan fundamentalisme (Z). Model yang terbentuk cukup hanya sampai dua interaksi dengan X (conditional on X), sehingga interaksi Y*Z tidak signifikan secara statistik.

13.10 UJI MODEL INTERAKSI DUA ARAH (HOMOGENOUS VS CONDITIONAL ON Y)

13.10.1 Model Conditional on Y

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.fav + z.fund +
                           x.sex*y.fav + y.fav*z.fund,
                           family = poisson(link = "log"))

summary(model_conditional_Y)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav + 
##     y.fav * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            4.33931    0.09919  43.748  < 2e-16 ***
## x.sex1M               -0.59345    0.10645  -5.575 2.48e-08 ***
## y.fav1fav              0.37259    0.12438   2.996  0.00274 ** 
## z.fund1fund           -0.12516    0.13389  -0.935  0.34989    
## z.fund2mod             0.30228    0.12089   2.500  0.01240 *  
## x.sex1M:y.fav1fav      0.65845    0.12708   5.181 2.20e-07 ***
## y.fav1fav:z.fund1fund  0.21254    0.16205   1.312  0.18966    
## y.fav1fav:z.fund2mod   0.11757    0.14771   0.796  0.42606    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.3612  on 11  degrees of freedom
## Residual deviance:   2.9203  on  4  degrees of freedom
## AIC: 95.057
## 
## Number of Fisher Scoring iterations: 4

Pengujian Ada Tidaknya Interaksi antara X dan Z (Homogenous model vs Conditional Association on Y)

  • Hipotesis

    • \(H_0 : \lambda_{ik}^{XZ} = 0) \text{(Tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z)}\)

    • \(H_1 : \lambda_{ik}^{XZ} \neq 0) \text{(Ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z)}\)

  • Tingkat Signifikansi

    • \(\alpha = 5\%\)
  • Statistik Uji

    • \(\Delta \text{Deviance}\)

    • \(=\text{Deviance model conditional on Y} - \text{Deviance model homogenous}\)

    • \(= 2.9203 - 1.798 = 1.1223\)

    • \(db = db \text{ model conditional on Y} - db \text{ model homogenous}\)

    • \(= 4 - 2 = 2\)

  • Daerah Penolakan

    • Tolak \(H_0\) jika \(\Delta \text{Deviance} > \chi_{0.05,2}^2 = 5.991\)
  • Keputusan

    • Karena 1.1223 < 5.991, maka tidak tolak (H_0)
  • Kesimpulan

    • Dengan taraf nyata 5%, belum cukup bukti untuk menolak (H_0) atau dapat dikatakan bahwa tidak ada interaksi antara jenis kelamin dan fundamentalisme. Dengan kata lain, model yang terbentuk adalah model tanpa parameter \(\lambda_{ik}^{XZ}\).

Pengujian Hipotesis Interaksi X dan Z (Conditional on Y vs Homogenous)

# Deviance of Model
Deviance.model <- model_conditional_Y$deviance - model_homogenous$deviance
# model_conditional_Y: conditional on Y, model_homogenous: homogenous

Deviance.model
## [1] 1.122315

Hitung Derajat Bebas

derajat.bebas <- (4 - 2)

derajat.bebas
## [1] 2

Nilai Chi-Square Tabel

chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)

chi.tabel
## [1] 5.991465

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")

Keputusan
## [1] "Terima"

Interpretasi Karena nilai Deviance_model = 1.12 lebih kecil dari nilai kritis chi-square tabel = 5.99 (df = 2, alpha = 0.05), maka keputusan uji adalah “Terima”.

Kesimpulan: Pada taraf nyata 5%, belum cukup bukti untuk menolak (H_0). Artinya, tidak ada interaksi antara jenis kelamin (X) dan fundamentalisme (Z) yang signifikan secara statistik. Model tanpa parameter \(\lambda_{ik}^{XZ}\) sudah cukup baik untuk data ini.

13.11 UJI MODEL INTERAKSI DUA ARAH (HOMOGENOUS VS CONDITIONAL ON Z)

13.11.1 Model Conditional on Z

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.fav + z.fund +
                           x.sex*z.fund + y.fav*z.fund,
                           family = poisson(link = "log"))

summary(model_conditional_Z)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * z.fund + 
##     y.fav * z.fund, family = poisson(link = "log"))
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            4.12255    0.10518  39.195  < 2e-16 ***
## x.sex1M               -0.07453    0.10713  -0.696    0.487    
## y.fav1fav              0.65896    0.11292   5.836 5.36e-09 ***
## z.fund1fund           -0.06540    0.15126  -0.432    0.665    
## z.fund2mod             0.33196    0.13777   2.410    0.016 *  
## x.sex1M:z.fund1fund   -0.12841    0.15109  -0.850    0.395    
## x.sex1M:z.fund2mod    -0.06267    0.13908  -0.451    0.652    
## y.fav1fav:z.fund1fund  0.21254    0.16205   1.312    0.190    
## y.fav1fav:z.fund2mod   0.11757    0.14771   0.796    0.426    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.361  on 11  degrees of freedom
## Residual deviance:  29.729  on  3  degrees of freedom
## AIC: 123.87
## 
## Number of Fisher Scoring iterations: 4

Pengujian Ada Tidaknya Interaksi antara X dan Y (Homogenous model vs Conditional Association on Z)

  • Hipotesis

    • \(H_0 : \lambda_{ij}^{XY} = 0) \text{(Tidak ada interaksi antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y)}\)

    • \(H_1 : \lambda_{ij}^{XY} \neq 0) \text{(Ada interaksi antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y)}\)

  • Tingkat Signifikansi

    • \(\alpha = 5\%\)
  • Statistik Uji

    • \(\Delta \text{Deviance}\)

    • \(= \text{Deviance model conditional on Z} - \text{Deviance model homogenous}\)

    • \(= 29.729 - 1.798 = 27.931\)

    • \(db\)

    • \(= db \text{ model conditional on Z} - db \text{ model homogenous}\)

    • \(= 3 - 2 = 1\)

  • Daerah Penolakan

    • Tolak \(H_0\) jika \(\Delta \text{Deviance} > \chi_{0.05,1}^2 = 3.841\)
  • Keputusan

    • Karena 27.931 > 3.841, maka tolak \(H_0\)
  • Kesimpulan

    • Dengan taraf nyata 5 persen, ada interaksi antara jenis kelamin dan pendapat tentang hukuman mati. Dengan kata lain, model yang terbentuk adalah model dengan parameter \(\lambda_{ij}^{XY}\).

Pengujian Hipotesis Interaksi X dan Y (Conditional on Z vs Homogenous)

# Deviance of Model
Deviance_model <- model_conditional_Z$deviance - model_homogenous$deviance
# model_conditional_Z: conditional on Z, model_homogenous: homogenous

Deviance_model
## [1] 27.93095

Hitung Derajat Bebas

derajat.bebas <- (3 - 2)

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 = 27.93 jauh lebih besar dari nilai kritis chi-square tabel = 3.84 (df = 1, alpha = 0.05), maka keputusan uji adalah “Tolak”.

Kesimpulan: Pada taraf nyata 5%, terdapat bukti yang cukup untuk menolak (H_0). Artinya, ada interaksi yang signifikan antara jenis kelamin (X) dan pendapat tentang hukuman mati (Y). Dengan kata lain, model terbaik yang terbentuk adalah model yang menyertakan parameter interaksi \(\lambda_{ij}^{XY}\).

BAB 14: PEMILIHAN MODEL TERBAIK

14.1 Ringkasan Model Log Linier

Model Parameter Deviance Jumlah Parameter df AIC
Saturated \[ \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} + \lambda_{ijk}^{XYZ} \] 0.00 12 0 100.14
Homogenous \[ \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \] 1.798 10 2 97.934
Conditional on X \[ \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} \] 3.9303 8 4 96.067
Conditional on Y \[ \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{jk}^{YZ} \] 2.9203 8 4 95.057
Conditional on Z \[ \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \] 29.729 9 3 123.87

14.2 Ringkasan Pengujian Interaksi 3 Arah dan 2 Arah

Interaksi Pengujian Δ deviance Δ df Chi-square Tabel Keputusan Keterangan
XYZ Saturated vs Homogenous 1.798 2 5.991 Tidak Tolak H0 tidak ada interaksi
YZ Conditional on X vs Homogenous 2.1323 2 5.991 Tidak Tolak H0 tidak ada interaksi
XZ Conditional on Y vs Homogenous 1.1223 2 5.991 Tidak Tolak H0 tidak ada interaksi
XY Conditional on Z vs Homogenous 27.931 1 3.841 Tolak H0 ada interaksi

14.3 Kesimpulan Pemilihan Model Terbaik

Dari hasil di atas diketahui bahwa asosiasi yang nyata hanya terdapat antara jenis kelamin dan pendapat mengenai hukuman mati. Sehingga, model terbaik adalah:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} \]

Model terbaik adalah model log-linear tanpa interaksi tiga arah dan hanya memuat interaksi dua arah antara jenis kelamin dan sikap terhadap hukuman mati.

BAB 15: MODEL TERBAIK

Model terbaik dipilih berdasarkan pengujian interaksi yang signifikan, yaitu hanya interaksi dua arah antara jenis kelamin (X) dan sikap terhadap hukuman mati (Y):

\[ \log(\mu_{ijk}) = \lambda + \lambda^{X}_{i} + \lambda^{Y}_{j} + \lambda^{Z}_{k} + \lambda^{XY}_{ij} \]

## Model Terbaik
bestmodel <- glm(counts ~ x.sex + y.fav + z.fund + x.sex*y.fav,
                 family = poisson(link = "log"))

summary(bestmodel)
## 
## Call:
## glm(formula = counts ~ x.sex + y.fav + z.fund + x.sex * y.fav, 
##     family = poisson(link = "log"))
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        4.26518    0.07794  54.721  < 2e-16 ***
## x.sex1M           -0.59345    0.10645  -5.575 2.48e-08 ***
## y.fav1fav          0.48302    0.08075   5.982 2.20e-09 ***
## z.fund1fund        0.01986    0.07533   0.264    0.792    
## z.fund2mod         0.38130    0.06944   5.491 4.00e-08 ***
## x.sex1M:y.fav1fav  0.65845    0.12708   5.181 2.20e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 245.3612  on 11  degrees of freedom
## Residual deviance:   4.6532  on  6  degrees of freedom
## AIC: 92.79
## 
## Number of Fisher Scoring iterations: 4

Dari summary model diatas terlihat bahwa best model memiliki AIC yang lebih rendah dibandingkan saturated, homogeneous, dan conditional model

BAB 16: INTERPRETASI KOEFISIEN MODEL TERBAIK

# Interpretasi koefisien model terbaik
data.frame(
  koef = bestmodel$coefficients,
  exp_koef = exp(bestmodel$coefficients)
)
##                          koef   exp_koef
## (Intercept)        4.26517861 71.1776316
## x.sex1M           -0.59344782  0.5524194
## y.fav1fav          0.48302334  1.6209677
## z.fund1fund        0.01985881  1.0200573
## z.fund2mod         0.38129767  1.4641834
## x.sex1M:y.fav1fav  0.65845265  1.9318008

16.1 Interpretasi Koefisien Model Terbaik

  • \[\exp(\lambda^X_M) = \exp(-0{,}593) = 0{,}552 \rightarrow \textbf{nilai odds}\]
    Tanpa memperhatikan fundamentalisme dan pendapat mengenai hukuman mati, peluang seseorang berjenis kelamin laki-laki adalah 0,55 kali dibandingkan perempuan.
    Atau, peluang seseorang berjenis kelamin perempuan adalah \(1 / 0{,}55 = 1{,}81\) kali dibandingkan laki-laki.

  • \[\exp(\lambda^Y_{1_{fav}}) = \exp(0{,}483) = 1{,}621 \rightarrow \textbf{nilai odds}\]
    Tanpa memperhatikan jenis kelamin dan fundamentalisme, peluang seseorang mendukung hukuman mati adalah 1,621 kali dibandingkan yang menolak.

  • \[\exp(\lambda^Z_{1_{fund}}) = \exp(0{,}01986) = 1{,}02 \rightarrow \textbf{nilai odds}\]
    Tanpa memperhatikan jenis kelamin dan pendapat mengenai hukuman mati, peluang seseorang fundamentalis adalah 1,02 kali dibandingkan liberal.

  • \[\exp(\lambda^Z_{2_{mod}}) = \exp(0{,}381) = 1{,}464 \rightarrow \textbf{nilai odds}\]
    Tanpa memperhatikan jenis kelamin dan pendapat mengenai hukuman mati, peluang seseorang moderate adalah 1,464 kali dibandingkan liberal.

  • \[\exp(\lambda^{XY}_{1M,1_{fav}}) = \exp(0{,}658) = 1{,}932 \rightarrow \textbf{nilai odds ratio}\]
    Tanpa memperhatikan fundamentalisme, odds mendukung hukuman mati (dibandingkan menolak) jika dia laki-laki adalah 1,932 kali dibandingkan odds yang sama jika dia perempuan.

BAB 17: NILAI DUGAAN MODEL TERBAIK

## Fitted Values dari Model Terbaik
data.frame(
  Fund = z.fund,
  sex = x.sex,
  favor = y.fav,
  counts = counts,
  fitted = bestmodel$fitted.values
)
##     Fund sex favor counts    fitted
## 1  1fund  1M  1fav    128 125.59539
## 2  1fund  1M  2opp     32  40.10855
## 3  1fund  2F  1fav    123 117.69079
## 4  1fund  2F  2opp     73  72.60526
## 5   2mod  1M  1fav    182 180.27878
## 6   2mod  1M  2opp     56  57.57155
## 7   2mod  2F  1fav    168 168.93257
## 8   2mod  2F  2opp    105 104.21711
## 9   3lib  1M  1fav    119 123.12582
## 10  3lib  1M  2opp     49  39.31990
## 11  3lib  2F  1fav    111 115.37664
## 12  3lib  2F  2opp     70  71.17763

17.1 Perhitungan Manual Nilai Dugaan (Fitted Value) Model Terbaik

Secara manual, nilai fitted value diperoleh dengan cara sebagai berikut:

\[ \hat\mu_{111}=exp(\lambda+\lambda_{1m}^x+\lambda_{1fav}^y+\lambda_{fund}^z+\lambda_{1m,1fav}^{xy}) \]

\[ =exp(4.265-0.593+0.483+0.01986+0.658) \]

\[ =exp(4.833) =125.595 \]

\[ \hat\mu_{112}=exp(\lambda+\lambda_{1m}^x+\lambda_{1fav}^y+\lambda_{2mod}^z+\lambda_{1m,1fav}^{xy}) \]

\[ =exp(4.265-0.593+0.483+0.381+0.658) \]

\[ =exp(5.195) =180.279 \]

\[ \hat\mu_{113}=exp(\lambda+\lambda_{1m}^x+\lambda_{1fav}^y+\lambda_{lib}^z+\lambda_{1m,1fav}^{xy}) \]

\[ =exp(4.265-0.593+0.483+0+0.658) \]

\[ =exp(4.813) =123.126 \]

\[\hat{\mu}_{121} = \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{fund} + \lambda^{xy}_{1m,2opp}) = \exp(4.265 - 0.593 + 0 + 0.01986 + 0) = \exp(3.692) = 40.109 \]

\[\hat{\mu}_{122} = \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{2mod} + \lambda^{xy}_{1m,2opp}) = \exp(4.265 - 0.593 + 0 + 0.381 + 0) = \exp(4.053) = 57.572 \]

\[\hat{\mu}_{123} = \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{lib} + \lambda^{xy}_{1m,2opp}) = \exp(4.265 - 0.593 + 0 + 0 + 0) = \exp(3.672) = 39.320 \]

\[\hat{\mu}_{211} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{fund} + \lambda^{xy}_{2f,1fav}) = \exp(4.265 + 0 + 0.483 + 0.01986 + 0) = \exp(4.768) = 117.691 \]

\[\hat{\mu}_{212} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{2mod} + \lambda^{xy}_{2f,1fav}) = \exp(4.265 + 0 + 0.483 + 0.381 + 0) = \exp(5.1295) = 168.933 \]

\[\hat{\mu}_{213} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{lib} + \lambda^{xy}_{2f,1fav}) = \exp(4.265 + 0 + 0.483 + 0 + 0) = \exp(4.748) = 115.377 \]

\[\hat{\mu}_{221} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{fund} + \lambda^{xy}_{2f,2opp}) = \exp(4.265 + 0 + 0 + 0.01986 + 0) = \exp(4.285) = 72.605 \]

\[\hat{\mu}_{222} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{2mod} + \lambda^{xy}_{2f,2opp}) = \exp(4.265 + 0 + 0 + 0.381 + 0) = \exp(4.646) = 104.217 \]

\[\hat{\mu}_{223} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{lib} + \lambda^{xy}_{2f,2opp}) = \exp(4.265 + 0 + 0 + 0 + 0) = \exp(4.265) = 71.178 \]

Keterangan:

Nilai \[\hat\mu_{ijk}\] akan sama apapun referensi dari kategori peubahnya yang kita gunakan.

Membentuk Tabel Kontingensi 3 Arah

# Bentuk tabel kontingensi 3 dimensi
table3d <- xtabs(Frekuensi ~ Fundamentalisme + Jenis_Kelamin + Sikap, data = data)

# Tampilkan bentuk tabel
ftable(table3d)
##                               Sikap 1fav 2opp
## Fundamentalisme Jenis_Kelamin                
## 1fund           1M                   128   32
##                 2F                   123   73
## 2mod            1M                   182   56
##                 2F                   168  105
## 3lib            1M                   119   49
##                 2F                   111   70

Kita akan memodelkan tabel ini menggunakan beberapa model log-linear, dimulai dari model yang paling lengkap (saturated), lalu model homogen (tanpa interaksi 3-arah), hingga model yang lebih sederhana.

BAB 18: Uji Model Interaksi Tiga Arah (Saturated vs Homogenous)

## Fitted Values dari Model Terbaik
data.frame(
  Fund = z.fund,
  sex = x.sex,
  favor = y.fav,
  counts = counts,
  fitted = bestmodel$fitted.values
)
##     Fund sex favor counts    fitted
## 1  1fund  1M  1fav    128 125.59539
## 2  1fund  1M  2opp     32  40.10855
## 3  1fund  2F  1fav    123 117.69079
## 4  1fund  2F  2opp     73  72.60526
## 5   2mod  1M  1fav    182 180.27878
## 6   2mod  1M  2opp     56  57.57155
## 7   2mod  2F  1fav    168 168.93257
## 8   2mod  2F  2opp    105 104.21711
## 9   3lib  1M  1fav    119 123.12582
## 10  3lib  1M  2opp     49  39.31990
## 11  3lib  2F  1fav    111 115.37664
## 12  3lib  2F  2opp     70  71.17763

18.1 Penentuan Kategori Referensi

Secara manual, nilai fitted value diperoleh dengan cara sebagai berikut:

\[ \hat\mu_{111}=exp(\lambda+\lambda_{1m}^x+\lambda_{1fav}^y+\lambda_{fund}^z+\lambda_{1m,1fav}^{xy}) \]

\[ =exp(4.265-0.593+0.483+0.01986+0.658) \]

\[ =exp(4.833) =125.595 \]

\[ \hat\mu_{112}=exp(\lambda+\lambda_{1m}^x+\lambda_{1fav}^y+\lambda_{2mod}^z+\lambda_{1m,1fav}^{xy}) \]

\[ =exp(4.265-0.593+0.483+0.381+0.658) \]

\[ =exp(5.195) =180.279 \]

\[ \hat\mu_{113}=exp(\lambda+\lambda_{1m}^x+\lambda_{1fav}^y+\lambda_{lib}^z+\lambda_{1m,1fav}^{xy}) \]

\[ =exp(4.265-0.593+0.483+0+0.658) \]

\[ =exp(4.813) =123.126 \]

\[\hat{\mu}_{121} = \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{fund} + \lambda^{xy}_{1m,2opp}) = \exp(4.265 - 0.593 + 0 + 0.01986 + 0) = \exp(3.692) = 40.109 \]

\[\hat{\mu}_{122} = \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{2mod} + \lambda^{xy}_{1m,2opp}) = \exp(4.265 - 0.593 + 0 + 0.381 + 0) = \exp(4.053) = 57.572 \]

\[\hat{\mu}_{123} = \exp(\lambda + \lambda^x_{1m} + \lambda^y_{2opp} + \lambda^z_{lib} + \lambda^{xy}_{1m,2opp}) = \exp(4.265 - 0.593 + 0 + 0 + 0) = \exp(3.672) = 39.320 \]

\[\hat{\mu}_{211} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{fund} + \lambda^{xy}_{2f,1fav}) = \exp(4.265 + 0 + 0.483 + 0.01986 + 0) = \exp(4.768) = 117.691 \]

\[\hat{\mu}_{212} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{2mod} + \lambda^{xy}_{2f,1fav}) = \exp(4.265 + 0 + 0.483 + 0.381 + 0) = \exp(5.1295) = 168.933 \]

\[\hat{\mu}_{213} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{1fav} + \lambda^z_{lib} + \lambda^{xy}_{2f,1fav}) = \exp(4.265 + 0 + 0.483 + 0 + 0) = \exp(4.748) = 115.377 \]

\[\hat{\mu}_{221} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{fund} + \lambda^{xy}_{2f,2opp}) = \exp(4.265 + 0 + 0 + 0.01986 + 0) = \exp(4.285) = 72.605 \]

\[\hat{\mu}_{222} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{2mod} + \lambda^{xy}_{2f,2opp}) = \exp(4.265 + 0 + 0 + 0.381 + 0) = \exp(4.646) = 104.217 \]

\[\hat{\mu}_{223} = \exp(\lambda + \lambda^x_{2f} + \lambda^y_{2opp} + \lambda^z_{lib} + \lambda^{xy}_{2f,2opp}) = \exp(4.265 + 0 + 0 + 0 + 0) = \exp(4.265) = 71.178 \]

Keterangan:

Nilai\(\hat\mu_{ijk}\)akan sama apapun referensi dari kategori peubahnya yang kita gunakan.

Hasil perhitungan nilai fitted dari model log-linear terbaik menunjukkan bahwa interaksi dua arah sudah cukup untuk menjelaskan hubungan antara ketiga variabel kategorik yang diamati. Dengan menggunakan pendekatan model log-linear, kita dapat menangkap struktur dependensi antarvariabel secara lebih fleksibel dan menyeluruh dibandingkan metode uji asosiasi sederhana. Nilai-nilai prediksi (fitted values) yang diperoleh dari model tidak hanya memberikan gambaran yang akurat terhadap distribusi data, tetapi juga menjadi dasar untuk mengidentifikasi pola interaksi yang signifikan dalam konteks sosial yang lebih luas.

Pemahaman terhadap interaksi dua atau tiga arah sangat penting dalam riset ilmu sosial, kesehatan masyarakat, maupun pemasaran, di mana variabel kategorik sering kali saling memengaruhi. Oleh karena itu, teknik ini tidak hanya berguna untuk kepentingan akademik, namun juga relevan dalam pengambilan keputusan berbasis data di dunia nyata.

Daftar Pustaka

Penutupan

E-book ini telah membahas berbagai aspek penting dalam analisis data kategori, mulai dari pendekatan dasar menggunakan tabel kontingensi hingga pemodelan lanjutan dengan Generalized Linear Model (GLM), dengan fokus pada penerapan dalam konteks kesehatan. Pada Bab 1, kita mempelajari analisis tabel kontingensi 2x2, termasuk perhitungan peluang (bersama, marginal, dan bersyarat) serta ukuran asosiasi seperti Risk Difference, Relative Risk, dan Odds Ratio, menggunakan contoh hubungan antara merokok dan penyakit jantung. Bab 2 melanjutkan dengan inferensi statistik pada tabel kontingensi dua arah, mencakup estimasi parameter, pengujian hipotesis, dan analisis residual untuk mendeteksi anomali. Bab 3 memperluas analisis ke tabel kontingensi tiga arah, dengan fokus pada interaksi antar variabel, independensi bersyarat, dan uji homogenitas odds ratio. Bab 4 memperkenalkan GLM, termasuk keluarga eksponensial, regresi logistik untuk data biner, dan regresi Poisson untuk data hitungan. Bab 5 membahas inferensi GLM secara mendalam, seperti perhitungan ekspektasi dan variansi, penaksiran parameter, diagnostik model, dan inferensi untuk regresi logistik dan Poisson. Terakhir, Bab 6 menyediakan daftar pustaka yang menjadi referensi utama dalam penyusunan materi ini, yang dapat digunakan pembaca untuk studi lebih lanjut.

Melalui pembahasan tersebut, kita dapat memahami bahwa analisis data kategori menggunakan tabel kontingensi dan GLM merupakan alat yang sangat penting untuk menganalisis hubungan antar variabel dalam penelitian kesehatan. Tabel kontingensi memungkinkan kita untuk memahami hubungan dasar antar variabel kategori, sementara GLM memberikan fleksibilitas dalam memodelkan data yang tidak memenuhi asumsi normalitas. Namun, penting untuk selalu memeriksa asumsi model, seperti overdispersi dalam regresi Poisson, dan melakukan diagnostik untuk memastikan model yang dibangun sesuai dengan data.

Bagi pembaca yang ingin memperdalam topik ini, disarankan untuk mempelajari lebih lanjut tentang metode lanjutan seperti model campuran (mixed models) untuk data hierarkis, atau pendekatan Bayesian untuk inferensi statistik. Selain itu, eksplorasi lebih lanjut mengenai analisis data kategori dengan variabel lebih dari tiga dimensi atau penggunaan metode machine learning untuk data kategori juga dapat memberikan wawasan yang lebih kaya. Dengan memanfaatkan perangkat lunak statistik seperti R, pembaca dapat terus mengasah keterampilan analisis data dan menerapkannya dalam berbagai konteks penelitian atau aplikasi praktis.

Semoga e-book ini bermanfaat sebagai pengantar dan panduan awal dalam memahami analisis data kategori menggunakan tabel kontingensi dan GLM. Terima kasih kepada semua pembaca yang telah meluangkan waktu untuk mempelajari materi ini, dan semoga sukses dalam perjalanan analisis data Anda!