Pada kesempatan kali ini, akan dilakukan analisis terhadap faktor-faktor yang mempengaruhi penerimaan mahasiswa pasca sarjana (magister) di India. Analisis selanjutnya akan dilanjutkan dengan membuat sebuah model untuk memprediksi peluang seorang mahasiswa diterima berdasarkan nilai-nilai yang dimilikinya.
Data yang akan digunakan adalah data mengenai nilai-nilai dari calon mahasiswa pasca sarjana yang disediakan oleh Mohan S Acharya yang dipublikasikan di kaggle
Import Library
Beberapa library yang akan digunakan dalam analisis dan pembuatan model kali ini antara lain: tidyverse, GGally, MLmetrics, car, lmtest, dan inspectdf
library(tidyverse) # untuk persiapan dan pemrosesan data (data wrangling)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.2 v dplyr 1.0.7
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 2.0.0 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(GGally) # untuk melihat korelasi antar variabel secara visual
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(performance) # untuk mengetahui performa model
library(MLmetrics) # untuk mengetahui performa model
## Warning: package 'MLmetrics' was built under R version 4.1.1
##
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
##
## Recall
library(lmtest) # untuk mengevaluasi model
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car) # untuk mengevaluasi model
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
Memuat Dataset (Load Dataset)
= read_csv("Admission_Predict_Ver1.1.csv") df
## Rows: 500 Columns: 9
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (9): Serial No., GRE Score, TOEFL Score, University Rating, SOP, LOR, CG...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
Eksplorasi Data (Explanatory Data Analysis)
Pertama, kita lihat terlebih dahulu struktur data kita
glimpse(df)
## Rows: 500
## Columns: 9
## $ `Serial No.` <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,~
## $ `GRE Score` <dbl> 337, 324, 316, 322, 314, 330, 321, 308, 302, 323, ~
## $ `TOEFL Score` <dbl> 118, 107, 104, 110, 103, 115, 109, 101, 102, 108, ~
## $ `University Rating` <dbl> 4, 4, 3, 3, 2, 5, 3, 2, 1, 3, 3, 4, 4, 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, ~
## $ LOR <dbl> 4.5, 4.5, 3.5, 2.5, 3.0, 3.0, 4.0, 4.0, 1.5, 3.0, ~
## $ CGPA <dbl> 9.65, 8.87, 8.00, 8.67, 8.21, 9.34, 8.20, 7.90, 8.~
## $ Research <dbl> 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0,~
## $ `Chance of Admit` <dbl> 0.92, 0.76, 0.72, 0.80, 0.65, 0.90, 0.75, 0.68, 0.~
Data yang akan digunakan terdiri dari 500 obrservasi (baris) dan 9 variabel (kolom), dimana keterangan dari setiap kolom adalah sebagai beirkut:
Serial No
: no urut (index) dari setiap observasiGRE Score
: nilai GRE (skala 0-340)TOEFL Score
: nilai TOEFL (maksimal 0-120)University Rating
: peringkat universitasSOP
: kekuatan dari surat pernyataan (skala 0-5)LOR
: kekuatan dari surat rekomendasi (skala 0-5)CGPA
: indeks prestasi kumulatif (IPK) saat sarjana (0-10)Research
: ada atau tidaknya pengalaman penelitianChance of Admit
: peluang mahasiswa untuk diterima di program pasca sarjana
Berdasarkan informasi diatas, kolom Serial No
hanyalah index baris, kolom ini tidak memiliki makna lebih dalam dataset, sehingga kolom tersebut akan dibuang untuk analisis selanjutnya.
Dilihat dari tipe datanya, semua kolom sudah mempunyai tipe data sesuai dengan formatnya, kecuali untuk kolom Research
. Kolom tersebut berisi data kategori, sehingga kita perlu mengubah tipe datanya ke dalam kategori.
<-
df %>%
df select(-`Serial No.`)
Selanjutnya akan dicek apakah ada data yang hilang atau kosong (missing value) pada dataset
colSums(is.na(df))
## GRE Score TOEFL Score University Rating SOP
## 0 0 0 0
## LOR CGPA Research Chance of Admit
## 0 0 0 0
Terlihat bahwa tidak ada data yang hilang atau kosong pada dataset
Adapun, sebaran data dalam dataset adalah sebagai berikut
boxplot(df)
Terlihat bahwa terdapat outlier pada kolom LOR
dan Chance of Admit
. Data outlier akan diamati apakah termasuk high influence atau tidak.
Untuk pemilihan variabel prediktor, terlebih dahulu akan dilihat korelasi setiap calon variabel prediktor dengan variabel target (Chance of Admit). Adapun hubungan dari setiap variabel tersebut adalah sebagai berikut
ggcorr(df, label = T, label_size = 2.9, hjust = 1, layout.exp = 2)
Dari grafik tersebut, terlihat bahwa semua variabel memiliki pengaruh yang positif terhadap Chance of Admit
. Semua variabel memiliki hubungan yang kuat dengan Chance of Admit
(nilai korelasi diatas 0,5) kecuali Research
. Oleh sebab itu, semua variabel akan digunakan sebagai variabel prediktor, kecuali Research
Pembuatan Model
Model yang akan digunakan dalam analisis ini adalah regresi linear dengan variabel target Chance_of_Admit, dan variabel preditkornya variabel yang memiliki hubungan kuat, yaitu:GRE Score
, TOEFL Score
, University Rating
, SOP
, LOR
, dan CGPA
<- lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` + `University Rating` + SOP + LOR + CGPA, data = df)
rm summary(rm)
##
## Call:
## lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` +
## `University Rating` + SOP + LOR + CGPA, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.283162 -0.022545 0.007653 0.034545 0.156627
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.4267753 0.0970903 -14.695 < 2e-16 ***
## `GRE Score` 0.0023869 0.0004874 4.897 1.32e-06 ***
## `TOEFL Score` 0.0026246 0.0008824 2.974 0.00308 **
## `University Rating` 0.0067158 0.0038440 1.747 0.08124 .
## SOP 0.0019248 0.0046194 0.417 0.67710
## LOR 0.0177001 0.0041837 4.231 2.78e-05 ***
## CGPA 0.1192486 0.0098249 12.137 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06074 on 493 degrees of freedom
## Multiple R-squared: 0.817, Adjusted R-squared: 0.8148
## F-statistic: 366.8 on 6 and 493 DF, p-value: < 2.2e-16
Dapat dilihat bahwa adjusted R-squared memiliki nilai 0.8148, yang berarti model mampu menangkap informasi hingga 81,48% dari data yang tersedia.
Selanjutnya akan coba dilakukan pemilihan variabel prediktor (feature selection) secara otomatis menggunakan step-wise regression dengan metode backward elimination.
<- lm(formula = `Chance of Admit` ~ ., data = df)
rm_auto step(object = rm_auto, direction = "backward", trace = T)
## Start: AIC=-2805.71
## `Chance of Admit` ~ `GRE Score` + `TOEFL Score` + `University Rating` +
## SOP + LOR + CGPA + Research
##
## Df Sum of Sq RSS AIC
## - SOP 1 0.00043 1.7708 -2807.6
## <none> 1.7704 -2805.7
## - `University Rating` 1 0.00879 1.7792 -2805.2
## - `TOEFL Score` 1 0.03648 1.8069 -2797.5
## - Research 1 0.04872 1.8191 -2794.1
## - `GRE Score` 1 0.04926 1.8196 -2794.0
## - LOR 1 0.05973 1.8301 -2791.1
## - CGPA 1 0.53542 2.3058 -2675.6
##
## Step: AIC=-2807.59
## `Chance of Admit` ~ `GRE Score` + `TOEFL Score` + `University Rating` +
## LOR + CGPA + Research
##
## Df Sum of Sq RSS AIC
## <none> 1.7708 -2807.6
## - `University Rating` 1 0.01190 1.7827 -2806.2
## - `TOEFL Score` 1 0.03760 1.8084 -2799.1
## - Research 1 0.04893 1.8197 -2796.0
## - `GRE Score` 1 0.04901 1.8198 -2795.9
## - LOR 1 0.06892 1.8397 -2790.5
## - CGPA 1 0.55954 2.3304 -2672.3
##
## Call:
## lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` +
## `University Rating` + LOR + CGPA + Research, data = df)
##
## Coefficients:
## (Intercept) `GRE Score` `TOEFL Score`
## -1.280014 0.001853 0.002807
## `University Rating` LOR CGPA
## 0.006428 0.017287 0.118999
## Research
## 0.024354
Metode step-wise regression ini akan menghasilkan formula optimum berdasarkan nilai Akaike Information Criterion (AIC) atau information loss terkecil, yang berarti dimana semakin kecil nilai AIC, maka nilai observasi yang tidak tertangkap pun semakin kecil.
Berdasarkan step-wise regression diatas, variabel yang menghasilkan AIC terkecil adalah University Rating
, TOEFL Score
, Research
, GRE Score
, LOR
, dan CGPA
. Variabel-variabel hasil step-wise regression ini selanjutnya akan dimasukkan ke dalam model kedua.
<- lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` + `University Rating` + LOR + CGPA + Research,
rm_auto data = df)
summary(rm_auto)
##
## Call:
## lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` +
## `University Rating` + LOR + CGPA + Research, data = df)
##
## 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 ***
## Research 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
Sekarang sudah tersedia dua model, yaitu rm
yang variabelnya dipilih secara manual, dan rm_auto
yang variabelnya dipilih dari hasil step-wise. Perbandingan performa dari keduanya adalah sebagai berikut:
compare_performance(rm, rm_auto)
## # Comparison of Model Performance Indices
##
## Name | Model | AIC | BIC | R2 | R2 (adj.) | RMSE | Sigma
## ---------------------------------------------------------------------------
## rm | lm | -1373.195 | -1339.478 | 0.817 | 0.815 | 0.060 | 0.061
## rm_auto | lm | -1386.647 | -1352.930 | 0.822 | 0.820 | 0.060 | 0.060
Performa yang menjadi acuan pada pembuatan model kali ini adalah adjusted R-squared Berdasarkan nilai adjusted R-squared model rm_auto
memiliki nilai yang lebih tinggi. Oleh sebab itu, model ini yang akan dipilih untuk prediksi peluang nilai diterimanya calon mahasiswa pasca sarjana
Sekarang akan dicoba untuk membuat model baru dari model terpilih dengan menghilangkan data outlier pada kolom pada LOR untuk mengetahui apakah data outlier pada dataset merupakah high influence atau tidak.
# mencari nilai Q1, Q3, dan IQR kolom LOR
<- quantile(df$LOR, probs = 0.25)
q1_LOR <- quantile(df$LOR, probs = 0.75)
q3_LOR <- IQR(df$LOR)
iqr_LOR
# mencari nilai Q1, Q3, dan IQR kolom Chance of Admit
<- quantile(df$`Chance of Admit`, probs = 0.25)
q1_CoA <- quantile(df$`Chance of Admit`, probs = 0.75)
q3_CoA <- IQR(df$`Chance of Admit`)
iqr_CoA
# membuang obervasi yang memiliki outlier pada kolom LOR dan Chance of Admit
<-
df_clean %>%
df filter(LOR >= (q1_LOR - iqr_LOR),
<= (q3_LOR + iqr_LOR),
LOR `Chance of Admit` >= (q1_CoA - iqr_CoA),
`Chance of Admit` <= (q3_CoA + iqr_CoA))
# visualisasi sebaran data (memastikan tidak ada outlier)
boxplot(df_clean)
Selanjutnya, akan dibuat model dari dataset yang telah dihilangkan outlier nya
<- lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` + `University Rating` + LOR + CGPA + Research,
rm_clean data = df_clean)
summary(rm_clean)
##
## Call:
## lm(formula = `Chance of Admit` ~ `GRE Score` + `TOEFL Score` +
## `University Rating` + LOR + CGPA + Research, data = df_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.269989 -0.021632 0.008707 0.032296 0.141112
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.1265780 0.0980935 -11.485 < 2e-16 ***
## `GRE Score` 0.0017182 0.0004669 3.680 0.000261 ***
## `TOEFL Score` 0.0024184 0.0008169 2.960 0.003229 **
## `University Rating` 0.0092888 0.0032913 2.822 0.004972 **
## LOR 0.0141656 0.0038079 3.720 0.000223 ***
## CGPA 0.1116333 0.0090430 12.345 < 2e-16 ***
## Research 0.0257244 0.0062486 4.117 4.54e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05473 on 468 degrees of freedom
## Multiple R-squared: 0.8221, Adjusted R-squared: 0.8198
## F-statistic: 360.4 on 6 and 468 DF, p-value: < 2.2e-16
Terlihat bahwa setelah outlier dihilangkan, adjusted R-squared menjadi lebih tinggi dengan nilai sebesar 0.8198 dari sebelumnya 0.8197. Tidak terlalu signifikan peningkatan, namun tetap ini menunjukkan bahwa model menjadi lebih baik tanpa adanya outlier pada dataset.
Perbandingan performa model dengan dan tanpa outlier adalah sebagai berikut:
compare_performance(rm_auto, rm_clean)
## Warning: When comparing models, please note that probably not all models were fit from
## same data.
## # Comparison of Model Performance Indices
##
## Name | Model | AIC | BIC | R2 | R2 (adj.) | RMSE | Sigma
## ----------------------------------------------------------------------------
## rm_auto | lm | -1386.647 | -1352.930 | 0.822 | 0.820 | 0.060 | 0.060
## rm_clean | lm | -1403.117 | -1369.810 | 0.822 | 0.820 | 0.054 | 0.055
Terlihat bahwa kedua memiliki adjusted R-squared yang sama, yaitu 0.820. Karena acuan performa model sama, maka untuk memilih yang terbaik diantara keduanya akan digunakan acuan performa model yang kedua, yaitu nilai dari rata-rata persentase error (mean average percentage error) atau MAPE dari kedua model
print(paste("MAPE rm_auto :", MAPE(y_pred = rm_auto$fitted.values, y_true = df$`Chance of Admit`) * 100))
## [1] "MAPE rm_auto : 6.85162689281662"
print(paste("MAPE rm_clean :", MAPE(y_pred = rm_clean$fitted.values, y_true = df_clean$`Chance of Admit`) * 100))
## [1] "MAPE rm_clean : 5.86056674256357"
Terlihat bahwa MAPE dari model rm_clean
sebesar 5,86%, lebih kecil dibanding MAPE dari model rm_auto
yang nilainya 6,85%. Oleh sebab model final yang akan digunakan untuk memprediksi peluang diterimanya calon mahasiswa pasca sarjana adalah model rm_clean
.
Interpretasi
Persamaan untuk memprediksi peluang dari diterimanya calon mahasiswa pasca sarjana adalah sebagai berikut:
\(Chance\ of\ Admit\ =\ 0.0017182(GRE Score)\ + 0.0024184(TOEFL Score)\ + 0.0092888(University Rating)\ + 0.0141656(LOR)\ + 0.1116333(CGPA)\ + 0.0257244(Research)\ - 1.1265780\)
Dari persamaan diatas, dapat diketahui bahwa faktor yang paling berpengaruh terhadap diterimanya calon mahasiswa pasca sarjana berturut-turut adalah CGPA
, Research
, LOR
, TOEFL Score
, dan GRE Score
.
Model memiliki adjusted R-squared sebesar 0.820 yang berarti variabel-variabel prediktor dalam model memiliki hubungan yang kuat dengan variabel target, hingga membuat model mampu menangkap 82% informasi dari data yang tersedia. Model memiliki tingkat error sebesar 5,86% yang berarti dari prediksi yang dihasilkan oleh model ada kemungkinan salah sebesar 5,86%.
Evaluasi Model
Evaluasi model dilakukan untuk memastikan model yang dibuat telah sesuai dan tidak melanggar kadiah-kaidah statistika. Evaluasi yang dilakukan adalah dengan mengecek normalitas, heteroscedasticity, dan multicollinearity
Normalitas
shapiro.test(rm$residuals)
##
## Shapiro-Wilk normality test
##
## data: rm$residuals
## W = 0.92607, p-value = 5.595e-15
shapiro.test(rm_auto$residuals)
##
## Shapiro-Wilk normality test
##
## data: rm_auto$residuals
## W = 0.92626, p-value = 5.868e-15
shapiro.test(rm_clean$residuals)
##
## Shapiro-Wilk normality test
##
## data: rm_clean$residuals
## W = 0.91488, p-value = 1.058e-15
Berdasarkan Shapiro Test, ketiga model mempunyai p-value kurang dari aplha (0.05), yang berarti error (residual) dari model belum terdistribusi secara normal (model belum bagus). Adapun distribusi dari error model adalah sebagai berikut
hist(rm$residuals, breaks = 20)
hist(rm_auto$residuals, breaks = 20)
hist(rm_clean$residuals, breaks = 20)
Heteroscedasticity
bptest(rm)
##
## studentized Breusch-Pagan test
##
## data: rm
## BP = 24.056, df = 6, p-value = 0.00051
bptest(rm_auto)
##
## studentized Breusch-Pagan test
##
## data: rm_auto
## BP = 27.599, df = 6, p-value = 0.0001118
bptest(rm_clean)
##
## studentized Breusch-Pagan test
##
## data: rm_clean
## BP = 13.721, df = 6, p-value = 0.03292
Dengan menggunakan Breush-Pagan test, ketiga model mempunyai nilai p-value kurang dari alpha (0.05), yang berarti error (residual) dari model masih terdistribusi secara homogen atau dengan kata lain memiliki pola homoscedasticity. Dengan demikian, semua pola yang ada belum berhasil ditangkap oleh model (model belum bagus). Adapun visualisasi pola error nya adalah sebagai berikut
plot(rm$fitted.values, rm$residuals)
abline(h = 0, col = "red")
plot(rm_auto$fitted.values, rm_auto$residuals)
abline(h = 0, col = "red")
plot(rm_clean$fitted.values, rm_clean$residuals)
abline(h = 0, col = "red")
Multicolinearity
vif(rm)
## `GRE Score` `TOEFL Score` `University Rating` SOP
## 4.099486 3.895301 2.613004 2.834057
## LOR CGPA
## 2.027346 4.775198
vif(rm_auto)
## `GRE Score` `TOEFL Score` `University Rating` LOR
## 4.459541 3.867976 2.265898 1.853078
## CGPA Research
## 4.619554 1.493400
vif(rm_clean)
## `GRE Score` `TOEFL Score` `University Rating` LOR
## 4.205961 3.671358 2.178777 1.746123
## CGPA Research
## 4.427559 1.513294
Setiap variabel dari setiap model memiliki nilai kurang dari 10, yang berarti tidak terdapat variabel yang memiliki multikolinearitas (model sudah bagus)
Kesimpulan
Model akhir yang dipilih dalam analisis ini adalah rm_clean
dengan adjusted R-squared sebesar 0.8198 dan MAPE sebesar 5.86%. Meski memiliki performa yang cukup tinggi, namun ketika dilakukan evaluasi, model masih kurang baik karena error (residual) masih belum terdistribusi normal dan memiliki pola yang homogen, meskipun tidak memiliki multikolinearitas pada variabel-variabelnya.
Berdasarkan model rm_clean
, CGPA
, Research
, LOR
, TOEFL Score
, dan GRE Score
mempunyai hubungan yang positif terhadap peluang diterimanya calon mahasiswa pasca sarjana. Dengan demikian, semakin besar nilai dari variabel-variabel tersebut maka akan semakin memperbesar peluang untuk diterima sebagai mahasiswa pasca sarjana.