Analisis Pengaruh Factor Akademik dan Keterlibatan Mahasiswa terhadap IPK Menggunakan Regresi Linear dan Regresi Logistic

Aldi ingin mengetahui apakah beberapa faktor terhadap performa mahasiswa di Universitas Zhejiang memiliki pengaruh pada hasil IPK mahasiswa. Berikut faktor atau variabel yang akan digunakan:

. X1: Nilai Ujian Tengah Semester (UTS) (skala 0-100)

. X2: Nilai Ujian Akhir Semester (UAS) (skala 0-100)

. X3: Jumlah Jam Belajar per Minggu (jam)

. X4: Status Ekonomi (1 = Rendah, 2 = Menengah, 3 = Tinggi)

. X5: Tingkat Keterlibatan dalam Kegiatan Organisasi (1 = Rendah, 2 = Sedang, 3 = Tinggi)

dari variabel tersebut akan dilakukan simulasi dengan membangkitkan data dari 50 mahasiswa yang kemudian akan di analisis menggunakan regresi linear dan regresi logistik

n <- 50 #jumlah mahasiswa
n
## [1] 50

Simulasi data

Berikut simulasi dari variabel-variabel menggunakan fungsi runif untuk menghasilkan bilangan acak daru distribusi uniform

#simulasi data
set.seed(123) # Mengatur seed untuk reproduktifitas
x1 = runif(n, 0, 100)  # UTS
x2 = runif(n, 0, 100)  # UAS
x3 = runif(n, 0, 100)  # Nilai proyek
x4 = sample(1:3, 50, replace = TRUE)  # Status Ekonomi
x5 = sample(1:4, 50, replace = TRUE)  # Keterlibatan Organisasi
data <- data.frame(x1, x2, x3, x4, x5) #menampilkan data simulasi dalam bentuk tabel
data
##           x1          x2        x3 x4 x5
## 1  28.757752  4.58311667 59.998896  3  3
## 2  78.830514 44.22000742 33.282354  2  4
## 3  40.897692 79.89248456 48.861303  3  2
## 4  88.301740 12.18992600 95.447383  1  1
## 5  94.046728 56.09479838 48.290240  3  1
## 6   4.555650 20.65313896 89.035022  3  2
## 7  52.810549 12.75316502 91.443819  3  3
## 8  89.241904 75.33078643 60.873498  1  1
## 9  55.143501 89.50453592 41.068978  3  2
## 10 45.661474 37.44627759 14.709469  3  2
## 11 95.683335 66.51151946 93.529980  2  1
## 12 45.333416  9.48406609 30.122890  2  4
## 13 67.757064 38.39696378  6.072057  2  4
## 14 57.263340 27.43836446 94.772694  3  4
## 15 10.292468 81.46400389 72.059627  3  2
## 16 89.982497 44.85163414 14.229430  3  4
## 17 24.608773 81.00643530 54.928466  2  1
## 18  4.205953 81.23895095 95.409124  1  1
## 19 32.792072 79.43423211 58.548335  2  2
## 20 95.450365 43.98316876 40.451028  1  1
## 21 88.953932 75.44751586 64.789348  3  4
## 22 69.280341 62.92211316 31.982062  3  3
## 23 64.050681 71.01824014 30.772001  2  1
## 24 99.426978  0.06247733 21.976763  1  1
## 25 65.570580 47.53165741 36.948887  3  4
## 26 70.853047 22.01188852 98.421920  1  4
## 27 54.406602 37.98165377 15.420230  3  2
## 28 59.414202 61.27710033  9.104400  2  1
## 29 28.915974 35.17979092 14.190691  2  4
## 30 14.711365 11.11354243 69.000710  1  2
## 31 96.302423 24.36194727 61.925648  3  1
## 32 90.229905 66.80555874 89.139412  2  1
## 33 69.070528 41.76467797 67.299909  1  1
## 34 79.546742 78.81958340 73.707774  3  3
## 35  2.461368 10.28646443 52.113573  3  3
## 36 47.779597 43.48927415 65.983845  3  2
## 37 75.845954 98.49569800 82.180546  1  1
## 38 21.640794 89.30511144 78.628155  2  4
## 39 31.818101 88.64690608 97.982192  2  2
## 40 23.162579 17.50526503 43.943154  1  4
## 41 14.280002 13.06956916 31.170220  2  3
## 42 41.454634 65.31019250 40.947495  3  2
## 43 41.372433 34.35164723  1.046711  3  3
## 44 36.884545 65.67581280 18.384952  1  2
## 45 15.244475 32.03732425 84.272932  2  3
## 46 13.880606 18.76911193 23.116178  1  1
## 47 23.303410 78.22943013 23.909996  2  1
## 48 46.596245  9.35949867  7.669117  3  1
## 49 26.597264 46.67790416 24.572368  3  1
## 50 85.782772 51.15054599 73.213521  1  3

