1 Pendahuluan

Laporan ini menyajikan empat contoh kasus penerapan model regresi untuk data kategori/count: regresi logistik biner, regresi logistik multinomial, regresi logistik ordinal, dan regresi Poisson. Setiap kasus mencakup deskripsi data, model matematis, estimasi menggunakan R, dan interpretasi hasil.

2 Kasus 1: Regresi Logistik Biner — Status Infeksi

2.1 Deskripsi Kasus

Regresi logistik biner digunakan ketika variabel respon bersifat dikotomis (dua kategori). Contoh kasus: memprediksi status infeksi (ya/tidak) berdasarkan status vaksinasi dan usia.

2.2 Model

\[ \text{logit}(p_i) = \ln\left(\frac{p_i}{1-p_i}\right) = \beta_0 + \beta_1 \text{Vaksin}_i + \beta_2 \text{Usia}_i \]

2.3 Data (Simulasi)

set.seed(123)
n <- 200
vaksin <- rbinom(n, 1, 0.5)
usia <- round(rnorm(n, 40, 12))
lin_pred <- -0.5 - 1.5*vaksin + 0.03*usia
p <- 1/(1+exp(-lin_pred))
infeksi <- rbinom(n, 1, p)
data_biner <- data.frame(infeksi, vaksin, usia)
head(data_biner)
##   infeksi vaksin usia
## 1       1      0   31
## 2       1      1   43
## 3       1      0   37
## 4       0      1   36
## 5       0      1   29
## 6       0      0   39

2.4 Estimasi Model

model_biner <- glm(infeksi ~ vaksin + usia, data = data_biner, family = binomial(link = "logit"))
summary(model_biner)
## 
## Call:
## glm(formula = infeksi ~ vaksin + usia, family = binomial(link = "logit"), 
##     data = data_biner)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -0.26304    0.56542  -0.465    0.642    
## vaksin      -1.27782    0.30009  -4.258 2.06e-05 ***
## usia         0.02317    0.01332   1.739    0.082 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 277.18  on 199  degrees of freedom
## Residual deviance: 254.58  on 197  degrees of freedom
## AIC: 260.58
## 
## Number of Fisher Scoring iterations: 4

2.5 Odds Ratio

exp(coef(model_biner))
## (Intercept)      vaksin        usia 
##   0.7687114   0.2786433   1.0234401
exp(confint(model_biner))
##                 2.5 %   97.5 %
## (Intercept) 0.2517711 2.332365
## vaksin      0.1531734 0.497798
## usia        0.9974437 1.051160

2.6 Interpretasi

Koefisien vaksin bernilai negatif, menunjukkan bahwa vaksinasi menurunkan log-odds infeksi. Nilai odds ratio untuk vaksin < 1 mengindikasikan efek protektif: individu yang divaksin memiliki odds infeksi lebih rendah dibanding yang tidak divaksin, dengan mengontrol usia. Koefisien usia positif menunjukkan odds infeksi meningkat seiring bertambahnya usia.

3 Kasus 2: Regresi Logistik Multinomial — Pilihan Moda Transportasi

3.1 Deskripsi Kasus

Regresi multinomial digunakan ketika variabel respon memiliki lebih dari dua kategori tanpa urutan (nominal). Contoh kasus: memprediksi pilihan moda transportasi (Motor, Mobil, Angkutan Umum) berdasarkan pendapatan dan jarak tempuh.

3.2 Model

Dengan kategori referensi “Motor”:

\[ \ln\left(\frac{P(Y=j)}{P(Y=\text{Motor})}\right) = \beta_{0j} + \beta_{1j}\text{Pendapatan} + \beta_{2j}\text{Jarak}, \quad j = \text{Mobil, Angkutan Umum} \]

3.3 Data (Simulasi)

set.seed(123)
n <- 300
pendapatan <- round(rnorm(n, 5, 2), 1)   # dalam juta rupiah
jarak <- round(rnorm(n, 10, 4), 1)       # dalam km

skor_mobil <- -3 + 0.6*pendapatan - 0.05*jarak
skor_umum  <- -1 + 0.1*pendapatan + 0.15*jarak
skor_motor <- 0

exp_m <- exp(skor_mobil); exp_u <- exp(skor_umum); exp_mo <- exp(skor_motor)
tot <- exp_m + exp_u + exp_mo
prob <- cbind(Motor = exp_mo/tot, Mobil = exp_m/tot, AngkutanUmum = exp_u/tot)

