LBB: Graduate Admission Regression Model


1. Pendahuluan

library(tidyverse)
library(caret)
library(plotly)
library(data.table)
library(GGally)
library(tidymodels)
library(car)
library(scales)
library(lmtest)
library(leaps)
library(MLmetrics)

options(scipen = 100, max.print = 1e+06)

Pada LBB (Learning by Building) ini akan dilakukan Regression Model menggunakan graduate admission dataset dari Indian Perspective yang saya download dari kaggle.com. Dataset ini memuat beberapa parameter penting yang digunakan dalam penerimaan mahasiswa/i baru pada program magister.

Dilakukan linear regression analysis yang akan membuat suatu model untuk memprediksi parameter mana saja yang paling berpengaruh dalam penerimaan program magister tersebut.

2. Mengimport Data

Hal paling pertama yang harus dilakukan adalah pastikan lokasi folder dataset yang ingin diinput sama dengan Rmd ini. Kemudian, lanjut dengan read dataset. File dataset yang digunakan yaitu admission.predict.csv.

admission <- read.csv("admission.predict.csv")

Dataset telah terbaca dan terinput dengan nama admission. Untuk mengetahui isi dataset tersebut, lakukan ke tahap selanjutnya yaitu dengan cara menginspeksi data.

3. Menginspeksi Data

head(admission)
dim (admission)
#> [1] 400   9

Terlihat bahwa data terdiri dari 400 baris dan 9 kolom. Kemudian, cek missing value apakah ada atau tidak

anyNA(admission)
#> [1] FALSE
colSums(is.na(admission))
#>        Serial.No.         GRE.Score       TOEFL.Score University.Rating 
#>                 0                 0                 0                 0 
#>               SOP               LOR              CGPA          Research 
#>                 0                 0                 0                 0 
#>   Chance.of.Admit 
#>                 0

Terlihat bahwa tidak ada missing value, sehingga data siap diolah ke tahap selanjutnya.

4. Mengolah Data

str(admission)
#> 'data.frame':    400 obs. of  9 variables:
#>  $ Serial.No.       : int  1 2 3 4 5 6 7 8 9 10 ...
#>  $ GRE.Score        : int  337 324 316 322 314 330 321 308 302 323 ...
#>  $ TOEFL.Score      : int  118 107 104 110 103 115 109 101 102 108 ...
#>  $ University.Rating: int  4 4 3 3 2 5 3 2 1 3 ...
#>  $ SOP              : num  4.5 4 3 3.5 2 4.5 3 3 2 3.5 ...
#>  $ LOR              : num  4.5 4.5 3.5 2.5 3 3 4 4 1.5 3 ...
#>  $ CGPA             : num  9.65 8.87 8 8.67 8.21 9.34 8.2 7.9 8 8.6 ...
#>  $ Research         : int  1 1 1 1 0 1 1 0 0 0 ...
#>  $ Chance.of.Admit  : num  0.92 0.76 0.72 0.8 0.65 0.9 0.75 0.68 0.5 0.45 ...

Hapus kolom yang tidak diperlukan

admission1 <- admission %>%
  select(-c(Serial.No., University.Rating, Research))

Kemudian, cek isi data yang baru apakah sudah sesuai dengan yang diharapkan

head(admission1)

