Berikut adalah analisis mengenai data Admission Predict bagi mahasiswa yang ingin melanjutkan pendidikannya ke tingkat Pascasarjana. Data ini menunjukan pengaruh beragam aspek penilaian dan skor yang dimiliki calon mahasiswa pascasarjana terhadap peluang masuknya ke univesitas yang di tuju.
Menggunakan linear regression analysis, akan dibuat suatu model untuk memprediksi faktor-faktor apa saja yang menjadikan besar atau kecilnya nilai peluang masuk mahasiswa terhadap universitas yang di tuju.
Siapkan Package yang dibutuhkan
Data Wrangling
library(tidyverse)
Cek asumsi model
library(lmtest)
library(car)
Menghitung error
library(MLmetrics)
Visualiasi Korelasi
library(GGally)
Load Dataset
data_admission <- read.csv("data_input/Admission_Predict_Ver1.1.csv")
head(data_admission)
Untuk memudahkan kita dalam melakukan analisis maka alangkah baiknya kita melakukan standarisasi penamaan kolom pada data.
colnames(data_admission) <- c("Serial_No", "GRE_Score", "TOEFL_Score", "University_Rating", "SOP", "LOR", "CGPA", "Research","Chance_Of_Admit")
head(data_admission)
#Menghapus kolom Serial_No
data_admission <- subset(data_admission, select = -c(Serial_No))
Sekarang nama kolom sudah di standarisasi.
glimpse(data_admission)
## Rows: 400
## Columns: 8
## $ 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~
Berikut adalah keterangan dari setiap kolom:
-GRE_Scores: Sebuah tes standar yang diambil agar dapat masuk ke program Pascasarjana.
-TOEFL_Scores: Nilai TOEFL dari calon Mahasiswa Pascasarjana.
-University_Rating: Rating yang dimiliki universitas.
-SOP: Scoring terhadap dokumen yang diperlukan untuk aplikasi lulusan. Pada dasarnya menjelaskan mengapa “Anda” mendaftar ke program / perguruan tinggi itu.
-LOR: Scoring terhadap dokumen yang diperlukan sebagai bagian dari aplikasi “Anda”, biasanya berupa endorse dari Professor, Mentor, atau manager untuk mendukung anda dalam program Pascasarjana.
-CGPA: Nilai yang digunakan setiap semester dalam mata kuliah.
-Research: Menjelaskan bangaimana pengalaman anda terhada sebuah penelitian.
-Chance_Of_Admit: Nilai peluang diterimanya ke program Pascasarjana.
# Menguji keberadaan missing value
anyNA(data_admission)
## [1] FALSE
table(is.na(data_admission))
##
## FALSE
## 3200
colSums(is.na(data_admission))
## GRE_Score TOEFL_Score University_Rating SOP
## 0 0 0 0
## LOR CGPA Research Chance_Of_Admit
## 0 0 0 0
Karena data ini tidak memiliki missing value maka kita bisa lanjut ke tahap selanjutnya.
Melihat korelasi antara variabel
ggcorr(data_admission, label = TRUE, label_size = 2.9, hjust = 1, layout.exp = 2)
Pada grafik korelasi, terlihat bahwa semua variabel memiliki pengaruh positif terhadap Chance_Of_Admit dimana faktor CGPA memiliki korelasi positif yang paling tinggi dibandingkan faktor-faktor lain.
Berikut adalah distribusi nilai dari masing-masing variabel.
boxplot(data_admission)
Berdasarkan visualisasi boxplot, tidak ditemukan outlier pada masing-masing kolom variabel dan data berdistribusi normal, sehingga data tersebut sudah dapat dianalisis lebih lanjut.
Selanjutnya dapat dibuat model regresi linear dengan variabel prediktor CGPA karena variabel tersebut memiliki korelasi positif tertinggi terhadap variabel target Chance_Of_Admit.
model_1 <- lm(Chance_Of_Admit ~ CGPA, data_admission)
model_1
##
## Call:
## lm(formula = Chance_Of_Admit ~ CGPA, data = data_admission)
##
## Coefficients:
## (Intercept) CGPA
## -1.0715 0.2088
summary(model_1)
##
## Call:
## lm(formula = Chance_Of_Admit ~ CGPA, data = data_admission)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.274575 -0.030084 0.009443 0.041954 0.180734
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.07151 0.05034 -21.29 <2e-16 ***
## CGPA 0.20885 0.00584 35.76 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06957 on 398 degrees of freedom
## Multiple R-squared: 0.7626, Adjusted R-squared: 0.762
## F-statistic: 1279 on 1 and 398 DF, p-value: < 2.2e-16
plot(data_admission$CGPA, data_admission$Chance_Of_Admit)
abline(model_1$coefficients[1],model_1$coefficients[2])
Dapat dilihat bahwa adjusted R-squared memiliki nilai 0.7626
Selanjutnya akan dicoba pemilihan variabel prediktor secara automatis menggunakan step-wise regression dengan direction both elimination.
model_none <- lm(Chance_Of_Admit ~ 1, data_admission)
model_full <- lm(Chance_Of_Admit ~ ., data_admission)
model_step <- stats::step(
model_none,
direction = "both",
scope = list(lower = model_none, upper = model_full)
)
## Start: AIC=-1557.12
## Chance_Of_Admit ~ 1
##
## Df Sum of Sq RSS AIC
## + CGPA 1 6.1885 1.9261 -2130.4
## + GRE_Score 1 5.2273 2.8873 -1968.5
## + TOEFL_Score 1 5.0848 3.0298 -1949.2
## + University_Rating 1 4.1050 4.0096 -1837.1
## + SOP 1 3.7053 4.4094 -1799.1
## + LOR 1 3.6414 4.4732 -1793.3
## + Research 1 2.4833 5.6313 -1701.2
## <none> 8.1146 -1557.1
##
## Step: AIC=-2130.38
## Chance_Of_Admit ~ CGPA
##
## Df Sum of Sq RSS AIC
## + GRE_Score 1 0.1496 1.7765 -2160.7
## + TOEFL_Score 1 0.1201 1.8060 -2154.1
## + Research 1 0.1063 1.8198 -2151.1
## + LOR 1 0.1054 1.8207 -2150.9
## + University_Rating 1 0.0646 1.8616 -2142.0
## + SOP 1 0.0396 1.8866 -2136.7
## <none> 1.9261 -2130.4
## - CGPA 1 6.1885 8.1146 -1557.1
##
## Step: AIC=-2160.72
## Chance_Of_Admit ~ CGPA + GRE_Score
##
## Df Sum of Sq RSS AIC
## + LOR 1 0.10591 1.6706 -2183.3
## + Research 1 0.04716 1.7294 -2169.5
## + University_Rating 1 0.04256 1.7340 -2168.4
## + TOEFL_Score 1 0.03477 1.7418 -2166.6
## + SOP 1 0.03399 1.7426 -2166.4
## <none> 1.7766 -2160.7
## - GRE_Score 1 0.14959 1.9261 -2130.4
## - CGPA 1 1.11077 2.8873 -1968.5
##
## Step: AIC=-2183.3
## Chance_Of_Admit ~ CGPA + GRE_Score + LOR
##
## Df Sum of Sq RSS AIC
## + Research 1 0.03688 1.6338 -2190.2
## + TOEFL_Score 1 0.03068 1.6400 -2188.7
## + University_Rating 1 0.01120 1.6594 -2184.0
## <none> 1.6706 -2183.3
## + SOP 1 0.00100 1.6696 -2181.5
## - LOR 1 0.10591 1.7766 -2160.7
## - GRE_Score 1 0.15006 1.8207 -2150.9
## - CGPA 1 0.63432 2.3049 -2056.6
##
## Step: AIC=-2190.23
## Chance_Of_Admit ~ CGPA + GRE_Score + LOR + Research
##
## Df Sum of Sq RSS AIC
## + TOEFL_Score 1 0.03292 1.6008 -2196.4
## + University_Rating 1 0.00951 1.6242 -2190.6
## <none> 1.6338 -2190.2
## + SOP 1 0.00025 1.6335 -2188.3
## - Research 1 0.03688 1.6706 -2183.3
## - GRE_Score 1 0.09534 1.7291 -2169.6
## - LOR 1 0.09563 1.7294 -2169.5
## - CGPA 1 0.62090 2.2547 -2063.4
##
## Step: AIC=-2196.38
## Chance_Of_Admit ~ CGPA + GRE_Score + LOR + Research + TOEFL_Score
##
## Df Sum of Sq RSS AIC
## <none> 1.6008 -2196.4
## + University_Rating 1 0.00464 1.5962 -2195.5
## + SOP 1 0.00024 1.6006 -2194.4
## - TOEFL_Score 1 0.03292 1.6338 -2190.2
## - GRE_Score 1 0.03638 1.6372 -2189.4
## - Research 1 0.03912 1.6400 -2188.7
## - LOR 1 0.09133 1.6922 -2176.2
## - CGPA 1 0.43201 2.0328 -2102.8
summary(model_step)
##
## Call:
## lm(formula = Chance_Of_Admit ~ CGPA + GRE_Score + LOR + Research +
## TOEFL_Score, data = data_admission)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.263542 -0.023297 0.009879 0.038078 0.159897
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2984636 0.1172905 -11.070 < 2e-16 ***
## CGPA 0.1210042 0.0117349 10.312 < 2e-16 ***
## GRE_Score 0.0017820 0.0005955 2.992 0.00294 **
## LOR 0.0227762 0.0048039 4.741 2.97e-06 ***
## Research 0.0245769 0.0079203 3.103 0.00205 **
## TOEFL_Score 0.0030320 0.0010651 2.847 0.00465 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06374 on 394 degrees of freedom
## Multiple R-squared: 0.8027, Adjusted R-squared: 0.8002
## F-statistic: 320.6 on 5 and 394 DF, p-value: < 2.2e-16
Metode step-wise regression ini akan menghasilkan formula optimum berdasarkan nilai AIC yang terendah, dimana semakin rendah nilai AIC tersebut, maka nilai observasi yang tidak tertangkap semakin kecil.
Bila dibandingkan dengan model awal yang hanya menggunakan variabel CGPA, model regresi yang menggunakan variabel CGPA + GRE_Score + LOR + Research + TOEFL_Score memiliki adjusted R-squared 0.8002. lebih tinggi dibandingkan model sebelumnya yaitu 0.7626.
Kandidat Model:
model_step = -1.29846 + 0.12100(CGPA) + 0.00178(GRE_Score) + 0.02277 (LOR) + 0.02457 (Research) + 0.00303 (TOEFL_Score)
model_1 = -1.07151 + 0.20885 (CGPA)
Akan dicoba prediksi nilai Chance_Of_Admit berdasarkan nilai variabel prediktor, dan hasilnya akan dibandingkan dengan data baru yang kita miliki.
# Kita akan coba load data baru yang akan di prediksi
data_new <- read.csv("data_input/Admission_new.csv")
# Warngling data_new
colnames(data_new) <- c("Serial_No", "GRE_Score", "TOEFL_Score", "University_Rating", "SOP", "LOR", "CGPA", "Research","Chance_Of_Admit")
data_new <- subset(data_new, select = -c(Serial_No))
# Kita cek missing value didata yang baru
anyNA(data_new)
## [1] FALSE
# Prediksi nilai Chance_Of_Admit berdasarkan model_1
pred_model_1 <- predict(model_1, newdata = data_new)
head(pred_model_1)
## 1 2 3 4 5 6
## 0.6452126 0.6702742 0.7955826 0.8561483 0.5240812 0.4844002
# Prediksi nilai Chance_Of_Admit berdasarkan model_step
pred_model_step <- predict(model_step, newdata = data_new)
head(pred_model_step)
## 1 2 3 4 5 6
## 0.6094465 0.6587289 0.7840743 0.8624693 0.5679589 0.5096773
# Mean Absolute Percentage Error pred_model_1
MAPE(pred_model_1, data_new$Chance_Of_Admit)
## [1] 0.05874096
# Mean Absolute Percentage Error pred_model_step
MAPE(pred_model_step, data_new$Chance_Of_Admit)
## [1] 0.05130283
Analisis penghitungan MAPE menghasilkan model pred_model_step memiliki nilai MAPE yang lebih kecil sehingga lebih baik dibandingkan model pred_model_1. Karena rata-rata error pred_model_step 5.13% lebih kecil dibanding dengan rata-rata error pada modelpred_model_1
Evaluasi model_step
hist(model_step$residuals)
plot(density(model_step$residuals))
shapiro.test(model_step$residuals)
##
## Shapiro-Wilk normality test
##
## data: model_step$residuals
## W = 0.92193, p-value = 1.443e-13
Evaluasi model_1
hist(model_1$residuals)
plot(density(model_1$residuals))
shapiro.test(model_1$residuals)
##
## Shapiro-Wilk normality test
##
## data: model_1$residuals
## W = 0.94782, p-value = 1.143e-10
Untuk kedua model, P-value < 0.05 sehingga menolak H0. Hal ini juga berarti residual tidak menyebar normal.
Evaluasi model_step
plot(data_admission$Chance_Of_Admit, model_step$residuals)
abline(h = 0, col = "red")
bptest(model_step)
##
## studentized Breusch-Pagan test
##
## data: model_step
## BP = 22.428, df = 5, p-value = 0.0004341
Evaluasi model_1
plot(data_admission$Chance_Of_Admit, model_1$residuals)
abline(h = 0, col = "red")
bptest(model_1)
##
## studentized Breusch-Pagan test
##
## data: model_1
## BP = 19.562, df = 1, p-value = 9.737e-06
Untuk kedua model, P-value < 0.05 sehingga menolak H0. error bersifat tidak konstan (Heteroscesdasticity).
vif(model_step)
## CGPA GRE_Score LOR Research TOEFL_Score
## 4.808767 4.585053 1.829491 1.530007 4.104255
untuk model model_1 yang hanya menggunakan satu variabel prediktor, tidak dapat digunakan vif() untuk analisis Multicollinearity
Tidak ada nilai sama dengan atau lebih dari 10 sehingga tidak ditemukan Multicollinearity antar variabel (antar variabel prediktor saling independen).
Model model_1 yang didapatkan memiliki R-square 0.7626 dan memiliki MAPE sebesar 0.0587 (5.87%).Sedangkan untuk model_step memiliki Adjusted R-squared 0.8002 dan memiliki MAPE sebesar 0.0513 (5.13%).
Setelah dilakukan uji asumsi ternyata dari kedua model tersebut tidak memenuhi uji asumsi Normality & uji Homocesdasticity. ini artinya data ini tidak cocok di lakukan prediksi dengan model regression model ini, dan mungkin cocok untuk model yang lainnya.
Dan jika ingin mencoba lagi mungkin kita bisa menambahkan jumlah data agar memberikan pola yang sesuai dengan yang diharapkan.