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.
Model regresi logistik dinyatakan sebagai
\[ \log \left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_kX_k \]
dimana:
Data yang digunakan merupakan data simulasi dengan variabel:
Variabel respon:
Adiksi Game
0 = Tidak
1 = Ya
Tujuan penelitian ini:
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
## 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
##
## 0 1
## 495 105
##
## 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.
## 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.
## durasi_layar kontrol_diri stres_level kualitas_tidur jk
## 1.055141 1.039865 1.043749 1.009643 1.022694
## usia
## 1.010384
Interpretasi:
##
## 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.
## 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.
## # 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.
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.9 = sangat baik
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.