Selanjutnya, membuat variabel baru IPK yang merupakan kombinasi linear dari variabel x1, x2, x3, x4, dan x5 dengan bobot tertentu. Selain itu, ditambahkan noise (gangguan acak) menggunakan fungsi rnorm dengan mean 0 dan standar deviasi 0.5. Hasilnya kemudian dibagi dengan 20 untuk menyesuaikan skala.

data$IPK <- (0.4 * data$x1 + 0.4 * data$x2 + 0.1 * data$x3 + 0.05 * data$x4 + 0.03 * data$x5 + rnorm(n, 0, 0.5)) / 20
data
##           x1          x2        x3 x4 x5       IPK
## 1  28.757752  4.58311667 59.998896  3  3 0.9543794
## 2  78.830514 44.22000742 33.282354  2  4 2.6541364
## 3  40.897692 79.89248456 48.861303  3  2 2.6685065
## 4  88.301740 12.18992600 95.447383  1  1 2.5006235
## 5  94.046728 56.09479838 48.290240  3  1 3.2259464
## 6   4.555650 20.65313896 89.035022  3  2 0.9409643
## 7  52.810549 12.75316502 91.443819  3  3 1.7738935
## 8  89.241904 75.33078643 60.873498  1  1 3.5810097
## 9  55.143501 89.50453592 41.068978  3  2 3.1198229
## 10 45.661474 37.44627759 14.709469  3  2 1.7142661
## 11 95.683335 66.51151946 93.529980  2  1 3.7474768
## 12 45.333416  9.48406609 30.122890  2  4 1.2805267
## 13 67.757064 38.39696378  6.072057  2  4 2.1329082
## 14 57.263340 27.43836446 94.772694  3  4 2.2023339
## 15 10.292468 81.46400389 72.059627  3  2 2.1472203
## 16 89.982497 44.85163414 14.229430  3  4 2.7966040
## 17 24.608773 81.00643530 54.928466  2  1 2.3922498
## 18  4.205953 81.23895095 95.409124  1  1 2.1299638
## 19 32.792072 79.43423211 58.548335  2  2 2.5447848
## 20 95.450365 43.98316876 40.451028  1  1 2.9927087
## 21 88.953932 75.44751586 64.789348  3  4 3.5855886
## 22 69.280341 62.92211316 31.982062  3  3 2.8372521
## 23 64.050681 71.01824014 30.772001  2  1 2.8438994
## 24 99.426978  0.06247733 21.976763  1  1 2.1303337
## 25 65.570580 47.53165741 36.948887  3  4 2.4468831
## 26 70.853047 22.01188852 98.421920  1  4 2.3713062
## 27 54.406602 37.98165377 15.420230  3  2 1.8896506
## 28 59.414202 61.27710033  9.104400  2  1 2.4205097
## 29 28.915974 35.17979092 14.190691  2  4 1.3981841
## 30 14.711365 11.11354243 69.000710  1  2 0.8528950
## 31 96.302423 24.36194727 61.925648  3  1 2.7561734
## 32 90.229905 66.80555874 89.139412  2  1 3.5924405
## 33 69.070528 41.76467797 67.299909  1  1 2.5662629
## 34 79.546742 78.81958340 73.707774  3  3 3.5981480
## 35  2.461368 10.28646443 52.113573  3  3 0.4980753
## 36 47.779597 43.48927415 65.983845  3  2 2.1469174
## 37 75.845954 98.49569800 82.180546  1  1 3.8934537
## 38 21.640794 89.30511144 78.628155  2  4 2.6159663
## 39 31.818101 88.64690608 97.982192  2  2 2.9150649
## 40 23.162579 17.50526503 43.943154  1  4 1.0876936
## 41 14.280002 13.06956916 31.170220  2  3 0.6877946
## 42 41.454634 65.31019250 40.947495  3  2 2.4054341
## 43 41.372433 34.35164723  1.046711  3  3 1.5265985
## 44 36.884545 65.67581280 18.384952  1  2 2.1730105
## 45 15.244475 32.03732425 84.272932  2  3 1.3548115
## 46 13.880606 18.76911193 23.116178  1  1 0.7600456
## 47 23.303410 78.22943013 23.909996  2  1 2.1763466
## 48 46.596245  9.35949867  7.669117  3  1 1.1139043
## 49 26.597264 46.67790416 24.572368  3  1 1.5963101
## 50 85.782772 51.15054599 73.213521  1  3 3.1016137
write.csv(data, "data_mahasiswazju.csv") #menyimpan data ke file csv

