1 Pendahuluan

1.1 Latar Belakang

Analisis Data Kategorik dan model linier yang diperluas (Generalized Linear Models / GLM). Seringkali dalam penelitian ilmiah, variabel dependen tidak berdistribusi normal, melainkan bertipe nominal, ordinal, atau berupa data cacahan (count data).

Dalam modul ini, akan dibahas empat studi kasus model regresi logistik:

No Model Tipe Variabel Dependen Studi Kasus
1 Regresi Logistik Biner 2 kategori dikotomi (0/1) Adopsi Teknologi Pertanian
2 Regresi Logistik Multinomial Nominal > 2 kategori Pemilihan Moda Transportasi Malang
3 Regresi Logistik Ordinal Kategori bertingkat/berjenjang Minat Studi S2 Universitas Negeri Padang
4 Regresi Poisson Data cacahan (count) non-negatif Kecelakaan Motor Banda Aceh

1.2 Package yang Digunakan

# Install package jika belum tersedia:
# install.packages(c("tidyverse", "knitr", "kableExtra", "scales",
#                    "nnet", "MASS", "pROC", "ggplot2"))

library(tidyverse)
library(knitr)
library(kableExtra)
library(scales)
library(nnet)     # Multinomial logistic regression
library(MASS)     # Ordinal logistic regression (polr)
library(pROC)     # ROC curve & AUC

2 Regresi Logistik Biner

2.1 Landasan Teori

Regresi logistik biner memodelkan peluang terjadinya suatu peristiwa (Y = 1) sebagai fungsi log-odds linier dari variabel prediktor:

\[\ln\!\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k\]

dengan \(p = P(Y = 1 \mid X)\) adalah probabilitas kejadian. Transformasi balik menghasilkan:

\[p = \frac{e^{\beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k}}{1 + e^{\beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k}}\]

Odds Ratio (OR) = \(e^{\hat{\beta}_j}\) mengukur perubahan relatif peluang untuk setiap kenaikan satu unit \(X_j\), ceteris paribus.

2.2 Studi Kasus

Analisis Faktor Sosial Ekonomi dalam Adopsi Teknologi Pertanian Presisi
N = 30 responden petani, daerah agro-ekologis tropis

Variabel prediktor diukur dengan skala Likert 1–5:

  • luas_lahan — Luas kepemilikan lahan pertanian
  • pendapatan_tani — Tingkat pendapatan usahatani
  • usia_petani — Kategori usia petani (1 = muda, 5 = tua)
  • akses_penyuluhan — Frekuensi akses terhadap layanan penyuluhan
  • kelompok_tani — Keaktifan dalam kelompok tani

Variabel dependen: adopsi_tech (0 = Tidak Mengadopsi, 1 = Mengadopsi).

2.3 Simulasi Data

set.seed(2026)
n_biner <- 30

data_petani <- tibble(
  luas_lahan       = pmin(5, pmax(1, round(rnorm(n_biner, mean = 3.40, sd = 0.95)))),
  pendapatan_tani  = pmin(5, pmax(1, round(rnorm(n_biner, mean = 3.10, sd = 0.85)))),
  usia_petani      = pmin(5, pmax(1, round(rnorm(n_biner, mean = 2.90, sd = 1.10)))),
  akses_penyuluhan = pmin(5, pmax(1, round(rnorm(n_biner, mean = 3.60, sd = 0.90)))),
  kelompok_tani    = pmin(5, pmax(1, round(rnorm(n_biner, mean = 3.50, sd = 0.80))))
)

# Latent score penentu keputusan adopsi
latent_biner <-
  1.15 * data_petani$luas_lahan +
  0.85 * data_petani$pendapatan_tani -
  0.45 * data_petani$usia_petani +
  1.25 * data_petani$akses_penyuluhan +
  0.95 * data_petani$kelompok_tani +
  rlogis(n_biner, location = 8.0, scale = 1)

data_petani$adopsi_tech <- factor(
  ifelse(latent_biner >= 18.5, 1, 0),
  levels = c(0, 1), labels = c("Tidak", "Ya")
)

