Introduction

Analisis regresi merupakan salah satu metode yang digunakan dalam melakukan prediksi model pada machine learning. Pada kesempatan kali ini dilaukan pemodelan regresi dari dataset yang berisi beberapa parameter yang dianggap penting selama aplikasi untuk penerimaan Program Magister dari prespektif negara India.

Beberapa parameter yang termasuk dalam dataset adalah:

GRE.Score : Skor Graduate Record Examination (GRE®) adalah sebuah tes standar yang diambil agar dapat masuk ke program Pascasarjana (S-2) GRE skor pada dataset memiliki skor dari 0 hingga 340

TOEFL.Score Skor TOEFL, TOEFL adalah ujian kemampuan berbahasa Inggris yang diperlukan untuk mendaftar masuk ke universitas di Amerika Serikat atau negara-negara lain di dunia, memili range dari 0 hingga 120

University.Rating Peringkat Universitas dari 0 sampai 5

LOR Letter of recommendation LOR atau disebut juga surat rekomendasi, juga dikenal sebagai surat referensi, surat referensi atau hanya referensi, adalah dokumen di mana penulis menilai kualitas, karakteristik, dan kemampuan orang yang direkomendasikan dalam hal kemampuan individu untuk melakukan tugas atau fungsi tertentu.Pernyataan tujuan dan kekuatan. Memiliki rentang nilai dari 0 sampai 5

CGPA CGPA (Culmulative Grade Point Average), IPK Sarjana yang memiliki rentang dari 0 sampai 10

Research Pengalaman Penelitian jika memiliki pengalaman penelitian bernilai 0 atau jika tidak memiliki pengalaman penelitian bernilai 1

Chance.of.Admit Peluang diterima dalam universitas (mulai dari 0 hingga 1)

Read Data

admission <- read.csv("Admission_Predict_Ver1.1.csv")
rmarkdown::paged_table(admission)
head(admission)
##   Serial.No. GRE.Score TOEFL.Score University.Rating SOP LOR CGPA Research
## 1          1       337         118                 4 4.5 4.5 9.65        1
## 2          2       324         107                 4 4.0 4.5 8.87        1
## 3          3       316         104                 3 3.0 3.5 8.00        1
## 4          4       322         110                 3 3.5 2.5 8.67        1
## 5          5       314         103                 2 2.0 3.0 8.21        0
## 6          6       330         115                 5 4.5 3.0 9.34        1
##   Chance.of.Admit
## 1            0.92
## 2            0.76
## 3            0.72
## 4            0.80
## 5            0.65
## 6            0.90

Exploratory data analysis

glimpse(admission)
## Rows: 500
## Columns: 9
## $ Serial.No.        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1~
## $ GRE.Score         <int> 337, 324, 316, 322, 314, 330, 321, 308, 302, 323, 32~
## $ TOEFL.Score       <int> 118, 107, 104, 110, 103, 115, 109, 101, 102, 108, 10~
## $ University.Rating <int> 4, 4, 3, 3, 2, 5, 3, 2, 1, 3, 3, 4, 4, 3, 3, 3, 3, 3~
## $ SOP               <dbl> 4.5, 4.0, 3.0, 3.5, 2.0, 4.5, 3.0, 3.0, 2.0, 3.5, 3.~
## $ LOR               <dbl> 4.5, 4.5, 3.5, 2.5, 3.0, 3.0, 4.0, 4.0, 1.5, 3.0, 4.~
## $ CGPA              <dbl> 9.65, 8.87, 8.00, 8.67, 8.21, 9.34, 8.20, 7.90, 8.00~
## $ Research          <int> 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1~
## $ Chance.of.Admit   <dbl> 0.92, 0.76, 0.72, 0.80, 0.65, 0.90, 0.75, 0.68, 0.50~
admission1 <- admission %>% 
  select(-Serial.No.)
admission1 <- admission1 %>% 
  mutate(Research = as.factor(Research))

head(admission1)
##   GRE.Score TOEFL.Score University.Rating SOP LOR CGPA Research Chance.of.Admit
## 1       337         118                 4 4.5 4.5 9.65        1            0.92
## 2       324         107                 4 4.0 4.5 8.87        1            0.76
## 3       316         104                 3 3.0 3.5 8.00        1            0.72
## 4       322         110                 3 3.5 2.5 8.67        1            0.80
## 5       314         103                 2 2.0 3.0 8.21        0            0.65
## 6       330         115                 5 4.5 3.0 9.34        1            0.90

Cek korelasi prediktor - target