Regresi Linear

Model Regresi Linear

Membuat model regresi linear dengan IPK sebagai variabel dependen dan x1 hingga x5 sebagai variabel independen

model <- lm(IPK ~ x1 + x2 + x3 + x4 + x5, data = data)
summary(model)
## 
## Call:
## lm(formula = IPK ~ x1 + x2 + x3 + x4 + x5, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.05151 -0.01513  0.00097  0.01838  0.06689 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.0195333  0.0178399  -1.095   0.2795    
## x1           0.0202412  0.0001318 153.619   <2e-16 ***
## x2           0.0200334  0.0001454 137.787   <2e-16 ***
## x3           0.0050072  0.0001348  37.142   <2e-16 ***
## x4          -0.0030241  0.0048813  -0.620   0.5388    
## x5           0.0073197  0.0034611   2.115   0.0401 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.02691 on 44 degrees of freedom
## Multiple R-squared:  0.9992, Adjusted R-squared:  0.9991 
## F-statistic: 1.035e+04 on 5 and 44 DF,  p-value: < 2.2e-16

Berdasarkan hasil tersebut, dapat diketahui bahwa x1, x2, x3 memiliki hasil yang sangat signifikan kemudian untuk x5 cukup signifikan, karena untuk nilai p value < 0.05 maka koefisien dianggap signifikan secara statistik, sedangkan x4 memiliki p-value > 0.05 maka tidak signifikan secara statikstik.

Selain itu, model tersebut dapat dikatakan model yang baik karena memiliki nilai Multiple R-squared sebesar 0.9992 atau 99%

Regresi Logistik

Dalam regresi logistik, akan dibuat nilai IPK menjadi data biner yaitu dengan nilai diatas 2.5 akan dinyatakan lulus = 1, dan nilai dibawah 2.5 dinyatakan tidak lulus

data2 <- ifelse(data$IPK >= 2.5, 1, 0)
table(data2)
## data2
##  0  1 
## 29 21

Model Regresi Logistik

Selanjutnya, membuat model regresi logitik

logm <- glm(data2 ~ x1 + x2 + x3, family = binomial(link = "logit"), data = data)
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(logm)
## 
## Call:
## glm(formula = data2 ~ x1 + x2 + x3, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept)   -788.833 284021.861  -0.003    0.998
## x1               6.082   2201.003   0.003    0.998
## x2               6.166   2227.928   0.003    0.998
## x3               2.057    866.199   0.002    0.998
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 6.8029e+01  on 49  degrees of freedom
## Residual deviance: 1.4283e-08  on 46  degrees of freedom
## AIC: 8
## 
## Number of Fisher Scoring iterations: 25

Dari hasil tersebut, tidak ada yang memiliki signifikansi, sehingga dapat dikatakan bahwa tidak ada pengaruh yang kuat terhadap hasil IPK mahasiswa. Akan tetapi hal tersebut memiliki beberapa alasan, salah satunya bisa jadi karena memiliki nilai VIF yang tinggi (lebih dari 10) sehingga multikolineritas yang tinggi mempengaruhi signifikansi tersebut.

Menghitung VIF(Variance Inflation Factor)

Untuk mendeteksi multikolinearitas antar variabel independen dapat dilakukan dengan menggunakan fungsi VIF

library(car)
## Loading required package: carData
vif_values <- vif(logm)
print(vif_values)
##        x1        x2        x3 
## 28.694154 47.522158  6.691064

setelah menghitung VIF ternyata variabel x2 memiliki hasil yang cukup tinggi, dan x1 juga lumayan tinggi, sehingga selanjutnya akan dilakukan transformasi logistik untuk x3 yang memiliki nilai VIF <10

