Berikut adalah analisis data “Graduate Admisssion 2” yang disediakan oleh kaggle.com. Data yang digunakan adalah data yang dianggap penting untuk penentuan penerimaan mahasiswa baru pada sebuah universitas. Analisis akan menggunakan linear regression yang akan membuat sebuah model untuk memprediksi faktor yang berpengaruh terhadap penerimaan mahasiswa baru.
library(tidyverse)
library(GGally)
library(ggplot2)
library(car)
library(lmtest)
library(MLmetrics)
adm <- read.csv("data/Admission_Predict_Ver1.1.csv")
adm <- adm %>%
select(-Serial.No.)
glimpse(adm)
## Rows: 500
## 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~
Keterangan: -GRE.Score : Nilai tes ujian penilaian -TOEFL.Score : Nilai ujian kemampuan bahasa inggris -University.Rating : Rating universitas -SOP : (Statement of Purpose) Essay yang singkat yang menjelaskan latar belakang calon mahasiswa -LOR : (Letter of Recomendation) Surat rekomendasi -CGPA : GPA saat undergraduate -Research : Pengalaman penelitian -Chance.of.Admit : Kesempatan diterima
colSums(is.na(adm))
## GRE.Score TOEFL.Score University.Rating SOP
## 0 0 0 0
## LOR CGPA Research Chance.of.Admit
## 0 0 0 0
ggcorr(data = adm, label = T, hjust = 1,layout.exp = 2)
Dapat dilihat dari grafik korelasi semua kolom berkorelasi Positif terhadap Chance.of.Admit. Dari semua kolom yang ada pada tabel, kolom CGPA adalah sebuah faktor yang paling tinggi dibandingkan dengan faktor yang lain dan kolom Research adalah faktor yang paling rendah dibandingkan kolom lainnya.
Membuat model regresi dengan mengambil seluruh variabel prediktor
model_rm <- lm(CGPA ~ ., adm)
model_rm_step <- step(model_rm, direction = "backward")
## Start: AIC=-1401.96
## CGPA ~ GRE.Score + TOEFL.Score + University.Rating + SOP + LOR +
## Research + Chance.of.Admit
##
## Df Sum of Sq RSS AIC
## - Research 1 0.0989 29.431 -1402.3
## <none> 29.332 -1402.0
## - University.Rating 1 0.2441 29.576 -1399.8
## - LOR 1 0.2549 29.587 -1399.6
## - SOP 1 0.6936 30.026 -1392.3
## - TOEFL.Score 1 0.9366 30.269 -1388.2
## - GRE.Score 1 2.1818 31.514 -1368.1
## - Chance.of.Admit 1 8.8709 38.203 -1271.8
##
## Step: AIC=-1402.28
## CGPA ~ GRE.Score + TOEFL.Score + University.Rating + SOP + LOR +
## Chance.of.Admit
##
## Df Sum of Sq RSS AIC
## <none> 29.431 -1402.3
## - University.Rating 1 0.2328 29.664 -1400.3
## - LOR 1 0.2491 29.680 -1400.1
## - SOP 1 0.6892 30.120 -1392.7
## - TOEFL.Score 1 0.9935 30.424 -1387.7
## - GRE.Score 1 2.0853 31.516 -1370.0
## - Chance.of.Admit 1 8.7944 38.225 -1273.6
summary(model_rm_step)
##
## Call:
## lm(formula = CGPA ~ GRE.Score + TOEFL.Score + University.Rating +
## SOP + LOR + Chance.of.Admit, data = adm)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.06563 -0.14162 0.02516 0.16035 0.69402
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.587773 0.462820 3.431 0.000653 ***
## GRE.Score 0.011467 0.001940 5.910 6.38e-09 ***
## TOEFL.Score 0.014369 0.003522 4.079 5.26e-05 ***
## University.Rating 0.030506 0.015449 1.975 0.048863 *
## SOP 0.062415 0.018370 3.398 0.000735 ***
## LOR 0.034843 0.017059 2.043 0.041631 *
## Chance.of.Admit 1.929305 0.158956 12.137 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2443 on 493 degrees of freedom
## Multiple R-squared: 0.8388, Adjusted R-squared: 0.8368
## F-statistic: 427.4 on 6 and 493 DF, p-value: < 2.2e-16
Cek performa model dengan menggunakan RMSE. Sebelum itu, dilakukan prediksi model_rm_step menggunakan fungsi predict()
pred <- predict(model_rm_step, newdata = adm)
newmodel <- adm %>%
mutate(prediksi = pred,
prediksi = as.integer(prediksi))
Setelah itu prediksi menggunakan fungsi RMSE()
RMSE(y_pred = newmodel$prediksi, newmodel$CGPA)
## [1] 0.6065559
Hasil prediksi menyimpang sebanyak 0.6065
Lalu gunakan MAPE untuk melihat berapa persen penyimpangan dari hasil prediksi
MAPE(y_pred = newmodel$prediksi, newmodel$CGPA)
## [1] 0.06012216
Dari hasil MAPE, model memprediksi kemungkinan untuk melenceng sebesar 6% dari nilai asli/aktual
data.frame(prediksi = model_rm_step$fitted.values,
error = model_rm_step$residuals) %>%
ggplot(aes(x = prediksi, y = error)) +
geom_hline(yintercept = 0, lty = "dashed") +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Uji linearity mayoritas sudah mendekati garis 0 yang berarti prediktor sudah linear dengan target variable
plot(density(model_rm_step$residuals))
Plot diatas menunjukkan bahwa data sudah terdistribusi secara normal
Dari hasil pengerjaan ini dapat disimpulkan bahwa regresi model model_rm_step mendapatkan R-squared 0.8368 atau 83.6% untuk menjelaskan variance di target variable (CGPA) dan hasil RMSE dan MAPE melenceng sebesar 0.6065 dan sebanyak 6%. Dan hasil uji normality memperlihatkan bahwa data terdistribusi secara normal