# Tampilkan 10 baris pertama
data_petani %>%
  head(10) %>%
  kable(caption = "Tabel 1.1 — Sampel Data Petani (10 Baris Pertama)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Tabel 1.1 — Sampel Data Petani (10 Baris Pertama)
luas_lahan pendapatan_tani usia_petani akses_penyuluhan kelompok_tani adopsi_tech
4 3 3 2 5 Ya
2 3 3 5 5 Ya
4 3 3 3 4 Ya
3 3 3 4 4 Ya
3 3 1 2 2 Ya
1 4 3 3 4 Tidak
3 4 1 3 3 Ya
2 2 4 3 3 Tidak
4 4 2 3 4 Ya
3 2 3 4 4 Ya
data_petani %>%
  count(adopsi_tech) %>%
  mutate(pct = n / sum(n)) %>%
  ggplot(aes(x = adopsi_tech, y = n, fill = adopsi_tech)) +
  geom_col(width = 0.5, show.legend = FALSE) +
  geom_text(aes(label = paste0(n, " (", percent(pct, accuracy = 1), ")")),
            vjust = -0.5, fontface = "bold", size = 4) +
  scale_fill_manual(values = c("#e74c3c", "#27ae60")) +
  scale_y_continuous(limits = c(0, max(table(data_petani$adopsi_tech)) * 1.2)) +
  labs(title    = "Distribusi Adopsi Teknologi Pertanian",
       subtitle = paste0("N = ", n_biner, " responden"),
       x = "Status Adopsi", y = "Frekuensi") +
  theme_adk()
Distribusi Adopsi Teknologi dalam Sampel

Distribusi Adopsi Teknologi dalam Sampel

2.4 Estimasi Model

fit_biner <- glm(
  adopsi_tech ~ luas_lahan + pendapatan_tani + usia_petani +
                akses_penyuluhan + kelompok_tani,
  data   = data_petani,
  family = binomial(link = "logit")
)

summary(fit_biner)
## 
## Call:
## glm(formula = adopsi_tech ~ luas_lahan + pendapatan_tani + usia_petani + 
##     akses_penyuluhan + kelompok_tani, family = binomial(link = "logit"), 
##     data = data_petani)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)
## (Intercept)        -413.55  631311.76  -0.001    0.999
## luas_lahan           87.31   64820.51   0.001    0.999
## pendapatan_tani      71.83   54378.82   0.001    0.999
## usia_petani         -29.10   27440.01  -0.001    0.999
## akses_penyuluhan     14.88   39089.14   0.000    1.000
## kelompok_tani        14.63  109987.55   0.000    1.000
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2.7034e+01  on 29  degrees of freedom
## Residual deviance: 3.2696e-09  on 24  degrees of freedom
## AIC: 12
## 
## Number of Fisher Scoring iterations: 25

2.5 Tabel Parameter & Odds Ratio

tabel_biner <- as.data.frame(coef(summary(fit_biner))) %>%
  rownames_to_column("Parameter") %>%
  rename(
    Koefisien = Estimate,
    Std_Error = `Std. Error`,
    z_hitung  = `z value`,
    p_value   = `Pr(>|z|)`
  ) %>%
  mutate(
    OR      = exp(Koefisien),
    CI_95_L = exp(Koefisien - 1.96 * Std_Error),
    CI_95_U = exp(Koefisien + 1.96 * Std_Error),
    Sig     = case_when(
      p_value < 0.001 ~ "***",
      p_value < 0.01  ~ "**",
      p_value < 0.05  ~ "*",
      p_value < 0.10  ~ ".",
      TRUE            ~ ""
    )
  )

tabel_biner %>%
  mutate(across(where(is.numeric), ~ round(.x, 4))) %>%
  kable(
    caption = "Tabel 1.2 — Estimasi Parameter Regresi Logistik Biner (N = 30)",
    col.names = c("Parameter", "β", "SE", "z", "p-value",
                  "OR", "CI 2.5%", "CI 97.5%", "Sig")
  ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  row_spec(which(tabel_biner$p_value < 0.05), background = "#eafaf1") %>%
  footnote(general = "Signifikansi: *** p<0.001, ** p<0.01, * p<0.05, . p<0.10")
Tabel 1.2 — Estimasi Parameter Regresi Logistik Biner (N = 30)
Parameter β SE z p-value OR CI 2.5% CI 97.5% Sig
(Intercept) -413.5528 631311.76 -0.0007 0.9995 0.000000e+00 0 Inf
luas_lahan 87.3136 64820.51 0.0013 0.9989 8.314282e+37 0 Inf
pendapatan_tani 71.8339 54378.82 0.0013 0.9989 1.574225e+31 0 Inf
usia_petani -29.1048 27440.01 -0.0011 0.9992 0.000000e+00 0 Inf
akses_penyuluhan 14.8846 39089.14 0.0004 0.9997 2.912754e+06 0 Inf
kelompok_tani 14.6283 109987.55 0.0001 0.9999 2.254153e+06 0 Inf
Note:
Signifikansi: *** p<0.001, ** p<0.01, * p<0.05, . p<0.10

2.6 Interpretasi Hasil

Berdasarkan output Tabel 1.2. Fokus pada variabel yang memiliki p-value < 0,05.

  • Variabel dengan OR > 1 meningkatkan peluang petani mengadopsi teknologi pertanian.
  • Variabel dengan OR < 1 menurunkan peluang adopsi teknologi.
  • Jelaskan besarnya pengaruh menggunakan nilai Odds Ratio (OR).

Contoh Interpretasi:

Variabel akses_penyuluhan memiliki OR sebesar 2,45 dan signifikan pada taraf 5%. Artinya setiap kenaikan satu tingkat akses penyuluhan meningkatkan peluang petani mengadopsi teknologi sebesar 2,45 kali dibandingkan sebelumnya dengan asumsi variabel lain konstan.

2.6.1 Kesimpulan Kasus

Berdasarkan hasil analisis regresi logistik biner, faktor sosial ekonomi yang signifikan berpengaruh terhadap keputusan petani dalam mengadopsi teknologi pertanian presisi. Model juga dapat dievaluasi menggunakan akurasi klasifikasi dan nilai AUC.

2.7 Visualisasi Odds Ratio

tabel_biner %>%
  filter(Parameter != "(Intercept)") %>%
  ggplot(aes(x = OR, y = reorder(Parameter, OR))) +
  geom_vline(xintercept = 1, linetype = "dashed", color = "gray50") +
  geom_errorbarh(aes(xmin = CI_95_L, xmax = CI_95_U),
                 height = 0.25, color = "#2980b9", linewidth = 0.8) +
  geom_point(size = 3.5, color = "#e74c3c") +
  geom_text(aes(label = round(OR, 3)), hjust = -0.3, size = 3.2) +
  scale_x_log10() +
  labs(
    title    = "Forest Plot: Odds Ratio Adopsi Teknologi Pertanian",
    subtitle = "Skala logaritmik; garis putus-putus = OR = 1 (tidak ada efek)",
    x = "Odds Ratio (skala log)", y = "Variabel Prediktor"
  ) +
  theme_adk()
Forest Plot Odds Ratio — Regresi Logistik Biner

Forest Plot Odds Ratio — Regresi Logistik Biner

2.8 Matriks Klasifikasi & Evaluasi Model

prob_pred_biner   <- predict(fit_biner, type = "response")
kelas_pred_biner  <- factor(ifelse(prob_pred_biner >= 0.5, "Ya", "Tidak"),
                            levels = c("Tidak", "Ya"))

conf_mat_biner <- table(Aktual = data_petani$adopsi_tech,
                        Prediksi = kelas_pred_biner)

cat("── Matriks Konfusi ─────────────────────────────\n")
## ── Matriks Konfusi ─────────────────────────────
print(conf_mat_biner)
##        Prediksi
## Aktual  Tidak Ya
##   Tidak     5  0
##   Ya        0 25
akurasi  <- sum(diag(conf_mat_biner)) / sum(conf_mat_biner)
TP <- conf_mat_biner["Ya",  "Ya"]
TN <- conf_mat_biner["Tidak","Tidak"]
FP <- conf_mat_biner["Tidak","Ya"]
FN <- conf_mat_biner["Ya",  "Tidak"]

sensitivitas <- TP / (TP + FN)
spesifisitas <- TN / (TN + FP)

cat("\n── Metrik Evaluasi ─────────────────────────────\n")
## 
## ── Metrik Evaluasi ─────────────────────────────
cat(sprintf("  Akurasi      : %.1f%%\n", akurasi * 100))
##   Akurasi      : 100.0%
cat(sprintf("  Sensitivitas : %.1f%%\n", sensitivitas * 100))
##   Sensitivitas : 100.0%
cat(sprintf("  Spesifisitas : %.1f%%\n", spesifisitas * 100))
##   Spesifisitas : 100.0%
roc_obj <- roc(as.numeric(data_petani$adopsi_tech == "Ya"),
               prob_pred_biner, quiet = TRUE)

plot(roc_obj,
     col  = "#2980b9", lwd  = 2,
     main = paste0("Kurva ROC  (AUC = ", round(auc(roc_obj), 3), ")"),
     xlab = "1 − Spesifisitas (False Positive Rate)",
     ylab = "Sensitivitas (True Positive Rate)")
abline(a = 0, b = 1, lty = 2, col = "gray60")
Kurva ROC — Model Logistik Biner

Kurva ROC — Model Logistik Biner


3 Regresi Logistik Multinomial

3.1 Landasan Teori

Regresi logistik multinomial digunakan saat variabel respons bersifat nominal (tidak berurutan) dengan lebih dari dua kategori. Model ini membandingkan log-odds setiap pilihan terhadap satu kategori acuan/basis:

\[\ln\!\left(\frac{P(Y = j)}{P(Y = \text{basis})}\right) = \alpha_j + \beta_{j1} X_1 + \cdots + \beta_{jk} X_k, \quad j \neq \text{basis}\]

Koefisien diinterpretasikan melalui Relative Risk Ratio (RRR) = \(e^{\hat{\beta}_{jl}}\).

3.2 Studi Kasus

Pemilihan Moda Transportasi Kerja di Kota Malang
N = 112 responden. Moda acuan: Sepeda Motor

Variabel dependen: pilihan_moda (Sepeda Motor | Mobil Pribadi | Transportasi Umum).

3.3 Simulasi Data

set.seed(42)
n_multi <- 112

data_multi <- tibble(
  usia             = round(rnorm(n_multi, mean = 32,  sd = 5.8),  1),
  jarak_kerja      = pmax(0.5, rlnorm(n_multi, meanlog = 2.1, sdlog = 0.42)),
  biaya_perjalanan = pmin(1200, pmax(50, rnorm(n_multi, mean = 420, sd = 100))),
  pendapatan       = pmax(2.5,  rnorm(n_multi, mean = 7.8, sd = 2.9)),
  status_menikah   = rbinom(n_multi, 1, 0.65)
)

# Utilitas tiap moda (multinomial probit)
eta_mobil    <- -3.20 + 0.030*data_multi$usia + 0.095*data_multi$jarak_kerja -
                0.001*data_multi$biaya_perjalanan + 0.220*data_multi$pendapatan +
                0.550*data_multi$status_menikah

eta_transumum <- -0.85 - 0.010*data_multi$usia + 0.140*data_multi$jarak_kerja -
                 0.003*data_multi$biaya_perjalanan - 0.050*data_multi$pendapatan -
                 0.250*data_multi$status_menikah

denom          <- 1 + exp(eta_mobil) + exp(eta_transumum)
prob_motor     <- 1            / denom
prob_mobil     <- exp(eta_mobil)    / denom
prob_transumum <- exp(eta_transumum) / denom

choice <- pmap_chr(
  list(prob_motor, prob_mobil, prob_transumum),
  ~ sample(c("Sepeda Motor", "Mobil Pribadi", "Transportasi Umum"),
           size = 1, prob = c(..1, ..2, ..3))
)

data_multi <- data_multi %>%
  mutate(
    pilihan_moda   = factor(choice, levels = c("Sepeda Motor",
                                               "Mobil Pribadi",
                                               "Transportasi Umum")),
    status_menikah = factor(status_menikah, levels = c(0,1),
                            labels = c("Belum Menikah", "Menikah"))
  )

# Distribusi pilihan moda
data_multi %>%
  count(pilihan_moda) %>%
  mutate(Persen = percent(n / sum(n), accuracy = 0.1)) %>%
  kable(caption  = "Tabel 2.1 — Distribusi Pilihan Moda Transportasi",
        col.names = c("Moda Transportasi", "Frekuensi", "Persentase")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabel 2.1 — Distribusi Pilihan Moda Transportasi
Moda Transportasi Frekuensi Persentase
Sepeda Motor 41 36.6%
Mobil Pribadi 62 55.4%
Transportasi Umum 9 8.0%

3.4 Estimasi Model

fit_multi <- multinom(
  pilihan_moda ~ usia + jarak_kerja + biaya_perjalanan +
                 pendapatan + status_menikah,
  data  = data_multi,
  trace = FALSE
)

summary(fit_multi)
## Call:
## multinom(formula = pilihan_moda ~ usia + jarak_kerja + biaya_perjalanan + 
##     pendapatan + status_menikah, data = data_multi, trace = FALSE)
## 
## Coefficients:
##                   (Intercept)       usia jarak_kerja biaya_perjalanan
## Mobil Pribadi       -4.196253 0.04702526 -0.02504381      0.001609897
## Transportasi Umum   -1.808940 0.04356663  0.16707154     -0.002877911
##                   pendapatan status_menikahMenikah
## Mobil Pribadi      0.2635235             0.9082826
## Transportasi Umum -0.2387170             0.2078317
## 
## Std. Errors:
##                   (Intercept)       usia jarak_kerja biaya_perjalanan
## Mobil Pribadi        2.002354 0.03791592  0.06302241      0.002493434
## Transportasi Umum    3.463414 0.06914567  0.10035191      0.004429371
##                   pendapatan status_menikahMenikah
## Mobil Pribadi     0.08750128             0.4675179
## Transportasi Umum 0.18902352             0.8074063
## 
## Residual Deviance: 178.3999 
## AIC: 202.3999

3.5 Tabel Parameter & RRR

multi_sum  <- summary(fit_multi)
coef_m     <- as.data.frame(multi_sum$coefficients)
se_m       <- as.data.frame(multi_sum$standard.errors)

coef_long <- coef_m %>%
  rownames_to_column("kategori") %>%
  pivot_longer(-kategori, names_to = "variabel", values_to = "estimate")

se_long <- se_m %>%
  rownames_to_column("kategori") %>%
  pivot_longer(-kategori, names_to = "variabel", values_to = "std_error")

tabel_multi <- coef_long %>%
  left_join(se_long, by = c("kategori", "variabel")) %>%
  mutate(
    z_value = estimate / std_error,
    p_value = 2 * (1 - pnorm(abs(z_value))),
    RRR     = exp(estimate),
    CI_L    = exp(estimate - 1.96 * std_error),
    CI_U    = exp(estimate + 1.96 * std_error),
    Sig     = case_when(
      p_value < 0.001 ~ "***",
      p_value < 0.01  ~ "**",
      p_value < 0.05  ~ "*",
      p_value < 0.10  ~ ".",
      TRUE            ~ ""
    )
  )

tabel_multi %>%
  mutate(across(where(is.numeric), ~ round(.x, 4))) %>%
  kable(
    caption   = "Tabel 2.2 — Estimasi Parameter Multinomial (Acuan: Sepeda Motor)",
    col.names = c("Kategori", "Variabel", "β", "SE", "z",
                  "p-value", "RRR", "CI 2.5%", "CI 97.5%", "Sig")
  ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  collapse_rows(columns = 1, valign = "top") %>%
  footnote(general = "Signifikansi: *** p<0.001, ** p<0.01, * p<0.05, . p<0.10")
Tabel 2.2 — Estimasi Parameter Multinomial (Acuan: Sepeda Motor)
Kategori Variabel β SE z p-value RRR CI 2.5% CI 97.5% Sig
Mobil Pribadi (Intercept) -4.1963 2.0024 -2.0957 0.0361 0.0151 0.0003 0.7621
usia 0.0470 0.0379 1.2403 0.2149 1.0481 0.9731 1.1290
jarak_kerja -0.0250 0.0630 -0.3974 0.6911 0.9753 0.8619 1.1035
biaya_perjalanan 0.0016 0.0025 0.6457 0.5185 1.0016 0.9967 1.0065
pendapatan 0.2635 0.0875 3.0117 0.0026 1.3015 1.0964 1.5450 **
status_menikahMenikah 0.9083 0.4675 1.9428 0.0520 2.4801 0.9920 6.2004 .
Transportasi Umum (Intercept) -1.8089 3.4634 -0.5223 0.6015 0.1638 0.0002 145.3799
usia 0.0436 0.0691 0.6301 0.5286 1.0445 0.9121 1.1961
jarak_kerja 0.1671 0.1004 1.6649 0.0959 1.1818 0.9708 1.4387 .
biaya_perjalanan -0.0029 0.0044 -0.6497 0.5159 0.9971 0.9885 1.0058
pendapatan -0.2387 0.1890 -1.2629 0.2066 0.7876 0.5438 1.1408
status_menikahMenikah 0.2078 0.8074 0.2574 0.7969 1.2310 0.2529 5.9915
Note:
Signifikansi: *** p<0.001, ** p<0.01, * p<0.05, . p<0.10

3.6 Interpretasi Hasil

Gunakan nilai Relative Risk Ratio (RRR) pada Tabel 2.2.

  • RRR > 1 menunjukkan kecenderungan lebih besar memilih kategori tertentu dibanding kategori acuan.
  • RRR < 1 menunjukkan kecenderungan lebih kecil dibanding kategori acuan.

3.6.1 Kesimpulan Kasus

Model multinomial mampu menjelaskan pengaruh karakteristik individu terhadap pemilihan moda transportasi. Variabel yang signifikan dapat digunakan sebagai dasar penyusunan kebijakan transportasi.

3.7 Prediksi Probabilitas — Efek Jarak Kerja

grid_multi <- expand.grid(
  usia             = mean(data_multi$usia),
  jarak_kerja      = seq(min(data_multi$jarak_kerja),
                         max(data_multi$jarak_kerja), length.out = 150),
  biaya_perjalanan = mean(data_multi$biaya_perjalanan),
  pendapatan       = mean(data_multi$pendapatan),
  status_menikah   = "Menikah"
)

pred_prob_multi <- predict(fit_multi, newdata = grid_multi, type = "probs")

grid_multi %>%
  bind_cols(as.data.frame(pred_prob_multi)) %>%
  pivot_longer(
    cols      = c("Sepeda Motor", "Mobil Pribadi", "Transportasi Umum"),
    names_to  = "Moda",
    values_to = "Probabilitas"
  ) %>%
  ggplot(aes(x = jarak_kerja, y = Probabilitas, color = Moda)) +
  geom_line(linewidth = 1.4) +
  scale_y_continuous(labels = percent_format(accuracy = 1), limits = c(0, 1)) +
  scale_color_manual(values = pal_adk[1:3]) +
  labs(
    title    = "Prediksi Probabilitas Pilihan Moda Transportasi",
    subtitle = "Dikondisikan pada nilai rata-rata prediktor lainnya (status menikah)",
    x = "Jarak ke Tempat Kerja (km)",
    y = "Probabilitas Terprediksi",
    color = "Moda"
  ) +
  theme_adk() +
  theme(legend.position = "top")
Prediksi Probabilitas Pilihan Moda berdasarkan Jarak Kerja

Prediksi Probabilitas Pilihan Moda berdasarkan Jarak Kerja


4 Regresi Logistik Ordinal

4.1 Landasan Teori

Model Proportional Odds (peluang proporsional) digunakan untuk variabel respons berjenjang/ordinal. Model ini mengasumsikan bahwa setiap prediktor memiliki efek kumulatif yang sama di semua ambang batas:

\[\ln\!\left(\frac{P(Y \le j)}{P(Y > j)}\right) = \alpha_j - (\beta_1 X_1 + \cdots + \beta_k X_k)\]

Parameter \(\alpha_j\) adalah ambang batas (threshold/cutpoint) ke-\(j\), sedangkan \(\beta_k\) adalah efek bersama yang berlaku di semua perbandingan kumulatif.

4.2 Studi Kasus

Analisis Faktor yang Mempengaruhi Minat Mahasiswa Melanjutkan Studi S2
Universitas Negeri Padang — N = 81 responden (Rumus Slovin)

Variabel dependen: minat_s2 (Tidak Berminat | Kurang Berminat | Berminat | Sangat Berminat).

4.3 Simulasi Data

set.seed(2023)
n_ord <- 81

data_unp <- tibble(
  prestasi_belajar = round(pmin(4.00, pmax(2.00,
                           rnorm(n_ord, mean = 3.38, sd = 0.22))), 2),
  kondisi_ekonomi  = pmin(5, pmax(1, round(rnorm(n_ord, mean = 3.6, sd = 0.8)))),
  biaya_pendidikan = pmin(5, pmax(1, round(rnorm(n_ord, mean = 3.2, sd = 0.9)))),
  ekspektasi_kerja = pmin(5, pmax(1, round(rnorm(n_ord, mean = 4.1, sd = 0.7)))),
  perempuan        = rbinom(n_ord, 1, 0.65)
)

latent_ord <-
  2.45 * data_unp$prestasi_belajar +
  0.65 * data_unp$kondisi_ekonomi  -
  0.75 * data_unp$biaya_pendidikan +
  0.55 * data_unp$ekspektasi_kerja +
  0.35 * data_unp$perempuan +
  rlogis(n_ord)

data_unp$minat_s2 <- cut(
  latent_ord,
  breaks = c(-Inf, 8.5, 10.2, 12.0, Inf),
  labels = c("Tidak Berminat", "Kurang Berminat", "Berminat", "Sangat Berminat"),
  ordered_result = TRUE
)

data_unp <- data_unp %>%
  mutate(perempuan = factor(perempuan, levels = c(0,1),
                            labels = c("Laki-laki", "Perempuan")))

# Distribusi minat
data_unp %>%
  count(minat_s2) %>%
  mutate(Persen = percent(n / sum(n), accuracy = 0.1)) %>%
  kable(caption  = "Tabel 3.1 — Distribusi Minat Melanjutkan Studi S2",
        col.names = c("Kategori Minat", "Frekuensi", "Persentase")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabel 3.1 — Distribusi Minat Melanjutkan Studi S2
Kategori Minat Frekuensi Persentase
Tidak Berminat 15 18.5%
Kurang Berminat 12 14.8%
Berminat 25 30.9%
Sangat Berminat 29 35.8%

4.4 Estimasi Model

fit_ordinal <- polr(
  minat_s2 ~ prestasi_belajar + kondisi_ekonomi +
             biaya_pendidikan + ekspektasi_kerja + perempuan,
  data   = data_unp,
  method = "logistic",
  Hess   = TRUE
)

summary(fit_ordinal)
## Call:
## polr(formula = minat_s2 ~ prestasi_belajar + kondisi_ekonomi + 
##     biaya_pendidikan + ekspektasi_kerja + perempuan, data = data_unp, 
##     Hess = TRUE, method = "logistic")
## 
## Coefficients:
##                       Value Std. Error t value
## prestasi_belajar    2.33882     1.0327  2.2647
## kondisi_ekonomi     1.02305     0.3028  3.3782
## biaya_pendidikan   -0.75612     0.2468 -3.0636
## ekspektasi_kerja    0.05634     0.3282  0.1717
## perempuanPerempuan  0.32613     0.4828  0.6754
## 
## Intercepts:
##                                Value   Std. Error t value
## Tidak Berminat|Kurang Berminat  7.9255  3.9679     1.9974
## Kurang Berminat|Berminat        8.9750  3.9914     2.2486
## Berminat|Sangat Berminat       10.6883  4.0428     2.6438
## 
## Residual Deviance: 183.9985 
## AIC: 199.9985

4.5 Tabel Parameter & Odds Ratio

ord_sum_mat <- coef(summary(fit_ordinal))

tabel_ordinal <- as.data.frame(ord_sum_mat) %>%
  rownames_to_column("Parameter") %>%
  rename(
    Koefisien = Value,
    Std_Error = `Std. Error`,
    t_hitung  = `t value`
  ) %>%
  mutate(
    p_value    = 2 * (1 - pnorm(abs(t_hitung))),
    Tipe       = ifelse(grepl("\\|", Parameter),
                        "Ambang Batas (Cutpoint)",
                        "Variabel Prediktor"),
    OR         = ifelse(Tipe == "Variabel Prediktor",
                        exp(Koefisien), NA_real_),
    CI_95_L    = ifelse(Tipe == "Variabel Prediktor",
                        exp(Koefisien - 1.96 * Std_Error), NA_real_),
    CI_95_U    = ifelse(Tipe == "Variabel Prediktor",
                        exp(Koefisien + 1.96 * Std_Error), NA_real_),
    Sig        = case_when(
      p_value < 0.001 ~ "***",
      p_value < 0.01  ~ "**",
      p_value < 0.05  ~ "*",
      p_value < 0.10  ~ ".",
      TRUE            ~ ""
    )
  )

tabel_ordinal %>%
  mutate(across(where(is.numeric), ~ round(.x, 4))) %>%
  kable(
    caption   = "Tabel 3.2 — Estimasi Parameter Regresi Logistik Ordinal (N = 81)",
    col.names = c("Parameter", "β", "SE", "t", "p-value",
                  "Tipe", "OR", "CI 2.5%", "CI 97.5%", "Sig")
  ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  row_spec(which(tabel_ordinal$Tipe == "Ambang Batas (Cutpoint)"),
           italic = TRUE, color = "#777777") %>%
  row_spec(which(tabel_ordinal$p_value < 0.05 &
                   tabel_ordinal$Tipe == "Variabel Prediktor"),
           background = "#eafaf1") %>%
  footnote(general = "Signifikansi: *** p<0.001, ** p<0.01, * p<0.05, . p<0.10")
Tabel 3.2 — Estimasi Parameter Regresi Logistik Ordinal (N = 81)
Parameter β SE t p-value Tipe OR CI 2.5% CI 97.5% Sig
prestasi_belajar 2.3388 1.0327 2.2647 0.0235 Variabel Prediktor 10.3690 1.3698 78.4900
kondisi_ekonomi 1.0230 0.3028 3.3782 0.0007 Variabel Prediktor 2.7817 1.5365 5.0360 ***
biaya_pendidikan -0.7561 0.2468 -3.0636 0.0022 Variabel Prediktor 0.4695 0.2894 0.7616 **
ekspektasi_kerja 0.0563 0.3282 0.1717 0.8637 Variabel Prediktor 1.0580 0.5561 2.0128
perempuanPerempuan 0.3261 0.4828 0.6754 0.4994 Variabel Prediktor 1.3856 0.5378 3.5698
Tidak Berminat&#124;Kurang Berminat 7.9255 3.9679 1.9974 0.0458 Ambang Batas (Cutpoint) NA NA NA
Kurang Berminat&#124;Berminat 8.9750 3.9914 2.2486 0.0245 Ambang Batas (Cutpoint) NA NA NA
Berminat&#124;Sangat Berminat 10.6883 4.0428 2.6438 0.0082 Ambang Batas (Cutpoint) NA NA NA **
Note:
Signifikansi: *** p<0.001, ** p<0.01, * p<0.05, . p<0.10

4.6 Interpretasi Hasil

Interpretasikan variabel yang signifikan menggunakan Odds Ratio (OR).

  • Koefisien positif menunjukkan peningkatan peluang responden berada pada kategori minat yang lebih tinggi.
  • Koefisien negatif menunjukkan penurunan peluang responden berada pada kategori minat yang lebih tinggi.

4.6.1 Kesimpulan Kasus

Regresi logistik ordinal menunjukkan faktor akademik, ekonomi, dan ekspektasi kerja dapat mempengaruhi minat mahasiswa untuk melanjutkan studi S2.

4.7 Visualisasi Probabilitas Kumulatif

grid_ord <- data.frame(
  prestasi_belajar = seq(2.0, 4.0, length.out = 100),
  kondisi_ekonomi  = round(mean(data_unp$kondisi_ekonomi)),
  biaya_pendidikan = round(mean(data_unp$biaya_pendidikan)),
  ekspektasi_kerja = round(mean(data_unp$ekspektasi_kerja)),
  perempuan        = "Perempuan"
)

pred_ord <- predict(fit_ordinal, newdata = grid_ord, type = "probs")

as.data.frame(pred_ord) %>%
  bind_cols(prestasi = grid_ord$prestasi_belajar) %>%
  pivot_longer(-prestasi, names_to = "Kategori", values_to = "Probabilitas") %>%
  mutate(Kategori = factor(Kategori,
                           levels = c("Tidak Berminat", "Kurang Berminat",
                                      "Berminat", "Sangat Berminat"))) %>%
  ggplot(aes(x = prestasi, y = Probabilitas, fill = Kategori)) +
  geom_area(alpha = 0.85, position = "stack") +
  scale_fill_manual(values = c("#e74c3c", "#f39c12", "#3498db", "#27ae60")) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  labs(
    title    = "Probabilitas Kategori Minat S2 berdasarkan Prestasi Belajar",
    subtitle = "Dikondisikan pada nilai rata-rata prediktor lainnya (mahasiswi perempuan)",
    x = "Prestasi Belajar (IPK)",
    y = "Probabilitas Terprediksi",
    fill = "Minat S2"
  ) +
  theme_adk() +
  theme(legend.position = "bottom")
Probabilitas Kumulatif Minat S2 berdasarkan IPK/Prestasi

Probabilitas Kumulatif Minat S2 berdasarkan IPK/Prestasi


5 Regresi Poisson

5.1 Landasan Teori

Regresi Poisson memodelkan data bilangan cacahan non-negatif (\(Y = 0, 1, 2, \ldots\)) dengan fungsi tautan log (log link):

\[\ln(\lambda) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k + \ln(\text{Offset})\]

Di mana \(\lambda = E(Y)\) adalah rata-rata (intensitas) kejadian. Syarat utama: \(E(Y) = \text{Var}(Y)\) (equidispersion). Koefisien diinterpretasikan melalui Incidence Rate Ratio (IRR) = \(e^{\hat{\beta}_j}\).

5.2 Studi Kasus

Pemodelan Frekuensi Kecelakaan Sepeda Motor di Jalan Nasional Kota Banda Aceh
27 Titik Pengamatan — LHR (Lintas Harian Rata-rata) sebagai offset

5.3 Input Data Empiris

data_aceh <- tibble(
  No           = 1:27,
  Y_Kecelakaan = c(2,5,4,2,3,1,3,4,2,1,3,2,1,0,1,1,0,0,1,4,2,1,5,3,2,2,1),
  X1_LHR       = c(32450,35120,31200,28900,33400,29500,41200,43500,39800,
                   38500,24500,26100,23800,18500,19200,16800,15400,14200,
                   15100,22400,24100,21500,27800,29100,26500,19800,20500),
  X2_Kecepatan = c(55,58,52,48,56,50,45,47,42,40,50,52,48,35,38,36,
                   34,32,35,48,50,46,54,56,51,40,42),
  X3_Lebar     = c(14,14,14,14,14,14,15,15,15,15,12,12,12,8,8,8,
                   8,9,9,11,11,11,13,13,13,10,10),
  X4_Median    = c(1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0)
) %>%
  mutate(X4_Median = factor(X4_Median, levels = c(0,1),
                            labels = c("Tanpa Median", "Ada Median")))

# Tampilkan data lengkap
data_aceh %>%
  kable(
    caption   = "Tabel 4.1 — Data Empiris 27 Titik Pengamatan Kecelakaan Banda Aceh",
    col.names = c("No", "Kecelakaan (Y)", "LHR (Offset)",
                  "Kecepatan (km/h)", "Lebar Jalan (m)", "Median Jalan")
  ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE)
Tabel 4.1 — Data Empiris 27 Titik Pengamatan Kecelakaan Banda Aceh
No Kecelakaan (Y) LHR (Offset) Kecepatan (km/h) Lebar Jalan (m) Median Jalan
1 2 32450 55 14 Ada Median
2 5 35120 58 14 Ada Median
3 4 31200 52 14 Ada Median
4 2 28900 48 14 Ada Median
5 3 33400 56 14 Ada Median
6 1 29500 50 14 Ada Median
7 3 41200 45 15 Ada Median
8 4 43500 47 15 Ada Median
9 2 39800 42 15 Ada Median
10 1 38500 40 15 Ada Median
11 3 24500 50 12 Ada Median
12 2 26100 52 12 Ada Median
13 1 23800 48 12 Ada Median
14 0 18500 35 8 Tanpa Median
15 1 19200 38 8 Tanpa Median
16 1 16800 36 8 Tanpa Median
17 0 15400 34 8 Tanpa Median
18 0 14200 32 9 Tanpa Median
19 1 15100 35 9 Tanpa Median
20 4 22400 48 11 Ada Median
21 2 24100 50 11 Ada Median
22 1 21500 46 11 Ada Median
23 5 27800 54 13 Ada Median
24 3 29100 56 13 Ada Median
25 2 26500 51 13 Ada Median
26 2 19800 40 10 Tanpa Median
27 1 20500 42 10 Tanpa Median
data_aceh %>%
  ggplot(aes(x = No, y = Y_Kecelakaan, fill = X4_Median)) +
  geom_col(width = 0.7) +
  scale_fill_manual(values = c("#e74c3c", "#2980b9")) +
  labs(
    title    = "Frekuensi Kecelakaan Motor per Titik Pengamatan",
    subtitle = "27 titik jalan nasional Kota Banda Aceh",
    x = "No. Titik Pengamatan", y = "Jumlah Kecelakaan",
    fill = "Median Jalan"
  ) +
  theme_adk() +
  theme(legend.position = "top")
Eksplorasi Data Kecelakaan — Frekuensi per Titik

Eksplorasi Data Kecelakaan — Frekuensi per Titik

5.4 Estimasi Model

fit_poisson <- glm(
  Y_Kecelakaan ~ X2_Kecepatan + X3_Lebar + X4_Median +
                 offset(log(X1_LHR)),
  data   = data_aceh,
  family = poisson(link = "log")
)

summary(fit_poisson)
## 
## Call:
## glm(formula = Y_Kecelakaan ~ X2_Kecepatan + X3_Lebar + X4_Median + 
##     offset(log(X1_LHR)), family = poisson(link = "log"), data = data_aceh)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)         -11.86580    1.56126  -7.600 2.96e-14 ***
## X2_Kecepatan          0.06038    0.02951   2.046   0.0407 *  
## X3_Lebar             -0.04857    0.11032  -0.440   0.6597    
## X4_MedianAda Median   0.11818    0.78646   0.150   0.8805    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 20.395  on 26  degrees of freedom
## Residual deviance: 12.472  on 23  degrees of freedom
## AIC: 83.493
## 
## Number of Fisher Scoring iterations: 5

5.5 Tabel Parameter & Incidence Rate Ratio

tabel_poisson <- as.data.frame(coef(summary(fit_poisson))) %>%
  rownames_to_column("Parameter") %>%
  rename(
    Koefisien = Estimate,
    Std_Error = `Std. Error`,
    z_hitung  = `z value`,
    p_value   = `Pr(>|z|)`
  ) %>%
  mutate(
    IRR              = exp(Koefisien),
    CI_95_L          = exp(Koefisien - 1.96 * Std_Error),
    CI_95_U          = exp(Koefisien + 1.96 * Std_Error),
    Perubahan_Persen = ifelse(
      Parameter != "(Intercept)",
      paste0(ifelse(IRR > 1, "+", ""), round(100 * (IRR - 1), 2), "%"),
      "—"
    ),
    Sig = case_when(
      p_value < 0.001 ~ "***",
      p_value < 0.01  ~ "**",
      p_value < 0.05  ~ "*",
      p_value < 0.10  ~ ".",
      TRUE            ~ ""
    )
  )

tabel_poisson %>%
  mutate(across(where(is.numeric), ~ round(.x, 4))) %>%
  kable(
    caption   = "Tabel 4.2 — Estimasi Parameter & IRR Model Regresi Poisson",
    col.names = c("Parameter", "β", "SE", "z", "p-value",
                  "IRR", "CI 2.5%", "CI 97.5%", "Δ%", "Sig")
  ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  row_spec(which(tabel_poisson$p_value < 0.05), background = "#eafaf1") %>%
  footnote(general = "IRR > 1 meningkatkan risiko; IRR < 1 menurunkan risiko kecelakaan. Signifikansi: *** p<0.001, ** p<0.01, * p<0.05")
Tabel 4.2 — Estimasi Parameter & IRR Model Regresi Poisson
Parameter β SE z p-value IRR CI 2.5% CI 97.5% Δ% Sig
(Intercept) -11.8658 1.5613 -7.6001 0.0000 0.0000 0.0000 0.0001 ***
X2_Kecepatan 0.0604 0.0295 2.0461 0.0407 1.0622 1.0025 1.1255 +6.22%
X3_Lebar -0.0486 0.1103 -0.4403 0.6597 0.9526 0.7674 1.1825 -4.74%
X4_MedianAda Median 0.1182 0.7865 0.1503 0.8805 1.1255 0.2409 5.2575 +12.55%
Note:
IRR > 1 meningkatkan risiko; IRR < 1 menurunkan risiko kecelakaan. Signifikansi: *** p<0.001, ** p<0.01, * p<0.05

5.6 Interpretasi Hasil

Gunakan nilai Incidence Rate Ratio (IRR) pada Tabel 4.2.

  • IRR > 1 berarti variabel meningkatkan jumlah kejadian kecelakaan.
  • IRR < 1 berarti variabel menurunkan jumlah kejadian kecelakaan.

5.6.1 Kesimpulan Kasus

Model Poisson digunakan untuk memodelkan jumlah kecelakaan. Hasil interpretasi IRR menunjukkan faktor jalan dan lalu lintas yang berpengaruh terhadap frekuensi kecelakaan.

5.7 Uji Diagnostik Overdispersi

# Pearson dispersion statistic
disp_stat <- sum(residuals(fit_poisson, type = "pearson")^2) / df.residual(fit_poisson)

tibble(
  `Statistik Dispersi Pearson` = round(disp_stat, 4),
  `Derajat Kebebasan`          = df.residual(fit_poisson),
  `Keputusan`                  = ifelse(
    disp_stat < 1.5,
    "✔  Aman — tidak terindikasi overdispersion berat",
    "⚠  Overdispersion terdeteksi → pertimbangkan model Binomial Negatif"
  )
) %>%
  kable(caption = "Tabel 4.3 — Diagnostik Overdispersion Pearson") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabel 4.3 — Diagnostik Overdispersion Pearson
Statistik Dispersi Pearson Derajat Kebebasan Keputusan
0.4964 23 ✔ Aman — tidak terindikasi overdispersion berat
par(mfrow = c(2, 2), bg = "#f9f9f9", mar = c(4,4,3,1))
plot(fit_poisson, which = c(1:4), col = "#2980b9", pch = 16, cex = 0.9)
Diagnostik Residual — Model Regresi Poisson

Diagnostik Residual — Model Regresi Poisson

par(mfrow = c(1, 1))

6 Ringkasan & Panduan Pemilihan Model

6.1 Perbandingan Keempat Model

tibble(
  No    = 1:4,
  Model = c("Regresi Logistik Biner",
            "Regresi Logistik Multinomial",
            "Regresi Logistik Ordinal",
            "Regresi Poisson"),
  `Tipe Variabel Dependen` = c(
    "Dikotomi (0/1, Ya/Tidak)",
    "Nominal > 2 kategori tanpa urutan",
    "Ordinal/berjenjang (skala Likert)",
    "Data cacahan non-negatif (0, 1, 2, ...)"
  ),
  `Fungsi Tautan` = c("logit", "logit (vs kategori acuan)",
                      "logit kumulatif", "log"),
  `Ukuran Efek` = c("Odds Ratio (OR)",
                    "Relative Risk Ratio (RRR)",
                    "Odds Ratio (OR) kumulatif",
                    "Incidence Rate Ratio (IRR)"),
  `Fungsi R` = c("glm(..., family = binomial)",
                 "nnet::multinom()",
                 "MASS::polr(..., method = 'logistic')",
                 "glm(..., family = poisson)"),
  `Studi Kasus` = c("Adopsi Teknologi Petani (N=30)",
                    "Moda Transportasi Malang (N=112)",
                    "Minat S2 Universitas Negeri Padang (N=81)",
                    "Kecelakaan Motor Banda Aceh (N=27)")
) %>%
  kable(caption = "Tabel 5.1 — Perbandingan Komprehensif Keempat Model GLM") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE) %>%
  column_spec(1, bold = TRUE, width = "3em") %>%
  column_spec(2, bold = TRUE, color = "#2c3e50")
Tabel 5.1 — Perbandingan Komprehensif Keempat Model GLM
No Model Tipe Variabel Dependen Fungsi Tautan Ukuran Efek Fungsi R Studi Kasus
1 Regresi Logistik Biner Dikotomi (0/1, Ya/Tidak) logit Odds Ratio (OR) glm(…, family = binomial) Adopsi Teknologi Petani (N=30)
2 Regresi Logistik Multinomial Nominal > 2 kategori tanpa urutan logit (vs kategori acuan) Relative Risk Ratio (RRR) nnet::multinom() Moda Transportasi Malang (N=112)
3 Regresi Logistik Ordinal Ordinal/berjenjang (skala Likert) logit kumulatif Odds Ratio (OR) kumulatif MASS::polr(…, method = ‘logistic’) Minat S2 Universitas Negeri Padang (N=81)
4 Regresi Poisson Data cacahan non-negatif (0, 1, 2, …) log Incidence Rate Ratio (IRR) glm(…, family = poisson) Kecelakaan Motor Banda Aceh (N=27)

6.2 Diagram Alir Pemilihan Model

Gunakan panduan berikut untuk memilih model yang tepat:

Variabel Dependen
       │
       ├─── Kualitatif ─────────────────────────────────┐
       │         │                                       │
       │    Berapa kategori?                             │
       │         │                                       │
       │    2 kategori ──► Regresi Logistik BINER        │
       │         │                                       │
       │    > 2 kategori                                 │
       │         │                                       │
       │    Ada urutan? ──Tidak──► Regresi MULTINOMIAL   │
       │         │                                       │
       │        Ya ──────────────► Regresi ORDINAL       │
       │                                                 │
       └─── Kuantitatif ────────────────────────────────┘
                 │
           Bilangan cacahan (0,1,2,...)?
                 │
                Ya ──────────────────────► Regresi POISSON
                 │                         (cek overdispersi!)
                Tidak
                 │
           Distribusi normal ──────────► Regresi Linear Biasa (OLS)

6.3 Catatan Penting

  1. Regresi Logistik Biner — Gunakan saat variabel dependen merupakan pilihan dikotomi simetris (Ya/Tidak, Lulus/Gagal, Adopsi/Tidak).
  2. Regresi Logistik Multinomial — Gunakan saat pilihan bersifat kategori acak bebas tanpa tingkatan (Motor/Mobil/Bus), dan tidak ada asumsi proporsi odds yang harus dipenuhi.
  3. Regresi Logistik Ordinal — Gunakan saat kategori memiliki tingkatan hierarki kualitatif eksplisit (Skala Likert, Tingkat Kepuasan). Uji asumsi proporsi odds (Brant Test) wajib dilakukan.
  4. Regresi Poisson — Gunakan saat respons berbentuk kuantitas cacahan murni (0,1,2,…). Selalu lakukan uji overdispersi; jika \(\hat{\phi} \gg 1\), pertimbangkan model Binomial Negatif (MASS::glm.nb()).

7 Kesimpulan Umum

Berdasarkan implementasi regresi logistik biner, multinomial, ordinal, dan Poisson, pemilihan model harus disesuaikan dengan karakteristik variabel dependen. Interpretasi utama dilakukan melalui Odds Ratio (OR), Relative Risk Ratio (RRR), dan Incidence Rate Ratio (IRR).

8 Informasi Sesi R

sessionInfo()
## R version 4.5.1 (2025-06-13 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=English_Indonesia.utf8  LC_CTYPE=English_Indonesia.utf8   
## [3] LC_MONETARY=English_Indonesia.utf8 LC_NUMERIC=C                      
## [5] LC_TIME=English_Indonesia.utf8    
## 
## time zone: Asia/Jakarta
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] pROC_1.19.0.1    MASS_7.3-65      nnet_7.3-20      scales_1.4.0    
##  [5] kableExtra_1.4.0 knitr_1.50       lubridate_1.9.4  forcats_1.0.0   
##  [9] stringr_1.5.1    dplyr_1.1.4      purrr_1.0.4      readr_2.1.5     
## [13] tidyr_1.3.1      tibble_3.2.1     ggplot2_4.0.2    tidyverse_2.0.0 
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.10        generics_0.1.4     xml2_1.4.0         stringi_1.8.7     
##  [5] hms_1.1.3          digest_0.6.37      magrittr_2.0.3     evaluate_1.0.5    
##  [9] grid_4.5.1         timechange_0.3.0   RColorBrewer_1.1-3 fastmap_1.2.0     
## [13] jsonlite_2.0.0     viridisLite_0.4.2  textshaping_1.0.3  jquerylib_0.1.4   
## [17] cli_3.6.5          rlang_1.1.6        withr_3.0.2        cachem_1.1.0      
## [21] yaml_2.3.10        tools_4.5.1        tzdb_0.5.0         vctrs_0.6.5       
## [25] R6_2.6.1           lifecycle_1.0.4    pkgconfig_2.0.3    pillar_1.10.2     
## [29] bslib_0.9.0        gtable_0.3.6       glue_1.8.0         Rcpp_1.0.14       
## [33] systemfonts_1.3.1  xfun_0.52          tidyselect_1.2.1   rstudioapi_0.17.1 
## [37] farver_2.1.2       htmltools_0.5.8.1  labeling_0.4.3     rmarkdown_2.29    
## [41] svglite_2.2.2      compiler_4.5.1     S7_0.2.1

Dokumen disiapkan oleh Algafuri Decembra Nawa · 2026-06-02
Dihasilkan dengan R Markdown — RPubs

9 Kesimpulan Akhir

Berdasarkan hasil analisis yang dilakukan, setiap model memiliki kegunaan yang berbeda sesuai tipe variabel respon. Regresi Logistik Biner digunakan untuk respons dua kategori, Regresi Logistik Multinomial untuk kategori nominal lebih dari dua, Regresi Logistik Ordinal untuk kategori yang memiliki tingkatan, dan Regresi Poisson untuk data cacahan.

Interpretasi parameter dilakukan menggunakan Odds Ratio (OR), Relative Risk Ratio (RRR), maupun Incidence Rate Ratio (IRR). Pemilihan model yang tepat sangat penting agar hasil analisis valid dan dapat digunakan sebagai dasar pengambilan keputusan.