1 Kata Pengantar

Buku elektronik (ebook) ini disusun sebagai materi pendamping mata kuliah Statistika Terapan, khususnya pada topik analisis data kategori. Data kategori muncul hampir di setiap bidang: kesehatan (sembuh/tidak sembuh), pendidikan (lulus tepat waktu/tidak), pemasaran (memilih produk A, B, atau C), maupun survei kepuasan (rendah, sedang, tinggi). Ketika variabel respons semacam ini dianalisis dengan regresi linear biasa (Ordinary Least Squares/OLS), sejumlah asumsi penting dilanggar, sehingga diperlukan keluarga model yang lebih sesuai, yaitu generalized linear model (GLM).

Ebook ini membahas empat model utama secara berurutan, mulai dari yang paling sederhana hingga yang lebih kompleks:

  1. Regresi logistik biner, untuk respons dengan dua kategori.
  2. Regresi logistik multinomial, untuk respons dengan lebih dari dua kategori yang tidak memiliki urutan (nominal).
  3. Regresi logistik ordinal, untuk respons dengan lebih dari dua kategori yang memiliki urutan alami.
  4. Regresi Poisson, untuk respons berupa data hitung (count data).

Setiap bab disusun dengan pola yang konsisten: definisi dan motivasi, formulasi matematis, estimasi parameter, interpretasi koefisien, implementasi di R lengkap dengan contoh soal, serta pemeriksaan asumsi model. Seluruh kode R dalam ebook ini menggunakan data simulasi yang dibuat langsung di dalam chunk, sehingga pembaca dapat langsung menjalankan (knit) dokumen ini tanpa perlu mengunduh data eksternal.


2 Pendahuluan: Mengapa Perlu Model Khusus untuk Data Kategori?

2.1 Jenis-Jenis Variabel Respons

Sebelum memilih model, langkah pertama yang harus dilakukan seorang analis adalah mengidentifikasi skala pengukuran variabel respons (Y). Kesalahan paling umum dalam analisis data kategori adalah memaksakan regresi linear (OLS) pada respons yang sebetulnya bersifat kategorik atau diskret.

Jenis Respons Contoh Model yang Sesuai
Biner (2 kategori) lulus/tidak lulus, membeli/tidak membeli Regresi logistik biner
Nominal (>2 kategori, tanpa urutan) moda transportasi: motor, mobil, angkot Regresi logistik multinomial
Ordinal (>2 kategori, berurutan) kepuasan: rendah, sedang, tinggi Regresi logistik ordinal
Hitungan (count, non-negatif) jumlah kunjungan, jumlah komplain Regresi Poisson

Setiap baris pada tabel di atas layak diuraikan lebih jauh agar pembaca terbiasa mengenali polanya di lapangan. Pada kasus respons biner, peneliti biasanya tertarik pada satu peristiwa yang jelas batasan “terjadi” atau “tidak terjadi”-nya, misalnya kelulusan, kematian, gagal bayar, atau keberhasilan suatu intervensi. Pada kasus respons nominal, kategori-kategori yang ada bersifat setara secara konseptual tanpa ada satu kategori yang secara alami “lebih tinggi” dari kategori lain — memilih moda transportasi tidak sama dengan menaiki “tangga” tertentu. Sebaliknya, pada respons ordinal, kategori-kategori tersebut membentuk suatu kontinum tersembunyi (latent continuum) yang diskritisasi menjadi beberapa level, seperti tingkat kepuasan yang pada dasarnya adalah konstruk kontinu namun diukur dalam skala kategori karena keterbatasan instrumen pengukuran. Terakhir, respons hitungan selalu berupa bilangan bulat non-negatif yang menghitung frekuensi suatu kejadian dalam interval tertentu, dan besarnya interval tersebut (exposure) menjadi informasi penting yang sering kali luput diperhitungkan oleh peneliti pemula.

Mengenali pola-pola ini sejak tahap perumusan masalah penelitian akan sangat menghemat waktu analisis, karena kesalahan pemilihan model di awal biasanya baru disadari setelah pemeriksaan asumsi dilakukan — sebuah tahap yang idealnya dilakukan lebih awal, bukan sebagai pemeriksaan akhir semata.

2.2 Mengapa Tidak Cukup dengan OLS?

Jika Y biner dikodekan 0/1 lalu diregresikan secara linear terhadap X (model linear probability model), setidaknya muncul tiga masalah:

  • Nilai prediksi \(\hat{Y}\) dapat berada di luar rentang \([0,1]\), padahal \(\hat{Y}\) seharusnya diinterpretasikan sebagai peluang.
  • Hubungan antara X dan peluang kejadian pada kenyataannya sering berbentuk S-curve, bukan garis lurus.
  • Varians error tidak konstan (heteroskedastis) karena varians dari variabel Bernoulli bergantung pada \(p(x)\), yaitu \(p(x)(1-p(x))\).

Untuk data hitung, masalah serupa muncul: OLS dapat menghasilkan prediksi negatif padahal jumlah kejadian tidak mungkin negatif, dan varians data hitung umumnya meningkat seiring meningkatnya rata-rata (tidak homoskedastis).

2.3 Kerangka Generalized Linear Model (GLM)

Keempat model dalam ebook ini adalah anggota keluarga GLM, yang memiliki tiga komponen:

  1. Komponen acak: distribusi dari Y (Bernoulli/Binomial untuk model logistik biner, Multinomial untuk model nominal dan ordinal, Poisson untuk data hitung).
  2. Komponen sistematik: kombinasi linear prediktor, \(\eta = \beta_0 + \beta_1 X_1 + \dots + \beta_p X_p\).
  3. Fungsi penghubung (link function): fungsi yang menghubungkan nilai harapan Y dengan \(\eta\), misalnya logit untuk data biner/ordinal dan log untuk data hitung.

Pemahaman terhadap kerangka ini memudahkan kita melihat bahwa keempat model bukanlah topik yang terpisah-pisah, melainkan variasi dari satu ide besar yang sama.

2.4 Sejarah Singkat dan Perkembangan Model

Gagasan menghubungkan peluang kejadian dengan fungsi logit pertama kali dikembangkan secara sistematis oleh Joseph Berkson pada tahun 1944 dalam konteks bioassay, sebagai alternatif terhadap model probit yang sudah lebih dulu digunakan. Model logistik multinomial kemudian dikembangkan lebih lanjut, salah satunya oleh Daniel McFadden, yang memperkenalkan kerangka random utility model sebagai dasar teoretis dari pilihan diskret (discrete choice) — kontribusi yang mengantarkannya meraih Hadiah Nobel Ekonomi pada tahun 2000. Model logistik ordinal dengan pendekatan cumulative logit dipopulerkan oleh Peter McCullagh pada awal 1980-an, sedangkan regresi Poisson untuk data hitung memiliki akar yang lebih tua, merujuk pada karya Siméon Denis Poisson di bidang teori peluang pada abad ke-19, namun baru dirumuskan sebagai bagian dari kerangka generalized linear model oleh John Nelder dan Robert Wedderburn pada tahun 1972. Kerangka GLM inilah yang menyatukan keempat model dalam ebook ini sebagai satu keluarga besar yang berbagi struktur matematis serupa, hanya berbeda pada distribusi komponen acak dan fungsi penghubung yang digunakan.

Perkembangan komputasi statistik modern, khususnya perangkat lunak R, SAS, Stata, dan SPSS, membuat estimasi keempat model ini menjadi sangat mudah dilakukan meskipun perhitungan di baliknya melibatkan optimasi numerik yang kompleks. Meskipun demikian, kemudahan komputasi ini menuntut pengguna untuk semakin memahami asumsi dan interpretasi model secara benar, karena kesalahan interpretasi jauh lebih sering terjadi dibandingkan kesalahan komputasi itu sendiri.

2.5 Peta Konsep: Intuisi di Balik Keempat Model

Sebelum masuk ke formulasi matematis masing-masing model pada bab-bab berikutnya, ada baiknya membangun intuisi terlebih dahulu mengenai pertanyaan dasar yang dijawab oleh setiap model:

  • Regresi logistik biner pada dasarnya bertanya: “Seberapa besar peluang peristiwa X terjadi, dibandingkan tidak terjadi?” — hanya ada satu “pintu keputusan” yang dilewati.
  • Regresi logistik multinomial bertanya: “Di antara beberapa pilihan yang setara kedudukannya, pilihan mana yang paling mungkin diambil seseorang, dan seberapa besar peluang relatifnya dibandingkan pilihan acuan?” — ada beberapa “pintu keputusan” yang paralel, tidak berjenjang.
  • Regresi logistik ordinal bertanya: “Seberapa besar dorongan prediktor untuk menggeser seseorang naik satu (atau lebih) anak tangga menuju kategori yang lebih tinggi?” — ada satu “tangga” dengan beberapa anak tangga berurutan.
  • Regresi Poisson bertanya: “Berapa kali rata-rata suatu peristiwa terjadi dalam suatu periode, dan bagaimana prediktor mengubah laju (rate) tersebut?” — fokusnya bukan pada kategori, melainkan pada frekuensi kejadian yang dapat berulang.

Empat sudut pandang inilah yang membedakan bentuk matematis dan cara membaca output dari keempat model, meskipun secara komputasi keempatnya sama-sama diestimasi melalui prinsip maximum likelihood di dalam kerangka generalized linear model.


3 Bab 1 — Regresi Logistik Biner

3.1 Definisi dan Motivasi

Regresi logistik biner digunakan ketika variabel respons \(Y\) hanya memiliki dua kemungkinan nilai, biasanya dikodekan sebagai \(Y=1\) (kejadian terjadi/“sukses”) dan \(Y=0\) (kejadian tidak terjadi/“gagal”). Tujuannya adalah memodelkan peluang \(P(Y=1 \mid X)\) sebagai fungsi dari satu atau lebih variabel prediktor.

Contoh kasus: memprediksi apakah seorang nasabah akan menunggak kredit (1) atau tidak menunggak (0) berdasarkan lama bekerja dan jumlah pinjaman.

3.2 Formulasi Model

Misalkan \(p(x) = P(Y=1 \mid X=x)\). Model regresi logistik biner menghubungkan \(p(x)\) dengan prediktor melalui fungsi logit:

\[ \text{logit}\big(p(x)\big) = \ln\left(\frac{p(x)}{1-p(x)}\right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p \]

Dari sini, peluang \(p(x)\) dapat diperoleh kembali melalui transformasi balik (fungsi logistik):

\[ p(x) = \frac{\exp(\beta_0 + \beta_1 x_1 + \dots + \beta_p x_p)} {1 + \exp(\beta_0 + \beta_1 x_1 + \dots + \beta_p x_p)} \]

Fungsi ini menghasilkan kurva berbentuk S (sigmoid) yang nilainya selalu berada di antara 0 dan 1, sehingga secara otomatis mengatasi masalah linear probability model yang telah dibahas sebelumnya.

3.3 Estimasi dengan Maximum Likelihood

Parameter \(\beta\) diestimasi menggunakan metode kemungkinan maksimum (maximum likelihood estimation/MLE), bukan least squares. Fungsi likelihood untuk \(n\) observasi independen adalah:

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

Nilai \(\beta\) yang dipilih adalah yang memaksimumkan log-likelihood \(\ell(\beta) = \ln L(\beta)\). Karena tidak ada solusi tertutup (closed form), estimasi dilakukan secara numerik melalui algoritme iteratif seperti Iteratively Reweighted Least Squares (IRLS), yang secara otomatis dijalankan oleh fungsi glm() di R.

3.4 Interpretasi Koefisien: Odds Ratio

Koefisien \(\beta_1\) pada model logit tidak diinterpretasikan secara langsung seperti pada regresi linear. Interpretasi yang lazim digunakan adalah melalui odds ratio (OR):

\[ \text{OR} = e^{\beta_1} \]

  • Jika \(X_1\) adalah variabel kontinu, \(e^{\beta_1}\) menyatakan kelipatan perubahan odds kejadian \(Y=1\) untuk setiap kenaikan satu satuan \(X_1\), dengan variabel lain konstan (ceteris paribus).
  • Jika \(\text{OR} > 1\), kenaikan \(X_1\) meningkatkan odds kejadian.
  • Jika \(\text{OR} < 1\), kenaikan \(X_1\) menurunkan odds kejadian.
  • Jika \(\text{OR} = 1\) (\(\beta_1 = 0\)), \(X_1\) tidak berpengaruh terhadap odds kejadian.

3.5 Contoh Soal: Prediksi Status Menunggak Kredit

Soal. Sebuah bank ingin mengetahui apakah lama bekerja (tahun) dan rasio cicilan terhadap pendapatan (%) memengaruhi peluang seorang nasabah menunggak kredit. Data disimulasikan untuk 300 nasabah berikut ini.

n <- 300
lama_kerja   <- round(rnorm(n, mean = 6, sd = 3))
lama_kerja[lama_kerja < 0] <- 0
rasio_cicilan <- round(rnorm(n, mean = 35, sd = 12))
rasio_cicilan[rasio_cicilan < 5] <- 5

# peluang menunggak secara teoretis dipengaruhi kedua prediktor
logit_true <- -1.2 - 0.15 * lama_kerja + 0.06 * rasio_cicilan
p_true <- exp(logit_true) / (1 + exp(logit_true))
menunggak <- rbinom(n, size = 1, prob = p_true)

data_kredit <- tibble(
  menunggak      = factor(menunggak, labels = c("Tidak", "Ya")),
  lama_kerja     = lama_kerja,
  rasio_cicilan  = rasio_cicilan
)
head(data_kredit)

3.5.1 Estimasi Model dengan R

model_biner <- glm(
  menunggak ~ lama_kerja + rasio_cicilan,
  data = data_kredit,
  family = binomial(link = "logit")
)
summary(model_biner)
## 
## Call:
## glm(formula = menunggak ~ lama_kerja + rasio_cicilan, family = binomial(link = "logit"), 
##     data = data_kredit)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -1.32004    0.45576  -2.896 0.003776 ** 
## lama_kerja    -0.18056    0.04732  -3.816 0.000136 ***
## rasio_cicilan  0.06723    0.01143   5.883 4.04e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 415.87  on 299  degrees of freedom
## Residual deviance: 364.96  on 297  degrees of freedom
## AIC: 370.96
## 
## Number of Fisher Scoring iterations: 4

3.5.2 Interpretasi Odds Ratio

odds_ratio <- exp(coef(model_biner))
ci_or <- exp(confint(model_biner))
round(cbind(OR = odds_ratio, ci_or), 3)
##                  OR 2.5 % 97.5 %
## (Intercept)   0.267 0.107  0.643
## lama_kerja    0.835 0.759  0.914
## rasio_cicilan 1.070 1.047  1.095

Misalkan hasil menunjukkan koefisien lama_kerja bernilai negatif dan rasio_cicilan bernilai positif. Interpretasinya:

  • Setiap penambahan satu tahun masa kerja, odds nasabah menunggak menjadi \(e^{\beta_{\text{lama\_kerja}}}\) kali odds semula (menurun), dengan rasio cicilan dikontrol konstan.
  • Setiap kenaikan 1 poin persentase rasio cicilan terhadap pendapatan, odds menunggak meningkat sebesar \(\left(e^{\beta_{\text{rasio}}}-1\right) \times 100\%\).

3.6 Goodness-of-Fit dengan Deviance (\(G^2\))

Selain melihat signifikansi masing-masing koefisien, seorang analis juga perlu menilai kesesuaian model secara keseluruhan (overall fit). Salah satu ukuran yang umum digunakan pada model GLM adalah deviance, yang didefinisikan sebagai:

\[ G^2 = -2\big[\ell(\hat\beta) - \ell(\text{saturated})\big] \]

dengan \(\ell(\hat\beta)\) adalah log-likelihood model yang diestimasi dan \(\ell(\text{saturated})\) adalah log-likelihood model saturated (model dengan parameter sebanyak jumlah observasi, yang berarti cocok sempurna dengan data). Nilai deviance yang kecil menunjukkan model cocok dengan data secara baik. Pada R, nilai ini tersedia langsung melalui komponen model_biner$deviance, dan dapat dibandingkan dengan model_biner$null.deviance (deviance model tanpa prediktor sama sekali) untuk menilai seberapa besar kontribusi prediktor secara keseluruhan:

cat("Null deviance:", round(model_biner$null.deviance, 2),
    "pada df =", model_biner$df.null, "\n")
## Null deviance: 415.87 pada df = 299
cat("Residual deviance:", round(model_biner$deviance, 2),
    "pada df =", model_biner$df.residual, "\n")
## Residual deviance: 364.96 pada df = 297
# Uji likelihood ratio (chi-square) untuk model secara keseluruhan
selisih_deviance <- model_biner$null.deviance - model_biner$deviance
df_selisih <- model_biner$df.null - model_biner$df.residual
p_value_model <- pchisq(selisih_deviance, df = df_selisih, lower.tail = FALSE)
cat("Chi-square:", round(selisih_deviance, 2), "| df:", df_selisih,
    "| p-value:", format.pval(p_value_model, digits = 4))
## Chi-square: 50.92 | df: 2 | p-value: 8.77e-12

Nilai p-value yang kecil (< 0,05) pada uji ini menunjukkan bahwa setidaknya satu prediktor dalam model berkontribusi signifikan terhadap peluang kejadian, dibandingkan model yang hanya berisi intersep.

3.6.1 Prediksi Peluang dan Confusion Matrix

data_kredit$prob_pred <- predict(model_biner, type = "response")
data_kredit$kelas_pred <- factor(
  ifelse(data_kredit$prob_pred > 0.5, "Ya", "Tidak"),
  levels = c("Tidak", "Ya")
)

tabel_confusion <- table(
  Aktual = data_kredit$menunggak,
  Prediksi = data_kredit$kelas_pred
)
tabel_confusion
##        Prediksi
## Aktual  Tidak  Ya
##   Tidak   102  49
##   Ya       52  97
akurasi <- sum(diag(tabel_confusion)) / sum(tabel_confusion)
cat("Akurasi model:", round(akurasi, 3))
## Akurasi model: 0.663

3.6.2 Visualisasi Kurva Logistik

ggplot(data_kredit, aes(x = rasio_cicilan, y = prob_pred)) +
  geom_point(aes(color = menunggak), alpha = 0.5) +
  geom_smooth(method = "glm", method.args = list(family = "binomial"),
              se = TRUE, color = "black") +
  labs(title = "Kurva Peluang Menunggak vs Rasio Cicilan",
       x = "Rasio Cicilan terhadap Pendapatan (%)",
       y = "Peluang Prediksi Menunggak") +
  theme_minimal()

3.7 Pemeriksaan Asumsi Model Logistik Biner

Beberapa asumsi yang perlu diperiksa:

  1. Linearitas logit: hubungan antara logit(p) dan prediktor kontinu harus linear (dapat diperiksa melalui uji Box-Tidwell atau plot residual).
  2. Independensi observasi: setiap observasi tidak saling terkait (bukan data time series atau data cluster tanpa penanganan khusus).
  3. Tidak ada multikolinearitas serius antarprediktor (diperiksa dengan nilai Variance Inflation Factor, VIF).
  4. Ukuran sampel memadai: aturan umum meminta minimal sekitar 10 kejadian per prediktor (events per variable).
  5. Tidak ada separasi sempurna (complete/quasi-complete separation), yang ditandai dengan standard error yang sangat besar pada summary().
car::vif(model_biner)
##    lama_kerja rasio_cicilan 
##      1.070155      1.070155

Nilai VIF yang mendekati 1 menunjukkan tidak ada indikasi multikolinearitas serius antara lama_kerja dan rasio_cicilan. Sebagai pedoman umum, nilai VIF di atas 10 (atau pada beberapa sumber, di atas 5) mengindikasikan multikolinearitas yang perlu ditangani, misalnya dengan mengeluarkan salah satu prediktor yang berkorelasi tinggi atau menggunakan teknik regularisasi seperti ridge regression.

3.8 Perhitungan Manual Odds sebagai Ilustrasi

Agar pemahaman konsep odds dan odds ratio lebih konkret, perhatikan ilustrasi sederhana berikut. Misalkan pada suatu subkelompok nasabah, peluang menunggak adalah \(p = 0{,}2\). Odds kejadian tersebut dihitung sebagai:

\[ \text{odds} = \frac{p}{1-p} = \frac{0{,}2}{0{,}8} = 0{,}25 \]

Odds sebesar 0,25 berarti peluang tidak menunggak empat kali lebih besar dibandingkan peluang menunggak. Jika model memprediksi odds ratio sebesar 1,5 untuk kenaikan satu satuan rasio cicilan, maka odds baru menjadi \(0{,}25 \times 1{,}5 = 0{,}375\), yang jika dikonversi kembali ke peluang menghasilkan \(p' = 0{,}375 / (1+0{,}375) \approx 0{,}273\). Contoh ini menegaskan bahwa odds ratio mengalikan odds, bukan menambah probabilitas secara langsung — kesalahan interpretasi yang paling sering terjadi pada pemula.

3.9 Latihan Soal Mandiri — Bab 1

Untuk memperdalam pemahaman, kerjakan latihan berikut menggunakan data data_kredit yang telah dibuat pada bab ini, atau dengan data Anda sendiri.

  1. Tambahkan satu prediktor baru, misalnya usia nasabah, ke dalam model_biner. Apakah odds ratio untuk lama_kerja berubah secara substansial setelah usia dikontrol? Jelaskan kemungkinan penyebabnya (petunjuk: periksa korelasi antara usia dan lama_kerja).
  2. Ubah ambang batas klasifikasi (threshold) dari 0,5 menjadi 0,3 pada perhitungan kelas_pred. Bagaimana perubahan tersebut memengaruhi nilai sensitivity dan specificity model?
  3. Hitung nilai pseudo R-squared (misalnya McFadden’s \(R^2\)) untuk model_biner menggunakan rumus \(R^2_{McFadden} = 1 - \dfrac{\ell(\hat\beta)}{\ell(\beta_0)}\), dengan \(\ell(\hat\beta)\) adalah log-likelihood model penuh dan \(\ell(\beta_0)\) adalah log-likelihood model tanpa prediktor (model null). Bandingkan interpretasinya dengan \(R^2\) pada regresi linear.
  4. Buatlah kurva ROC dan hitung nilai AUC (Area Under the Curve) untuk model_biner menggunakan paket pROC. Apa makna nilai AUC sebesar 0,85 dalam konteks kemampuan diskriminasi model?

3.10 Ringkasan Bab 1

Regresi logistik biner adalah model dasar untuk respons dua kategori, menggunakan fungsi penghubung logit untuk memastikan prediksi peluang selalu berada pada rentang \([0,1]\). Parameter diestimasi melalui maximum likelihood, dan interpretasi koefisien dilakukan melalui odds ratio. Sebelum menyimpulkan hasil, analis wajib memeriksa linearitas logit, multikolinearitas, ukuran sampel, dan indikasi separasi sempurna pada data.


4 Bab 2 — Regresi Logistik Multinomial

4.1 Definisi dan Motivasi

Regresi logistik multinomial merupakan perluasan dari regresi logistik biner untuk kasus di mana variabel respons memiliki lebih dari dua kategori yang tidak berurutan (nominal). Pertanyaan yang dijawab model ini adalah: “Dibandingkan dengan kategori referensi, bagaimana peluang seseorang berada pada kategori tertentu berubah ketika prediktor berubah?”

Contoh kasus: memilih moda transportasi utama ke kampus — motor, mobil pribadi, atau angkutan umum.

4.2 Dari Log-Odds ke Probabilitas (Baseline-Category Logit)

Misalkan respons \(Y\) memiliki \(J\) kategori \(\{1, 2, \dots, J\}\), dan kategori \(J\) dipilih sebagai kategori referensi (baseline). Model membentuk \(J-1\) persamaan logit simultan, masing-masing membandingkan kategori \(j\) terhadap kategori referensi:

\[ \ln\left(\frac{P(Y=j \mid x)}{P(Y=J \mid x)}\right) = \beta_{0j} + \beta_{1j} x_1 + \dots + \beta_{pj} x_p, \quad j = 1, \dots, J-1 \]

Peluang masing-masing kategori diperoleh melalui:

\[ P(Y=j \mid x) = \frac{\exp(\eta_j)}{1 + \sum_{k=1}^{J-1} \exp(\eta_k)}, \qquad P(Y=J \mid x) = \frac{1}{1 + \sum_{k=1}^{J-1} \exp(\eta_k)} \]

dengan \(\eta_j = \beta_{0j} + \beta_{1j}x_1 + \dots + \beta_{pj}x_p\).

4.3 Estimasi Parameter

Sama seperti model biner, parameter diestimasi melalui maximum likelihood, namun sekarang likelihood dibentuk dari distribusi multinomial. Fungsi likelihood untuk \(n\) observasi independen dengan \(J\) kategori dapat dituliskan sebagai:

\[ L(\beta) = \prod_{i=1}^{n} \prod_{j=1}^{J} \big[P(Y_i = j \mid x_i)\big]^{I(y_i = j)} \]

dengan \(I(y_i = j)\) adalah fungsi indikator yang bernilai 1 jika observasi ke-\(i\) berada pada kategori \(j\), dan 0 sebaliknya. Karena tidak ada solusi analitik tertutup untuk memaksimumkan log-likelihood dari fungsi ini, estimasi dilakukan secara numerik menggunakan algoritme iteratif. Implementasi multinom() pada paket nnet menggunakan pendekatan jaringan saraf tiruan berlapis tunggal tanpa hidden layer (single-layer neural network) yang secara matematis ekuivalen dengan regresi logistik multinomial standar, dengan optimasi melalui algoritme quasi-Newton (BFGS). Pendekatan ini dipilih karena stabil secara komputasi bahkan untuk kategori respons yang cukup banyak dan ukuran data yang besar.

4.4 Interpretasi Koefisien

Setiap koefisien \(\beta_{kj}\) diinterpretasikan sebagai perubahan log-odds kategori \(j\) relatif terhadap kategori referensi \(J\) untuk setiap kenaikan satu satuan \(X_k\). Dalam bentuk odds ratio, \(e^{\beta_{kj}}\) menyatakan kelipatan perubahan odds memilih kategori \(j\) dibanding kategori referensi.

Poin penting: koefisien model multinomial spesifik terhadap pasangan kategori (kategori \(j\) vs kategori referensi), bukan efek tunggal seperti pada model biner.

4.5 Contoh Soal: Pemilihan Moda Transportasi

Soal. Sebuah survei terhadap 400 mahasiswa mengumpulkan data jarak tempuh ke kampus (km) dan pendapatan keluarga per bulan (juta rupiah) untuk memprediksi pilihan moda transportasi (Angkutan Umum sebagai kategori referensi, dibandingkan Motor dan Mobil).

n <- 400
jarak <- round(rgamma(n, shape = 2, scale = 3), 1)
pendapatan <- round(rnorm(n, mean = 6, sd = 2.5), 1)
pendapatan[pendapatan < 1] <- 1

skor_motor <- 0.9 + 0.15 * jarak - 0.05 * pendapatan
skor_mobil <- -1.5 - 0.05 * jarak + 0.55 * pendapatan
skor_umum  <- 0  # kategori referensi

expo <- cbind(exp(skor_umum), exp(skor_motor), exp(skor_mobil))
prob <- expo / rowSums(expo)

moda <- apply(prob, 1, function(p) sample(c("Angkutan_Umum", "Motor", "Mobil"),
                                            size = 1, prob = p))

data_moda <- tibble(
  moda = factor(moda, levels = c("Angkutan_Umum", "Motor", "Mobil")),
  jarak = jarak,
  pendapatan = pendapatan
)
table(data_moda$moda)
## 
## Angkutan_Umum         Motor         Mobil 
##            23           188           189

4.5.1 Distribusi Kategori Respons

ggplot(data_moda, aes(x = moda, fill = moda)) +
  geom_bar() +
  labs(title = "Distribusi Pilihan Moda Transportasi",
       x = "Moda Transportasi", y = "Frekuensi") +
  theme_minimal() +
  theme(legend.position = "none")

4.5.2 Estimasi Model Multinomial dengan R

data_moda$moda <- relevel(data_moda$moda, ref = "Angkutan_Umum")

model_multinom <- multinom(moda ~ jarak + pendapatan, data = data_moda, trace = FALSE)
summary(model_multinom)
## Call:
## multinom(formula = moda ~ jarak + pendapatan, data = data_moda, 
##     trace = FALSE)
## 
## Coefficients:
##       (Intercept)       jarak  pendapatan
## Motor   1.6357291  0.14264316 -0.07723006
## Mobil  -0.9589199 -0.07977549  0.55778073
## 
## Std. Errors:
##       (Intercept)      jarak pendapatan
## Motor   0.6589018 0.06441424  0.1110508
## Mobil   0.7283329 0.06872226  0.1187733
## 
## Residual Deviance: 535.3235 
## AIC: 547.3235

4.5.3 Ringkasan Koefisien, z-value, dan p-value

Karena multinom() tidak secara otomatis menampilkan p-value, kita menghitungnya secara manual:

z_value <- summary(model_multinom)$coefficients / summary(model_multinom)$standard.errors
p_value <- (1 - pnorm(abs(z_value), 0, 1)) * 2
round(p_value, 4)
##       (Intercept)  jarak pendapatan
## Motor       0.013 0.0268     0.4868
## Mobil       0.188 0.2457     0.0000

4.5.4 Interpretasi Odds Ratio Multinomial

exp(coef(model_multinom))
##       (Intercept)     jarak pendapatan
## Motor   5.1331992 1.1533182  0.9256769
## Mobil   0.3833067 0.9233236  1.7467916

Misalnya, jika koefisien jarak pada persamaan Motor bernilai positif, maka setiap kenaikan 1 km jarak tempuh meningkatkan odds memilih Motor dibanding Angkutan Umum sebesar \(e^{\beta}\) kali, dengan pendapatan dikontrol konstan.

4.5.5 Prediksi Probabilitas dan Confusion Matrix

data_moda$pred_kelas <- predict(model_multinom, type = "class")
tabel_confusion_multi <- table(Aktual = data_moda$moda, Prediksi = data_moda$pred_kelas)
tabel_confusion_multi
##                Prediksi
## Aktual          Angkutan_Umum Motor Mobil
##   Angkutan_Umum             0    11    12
##   Motor                     0   140    48
##   Mobil                     0    47   142
akurasi_multi <- sum(diag(tabel_confusion_multi)) / sum(tabel_confusion_multi)
cat("Akurasi model multinomial:", round(akurasi_multi, 3))
## Akurasi model multinomial: 0.705

4.5.6 Visualisasi Probabilitas Prediksi

prob_pred_multi <- predict(model_multinom, type = "probs")
data_plot_multi <- bind_cols(data_moda, as_tibble(prob_pred_multi)) %>%
  pivot_longer(cols = c("Angkutan_Umum", "Motor", "Mobil"),
               names_to = "kategori", values_to = "probabilitas")

ggplot(data_plot_multi, aes(x = jarak, y = probabilitas, color = kategori)) +
  geom_smooth(method = "loess", se = FALSE) +
  labs(title = "Probabilitas Prediksi Moda Transportasi vs Jarak",
       x = "Jarak Tempuh (km)", y = "Probabilitas Prediksi") +
  theme_minimal()

Grafik ini memperlihatkan bagaimana probabilitas ketiga kategori bergerak saling melengkapi (selalu berjumlah 1) seiring perubahan jarak tempuh — ciri khas visualisasi model multinomial.

4.6 Interpretasi Grafik Multinomial

Pola yang tampak pada grafik di atas umumnya berbentuk beberapa kurva yang saling bersilangan (crossing curves): pada nilai jarak tempuh kecil, satu kategori mendominasi probabilitas prediksi, namun seiring bertambahnya jarak, dominasi tersebut berpindah ke kategori lain. Pola persilangan ini adalah representasi visual langsung dari sifat kompetitif antarkategori pada model multinomial — peningkatan probabilitas satu kategori harus dikompensasi oleh penurunan probabilitas kategori lainnya, karena totalnya selalu tetap 1 untuk setiap nilai prediktor. Ketika membaca grafik semacam ini, fokus utama sebaiknya diarahkan pada titik potong (crossover point) antarkurva, karena titik tersebut menunjukkan nilai prediktor di mana preferensi kategori “berpindah tangan” — informasi yang sangat berguna dalam konteks pengambilan kebijakan, misalnya menentukan pada jarak berapa subsidi transportasi publik paling efektif menggeser preferensi dari kendaraan pribadi.

4.7 Asumsi Regresi Logistik Multinomial

  1. Kategori respons bersifat saling lepas (mutually exclusive) dan lengkap (exhaustive).
  2. Independence of Irrelevant Alternatives (IIA): rasio peluang antara dua kategori tidak boleh dipengaruhi oleh ada/tidaknya kategori lain. Asumsi ini dapat diuji dengan Hausman-McFadden test.
  3. Tidak ada multikolinearitas serius antarprediktor.
  4. Ukuran sampel memadai untuk setiap kategori respons (tidak ada kategori dengan frekuensi sangat kecil).

4.8 Catatan tentang IIA

Jika asumsi IIA dilanggar — misalnya karena dua kategori sangat mirip satu sama lain (contoh klasik: “bus merah” vs “bus biru”) — model multinomial dapat menghasilkan estimasi yang bias. Solusi alternatif mencakup nested logit model atau mixed/random parameter logit.

4.9 Memilih Kategori Referensi

Pemilihan kategori referensi bersifat bebas secara matematis — model akan menghasilkan nilai fitted probabilities yang identik apa pun kategori referensinya — namun berpengaruh besar terhadap kemudahan interpretasi hasil. Sebagai pedoman praktis, pilihlah kategori referensi yang:

  • memiliki jumlah observasi cukup besar (agar estimasi stabil),
  • secara substantif masuk akal sebagai “kondisi dasar” untuk dibandingkan (misalnya kategori paling umum atau paling netral), dan
  • relevan dengan pertanyaan penelitian yang diajukan.

Pada contoh moda transportasi, “Angkutan Umum” dipilih sebagai referensi karena mencerminkan moda yang paling umum dan tidak memerlukan kepemilikan kendaraan pribadi, sehingga perbandingan terhadap Motor dan Mobil menjadi lebih bermakna secara kebijakan (misalnya untuk menyusun kebijakan subsidi transportasi publik).

4.10 Latihan Soal Mandiri — Bab 2

  1. Ubah kategori referensi pada data_moda dari “Angkutan_Umum” menjadi “Motor” menggunakan relevel(), lalu estimasi ulang modelnya. Bandingkan tanda dan besar koefisien pendapatan dengan model sebelumnya — apakah kesimpulan substantif berubah?
  2. Tambahkan satu prediktor kategorik baru, misalnya kepemilikan_sim (punya SIM/tidak), ke dalam model. Interpretasikan odds ratio-nya untuk masing-masing kategori (Motor vs referensi, Mobil vs referensi).
  3. Hitung likelihood ratio test untuk membandingkan model penuh (dengan jarak dan pendapatan) dengan model tereduksi (hanya jarak) menggunakan anova(model_reduksi, model_penuh, test = "Chisq") pada objek yang sesuai. Apa kesimpulan Anda mengenai kontribusi pendapatan terhadap model?
  4. Diskusikan: dalam situasi apa asumsi IIA kemungkinan besar dilanggar pada kasus pemilihan moda transportasi ini? Usulkan satu solusi pemodelan alternatif.

4.11 Ringkasan Bab 2

Regresi logistik multinomial memperluas model biner untuk respons nominal dengan lebih dari dua kategori, dengan membentuk \(J-1\) persamaan logit terhadap kategori referensi. Interpretasi koefisien bersifat spesifik per pasangan kategori, dan asumsi IIA menjadi pertimbangan penting yang membedakan model ini dari model ordinal maupun model pilihan diskret lainnya.


5 Bab 3 — Regresi Logistik Ordinal

5.1 Definisi dan Motivasi

Regresi logistik ordinal digunakan ketika kategori respons memiliki urutan alami, misalnya tingkat kepuasan (rendah < sedang < tinggi < sangat tinggi) atau tingkat pendidikan. Berbeda dengan model multinomial yang mengabaikan urutan, model ordinal memanfaatkan informasi urutan tersebut sehingga umumnya lebih hemat parameter (parsimonious).

5.2 Cumulative Logit Model

Pendekatan paling umum adalah cumulative logit model (juga dikenal sebagai proportional odds model). Misalkan \(Y\) memiliki \(J\) kategori terurut \(1 < 2 < \dots < J\). Model memodelkan peluang kumulatif:

\[ \text{logit}\big[P(Y \le j \mid x)\big] = \ln\left(\frac{P(Y \le j \mid x)}{P(Y > j \mid x)}\right) = \alpha_j - \big(\beta_1 x_1 + \dots + \beta_p x_p\big), \quad j = 1, \dots, J-1 \]

Terdapat \(J-1\) intersep (\(\alpha_j\), disebut cutpoints atau thresholds) yang meningkat monoton (\(\alpha_1 < \alpha_2 < \dots < \alpha_{J-1}\)), namun koefisien kemiringan \(\beta\) bersifat sama untuk semua cutpoint — inilah inti dari asumsi proportional odds.

5.3 Interpretasi Koefisien Ordinal

Karena bentuk parameterisasi dapat berbeda antarpaket (ada yang menggunakan \(+\beta x\), ada yang \(-\beta x\)), tanda koefisien harus dibaca hati-hati sesuai konvensi paket yang digunakan. Pada fungsi polr() di paket MASS yang digunakan dalam ebook ini, model diparameterisasi sebagai:

\[ \text{logit}\big[P(Y \le j \mid x)\big] = \alpha_j - \eta(x), \qquad \eta(x) = \beta_1 x_1 + \dots + \beta_p x_p \]

sehingga koefisien positif berarti prediktor tersebut cenderung mendorong observasi menuju kategori respons yang lebih tinggi (odds kumulatif \(P(Y \le j)\) menurun, artinya odds berada pada kategori lebih tinggi meningkat). Interpretasi odds ratio dilakukan dengan \(e^{\beta}\): kelipatan perubahan odds berada pada kategori \(Y\) yang lebih tinggi (dibanding kategori yang lebih rendah atau sama) untuk setiap kenaikan satu satuan prediktor.

5.4 Fungsi Likelihood dan Estimasi

Sama seperti model sebelumnya, parameter \((\alpha_j, \beta)\) diestimasi melalui maximum likelihood, dengan probabilitas setiap kategori dihitung sebagai selisih dua peluang kumulatif:

\[ P(Y = j \mid x) = P(Y \le j \mid x) - P(Y \le j-1 \mid x) \]

5.5 Contoh Soal: Tingkat Kepuasan Pelanggan

Soal. Sebuah perusahaan e-commerce ingin mengetahui pengaruh waktu pengiriman (hari) dan skor layanan pelanggan (0-10) terhadap tingkat kepuasan (Rendah, Sedang, Tinggi, Sangat Tinggi) dari 350 responden.

n <- 350
waktu_kirim <- round(rgamma(n, shape = 3, scale = 1.3), 1)
skor_layanan <- round(runif(n, min = 0, max = 10), 1)

eta <- -0.35 * waktu_kirim + 0.45 * skor_layanan
cutpoints <- c(-1, 1.5, 4)  # tiga cutpoint untuk 4 kategori

prob_kum <- sapply(cutpoints, function(a) plogis(a - eta))
prob_kategori <- cbind(prob_kum, 1) - cbind(0, prob_kum)
colnames(prob_kategori) <- c("Rendah", "Sedang", "Tinggi", "Sangat_Tinggi")

kepuasan <- apply(prob_kategori, 1, function(p) sample(
  c("Rendah", "Sedang", "Tinggi", "Sangat_Tinggi"), size = 1, prob = p))

data_kepuasan <- tibble(
  kepuasan = factor(kepuasan,
                     levels = c("Rendah", "Sedang", "Tinggi", "Sangat_Tinggi"),
                     ordered = TRUE),
  waktu_kirim = waktu_kirim,
  skor_layanan = skor_layanan
)
table(data_kepuasan$kepuasan)
## 
##        Rendah        Sedang        Tinggi Sangat_Tinggi 
##            74           142           110            24

5.5.1 Distribusi Respons Ordinal

ggplot(data_kepuasan, aes(x = kepuasan, fill = kepuasan)) +
  geom_bar() +
  labs(title = "Distribusi Tingkat Kepuasan Pelanggan",
       x = "Tingkat Kepuasan", y = "Frekuensi") +
  theme_minimal() + theme(legend.position = "none")

5.5.2 Estimasi Model Ordinal dengan R

model_ordinal <- polr(
  kepuasan ~ waktu_kirim + skor_layanan,
  data = data_kepuasan, Hess = TRUE
)
summary(model_ordinal)
## Call:
## polr(formula = kepuasan ~ waktu_kirim + skor_layanan, data = data_kepuasan, 
##     Hess = TRUE)
## 
## Coefficients:
##                Value Std. Error t value
## waktu_kirim  -0.4106    0.05334  -7.698
## skor_layanan  0.4680    0.04468  10.475
## 
## Intercepts:
##                      Value   Std. Error t value
## Rendah|Sedang        -1.3095  0.3001    -4.3638
## Sedang|Tinggi         1.2882  0.3028     4.2545
## Tinggi|Sangat_Tinggi  4.1708  0.3925    10.6262
## 
## Residual Deviance: 687.8651 
## AIC: 697.8651

5.5.3 Ringkasan Koefisien dan p-value

koef_ordinal <- coef(summary(model_ordinal))
p_value_ordinal <- pnorm(abs(koef_ordinal[, "t value"]), lower.tail = FALSE) * 2
cbind(koef_ordinal, p_value = round(p_value_ordinal, 4))
##                           Value Std. Error   t value p_value
## waktu_kirim          -0.4106162 0.05334043 -7.698029       0
## skor_layanan          0.4679951 0.04467879 10.474658       0
## Rendah|Sedang        -1.3094834 0.30008159 -4.363758       0
## Sedang|Tinggi         1.2882413 0.30279619  4.254483       0
## Tinggi|Sangat_Tinggi  4.1707798 0.39250120 10.626158       0

5.5.4 Interpretasi Hasil Model Ordinal

exp(coef(model_ordinal))
##  waktu_kirim skor_layanan 
##    0.6632415    1.5967896

Misalnya, jika odds ratio skor_layanan bernilai lebih dari 1, maka setiap kenaikan satu poin skor layanan pelanggan meningkatkan odds berada pada tingkat kepuasan yang lebih tinggi (dibanding tingkat yang lebih rendah), dengan waktu pengiriman dikontrol konstan.

5.5.5 Prediksi Probabilitas dan Confusion Matrix Ordinal

data_kepuasan$pred_kelas <- predict(model_ordinal, type = "class")
tabel_confusion_ordinal <- table(
  Aktual = data_kepuasan$kepuasan, Prediksi = data_kepuasan$pred_kelas
)
tabel_confusion_ordinal
##                Prediksi
## Aktual          Rendah Sedang Tinggi Sangat_Tinggi
##   Rendah            28     39      7             0
##   Sedang            15     98     29             0
##   Tinggi             3     37     68             2
##   Sangat_Tinggi      0      2     20             2
akurasi_ordinal <- sum(diag(tabel_confusion_ordinal)) / sum(tabel_confusion_ordinal)
cat("Akurasi model ordinal:", round(akurasi_ordinal, 3))
## Akurasi model ordinal: 0.56

5.5.6 Visualisasi Prediksi Probabilitas Ordinal

prob_pred_ordinal <- predict(model_ordinal, type = "probs")
data_plot_ordinal <- bind_cols(data_kepuasan, as_tibble(prob_pred_ordinal)) %>%
  pivot_longer(cols = c("Rendah", "Sedang", "Tinggi", "Sangat_Tinggi"),
               names_to = "kategori", values_to = "probabilitas") %>%
  mutate(kategori = factor(kategori,
                            levels = c("Rendah", "Sedang", "Tinggi", "Sangat_Tinggi")))

ggplot(data_plot_ordinal, aes(x = skor_layanan, y = probabilitas, color = kategori)) +
  geom_smooth(method = "loess", se = FALSE) +
  labs(title = "Probabilitas Prediksi Tingkat Kepuasan vs Skor Layanan",
       x = "Skor Layanan Pelanggan", y = "Probabilitas Prediksi") +
  theme_minimal()

5.6 Interpretasi Grafik Ordinal

Berbeda dari grafik multinomial yang kurvanya dapat bersilangan pada sembarang urutan, grafik probabilitas prediksi model ordinal yang baik umumnya menunjukkan pola pergeseran yang teratur dan monoton: seiring skor layanan meningkat, probabilitas kategori “Rendah” akan menurun secara konsisten, sementara probabilitas kategori “Sangat Tinggi” akan meningkat secara konsisten, dengan kategori “Sedang” dan “Tinggi” membentuk pola menyerupai bukit (naik lalu turun) di antara keduanya. Pola menyerupai bukit yang berurutan secara rapi dari kategori terendah ke kategori tertinggi ini adalah ciri visual khas dari model cumulative logit yang memenuhi asumsi proportional odds. Jika pola tersebut tampak tidak teratur — misalnya kurva kategori tengah tumpang tindih secara tidak wajar dengan kategori ekstrem — hal ini dapat menjadi indikasi awal (meski bukan bukti formal) bahwa asumsi proportional odds patut dicurigai dan perlu diuji lebih lanjut.

5.7 Pemeriksaan Asumsi Proportional Odds

Asumsi utama yang perlu diperiksa pada model ordinal adalah proportional odds (parallel lines assumption): pengaruh prediktor terhadap odds kumulatif diasumsikan sama besarnya pada setiap cutpoint. Salah satu cara memeriksa asumsi ini adalah membandingkan model cumulative logit dengan model yang mengizinkan koefisien berbeda-beda per cutpoint (misalnya melalui paket ordinal dengan fungsi clm() dan uji nominal test, atau uji Brant).

# Uji proportional odds secara sederhana menggunakan pendekatan Brant
# (memerlukan paket 'brant'; ditampilkan sebagai ilustrasi kode)
# brant::brant(model_ordinal)
cat("Gunakan brant::brant(model_ordinal) atau paket 'ordinal' untuk uji formal proportional odds.")
## Gunakan brant::brant(model_ordinal) atau paket 'ordinal' untuk uji formal proportional odds.

Jika asumsi proportional odds dilanggar, alternatif yang dapat digunakan antara lain generalized ordinal logit model (partial proportional odds) atau kembali menggunakan model multinomial dengan mengabaikan urutan kategori.

5.8 Model Ordinal vs Model Multinomial: Kapan Memilih yang Mana?

Meskipun kategori respons pada contoh kepuasan pelanggan memiliki urutan yang jelas, seorang analis tetap perlu mempertimbangkan trade-off berikut sebelum memutuskan menggunakan model ordinal:

  • Keuntungan model ordinal: jumlah parameter yang diestimasi lebih sedikit (hemat derajat bebas) karena hanya ada satu set koefisien kemiringan untuk seluruh cutpoint, sehingga model lebih parsimonious dan estimasi lebih stabil pada sampel berukuran sedang.
  • Risiko model ordinal: jika asumsi proportional odds tidak terpenuhi, kesimpulan yang dihasilkan berpotensi menyesatkan karena model memaksakan efek prediktor yang seharusnya berbeda-beda pada setiap ambang kategori menjadi seragam.
  • Alternatif aman: jika ragu, mulailah dengan model ordinal karena lebih sederhana, lalu lakukan uji proportional odds. Jika asumsi ditolak, pertimbangkan model multinomial atau partial proportional odds model sebagai alternatif yang lebih fleksibel.

5.9 Latihan Soal Mandiri — Bab 3

  1. Estimasi ulang model_ordinal dengan menambahkan interaksi antara waktu_kirim dan skor_layanan. Apakah interaksi tersebut signifikan secara statistik? Bagaimana interpretasinya jika signifikan?
  2. Gunakan paket ordinal (fungsi clm()) untuk mengestimasi ulang model yang sama, lalu bandingkan nilai AIC-nya dengan hasil polr(). Apakah kedua fungsi menghasilkan estimasi koefisien yang serupa?
  3. Hitung probabilitas prediksi untuk seorang pelanggan baru dengan waktu_kirim = 2 hari dan skor_layanan = 9. Kategori kepuasan mana yang memiliki probabilitas tertinggi untuk pelanggan tersebut?
  4. Diskusikan secara singkat mengapa tanda koefisien pada model polr() perlu dibaca dengan hati-hati dibandingkan paket ordinal lain seperti SPSS PLUM atau Stata ologit, yang dapat menggunakan konvensi tanda berbeda.

5.10 Ringkasan Bab 3

Regresi logistik ordinal memanfaatkan urutan alami pada kategori respons melalui model cumulative logit, dengan asumsi kunci berupa proportional odds — efek prediktor yang konstan di seluruh ambang kategori. Model ini lebih hemat parameter dibanding model multinomial, namun validitasnya sangat bergantung pada terpenuhinya asumsi tersebut, sehingga pengujian formal (misalnya uji Brant) menjadi langkah wajib sebelum menyimpulkan hasil.


6 Bab 4 — Regresi Poisson untuk Data Hitung

6.1 Definisi dan Motivasi

Regresi Poisson digunakan ketika variabel respons berupa data hitung (count data) — bilangan bulat non-negatif yang menyatakan banyaknya kejadian dalam suatu interval waktu atau ruang tertentu, misalnya jumlah kunjungan rumah sakit, jumlah klaim asuransi, atau jumlah komplain pelanggan per bulan.

6.2 Distribusi dan Model

Y diasumsikan mengikuti distribusi Poisson dengan parameter rata-rata \(\mu = E(Y \mid x)\):

\[ P(Y = y \mid x) = \frac{e^{-\mu(x)}\mu(x)^y}{y!}, \qquad y = 0, 1, 2, \dots \]

Fungsi penghubung yang digunakan adalah fungsi log, sehingga:

\[ \ln\big(\mu(x)\big) = \beta_0 + \beta_1 x_1 + \dots + \beta_p x_p \quad \Longleftrightarrow \quad \mu(x) = \exp(\beta_0 + \beta_1 x_1 + \dots + \beta_p x_p) \]

Fungsi log memastikan \(\mu(x)\) selalu bernilai positif, sesuai dengan sifat data hitung.

6.3 Model dengan Exposure dan Offset

Dalam banyak kasus, jumlah kejadian bergantung pada periode atau ukuran paparan (exposure) yang berbeda-beda antarobservasi — misalnya jumlah klaim tergantung lama polis aktif, atau jumlah kecelakaan tergantung volume kendaraan. Untuk itu, model dimodifikasi menjadi:

\[ \ln\left(\frac{\mu(x)}{t}\right) = \beta_0 + \beta_1 x_1 + \dots + \beta_p x_p \quad \Longleftrightarrow \quad \ln(\mu(x)) = \ln(t) + \beta_0 + \beta_1 x_1 + \dots + \beta_p x_p \]

dengan \(t\) adalah ukuran exposure dan \(\ln(t)\) disebut offset — sebuah suku dalam model yang koefisiennya ditetapkan sama dengan 1 (tidak diestimasi).

6.4 Fungsi Likelihood dan Estimasi

Sama seperti model-model sebelumnya, parameter diestimasi melalui maximum likelihood berdasarkan fungsi massa peluang Poisson, dan dijalankan di R melalui glm(..., family = poisson(link = "log")).

6.5 Interpretasi Koefisien

Karena fungsi penghubungnya adalah log, koefisien diinterpretasikan melalui Incidence Rate Ratio (IRR):

\[ \text{IRR} = e^{\beta_1} \]

  • \(\text{IRR} > 1\): setiap kenaikan satu satuan \(X_1\) meningkatkan rata-rata jumlah kejadian sebesar \((\text{IRR}-1)\times 100\%\).
  • \(\text{IRR} < 1\): setiap kenaikan satu satuan \(X_1\) menurunkan rata-rata jumlah kejadian.

6.6 Contoh Soal: Jumlah Komplain Pelanggan

Soal. Sebuah pusat layanan pelanggan ingin mengetahui apakah jumlah transaksi per bulan dan status member premium memengaruhi jumlah komplain yang diajukan pelanggan dalam sebulan, berdasarkan data 320 pelanggan.

n <- 320
transaksi <- round(rpois(n, lambda = 8))
premium <- rbinom(n, size = 1, prob = 0.4)

log_mu <- 0.2 + 0.05 * transaksi - 0.5 * premium
mu <- exp(log_mu)
komplain <- rpois(n, lambda = mu)

data_komplain <- tibble(
  komplain = komplain,
  transaksi = transaksi,
  premium = factor(premium, labels = c("Reguler", "Premium"))
)
summary(data_komplain$komplain)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   1.587   2.000   6.000

6.6.1 Distribusi Respons Hitungan

ggplot(data_komplain, aes(x = komplain)) +
  geom_histogram(binwidth = 1, fill = "steelblue", color = "white") +
  labs(title = "Distribusi Jumlah Komplain Pelanggan",
       x = "Jumlah Komplain per Bulan", y = "Frekuensi") +
  theme_minimal()

6.6.2 Estimasi Model Poisson dengan R

model_poisson <- glm(
  komplain ~ transaksi + premium,
  data = data_komplain,
  family = poisson(link = "log")
)
summary(model_poisson)
## 
## Call:
## glm(formula = komplain ~ transaksi + premium, family = poisson(link = "log"), 
##     data = data_komplain)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     0.02943    0.13586   0.217    0.829    
## transaksi       0.07773    0.01459   5.329 9.89e-08 ***
## premiumPremium -0.62231    0.10376  -5.997 2.00e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 437.58  on 319  degrees of freedom
## Residual deviance: 362.95  on 317  degrees of freedom
## AIC: 978.63
## 
## Number of Fisher Scoring iterations: 5

6.6.3 Interpretasi Incidence Rate Ratio (IRR)

irr <- exp(coef(model_poisson))
ci_irr <- exp(confint(model_poisson))
round(cbind(IRR = irr, ci_irr), 3)
##                  IRR 2.5 % 97.5 %
## (Intercept)    1.030 0.787  1.341
## transaksi      1.081 1.050  1.112
## premiumPremium 0.537 0.436  0.656

Misalnya, jika IRR untuk transaksi bernilai 1,05, artinya setiap tambahan satu transaksi meningkatkan rata-rata jumlah komplain sebesar 5%, dengan status keanggotaan dikontrol konstan. Jika IRR untuk premiumPremium bernilai kurang dari 1, pelanggan premium diprediksi mengajukan lebih sedikit komplain dibanding pelanggan reguler.

6.6.4 Visualisasi Prediksi Rate Poisson

data_komplain$pred_mu <- predict(model_poisson, type = "response")

ggplot(data_komplain, aes(x = transaksi, y = pred_mu, color = premium)) +
  geom_point(aes(y = komplain), alpha = 0.3) +
  geom_smooth(se = FALSE) +
  labs(title = "Prediksi Rata-rata Jumlah Komplain vs Jumlah Transaksi",
       x = "Jumlah Transaksi per Bulan", y = "Rata-rata Jumlah Komplain (Prediksi)") +
  theme_minimal()

6.7 Interpretasi Grafik Poisson

Pada grafik prediksi rate Poisson, hal pertama yang perlu diperhatikan adalah bentuk kurva yang cenderung eksponensial, bukan garis lurus — konsekuensi langsung dari penggunaan fungsi penghubung log. Selisih vertikal antara dua kurva (misalnya kurva pelanggan reguler dan pelanggan premium) yang tampak semakin melebar seiring bertambahnya jumlah transaksi juga merupakan ciri khas skala multiplikatif: pada model Poisson dengan fungsi log, dua kelompok yang berbeda status keanggotaan memiliki rasio rata-rata jumlah komplain yang konstan (sesuai nilai IRR) pada setiap tingkat prediktor, sehingga selisih absolutnya justru membesar ketika rata-rata prediksinya membesar. Titik data mentah (scatter) yang tersebar di sekitar kurva prediksi juga dapat digunakan sebagai pemeriksaan visual kasar terhadap kecocokan model — sebaran titik yang jauh lebih lebar dibanding lebar pita kurva prediksi dapat menjadi indikasi awal adanya overdispersion yang perlu diperiksa lebih formal melalui rasio deviance.

6.8 Pemeriksaan Asumsi Regresi Poisson

Asumsi utama distribusi Poisson adalah equidispersion, yaitu rata-rata dan varians bernilai sama (\(E(Y) = \text{Var}(Y) = \mu\)). Pelanggaran asumsi ini disebut overdispersion (varians > rata-rata) atau underdispersion (varians < rata-rata), dan dapat diperiksa melalui rasio devians terhadap derajat bebas:

dispersi <- summary(model_poisson)$deviance / summary(model_poisson)$df.residual
cat("Rasio dispersi:", round(dispersi, 3),
    "\n(Nilai jauh di atas 1 mengindikasikan overdispersion)")
## Rasio dispersi: 1.145 
## (Nilai jauh di atas 1 mengindikasikan overdispersion)

Jika terjadi overdispersion, alternatif yang dapat digunakan antara lain:

  • Quasi-Poisson regression, yang mengoreksi standard error tanpa mengubah estimasi koefisien.
  • Negative binomial regression, yang menambahkan parameter dispersi tambahan ke dalam model.
  • Jika proporsi nol pada data sangat tinggi (excess zeros), gunakan Zero-Inflated Poisson (ZIP) atau Hurdle model.

6.9 Kapan Menggunakan OLS pada log(Y) sebagai Alternatif?

Sebagian praktisi menggunakan transformasi \(\ln(Y)\) atau \(\ln(Y+1)\) lalu menerapkan OLS sebagai pendekatan alternatif untuk data hitung. Pendekatan ini hanya masuk akal jika: (1) nilai \(Y\) relatif besar sehingga distribusinya mendekati kontinu/lognormal, (2) tidak banyak nilai nol pada data, dan (3) tujuan utama adalah estimasi rata-rata pada skala log, bukan estimasi rate kejadian yang tepat. Ketika terdapat banyak nilai nol, transformasi log akan bermasalah (perlu penambahan konstanta sembarang seperti \(\ln(Y+1)\), yang mengubah interpretasi koefisien) dan regresi Poisson (atau negative binomial) tetap menjadi pilihan yang lebih tepat secara teoretis karena secara eksplisit memodelkan sifat diskret dan non-negatif dari data hitung.

6.10 Contoh Perbandingan Poisson dan OLS log(Y)

Sebagai ilustrasi, mari bandingkan hasil regresi Poisson dengan pendekatan OLS pada \(\ln(Y+1)\) menggunakan data data_komplain yang sama.

model_ols_log <- lm(log(komplain + 1) ~ transaksi + premium, data = data_komplain)
summary(model_ols_log)
## 
## Call:
## lm(formula = log(komplain + 1) ~ transaksi + premium, data = data_komplain)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.18374 -0.37812  0.02605  0.37010  1.26250 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     0.516638   0.084339   6.126 2.67e-09 ***
## transaksi       0.055592   0.009645   5.764 1.95e-08 ***
## premiumPremium -0.360888   0.057620  -6.263 1.23e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4995 on 317 degrees of freedom
## Multiple R-squared:  0.2028, Adjusted R-squared:  0.1978 
## F-statistic: 40.32 on 2 and 317 DF,  p-value: 2.495e-16
cat("\nPerbandingan koefisien 'transaksi':\n")
## 
## Perbandingan koefisien 'transaksi':
cat("Poisson (skala log-rate):", round(coef(model_poisson)["transaksi"], 4), "\n")
## Poisson (skala log-rate): 0.0777
cat("OLS log(Y+1):", round(coef(model_ols_log)["transaksi"], 4), "\n")
## OLS log(Y+1): 0.0556

Kedua model umumnya menghasilkan arah pengaruh yang sama, tetapi besar koefisien dan standard error dapat berbeda karena OLS log(Y+1) tidak memperhitungkan sifat diskret data maupun heteroskedastisitas yang melekat pada data hitung. Ketika proporsi nilai nol pada data cukup besar (pada data ini, periksa mean(data_komplain$komplain == 0)), penambahan konstanta 1 pada transformasi log menjadi keputusan yang agak sembarang dan dapat memengaruhi kesimpulan — ini adalah salah satu alasan utama mengapa regresi Poisson tetap lebih disarankan untuk data hitung.

6.11 Ringkasan Pemilihan: Poisson atau OLS log(Y)?

Sebagai pedoman ringkas, gunakan regresi Poisson (atau negative binomial) ketika data berupa hitungan kecil dengan banyak nilai nol atau ketika tujuan analisis adalah estimasi rate kejadian secara langsung. Pertimbangkan OLS pada log(Y) hanya sebagai pendekatan kasar ketika nilai Y cukup besar, hampir tidak ada nilai nol, dan kesederhanaan interpretasi pada skala log dianggap cukup memadai untuk tujuan deskriptif.

6.12 Latihan Soal Mandiri — Bab 4

  1. Estimasi ulang model_poisson dengan menambahkan offset berupa log(lama_keanggotaan) (misalkan Anda membuat variabel simulasi baru untuk lama keanggotaan dalam bulan). Jelaskan bagaimana interpretasi koefisien berubah setelah exposure ditambahkan.
  2. Hitung rasio dispersi untuk model_poisson. Jika ditemukan indikasi overdispersion, estimasi ulang model menggunakan family = quasipoisson(link = "log") atau MASS::glm.nb(), lalu bandingkan standard error kedua pendekatan tersebut.
  3. Hitung proporsi nilai nol pada data_komplain$komplain dan bandingkan dengan proporsi nol yang diharapkan dari distribusi Poisson dengan rata-rata yang sama (\(P(Y=0) = e^{-\bar{Y}}\)). Apakah ada indikasi excess zeros yang memerlukan model Zero-Inflated Poisson?
  4. Buat prediksi jumlah komplain untuk pelanggan reguler dan premium dengan jumlah transaksi yang sama (misalnya 10 transaksi per bulan). Berapa selisih rata-rata jumlah komplain antara kedua kelompok tersebut menurut model?

6.13 Ringkasan Bab 4

Regresi Poisson memodelkan data hitung menggunakan fungsi penghubung log sehingga prediksi rata-rata kejadian selalu bernilai positif. Interpretasi koefisien dilakukan melalui incidence rate ratio, dan asumsi kunci yang wajib diperiksa adalah equidispersion. Ketika data menunjukkan overdispersion atau proporsi nol yang berlebihan, model alternatif seperti negative binomial, quasi-Poisson, atau zero-inflated Poisson perlu dipertimbangkan sebagai pengganti OLS pada log(Y).


7 Perbandingan dan Pedoman Pemilihan Model

7.1 Ringkasan Perbandingan Keempat Model

Aspek Biner Multinomial Ordinal Poisson
Skala respons 2 kategori >2 kategori, nominal >2 kategori, ordinal Hitungan (0, 1, 2, …)
Fungsi penghubung Logit Logit (baseline-category) Logit (cumulative) Log
Jumlah persamaan 1 \(J-1\) \(J-1\) cutpoint, 1 set \(\beta\) 1
Fungsi R utama glm(family=binomial) multinom() (paket nnet) polr() (paket MASS) glm(family=poisson)
Ukuran efek Odds Ratio Odds Ratio per kategori Odds Ratio (proportional odds) Incidence Rate Ratio
Asumsi khas Linearitas logit IIA Proportional odds Equidispersion

7.2 Pedoman Pemilihan Model

Diagram alur sederhana untuk memilih model yang tepat:

  1. Apakah respons berupa jumlah kejadian (count)? Jika ya, gunakan regresi Poisson (atau negative binomial bila overdispersion).
  2. Jika respons berupa kategori, berapa jumlah kategorinya?
    • Dua kategori → regresi logistik biner.
    • Lebih dari dua kategori:
      • Ada urutan alami dan asumsi proportional odds terpenuhi → regresi logistik ordinal.
      • Tidak ada urutan, atau urutan ada tetapi asumsi proportional odds dilanggar → regresi logistik multinomial.

8 Studi Kasus Terintegrasi: Memilih Model yang Tepat

Untuk mengonsolidasikan pemahaman terhadap keempat model, bagian ini menyajikan sebuah skenario penelitian tunggal yang sengaja menghasilkan empat jenis variabel respons berbeda, sehingga pembaca dapat melihat secara langsung bagaimana rumusan pertanyaan penelitian menentukan pilihan model.

Konteks penelitian. Sebuah dinas kesehatan daerah melakukan survei terhadap 500 rumah tangga untuk mengevaluasi program intervensi gizi. Dari satu survei yang sama, peneliti dapat menyusun beberapa pertanyaan penelitian berbeda:

  1. “Apakah rumah tangga mengalami kejadian stunting pada balita (ya/tidak)?” — respons biner → regresi logistik biner, dengan prediktor misalnya pendapatan rumah tangga dan akses air bersih.
  2. “Sumber protein utama apa yang paling sering dikonsumsi rumah tangga — nabati, hewani darat, atau hewani laut?” — respons nominal tanpa urutan → regresi logistik multinomial, karena tidak ada dasar untuk mengurutkan ketiga sumber protein tersebut.
  3. “Bagaimana tingkat kecukupan gizi rumah tangga — kurang, cukup, atau baik?” — respons ordinal dengan urutan alami → regresi logistik ordinal, karena kategori “baik” secara jelas mencerminkan status gizi yang lebih tinggi dibanding “cukup” dan “kurang”.
  4. “Berapa kali balita mengalami sakit dalam tiga bulan terakhir?” — respons berupa hitungan kejadian → regresi Poisson, dengan kemungkinan penambahan offset berupa lama observasi jika periode pemantauan antar-rumah tangga tidak seragam.

Ilustrasi ini menegaskan sebuah prinsip penting: model yang tepat ditentukan oleh bentuk variabel respons, bukan oleh bidang ilmu atau jenis data prediktor. Dataset yang identik dapat memunculkan keempat jenis model sekaligus, tergantung bagaimana peneliti merumuskan variabel outcome yang ingin dianalisis.

8.1 Alur Kerja Analisis yang Disarankan

Terlepas dari model mana yang dipilih, alur kerja umum berikut disarankan untuk seluruh analisis data kategori maupun data hitung:

  1. Eksplorasi data: periksa distribusi variabel respons (tabel frekuensi atau histogram), identifikasi nilai hilang (missing value), dan periksa sebaran masing-masing prediktor.
  2. Pemeriksaan multikolinearitas antarprediktor sebelum estimasi model, menggunakan matriks korelasi atau VIF.
  3. Estimasi model menggunakan fungsi yang sesuai (glm(), multinom(), polr()), dimulai dari model sederhana kemudian ditambahkan prediktor secara bertahap jika diperlukan.
  4. Uji signifikansi keseluruhan model (likelihood ratio test terhadap model null) sebelum menafsirkan koefisien individual.
  5. Interpretasi koefisien melalui ukuran efek yang sesuai (odds ratio atau IRR), disertai interval kepercayaan.
  6. Pemeriksaan asumsi khusus model (linearitas logit, IIA, proportional odds, atau equidispersion, sesuai jenis model).
  7. Evaluasi performa prediktif (confusion matrix, akurasi, atau ukuran lain seperti AUC) jika tujuan analisis mencakup prediksi, bukan hanya inferensi.
  8. Pelaporan hasil secara naratif dengan menyertakan ukuran efek, interval kepercayaan, dan nilai p, bukan hanya tanda signifikan/tidak signifikan.

9 Pelaporan Hasil dan Kesalahan Umum

9.1 Contoh Narasi Pelaporan Hasil

Model biner: “Hasil regresi logistik biner menunjukkan bahwa rasio cicilan terhadap pendapatan berpengaruh signifikan terhadap peluang menunggak kredit (\(p<0{,}05\)), dengan odds ratio sebesar X, yang berarti setiap kenaikan satu poin persentase rasio cicilan meningkatkan odds menunggak sebesar (X-1)×100%, dengan lama bekerja dikontrol konstan.”

Model Poisson: “Regresi Poisson menunjukkan bahwa status keanggotaan premium berpengaruh signifikan terhadap jumlah komplain pelanggan (\(p<0{,}05\)), dengan incidence rate ratio sebesar X, yang berarti pelanggan premium diprediksi mengajukan komplain (1-X)×100% lebih sedikit dibanding pelanggan reguler, dengan jumlah transaksi dikontrol konstan.”

Model multinomial: “Hasil regresi logistik multinomial menunjukkan bahwa jarak tempuh berpengaruh signifikan terhadap pilihan moda Motor dibandingkan Angkutan Umum (\(p<0{,}05\)), dengan odds ratio sebesar X, yang berarti setiap kenaikan 1 km jarak tempuh meningkatkan odds memilih Motor dibanding Angkutan Umum sebesar (X-1)×100%, dengan pendapatan dikontrol konstan. Sebaliknya, terhadap pilihan Mobil, pendapatan keluarga menjadi prediktor yang lebih dominan dibandingkan jarak tempuh.”

Model ordinal: “Hasil regresi logistik ordinal (cumulative logit) menunjukkan bahwa skor layanan pelanggan berpengaruh signifikan terhadap tingkat kepuasan (\(p<0{,}05\)), dengan odds ratio sebesar X, yang berarti setiap kenaikan satu poin skor layanan meningkatkan odds berada pada tingkat kepuasan yang lebih tinggi sebesar (X-1)×100%, dengan asumsi proportional odds terpenuhi dan waktu pengiriman dikontrol konstan.”

Perhatikan bahwa pada ketiga contoh di atas, pelaporan selalu mencakup tiga elemen penting: (1) arah dan besar ukuran efek (odds ratio atau IRR), (2) status signifikansi statistik beserta nilai p, dan (3) pernyataan eksplisit bahwa interpretasi berlaku ceteris paribus (variabel lain dikontrol konstan). Pelaporan yang hanya menyebutkan “berpengaruh signifikan” tanpa menyertakan ketiga elemen ini dianggap tidak lengkap dalam standar penulisan ilmiah bidang statistika terapan.

9.2 Kesalahan Umum dalam Interpretasi

  1. Menginterpretasikan koefisien logit langsung sebagai perubahan probabilitas (padahal koefisien logit adalah perubahan log-odds, dan hubungannya dengan probabilitas bersifat non-linear).
  2. Menerapkan OLS pada respons kategori atau data hitung tanpa mempertimbangkan asumsi distribusi yang sesuai.
  3. Mengabaikan pemeriksaan asumsi IIA pada model multinomial atau proportional odds pada model ordinal.
  4. Tidak memeriksa overdispersion sebelum menyimpulkan hasil regresi Poisson.
  5. Menyamakan signifikansi statistik dengan besarnya pengaruh praktis; selalu laporkan ukuran efek (odds ratio/IRR) beserta interval kepercayaannya, bukan hanya nilai p.
  6. Menginterpretasikan koefisien pada model multinomial seolah berlaku umum untuk seluruh kategori, padahal setiap koefisien hanya berlaku untuk pasangan kategori tertentu terhadap kategori referensi yang dipilih. Mengganti kategori referensi tanpa menyesuaikan narasi interpretasi adalah kesalahan yang sering luput dari perhatian.
  7. Menyimpulkan hasil model ordinal tanpa terlebih dahulu memeriksa asumsi proportional odds. Ketika asumsi ini dilanggar namun tetap diabaikan, koefisien tunggal yang dilaporkan sesungguhnya merupakan rata-rata efek yang menyembunyikan variasi nyata antar ambang kategori, sehingga kesimpulan yang dihasilkan bisa menyesatkan terutama pada kategori-kategori di ujung distribusi.
  8. Melaporkan hasil regresi Poisson tanpa menyebutkan ukuran exposure atau periode observasi, padahal interpretasi rate kejadian sangat bergantung pada satuan waktu/ruang yang digunakan. Perbandingan antarstudi menjadi tidak valid jika periode exposure berbeda namun tidak disesuaikan melalui offset.

10 Glosarium Istilah Penting

  • Log-odds (logit): logaritma natural dari odds, \(\ln(p/(1-p))\), digunakan sebagai skala pemodelan pada regresi logistik.
  • Odds: rasio peluang kejadian terhadap peluang tidak terjadinya kejadian, \(p/(1-p)\); berbeda dari probabilitas.
  • Odds ratio (OR): kelipatan perubahan odds akibat kenaikan satu satuan prediktor; ukuran efek utama pada model logistik biner dan multinomial.
  • Incidence Rate Ratio (IRR): kelipatan perubahan rata-rata jumlah kejadian akibat kenaikan satu satuan prediktor; ukuran efek utama pada regresi Poisson.
  • Baseline-category logit: parameterisasi model multinomial yang membandingkan setiap kategori terhadap satu kategori referensi.
  • Cumulative logit: parameterisasi model ordinal yang memodelkan logit dari peluang kumulatif \(P(Y \le j)\).
  • Proportional odds assumption: asumsi bahwa koefisien kemiringan pada model ordinal bernilai sama untuk seluruh ambang (cutpoint) kategori.
  • Independence of Irrelevant Alternatives (IIA): asumsi pada model multinomial bahwa rasio peluang antara dua kategori tidak dipengaruhi oleh ada/tidaknya kategori lain.
  • Overdispersion: kondisi ketika varians data hitung lebih besar daripada rata-ratanya, melanggar asumsi equidispersion pada distribusi Poisson.
  • Offset: suku dalam model GLM (biasanya \(\ln(\text{exposure})\)) yang koefisiennya ditetapkan sama dengan satu, digunakan untuk memperhitungkan perbedaan periode/ukuran paparan antarobservasi.
  • Maximum Likelihood Estimation (MLE): metode estimasi parameter yang memilih nilai parameter yang memaksimumkan fungsi likelihood dari data yang teramati.
  • Deviance: ukuran ketidaksesuaian (lack of fit) model GLM, dihitung sebagai \(-2\) kali selisih log-likelihood model terhadap log-likelihood model saturated; digunakan antara lain untuk menghitung rasio dispersi dan uji goodness-of-fit (\(G^2\)).

11 Pertanyaan yang Sering Diajukan (FAQ)

1. Apakah odds ratio sama dengan risk ratio (relative risk)? Tidak selalu. Odds ratio mendekati risk ratio hanya ketika kejadian yang diteliti tergolong jarang (rare event, biasanya prevalensi < 10%). Pada kejadian yang umum terjadi, odds ratio cenderung membesar-lebihkan (overestimate) risk ratio, sehingga interpretasi keduanya perlu dibedakan secara hati-hati, khususnya dalam studi epidemiologi.

2. Bolehkah menggunakan regresi logistik multinomial ketika kategori sebenarnya ordinal? Boleh secara teknis, dan kadang menjadi pilihan yang lebih aman ketika asumsi proportional odds pada model ordinal jelas dilanggar. Namun, model multinomial akan mengabaikan informasi urutan yang sebenarnya tersedia, sehingga model menjadi kurang efisien (memerlukan lebih banyak parameter) dibandingkan model ordinal yang sesuai.

3. Berapa ukuran sampel minimum yang diperlukan? Tidak ada angka tunggal yang berlaku universal, tetapi pedoman umum untuk model logistik biner adalah minimal 10–20 kejadian per prediktor (events per variable). Untuk model multinomial dan ordinal, pedoman serupa berlaku untuk kategori dengan frekuensi paling kecil. Untuk regresi Poisson, kecukupan sampel lebih ditentukan oleh rata-rata jumlah kejadian (nilai \(\mu\)) yang tidak terlalu kecil pada seluruh kombinasi prediktor.

4. Apa perbedaan utama antara fungsi link logit dan probit? Keduanya sama-sama menghasilkan kurva berbentuk S dan sering memberikan kesimpulan substantif yang serupa. Perbedaan utamanya terletak pada distribusi yang mendasari (logistik vs normal baku) dan kemudahan interpretasi: koefisien logit dapat diinterpretasikan melalui odds ratio, sedangkan koefisien probit tidak memiliki interpretasi odds ratio yang setara sehingga lebih jarang digunakan dalam pelaporan terapan.

5. Apakah negative binomial selalu lebih baik daripada Poisson? Tidak selalu. Ketika data benar-benar memenuhi asumsi equidispersion, regresi Poisson lebih efisien (standard error lebih kecil) dibandingkan negative binomial. Negative binomial baru direkomendasikan ketika terdapat bukti overdispersion yang jelas, misalnya dari rasio dispersi yang jauh melebihi 1 atau dari uji formal seperti uji Lagrange Multiplier untuk overdispersion.

6. Bagaimana menentukan variabel mana yang harus dijadikan offset pada regresi Poisson? Offset dipilih berdasarkan ukuran paparan yang secara logis menentukan kesempatan terjadinya peristiwa yang dihitung, bukan berdasarkan signifikansi statistik. Misalnya, jumlah klaim asuransi secara alami bergantung pada lama polis aktif, sehingga lama polis menjadi kandidat offset yang tepat meskipun tidak diuji signifikansinya seperti prediktor biasa — koefisiennya memang sengaja ditetapkan sama dengan 1 karena secara teoretis rate kejadian per satuan exposure adalah kuantitas yang ingin dimodelkan, bukan jumlah total kejadian itu sendiri.

7. Apakah boleh membandingkan nilai AIC antara model logistik biner dan model Poisson untuk menentukan model “terbaik”? Tidak. Nilai AIC hanya valid dibandingkan antar model yang diestimasi dari distribusi respons yang sama dan pada data (jumlah observasi) yang identik. Membandingkan AIC lintas keluarga distribusi (misalnya Binomial vs Poisson) tidak memiliki dasar teoretis yang valid, karena skala likelihood kedua distribusi tersebut tidak dapat diperbandingkan secara langsung. Pemilihan jenis model tetap harus didasarkan pada bentuk variabel respons sejak awal, bukan hasil perbandingan AIC lintas keluarga model yang berbeda.

12 Latihan Komprehensif Berbasis Studi Kasus

Bagian ini menyajikan empat studi kasus naratif yang dirancang untuk melatih kemampuan pembaca dalam mengidentifikasi jenis model yang tepat, bukan sekadar menjalankan kode R. Untuk setiap kasus, tentukan: (a) jenis variabel respons, (b) model yang paling sesuai, (c) prediktor apa saja yang relevan untuk dimasukkan, dan (d) asumsi apa yang perlu diperiksa sebelum menyimpulkan hasil.

Kasus 1 — Perbankan. Sebuah bank ingin mengetahui faktor yang memengaruhi keputusan nasabah dalam memilih jenis produk tabungan: tabungan reguler, tabungan berjangka, atau tabungan investasi. Data yang tersedia mencakup usia nasabah, pendapatan bulanan, dan tingkat literasi keuangan (diukur dalam skor 0–100). Peneliti tidak menganggap ketiga jenis tabungan tersebut memiliki tingkatan tertentu satu sama lain.

Kasus 2 — Pendidikan. Sebuah sekolah ingin memodelkan jumlah hari absen siswa selama satu semester (0 hingga puluhan hari) berdasarkan jarak rumah ke sekolah, status ekonomi keluarga, dan partisipasi dalam kegiatan ekstrakurikuler. Semester untuk setiap siswa memiliki jumlah hari efektif belajar yang sedikit berbeda-beda karena perbedaan jadwal kelas.

Kasus 3 — Kesehatan Masyarakat. Sebuah studi kesehatan mengukur tingkat keparahan gejala pasien pasca-perawatan dalam empat kategori berurutan: tidak ada gejala, ringan, sedang, dan berat. Prediktor yang tersedia meliputi usia pasien, lama rawat inap, dan kepatuhan minum obat (patuh/tidak patuh).

Kasus 4 — Pemasaran Digital. Sebuah perusahaan e-commerce ingin mengetahui apakah pengguna akan melakukan pembelian ulang dalam 30 hari ke depan (ya/tidak) berdasarkan riwayat jumlah kunjungan situs, jumlah produk dalam wishlist, dan apakah pengguna pernah menggunakan kode promo.

Petunjuk pengerjaan. Untuk setiap kasus, tuliskan terlebih dahulu identifikasi jenis variabel respons sebelum menuliskan kode R. Sebagai panduan cepat, ingat kembali pedoman berikut: variabel biner mengarah pada regresi logistik biner, variabel kategori nominal lebih dari dua level mengarah pada regresi multinomial, variabel kategori berurutan mengarah pada regresi ordinal (dengan catatan pemeriksaan proportional odds), dan variabel hitungan non-negatif — apalagi dengan periode observasi yang bervariasi seperti pada Kasus 2 — mengarah pada regresi Poisson dengan mempertimbangkan penggunaan offset.

Setelah menentukan model yang tepat, cobalah membuat data simulasi sendiri (mengikuti pola pada bab-bab sebelumnya) untuk masing-masing kasus, lalu estimasi model, interpretasikan koefisien utamanya, dan periksa minimal satu asumsi kunci dari model yang dipilih.

13 Penutup

Ebook ini telah membahas empat model utama untuk analisis data kategori dan data hitung: regresi logistik biner, multinomial, ordinal, dan regresi Poisson. Keempatnya merupakan bagian dari keluarga generalized linear model yang menggunakan fungsi penghubung berbeda sesuai skala pengukuran variabel respons. Pemilihan model yang tepat — beserta pemeriksaan asumsi yang menyertainya — merupakan langkah krusial agar kesimpulan penelitian valid dan dapat dipertanggungjawabkan secara statistik.

Beberapa pesan kunci yang perlu selalu diingat pembaca setiap kali menghadapi data kategori atau data hitung dalam praktik nyata:

  • Jenis variabel respons menentukan model, bukan sebaliknya. Jangan memaksakan satu model favorit untuk semua jenis data.
  • Odds ratio dan incidence rate ratio bersifat multiplikatif, bukan aditif — selalu kembalikan interpretasi pada skala peluang atau rate aslinya ketika berkomunikasi dengan pembaca non-teknis.
  • Signifikansi statistik bukan segalanya; ukuran efek dan relevansi praktis sama pentingnya, terutama dalam konteks kebijakan publik.
  • Setiap model memiliki asumsi khasnya sendiri — linearitas logit, IIA, proportional odds, dan equidispersion — yang wajib diperiksa, bukan sekadar diasumsikan otomatis terpenuhi.

Pembaca disarankan untuk berlatih dengan data riil dari bidang masing- masing (kesehatan, pendidikan, pemasaran, sosial, dsb.) serta mendalami topik lanjutan seperti regresi ordinal dengan partial proportional odds, negative binomial regression, zero-inflated models, dan model logistik dengan efek acak (mixed-effects logistic regression) untuk data yang memiliki struktur berkelompok (clustered/panel data). Penguasaan terhadap keempat model dasar dalam ebook ini merupakan fondasi yang kuat sebelum melangkah ke topik-topik lanjutan tersebut.


14 Lampiran: Ringkasan Sintaks R untuk Keempat Model

Bagian ini merangkum fungsi R utama yang digunakan sepanjang ebook, lengkap dengan penjelasan argumen-argumen pentingnya, sebagai referensi cepat bagi pembaca.

1. Regresi logistik biner — glm()

glm(formula, data, family = binomial(link = "logit"))

formula dituliskan dalam bentuk respons ~ prediktor1 + prediktor2, dengan respons berupa faktor dua level atau vektor numerik 0/1. Argumen family = binomial(link = "logit") memberi tahu R bahwa komponen acak mengikuti distribusi Binomial (Bernoulli untuk data individual) dan fungsi penghubungnya adalah logit. Fungsi summary() menampilkan koefisien pada skala log-odds, sedangkan exp(coef(...)) mengonversinya ke skala odds ratio.

2. Regresi logistik multinomial — multinom() (paket nnet)

nnet::multinom(formula, data, trace = FALSE)

Variabel respons pada formula harus berupa faktor nominal dengan lebih dari dua level. Kategori pertama pada levels() (atau kategori yang ditetapkan melalui relevel()) secara otomatis menjadi kategori referensi. Argumen trace = FALSE menonaktifkan output iterasi optimasi agar tampilan lebih ringkas. Karena multinom() tidak berbasis kerangka glm() standar, nilai p-value tidak ditampilkan otomatis dan perlu dihitung manual dari rasio koefisien terhadap standard error-nya (z-value), sebagaimana ditunjukkan pada Bab 2.

3. Regresi logistik ordinal — polr() (paket MASS)

MASS::polr(formula, data, Hess = TRUE)

Variabel respons harus berupa faktor terurut (ordered = TRUE saat pembuatan faktor). Argumen Hess = TRUE memastikan matriks Hessian dihitung sehingga standard error koefisien dapat diperoleh melalui summary(). Sama seperti multinom(), nilai p-value dihitung manual menggunakan pendekatan distribusi normal baku terhadap t-value yang dilaporkan.

4. Regresi Poisson — glm() dengan family = poisson

glm(formula, data, family = poisson(link = "log"), offset = log(exposure))

Argumen family = poisson(link = "log") menetapkan komponen acak Poisson dengan fungsi penghubung log. Argumen opsional offset dapat ditambahkan langsung dalam formula (misalnya y ~ x1 + x2 + offset(log(exposure))) atau melalui argumen terpisah offset =, digunakan ketika periode/ukuran paparan berbeda antar observasi. Jika ditemukan overdispersion, family = poisson(...) dapat diganti dengan family = quasipoisson(...) atau digunakan fungsi MASS::glm.nb() untuk model negative binomial.

Fungsi pendukung umum yang berlaku untuk hampir semua model di atas: predict(model, type = "response"/"class"/"probs") untuk menghasilkan nilai prediksi, confint(model) untuk interval kepercayaan koefisien, anova(model1, model2, test = "Chisq") untuk membandingkan model bersarang (nested models), dan AIC(model) / BIC(model) untuk membandingkan model yang tidak bersarang.

15 Referensi Singkat

  • Agresti, A. (2019). An Introduction to Categorical Data Analysis (3rd ed.). Wiley.
  • Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley.
  • Long, J. S., & Freese, J. (2014). Regression Models for Categorical Dependent Variables Using Stata (3rd ed.). Stata Press.
  • Cameron, A. C., & Trivedi, P. K. (2013). Regression Analysis of Count Data (2nd ed.). Cambridge University Press.
  • McCullagh, P., & Nelder, J. A. (1989). Generalized Linear Models (2nd ed.). Chapman and Hall.

Dokumen ini ditulis dalam format R Markdown (.Rmd) dan dapat di-knit menjadi HTML, PDF, atau Word menggunakan RStudio. Semua data yang digunakan bersifat simulasi (disimulasikan langsung pada setiap chunk R) sehingga dokumen ini dapat dijalankan ulang secara mandiri (reproducible) tanpa memerlukan berkas data eksternal.