library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
ggcorr(admission1, label = TRUE, hjust = 1, layout.exp = 3)
## Warning in ggcorr(admission1, label = TRUE, hjust = 1, layout.exp = 3): data in
## column(s) 'Research' are not numeric and were ignored

>Pada grafik korelasi, terlihat bahwa beberap variabel memiliki pengaruh positif dan negatif terhadap chance of admit dimana faktor CGPA memiliki korelasi positif yang paling tinggi dibandingkan faktor-faktor lain.

Cek persebaran data

Cek persebaran variable CGPA:

boxplot(admission1$CGPA)

median(admission1$CGPA)
## [1] 8.56

Modelling

Pembuatan model regresi linear untuk memprediksi chance of admit berdasarkan 1 variable paling potensial (berkorelasi paling kuat):

# buat model: 1 prediktor yaitu gdp
model_admit <- lm(Chance.of.Admit ~ CGPA, admission1)
#summary model
summary(model_admit)
## 
## Call:
## lm(formula = Chance.of.Admit ~ CGPA, data = admission1)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.276592 -0.028169  0.006619  0.038483  0.176961 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.04434    0.04230  -24.69   <2e-16 ***
## CGPA         0.20592    0.00492   41.85   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06647 on 498 degrees of freedom
## Multiple R-squared:  0.7787, Adjusted R-squared:  0.7782 
## F-statistic:  1752 on 1 and 498 DF,  p-value: < 2.2e-16

Insight dan interpretasi model variable prediktor menaikkan nilai target: kenaikan CGPA akan menaikkan Chance of Admit signifikansi prediktor: CGPA adalah variable yang signifikan r-squared: 0.7787 (Multiple R-squared)

Pembuatan model regresi menggunakan seluruh variabel

#pembuatan model
model_admit_all <- lm(Chance.of.Admit ~., admission1)

#summary model
summary(model_admit_all)
## 
## Call:
## lm(formula = Chance.of.Admit ~ ., data = admission1)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.266657 -0.023327  0.009191  0.033714  0.156818 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       -1.2757251  0.1042962 -12.232  < 2e-16 ***
## GRE.Score          0.0018585  0.0005023   3.700 0.000240 ***
## TOEFL.Score        0.0027780  0.0008724   3.184 0.001544 ** 
## University.Rating  0.0059414  0.0038019   1.563 0.118753    
## SOP                0.0015861  0.0045627   0.348 0.728263    
## LOR                0.0168587  0.0041379   4.074 5.38e-05 ***
## CGPA               0.1183851  0.0097051  12.198  < 2e-16 ***
## Research1          0.0243075  0.0066057   3.680 0.000259 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05999 on 492 degrees of freedom
## Multiple R-squared:  0.8219, Adjusted R-squared:  0.8194 
## F-statistic: 324.4 on 7 and 492 DF,  p-value: < 2.2e-16

Insight

signifikansi prediktor: terdapat beberapa prediktor yang signifikan yaitu:

  1. GRE score
  2. LOR
  3. CGPA
  4. Research
  5. Toefl score

r-squared: 0.8194 (adjusted r-squared)

Dari model seluruh prediktor mungkin dapat ditingkatkan kembali menggunakan beberapa variable yang signifikan dan yang berpengaruh baik ke model. Dicoba ditingkatkan pemilihan prediktornya menggunakan stepwise regression:

# membuat model menggunakan stepwise backward
model_admit_backward <-  step(object = model_admit_all,
                              direction = "backward",
                              trace = F)
#summary model
summary(model_admit_backward)
## 
## Call:
## lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + University.Rating + 
##     LOR + CGPA + Research, data = admission1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.26617 -0.02321  0.00946  0.03345  0.15713 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       -1.2800138  0.1034717 -12.371  < 2e-16 ***
## GRE.Score          0.0018528  0.0005016   3.694 0.000246 ***
## TOEFL.Score        0.0028072  0.0008676   3.236 0.001295 ** 
## University.Rating  0.0064279  0.0035318   1.820 0.069363 .  
## LOR                0.0172873  0.0039464   4.380 1.45e-05 ***
## CGPA               0.1189994  0.0095344  12.481  < 2e-16 ***
## Research1          0.0243538  0.0065985   3.691 0.000248 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05993 on 493 degrees of freedom
## Multiple R-squared:  0.8219, Adjusted R-squared:  0.8197 
## F-statistic: 379.1 on 6 and 493 DF,  p-value: < 2.2e-16

Insight - Melalui hasil pemodelan mengguakan metode step backward, didapatkan bahwa prediktor yang dapat digunakan untuk memprediksi chance of admit yaitu sebanyak 6 prediktor, dan prediktor yang paling signifikan yaitu GRE Score, LOR, CGPA, dan Research.

  • didapatkan nilai r-squared = 0.8197 (adjusted r-squared)

