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)
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
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
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 variable CGPA:
boxplot(admission1$CGPA)
median(admission1$CGPA)
## [1] 8.56
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
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:
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.
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 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 normalH1: error/residual tidak berdistribusi normalDiinginkan H0
Kesimpulan: error/residual berdistribusi tidak normal (H1), terima H1
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 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:
Diinginkan VIF < 10.
Kesimpulan: tidak ada multicollinearity, uji asumsi terpenuhi.
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.