1 PENDAHULUAN

1.1 Latar Belakang

Regresi logistik merupakan metode statistik yang digunakan untuk menganalisis hubungan antara variabel dependen kategorik dengan variabel independen. Metode ini sering digunakan dalam penelitian kesehatan, sosial, dan ekonomi untuk memodelkan probabilitas kejadian.

1.2 Tinjauan Pustaka

Model regresi logistik dinyatakan sebagai

\[ \log \left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_kX_k \]

dimana:

  • \(p\) = probabilitas kejadian
  • \(X\) = variabel prediktor
  • \(\beta\) = parameter model

1.3 Data

Data yang digunakan merupakan data simulasi dengan variabel:

  • Durasi layar
  • Kontrol diri
  • Tingkat stres
  • Kualitas tidur
  • Jenis kelamin
  • Usia

Variabel respon:

Adiksi Game

0 = Tidak
1 = Ya

1.4 Tujuan

Tujuan penelitian ini:

  1. Membentuk model regresi logistik
  2. Menguji pengaruh variabel prediktor
  3. Menginterpretasikan odds ratio
  4. Mengevaluasi performa model

2 SOURCE CODE

2.1 Library

library(tidyverse)
library(car)
library(broom)
library(pROC)
library(ResourceSelection)
library(pscl)
library(logistf)

2.2 Impor Data

set.seed(123)

n <- 600

durasi_layar <- rnorm(n,5,1.5)
kontrol_diri <- rnorm(n,60,10)
stres_level <- rnorm(n,50,12)
kualitas_tidur <- rnorm(n,6,1.2)
jk <- rbinom(n,1,0.5)
usia <- rnorm(n,21,2)

logit <- -3 +
  0.5*durasi_layar -
  0.04*kontrol_diri +
  0.03*stres_level -
  0.3*kualitas_tidur +
  0.6*jk +
  0.05*usia

prob <- exp(logit)/(1+exp(logit))

adiksi <- rbinom(n,1,prob)

data <- data.frame(
adiksi,
durasi_layar,
kontrol_diri,
stres_level,
kualitas_tidur,
jk,
usia
)

head(data)
##   adiksi durasi_layar kontrol_diri stres_level kualitas_tidur jk     usia
## 1      0     4.159287     70.74012    57.43820       4.452763  0 16.98776
## 2      0     4.654734     59.72653    40.90988       5.214518  0 20.58835
## 3      1     7.338062     59.66670    60.21830       5.931211  0 17.70189
## 4      0     5.105763     44.83932    41.02484       7.508097  0 20.96938
## 5      0     5.193932     67.90385    57.56288       7.904945  0 19.21020
## 6      1     7.572597     57.89266    63.15994       6.383378  0 21.09264

2.3 Eksplorasi Data

summary(data)
##      adiksi       durasi_layar     kontrol_diri    stres_level   
##  Min.   :0.000   Min.   :0.7853   Min.   :33.98   Min.   :13.43  
##  1st Qu.:0.000   1st Qu.:4.1060   1st Qu.:53.12   1st Qu.:42.30  
##  Median :0.000   Median :5.0228   Median :60.03   Median :50.72  
##  Mean   :0.175   Mean   :5.0327   Mean   :60.22   Mean   :50.37  
##  3rd Qu.:0.000   3rd Qu.:6.0070   3rd Qu.:66.43   3rd Qu.:58.78  
##  Max.   :1.000   Max.   :9.8616   Max.   :91.84   Max.   :90.68  
##  kualitas_tidur        jk             usia      
##  Min.   :2.582   Min.   :0.000   Min.   :15.10  
##  1st Qu.:5.213   1st Qu.:0.000   1st Qu.:19.69  
##  Median :5.944   Median :0.000   Median :20.80  
##  Mean   :5.971   Mean   :0.475   Mean   :20.99  
##  3rd Qu.:6.784   3rd Qu.:1.000   3rd Qu.:22.30  
##  Max.   :9.627   Max.   :1.000   Max.   :27.84
table(data$adiksi)
## 
##   0   1 
## 495 105

3 HASIL DAN PEMBAHASAN

3.1 Model Regresi Logistik

model <- glm(adiksi ~ ., data=data, family=binomial)