Keterangan (dalam Bahasa Inggris) :

  • GRE.Score : atau Graduate Record Examinations` adalah tes standard yang menjadi syarat penerimaan mahasiswa baru program magister.

  • TOEFL.Score : Test of English as a Foreign Language is a standardized test to measure the English language ability of non-native speakers wishing to enroll in English-speaking universities

  • University.Rating : College and university rankings are rankings of institutions in higher education which have been ranked on the basis of various combinations of various factors

  • SOP : Reflection of your personality that you portray in front of the admission committee (Adcom) for getting enrolled in universities abroad

  • LOR : Document that provides the admission officers with a comprehensive insight into your suitable candidature, for admission into the concerned university.

  • CGPA: Academic performance from 0.00–4.00, calculated as an average of your GPA from all completed terms/semesters

  • Research: University that is committed to research as a central part of its mission. Some students has doing this when they hadn’t been into the college.

  • Change.of.Admit: Probability the student who has been submit their application is success enroll to the university

5. Exploratory Data Analysis

qqnorm(admission1$Chance.of.Admit)
qqline(admission1$Chance.of.Admit, col = 2)

Berdasarkan visualisasi tersebut dapat dilihat bahwa data berdistribusi normal, sehingga data tersebut sudah dapat dianalisis lebih lanjut.

Untuk melihat korelasi antar variabel, gunakan grafik Pearson correlation terhadap data:

ggcorr(admission1, label = TRUE, label_size = 2.9, hjust = 1, layout.exp = 2)

Pada grafik korelasi, terlihat bahwa semua variabel memiliki pengaruh positif terhadap Chance.od.Admit dimana faktor CGPA memiliki korelasi positif yang paling tinggi dibandingkan faktor-faktor lain.

6. Pembuatan Model

Untuk mengevaluasi model dan melihat kemampuannya memprediksi data baru, data dibagi menjadi 2 yaitu data train dan data test. Proses ini disebut dengan cross-validation.Tujuan dari cross validation adalah untuk mengetahui seberapa baik model yg sudah kita buat.

set.seed(123)
samplesize <- round(0.5 * nrow(admission1), 0)
index <- sample(seq_len(nrow(admission1)), size = samplesize)

data_train <- admission1[index, ]
data_test <- admission1[-index, ]

1. Regresi linear sederhana, yaitu model dengan satu variabel prediktor, dipilih prediktor CGPA.

lm_1 <- lm(Chance.of.Admit ~ CGPA, data = data_train)

2. Model linear regresi dengan lebih dari satu prediktor, dipilih CGPA dan TOEFL.Score

lm_2 <- lm(Chance.of.Admit ~ CGPA + TOEFL.Score , data = data_train)

3. Model linear regresi dengan menggunakan semua variable prediktor.

lm_all<- lm(Chance.of.Admit ~ ., data = data_train)

7. Prediksi Model

# simpan hasil prediksi ke kolom baru
data_train$pred_1 <- predict(object = lm_1, newdata = data_train)
data_train$pred_2 <- predict(object = lm_2, newdata = data_train)
data_train$pred_all <- predict(object = lm_all, newdata = data_train)
head(data_train)

R-squared

summary(lm_1)$r.squared
#> [1] 0.7405351
summary(lm_2)$adj.r.squared
#> [1] 0.7579057
summary(lm_all)$adj.r.squared
#> [1] 0.79003

Model terbaik berdasarkan R-squared nya yang paling besar yaitu lm_all (model dengan semua prediktor)

Error

RMSE(y_pred = data_train$pred_1, y_true = data_train$Chance.of.Admit)
#> [1] 0.06824583
RMSE(y_pred = data_train$pred_2, y_true = data_train$Chance.of.Admit)
#> [1] 0.06558969
RMSE(y_pred = data_train$pred_all, y_true = data_train$Chance.of.Admit)
#> [1] 0.06061635

Model terbaik berdasarkan RMSE nya yang paling kecil yaitu lm_all(model dengan semua prediktor)

8. Evaluasi Model

Normality of Residuals

Model linear regression diharapkan menghasilkan error yang berdistribusi normal.

hist(lm_all$residuals)

shapiro.test(lm_all$residuals)
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  lm_all$residuals
#> W = 0.9301, p-value = 0.00000003439

Kesimpulan: p-value < alpha (0.05), error berdistribusi tidak normal.

Homoscedasticity of Residuals

  1. Visualisasi scatter plot: fitted.values vs residuals
# scatter plot
plot(x = lm_all$fitted.values, y = lm_all$residuals)
abline(h = 0, col = "red") # garis horizontal di angka 0

  1. Uji statistik dengan bptest()
bptest(lm_all)
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  lm_all
#> BP = 9.0737, df = 5, p-value = 0.1062

Kesimpulan: p-value > alpha (0.05), homoscedasticity.

No Multicollinearity

summary(lm_all)$call
#> lm(formula = Chance.of.Admit ~ ., data = data_train)
vif(lm_all)
#>   GRE.Score TOEFL.Score         SOP         LOR        CGPA 
#>    3.432268    3.283045    2.849616    2.462080    4.107750

Kesimpulan: Semua VIF < 10, maka dari itu tidak terjadi multicollinearity.

9. Kesimpulan

Model lm_all (model dengan semua prediktor) adalah model yang lebih baik daripada model dengan 1 dan 2 prediktor. Model lm_all memiliki R-square 0.79003 dan memiliki RMSE sebesar 0.06061635. Setelah dilakukan uji analisis, model tersebut memiliki kriteria yang sudah baik kecuali nilai residual/error pada hasil prediksi tidak berdistribusi normal.

Berdasarkan model ini, dapat disimpulkan bahwa semua parameter yang menjadi prediktor (RE.Score, TOEFL Score, SOP, LOR, dan CGPA) berpengaruh dalam kesempatan diterimanya menjadi mahasiswa/i baru program magister tersebut.