Membuat variabel transformasi logistik

Membuat variabel baru “x3log” yang merupakan transformasi logaritmik dari x3 untuk menghindari log 0

data$x3log <- log(data$x3 +1)

Membuat Model Regresi Logistik dengan Variabel Transformasi

membuat model regresi logistik dengan “data2” sebagai variabel dependen dan menggunakan “x3log” sebagai variabel independen karena memiliki nilai VIF <10

logm2 <- glm(data2 ~ x3log, family = binomial(link = "logit"), data = data)
summary(logm2)
## 
## Call:
## glm(formula = data2 ~ x3log, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept)  -4.5408     1.9718  -2.303   0.0213 *
## x3log         1.1065     0.4994   2.216   0.0267 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 68.029  on 49  degrees of freedom
## Residual deviance: 61.513  on 48  degrees of freedom
## AIC: 65.513
## 
## Number of Fisher Scoring iterations: 4

Ternyata, “x3log” memiliki p-value yang cukup signifikan terhadap “data2”, dengan nilai AIC 65,53, selanjutnya akan kita bandingkan model “logm2” dengan model yang menggunakan “x1” dan “x2log” sebagai variabel independen yaitu model “logm3”

Membuat Model Regresi Logistik dengan Dua Variabel

membuat model regresi logistik dengan data2 sebagai variabel dependen dan “x1”, “x3log” sebagai variabel independen.

logm3 <- glm(data2 ~ x1 + x3log, family = binomial(link = "logit"), data = data)
summary(logm3)
## 
## Call:
## glm(formula = data2 ~ x1 + x3log, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -9.12506    2.92504  -3.120 0.001811 ** 
## x1           0.06029    0.01636   3.686 0.000228 ***
## x3log        1.46483    0.66218   2.212 0.026957 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 68.029  on 49  degrees of freedom
## Residual deviance: 39.379  on 47  degrees of freedom
## AIC: 45.379
## 
## Number of Fisher Scoring iterations: 5

Ternyata, model “logm3” memiliki nilai AIC lebih rendah dibandingkan “logm2”. untuk nilai p-value pada “x1” juga memiliki nilai signifikansi yang lebih tinggi dibanding dengan “x3log”. Maka, model yang lebih baik digunakan yaitu model “logm3”.

Evaluasi Model dengan Confusion Matrix

# 1. Menghitung Prediksi
predictions <- predict(logm3, type = "response")

# 2. Menentukan Ambang Batas untuk Klasifikasi
predicted_classes <- ifelse(predictions > 0.5, 1, 0)

# 3. Mengubah predicted_classes menjadi faktor
predicted_classes <- factor(predicted_classes, levels = c(0, 1))

# 4. Evaluasi Model
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
confusionMatrix(predicted_classes, as.factor(data2))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 24  6
##          1  5 15
##                                           
##                Accuracy : 0.78            
##                  95% CI : (0.6404, 0.8847)
##     No Information Rate : 0.58            
##     P-Value [Acc > NIR] : 0.002479        
##                                           
##                   Kappa : 0.5455          
##                                           
##  Mcnemar's Test P-Value : 1.000000        
##                                           
##             Sensitivity : 0.8276          
##             Specificity : 0.7143          
##          Pos Pred Value : 0.8000          
##          Neg Pred Value : 0.7500          
##              Prevalence : 0.5800          
##          Detection Rate : 0.4800          
##    Detection Prevalence : 0.6000          
##       Balanced Accuracy : 0.7709          
##                                           
##        'Positive' Class : 0               
## 

confusion matrix yang menunjukkan hasil prediksi model dibandingkan dengan nilai aktual (referensi).

True Negatives (TN): 24 (model memprediksi 0 dan benar).

False Positives (FP): 6 (model memprediksi 1 tetapi sebenarnya 0).

False Negatives (FN): 5 (model memprediksi 0 tetapi sebenarnya 1).

True Positives (TP): 15 (model memprediksi 1 dan benar).

kemudian untuk akurasi model adalan 78% dari semua prediksi model adala benar dan confidence intervalnya sebesar 95% maka dapat diaykini bahwa akurasi model sebenarnya berada dalam rentan tersebut.

Visualisasi

ggplot(data, aes(x = x3log, y = data2)) +
  geom_point() +
  geom_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE)
## `geom_smooth()` using formula = 'y ~ x'

`