summary(model)
## 
## Call:
## glm(formula = adiksi ~ ., family = binomial, data = data)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -4.78759    1.71671  -2.789 0.005290 ** 
## durasi_layar    0.60110    0.09113   6.596 4.22e-11 ***
## kontrol_diri   -0.05264    0.01242  -4.239 2.25e-05 ***
## stres_level     0.03494    0.01048   3.333 0.000860 ***
## kualitas_tidur -0.21146    0.10059  -2.102 0.035528 *  
## jk              0.95595    0.24595   3.887 0.000102 ***
## usia            0.09563    0.05708   1.675 0.093881 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 556.47  on 599  degrees of freedom
## Residual deviance: 457.35  on 593  degrees of freedom
## AIC: 471.35
## 
## Number of Fisher Scoring iterations: 5

Model logit yang terbentuk:

\[ logit(p) = \beta_0 + \beta_1X_1 + ... + \beta_kX_k \]

Koefisien menunjukkan arah pengaruh variabel terhadap probabilitas kejadian.


3.2 Uji Parsial (Wald Test)

summary(model)$coefficients
##                   Estimate Std. Error   z value     Pr(>|z|)
## (Intercept)    -4.78758598 1.71671134 -2.788812 5.290169e-03
## durasi_layar    0.60109756 0.09112923  6.596101 4.221122e-11
## kontrol_diri   -0.05264410 0.01241908 -4.238970 2.245479e-05
## stres_level     0.03494048 0.01048378  3.332812 8.597307e-04
## kualitas_tidur -0.21146353 0.10058726 -2.102289 3.552793e-02
## jk              0.95595454 0.24594792  3.886817 1.015673e-04
## usia            0.09563252 0.05708483  1.675270 9.388121e-02

interpretasi:

Jika p-value < 0.05 maka variabel signifikan.


3.3 Multikolinearitas

vif(model)
##   durasi_layar   kontrol_diri    stres_level kualitas_tidur             jk 
##       1.055141       1.039865       1.043749       1.009643       1.022694 
##           usia 
##       1.010384

Interpretasi:

  • VIF < 5 → aman
  • VIF > 10 → multikolinearitas tinggi

3.4 Goodness of Fit

hoslem.test(data$adiksi, fitted(model))
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  data$adiksi, fitted(model)
## X-squared = 3.3845, df = 8, p-value = 0.908

Interpretasi:

p-value > 0.05 → model fit dengan data.


3.5 Pseudo R-Squared

pR2(model)
## fitting null model for pseudo-r2
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
## -228.6730451 -278.2358639   99.1256376    0.1781324    0.1522838    0.2519420

Pseudo R² menunjukkan kemampuan model menjelaskan variasi data.


3.6 Odds Ratio

or <- tidy(model, exponentiate=TRUE, conf.int=TRUE)

or
## # A tibble: 7 × 7
##   term           estimate std.error statistic  p.value conf.low conf.high
##   <chr>             <dbl>     <dbl>     <dbl>    <dbl>    <dbl>     <dbl>
## 1 (Intercept)     0.00833    1.72       -2.79 5.29e- 3 0.000275     0.233
## 2 durasi_layar    1.82       0.0911      6.60 4.22e-11 1.53         2.19 
## 3 kontrol_diri    0.949      0.0124     -4.24 2.25e- 5 0.925        0.972
## 4 stres_level     1.04       0.0105      3.33 8.60e- 4 1.01         1.06 
## 5 kualitas_tidur  0.809      0.101      -2.10 3.55e- 2 0.663        0.984
## 6 jk              2.60       0.246       3.89 1.02e- 4 1.62         4.25 
## 7 usia            1.10       0.0571      1.68 9.39e- 2 0.984        1.23

Odds Ratio menunjukkan perubahan peluang akibat perubahan satu unit variabel prediktor.


3.7 ROC Curve dan AUC

prob_pred <- predict(model, type="response")

roc_obj <- roc(data$adiksi, prob_pred)

plot(
roc_obj,
main=paste("ROC Curve (AUC =", round(auc(roc_obj),3),")"),
col="blue",
lwd=3
)

abline(a=0,b=1,lty=2,col="red")

Interpretasi AUC:

  • 0.5 = random
  • 0.7 – 0.8 = cukup
  • 0.8 – 0.9 = baik
  • 0.9 = sangat baik


3.8 Diagnostik Outlier

plot(model, which=4)

Cook’s Distance digunakan untuk mendeteksi observasi yang memiliki pengaruh besar terhadap model.


4 KESIMPULAN

Berdasarkan hasil analisis regresi logistik, diperoleh model yang mampu menjelaskan hubungan antara variabel prediktor dengan variabel respon. Beberapa variabel menunjukkan pengaruh signifikan terhadap probabilitas kejadian adiksi. Evaluasi model menggunakan uji goodness-of-fit, pseudo R², serta ROC menunjukkan bahwa model memiliki performa yang cukup baik.