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.
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.
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.
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
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.
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)# 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)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)
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)
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.
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 0bptest()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.
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.
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.