moda <- apply(prob, 1, function(x) sample(c("Motor","Mobil","AngkutanUmum"), 1, prob = x))
data_multi <- data.frame(moda = factor(moda), pendapatan, jarak)
head(data_multi)
##           moda pendapatan jarak
## 1        Motor        3.9   7.1
## 2        Mobil        4.5   7.0
## 3        Mobil        8.1   6.2
## 4        Motor        5.1   5.8
## 5 AngkutanUmum        5.3   8.3
## 6        Motor        8.4  11.3

3.4 Estimasi Model

data_multi$moda <- relevel(data_multi$moda, ref = "Motor")
model_multi <- multinom(moda ~ pendapatan + jarak, data = data_multi, trace = FALSE)
summary(model_multi)
## Call:
## multinom(formula = moda ~ pendapatan + jarak, data = data_multi, 
##     trace = FALSE)
## 
## Coefficients:
##              (Intercept) pendapatan      jarak
## AngkutanUmum   -1.001552 0.03248343  0.1923893
## Mobil          -2.338040 0.62980637 -0.1142991
## 
## Std. Errors:
##              (Intercept) pendapatan      jarak
## AngkutanUmum   0.6102234 0.09393816 0.04511325
## Mobil          0.7589084 0.11939227 0.05390951
## 
## Residual Deviance: 477.6492 
## AIC: 489.6492

3.5 Uji Signifikansi Koefisien (z-test)

z <- summary(model_multi)$coefficients / summary(model_multi)$standard.errors
p_val <- (1 - pnorm(abs(z), 0, 1)) * 2
p_val
##              (Intercept)   pendapatan        jarak
## AngkutanUmum 0.100737762 7.294961e-01 2.002738e-05
## Mobil        0.002064498 1.326826e-07 3.398886e-02

3.6 Interpretasi

Dibanding kategori referensi Motor, kenaikan pendapatan cenderung meningkatkan peluang memilih Mobil (koefisien positif), sedangkan kenaikan jarak tempuh cenderung meningkatkan peluang memilih Angkutan Umum dibanding Motor. Nilai p-value pada uji z digunakan untuk menilai signifikansi masing-masing prediktor terhadap tiap kategori pembanding.

4 Kasus 3: Regresi Logistik Ordinal — Tingkat Kepuasan Layanan

4.1 Deskripsi Kasus

Regresi logistik ordinal digunakan ketika variabel respon berkategori dengan urutan (ordinal). Contoh kasus: tingkat kepuasan pelanggan (Rendah, Sedang, Tinggi) terhadap layanan, diprediksi oleh lama waktu tunggu dan skor keramahan staf.

4.2 Model (Proportional Odds)

\[ \ln\left(\frac{P(Y \le j)}{P(Y > j)}\right) = \alpha_j - (\beta_1 \text{Tunggu} + \beta_2 \text{Keramahan}), \quad j = 1,2 \]

4.3 Data (Simulasi)

set.seed(123)
n <- 250
tunggu <- round(rnorm(n, 15, 5), 1)      # menit
keramahan <- round(rnorm(n, 7, 1.5), 1)  # skor 1-10

skor <- -0.15*tunggu + 0.6*keramahan + rnorm(n, 0, 1)
kepuasan <- cut(skor, breaks = quantile(skor, probs = c(0, 1/3, 2/3, 1)),
                 labels = c("Rendah","Sedang","Tinggi"), include.lowest = TRUE)
data_ordinal <- data.frame(kepuasan, tunggu, keramahan)
head(data_ordinal)
##   kepuasan tunggu keramahan
## 1   Sedang   12.2       6.4
## 2   Rendah   13.8       6.2
## 3   Sedang   22.8       6.5
## 4   Sedang   15.4       7.1
## 5   Sedang   15.6       9.4
## 6   Rendah   23.6       6.9

4.4 Estimasi Model

model_ordinal <- polr(kepuasan ~ tunggu + keramahan, data = data_ordinal, Hess = TRUE)
summary(model_ordinal)
## Call:
## polr(formula = kepuasan ~ tunggu + keramahan, data = data_ordinal, 
##     Hess = TRUE)
## 
## Coefficients:
##             Value Std. Error t value
## tunggu    -0.2646    0.03571  -7.411
## keramahan  1.0094    0.11655   8.661
## 
## Intercepts:
##               Value   Std. Error t value
## Rendah|Sedang  2.1704  0.7906     2.7453
## Sedang|Tinggi  4.3964  0.8311     5.2901
## 
## Residual Deviance: 401.5673 
## AIC: 409.5673

4.5 Uji Signifikansi dan Odds Ratio

