Dalam analisis data, sering kali kita tidak hanya ingin mengetahui hubungan antar variabel, tetapi juga ingin memprediksi suatu kejadian. Pada penelitian ini, kita ingin mengetahui faktor-faktor yang memengaruhi kelulusan mahasiswa.

X₁ = Jam belajar X₂ = Kehadiran (%) X₃ = Metode belajar (kategorik: 0 = offline, 1 = online) Y = Nilai ujian

Berbeda dengan regresi linear yang memprediksi nilai kontinu, pada kasus ini variabel dependen berbentuk kategori (lulus/tidak lulus), sehingga metode yang tepat digunakan adalah regresi logistik.

Persiapan Data

data <- read.csv("D:/Youtube/Regresi/Logistic Regression/logistic1.csv")

head(data)
##   X1 X2      X3           Y
## 1  6 85  Online Tidak Lulus
## 2 14 72 Offline       Lulus
## 3 10 90  Online       Lulus
## 4  8 76 Offline Tidak Lulus
## 5 15 88  Online       Lulus
## 6 12 70 Offline Tidak Lulus
# Encoding Data
Y <- ifelse(data$Y=="Lulus",1,0)
X1 <- data$X1
X2 <- data$X2
X3 <- as.factor(ifelse(data$X3 == "Offline", 0,1))

Pembentukan Model Regresi Logistik

Model dibentuk menggunakan fungsi glm() dengan family = binomial.

model_logit <- glm(Y ~ X1 + X2 + X3, family = binomial) 
summary(model_logit)
## 
## Call:
## glm(formula = Y ~ X1 + X2 + X3, family = binomial)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept) -96.4861    47.0112  -2.052   0.0401 *
## X1            1.9074     0.9783   1.950   0.0512 .
## X2            0.9692     0.4682   2.070   0.0385 *
## X31           0.4108     2.7413   0.150   0.8809  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 62.6869  on 49  degrees of freedom
## Residual deviance:  7.3864  on 46  degrees of freedom
## AIC: 15.386
## 
## Number of Fisher Scoring iterations: 10

Berdasarkan hasil estimasi model, diperoleh persamaan logit sebagai berikut:

\[ \ln \left(\frac{p}{1-p}\right) = -96.4861 + 1.9074X_1 + 0.9692X_2 + 0.4108X_3 \]

Interpretasi Koefisien: - X₁ (Jam Belajar) memiliki koefisien sebesar 1.9074 dengan nilai signifikansi 0.0512 (mendekati signifikan pada α = 5%). Artinya, peningkatan jam belajar cenderung meningkatkan peluang kelulusan mahasiswa.

Odds Ratio

exp(coef(model_logit))
##  (Intercept)           X1           X2          X31 
## 1.249144e-42 6.735230e+00 2.635716e+00 1.507986e+00

Nilai odds ratio diperoleh sebagai berikut:

Klasifikasi

data$prob <- predict(model_logit, type = "response") 
head(data[, c("X1","X2","X3","Y","prob")])
##   X1 X2      X3           Y        prob
## 1  6 85  Online Tidak Lulus 0.095085591
## 2 14 72 Offline       Lulus 0.498990969
## 3 10 90  Online       Lulus 0.999963644
## 4  8 76 Offline Tidak Lulus 0.000514640
## 5 15 88  Online       Lulus 0.999999982
## 6 12 70 Offline Tidak Lulus 0.003150465
data$pred_class <- ifelse(data$prob > 0.5, 1, 0) 

Kinerja Model

library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
confusionMatrix(as.factor(data$pred_class), as.factor(Y))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 15  1
##          1  1 33
##                                           
##                Accuracy : 0.96            
##                  95% CI : (0.8629, 0.9951)
##     No Information Rate : 0.68            
##     P-Value [Acc > NIR] : 1.249e-06       
##                                           
##                   Kappa : 0.9081          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9375          
##             Specificity : 0.9706          
##          Pos Pred Value : 0.9375          
##          Neg Pred Value : 0.9706          
##              Prevalence : 0.3200          
##          Detection Rate : 0.3000          
##    Detection Prevalence : 0.3200          
##       Balanced Accuracy : 0.9540          
##                                           
##        'Positive' Class : 0               
## 
  1. Accuracy = 0.96 (96%) Model mengklasifikasikan 96% data dengan benar (48 dari 50 observasi benar).

  2. Sensitivity = 0.9375 Artinya: Dari seluruh data yang benar-benar kelas 0, model berhasil menangkap 93,75%

  3. Specificity = 0.9706 Dari seluruh data yang kelas 1, model mampu mengenali 97,06% dengan benar

  4. F1 Score (≈ 0.9375) → model seimbang dan stabil

Goodness of Fit

library(DescTools) 
## 
## Attaching package: 'DescTools'
## The following objects are masked from 'package:caret':
## 
##     MAE, RMSE
PseudoR2(model_logit, which = "Nagelkerke")
## Nagelkerke 
##  0.9364083

Model mampu menjelaskan sekitar 93.64% variasi peluang kelulusan, yang menunjukkan bahwa model memiliki daya jelaskan yang sangat kuat.