Prediction

pred_admission <- predict(model_admit, newdata = admission1)
pred_admission_all <- predict(model_admit_all, newdata = admission1)
pred_admission_step <- predict(model_admit_backward, newdata = admission1)

Bandingkan model evaluation

Bandingkan R-squared:

summary(model_admit)$r.square
## [1] 0.778652
summary(model_admit)$adj.r.square
## [1] 0.7782075
summary(model_admit_all)$r.square
## [1] 0.8219007
summary(model_admit_all)$adj.r.square
## [1] 0.8193668
summary(model_admit_backward)$r.square
## [1] 0.821857
summary(model_admit_backward)$adj.r.square
## [1] 0.8196889
library(MLmetrics)
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
## 
##     Recall
RMSE(y_pred = pred_admission, y_true = admission1$ Chance.of.Admit) 
## [1] 0.06633679
RMSE(y_pred = pred_admission_all, y_true = admission1$ Chance.of.Admit)
## [1] 0.05950421
RMSE(y_pred = pred_admission_step, y_true = admission1$ Chance.of.Admit)
## [1] 0.05951152

Insight: diketahui model_admit_all memiliki error paling kecil, namun tidak jauh berbeda errornya dengan model_admit_backward. Bila mementingkan efisiensi prediktor (jumlah prediktor yang digunakan), dapat memilih model_admit_backward, karena hanya menggunakan 6 prediktor sudah bisa menghasilkan error yang cenderung sama dengan model_admit_all.

Terpilih model_admit_backward.

Model harus dipastikan terlebih dahulu kembali, apakah memenuhi asumsi regresi linear. Bila asumsi terpenuhi kita dapat yakin bahwa model tersebut dapat digunakan dilapangan secara umum.

hist(model_admit_backward$residuals)

# uji asumsi dengan shapiro.test()
shapiro.test(model_admit_backward$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  model_admit_backward$residuals
## W = 0.92626, p-value = 5.868e-15

Note: dibandingkan p-value dengan alpha (0.05)

p-value >= 0.05 = terima H0 (gagal tolak H0) p-value < 0.05 = terima H1 (tolak H0)

Shapiro-Wilk hypothesis test:

  • H0: error/residual berdistribusi normal
  • H1: error/residual tidak berdistribusi normal

Diinginkan H0

Kesimpulan: error/residual berdistribusi tidak normal (H1), terima H1

Homoscedasticity

plot(model_admit_backward$fitted.values, model_admit_backward$residuals)
abline(h=0, col="red") # garis horizontal dititik 0 (h=0) berwarna merah (col="red")

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(model_admit_backward)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_admit_backward
## BP = 27.599, df = 6, p-value = 0.0001118

Breusch-Pagan hypothesis test:

H0: error menyebar konstan (Homoscedasticity) H1: error menyebar tidak konstan/membentuk pola (Heteroscedasticity) Diinginkan H0

Kesimpulan: error menyebar tidak konstan/membentuk pola (terjadi Hoeteroscedasticity), uji asumsi tidak terpenuhi

Multicollinearity

Multicollinearity adalah kondisi dimana ada korelasi antar prediktor yang amat kuat (hingga 1/-1). Hal ini menandakan ada variable redundan pada model, yang seharusnya dapat dipilih salah satu saja dari variable yang hubungannya amat kuat tersebut.

Harapannya tidak terjadi multicollinearity.

Uji VIF (Variance Inflation Factor) dengan fungsi vif() dari package car:

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:purrr':
## 
##     some
## The following object is masked from 'package:dplyr':
## 
##     recode
vif(model_admit_backward)
##         GRE.Score       TOEFL.Score University.Rating               LOR 
##          4.459541          3.867976          2.265898          1.853078 
##              CGPA          Research 
##          4.619554          1.493400

Penentuan:

  • nilai VIF > 10 : ada multicollinearity
  • nilai VIF < 10 : tidak ada multicollinearity

Diinginkan VIF < 10.

Kesimpulan: tidak ada multicollinearity, uji asumsi terpenuhi.

Conclusion

Telah dibuat model linear regression untuk memprediksi kesempatan diterima pada universitas (Chance.of.Admit) dari suatu negara . Model terpilih model_admit_backward menggunakan 6 variable prediktor dimana diantaranya terdapat nilai CGPA yang dapat meningkatkan Chance of admit sehingga peluang untuk diterima pada suatu universitas semakin besar.