coef_tab <- coef(summary(model_ordinal))
p_val <- pnorm(abs(coef_tab[, "t value"]), lower.tail = FALSE) * 2
cbind(coef_tab, p_value = p_val)
##                    Value Std. Error   t value      p_value
## tunggu        -0.2646265 0.03570925 -7.410588 1.257409e-13
## keramahan      1.0093821 0.11654694  8.660734 4.687347e-18
## Rendah|Sedang  2.1704122 0.79059752  2.745281 6.045914e-03
## Sedang|Tinggi  4.3964351 0.83107451  5.290061 1.222754e-07
exp(coef(model_ordinal))
##    tunggu keramahan 
## 0.7674925 2.7439050

4.6 Interpretasi

Koefisien tunggu negatif menunjukkan semakin lama waktu tunggu, semakin rendah peluang berada pada kategori kepuasan yang lebih tinggi. Koefisien keramahan positif menunjukkan semakin tinggi skor keramahan staf, semakin besar peluang pelanggan berada pada kategori kepuasan yang lebih tinggi. Nilai odds ratio menggambarkan perubahan odds kumulatif untuk berada pada kategori kepuasan yang lebih tinggi atau sama.

5 Kasus 4: Regresi Poisson — Jumlah Keluhan Pelanggan

5.1 Deskripsi Kasus

Regresi Poisson digunakan ketika variabel respon berupa data hitung (count data), seperti jumlah kejadian dalam periode tertentu. Contoh kasus: jumlah keluhan pelanggan per bulan diprediksi oleh jumlah transaksi dan skor kualitas layanan.

5.2 Model

\[ \ln(\mu_i) = \beta_0 + \beta_1 \text{Transaksi}_i + \beta_2 \text{Kualitas}_i \]

dengan \(\mu_i = E(Y_i)\) adalah rata-rata jumlah keluhan.

5.3 Data (Simulasi)

set.seed(123)
n <- 200
transaksi <- round(rnorm(n, 100, 20))
kualitas <- round(rnorm(n, 7, 1.5), 1)

lin_pred <- 0.5 + 0.01*transaksi - 0.25*kualitas
mu <- exp(lin_pred)
keluhan <- rpois(n, mu)
data_poisson <- data.frame(keluhan, transaksi, kualitas)
head(data_poisson)
##   keluhan transaksi kualitas
## 1       0        89     10.3
## 2       0        95      9.0
## 3       0       131      6.6
## 4       0       101      7.8
## 5       0       103      6.4
## 6       4       134      6.3

5.4 Estimasi Model

model_poisson <- glm(keluhan ~ transaksi + kualitas, data = data_poisson, family = poisson(link = "log"))
summary(model_poisson)
## 
## Call:
## glm(formula = keluhan ~ transaksi + kualitas, family = poisson(link = "log"), 
##     data = data_poisson)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.385873   0.563068   0.685 0.493152    
## transaksi    0.006729   0.004171   1.613 0.106702    
## kualitas    -0.184442   0.053369  -3.456 0.000548 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 207.23  on 199  degrees of freedom
## Residual deviance: 192.33  on 197  degrees of freedom
## AIC: 458.61
## 
## Number of Fisher Scoring iterations: 5

5.5 Pemeriksaan Overdispersion

dispersi <- sum(residuals(model_poisson, type = "pearson")^2) / model_poisson$df.residual
dispersi
## [1] 0.8602821

5.6 Interpretasi

Koefisien transaksi positif menunjukkan semakin banyak transaksi, semakin tinggi rata-rata jumlah keluhan (risiko keluhan meningkat seiring volume layanan). Koefisien kualitas negatif menunjukkan semakin tinggi skor kualitas layanan, semakin rendah rata-rata jumlah keluhan. Nilai rasio dispersi mendekati 1 mengindikasikan asumsi equidispersion model Poisson cukup terpenuhi; jika jauh melebihi 1, model quasi-Poisson atau binomial negatif dapat dipertimbangkan.

6 Kesimpulan Umum

Empat model di atas mengilustrasikan bagaimana bentuk skala variabel respon menentukan pilihan model regresi: biner untuk dua kategori, multinomial untuk kategori nominal lebih dari dua, ordinal untuk kategori berjenjang, dan Poisson untuk data hitung. Setiap model menggunakan fungsi penghubung (link function) yang sesuai dengan distribusi variabel responnya, dan interpretasi koefisien dilakukan melalui odds ratio (logistik) atau rasio rata-rata (Poisson, melalui eksponensiasi koefisien).