Program Magister adalah program yang dilaksanakan kurang lebih 1.5 - 2 tahun untuk mendapatkan gelar Magister setelah menyelesaiakan syarat kelulusan dengan membuat karya ilmiah berupa Tesis. Saat ini telah banyak perguruan tinggi di berbagai belahan dunia yang memiliki program magister, salah satunya di US.Dengan memperoleh gelar magister, seseorang dapat memperoleh keuntungan yang lebih misal dalam dunia pekerjaan.Oleh karena itu banyak orang ingin mendaftar program magister di berbagai universitas di berbagai negara.Berikut ini adalah analisis kesempatan seseorang diterima dalam program sarjana di negara US dengan menggunakan analisis regresi.
Analisis ini menggunakan data Graduate Admissions. Dengan menggunakan Linear Regression Analysis, akan dibuat suatu model untuk memprediksi faktor-faktor yang mempengaruhi kesempatan seseorang diterima kedalam program magister di US.
admission <- read.csv("Admission_Predict_Ver1.1.csv")
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~
anyNA(admission)
## [1] FALSE
admission <- admission %>%
select(-Serial.No.)
summary(admission)
## GRE.Score TOEFL.Score University.Rating SOP
## Min. :290.0 Min. : 92.0 Min. :1.000 Min. :1.000
## 1st Qu.:308.0 1st Qu.:103.0 1st Qu.:2.000 1st Qu.:2.500
## Median :317.0 Median :107.0 Median :3.000 Median :3.500
## Mean :316.5 Mean :107.2 Mean :3.114 Mean :3.374
## 3rd Qu.:325.0 3rd Qu.:112.0 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :340.0 Max. :120.0 Max. :5.000 Max. :5.000
## LOR CGPA Research Chance.of.Admit
## Min. :1.000 Min. :6.800 Min. :0.00 Min. :0.3400
## 1st Qu.:3.000 1st Qu.:8.127 1st Qu.:0.00 1st Qu.:0.6300
## Median :3.500 Median :8.560 Median :1.00 Median :0.7200
## Mean :3.484 Mean :8.576 Mean :0.56 Mean :0.7217
## 3rd Qu.:4.000 3rd Qu.:9.040 3rd Qu.:1.00 3rd Qu.:0.8200
## Max. :5.000 Max. :9.920 Max. :1.00 Max. :0.9700
ggcorr(admission, label = T, label_size = 4, hjust = 0.8, layout.exp = 2)
Dengan menggunakan variabel target yaitu
Chance.of.Admit dapat dilihat berdasarkan grafik diatas bahwa korelasi variabel prediktor dengan variabel target adalah berkorelasi positif dimana variabel CGPA memiliki korelasi positif paling tinggi diantara variabel lainnya.
boxplot(admission)
terlihat terdapat outlier pada kolom LOR dan Chance.of.Admit, sehingga kita perlu melakukan treatment terhadap outlier tersebut.
boxplot(admission$LOR, admission$Chance.of.Admit, graph = F)$out
## [1] 1.00 0.34 0.34
admission[admission$LOR == 1,]
## GRE.Score TOEFL.Score University.Rating SOP LOR CGPA Research
## 348 299 94 1 1 1 7.34 0
## Chance.of.Admit
## 348 0.42
admission[(admission$Chance.of.Admit == 0.34)|(admission$Chance.of.Admit == 0.36) |(admission$Chance.of.Admit == 0.37),]
## GRE.Score TOEFL.Score University.Rating SOP LOR CGPA Research
## 59 300 99 1 3.0 2.0 6.80 1
## 93 298 98 2 4.0 3.0 8.03 0
## 95 303 99 3 2.0 2.5 7.66 0
## 377 297 96 2 2.5 2.0 7.43 0
## 458 295 99 1 2.0 1.5 7.57 0
## Chance.of.Admit
## 59 0.36
## 93 0.34
## 95 0.36
## 377 0.34
## 458 0.37
admission <- admission[-c(93,348,377,59,95,458),]
boxplot(admission)
setelah data tidak memiliki outlier maka data sudah siap untuk dianalisis lebih lanjut.
Dikarenakan variabel CGPA merupakan variabel yang berkorelasi paling tinggi, maka akan dicoba untuk membuat model prediksi berdasarkan variabel CGPA.
model_cgpa <- lm(formula = Chance.of.Admit ~ CGPA, data = admission)
model_cgpa
##
## Call:
## lm(formula = Chance.of.Admit ~ CGPA, data = admission)
##
## Coefficients:
## (Intercept) CGPA
## -1.009 0.202
summary(model_cgpa)
##
## Call:
## lm(formula = Chance.of.Admit ~ CGPA, data = admission)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.278122 -0.028223 0.007182 0.038923 0.173092
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.009275 0.042096 -23.98 <0.0000000000000002 ***
## CGPA 0.202023 0.004889 41.32 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06454 on 492 degrees of freedom
## Multiple R-squared: 0.7763, Adjusted R-squared: 0.7759
## F-statistic: 1708 on 1 and 492 DF, p-value: < 0.00000000000000022
plot(admission$CGPA, admission$Chance.of.Admit)
abline(model_cgpa$coefficients[1], model_cgpa$coefficients[2])
Dengan hanya menggunakan prediktor
CGPA diperoleh nilai Multiple R-squared sebesar 0.7817 Untuk penigkatan kebaikan model akan dilakukan proses stepwise untuk memilih varibel prediktor secara otomatis menggunakan fungsi step() dengan metode backward elimination.
model <- lm(formula = Chance.of.Admit ~., data = admission)
model_step <- step(model, direction = "backward", trace = 0)
summary(model_step)
##
## Call:
## lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + University.Rating +
## LOR + CGPA + Research, data = admission)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.26735 -0.02259 0.00987 0.03282 0.15112
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2218032 0.1010475 -12.091 < 0.0000000000000002 ***
## GRE.Score 0.0017584 0.0004886 3.599 0.000352 ***
## TOEFL.Score 0.0026982 0.0008461 3.189 0.001520 **
## University.Rating 0.0071190 0.0034431 2.068 0.039206 *
## LOR 0.0163792 0.0038540 4.250 0.0000256 ***
## CGPA 0.1173597 0.0093732 12.521 < 0.0000000000000002 ***
## Research 0.0242837 0.0064501 3.765 0.000187 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05822 on 487 degrees of freedom
## Multiple R-squared: 0.8198, Adjusted R-squared: 0.8176
## F-statistic: 369.3 on 6 and 487 DF, p-value: < 0.00000000000000022
Dengan menggunakan stepwise regression diperoleh nilai Adjusted R-squared sebesar 0.814 yang sudah lebih baik dari model sebelumnya. Sehingga dalam melakukan analisis regresi akan kita gunakan model_step.
predict_cgpa <- predict(object = model_cgpa, newdata = data.frame(CGPA = 9.3), interval = "confidence", level = 0.95)
predict_cgpa
## fit lwr upr
## 1 0.8695377 0.8606445 0.8784309
predict_step <- predict(object = model_step,
newdata = data.frame(GRE.Score = 330,
TOEFL.Score = 117,
University.Rating = 4,
LOR = 2.9,
CGPA =8.7,
Research = 1),
interval = "confidence",
level = 0.95)
predict_step
## fit lwr upr
## 1 0.7954428 0.7794196 0.8114659
Root Mean Squared Error (RMSE) merupakan salah satu cara untuk mengevaluasi model regresi linear dengan mengukur tingkat akurasi hasil perkiraan suatu model.RMSE dapat berkisar dari 0 hingga ∞. RMSE dapat berorientasi negatif dimana nilai yang lebih rendah menunjukkan nilai yang lebih baik. Jika nilai RMSE lebih kecil, hal ini berarti bahwa nilai yang diprediski dekat dengan nilai yang diamati atau observasi, dan sebaliknya.
\[ RMSE = \sqrt{\frac{1}{n} \sum (\hat y - y)^2} \]
#menghitung nilai error untuk model_cgpa
sqrt((0.85 - 0.8695377)^2)
## [1] 0.0195377
#menghitung nilai error untuk model_step
sqrt((0.85 - 0.7954428)^2)
## [1] 0.0545572
Dengan menggunakan model_step diperoleh nilai error sebesar 0.0545572 lebih besar dibandingkan error yang dihasilkan oleh model model_cgpa, sehingga model_cgpa lebih baik daripada model_step
Melakukan pengecekan distribusi error yang dihasilkan. dalam model yang baik, error yang dihasilkan diharapkan berdistribusi normal yang artinya error banyak berkumpul disekitar angka 0.
hist(model_cgpa$residuals)
Berdasarkan visualisasi histogram dapat dilihat bahwa residual (Error) banyak berkumpul disekitar 0. selanjutnya akan dilakukan uji statistik menggunakan shapiro.test()
shapiro.test(model_cgpa$residuals)
##
## Shapiro-Wilk normality test
##
## data: model_cgpa$residuals
## W = 0.95422, p-value = 0.00000000003014
hist(model_step$residuals)
shapiro.test(model_step$residuals)
##
## Shapiro-Wilk normality test
##
## data: model_step$residuals
## W = 0.92418, p-value = 0.000000000000004402
Dari hasil uji menggunakan Shapiro-Wilk kedua model memiliki P-value < 0.05 sehingga asumsi normality tidak terpenuhi.
plot(x = model_cgpa$fitted.values, y = model_cgpa$residuals)
abline(h = 0, col = "red")
bptest(model_cgpa)
##
## studentized Breusch-Pagan test
##
## data: model_cgpa
## BP = 17.158, df = 1, p-value = 0.0000344
plot(x = model_step$fitted.values, y = model_step$residuals)
abline(h = 0, col = "red")
bptest(model_step)
##
## studentized Breusch-Pagan test
##
## data: model_step
## BP = 23.872, df = 6, p-value = 0.0005513
Dari Hasil uji statistik menggunakan Breusch-Pagan test dan visualisasi, didapatkan bahwa kedua model memiliki P-value < 0.05 sehingga asumsi homoscedasticity tidak terpenuhi oleh kedua model.
model_cgpa hanya memiliki 1 variabel prediktor sehingga tidak dapat dilakukan analisis multikolinearitas, kita akan menggunakan model_step untuk melakukan analisis multikolinearitas.
vif(model_step)
## GRE.Score TOEFL.Score University.Rating LOR
## 4.345171 3.772925 2.225763 1.802976
## CGPA Research
## 4.517221 1.490220
Berdasarkan hasil pengujian, didapatkan nilai VIF < 10 sehingga asumsi multikolinearitas terpenuhi.
Karena model yang kita buat tidak memenuhi beberapa asumsi linaer model, maka akan kita lakukan perbaikan dengan mengecek data dan melakuakan feature engineering.
plot(admission$Chance.of.Admit)
Dari visualisasi tersebut sekilas terlihat terdapat pola persebaran dimana pada index 0-100 data terlihat menyebar, sedangkan pada index antara 100-300 data terlihat menyempit persebarannya dan kembali menyebar pada index 300 - 500.
Kali ini kita akan mencoba mengambil data pada index ke 300 - 500 untuk diolah.
admission1 <- admission[300:500,]
Dikarenakan pada proses sebelumnya asumsi normalitas tidak terpenuhi maka akan dilakukan transformasi logaritmic pada variabel target.
admission3 <- admission1 %>%
mutate(Chance.of.Admit = log(Chance.of.Admit))
Akan dicek apakah asumsi normalitas sudah terpenuhi atau belum.
model1 <- lm(formula = Chance.of.Admit~., data = admission3)
model2 <- step(model1, direction = "backward", trace = 0)
summary(model2)
##
## Call:
## lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + SOP +
## CGPA + Research, data = admission3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.37813 -0.03891 0.00575 0.04297 0.20475
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.038458 0.236393 -12.853 < 0.0000000000000002 ***
## GRE.Score 0.002160 0.001123 1.923 0.055980 .
## TOEFL.Score 0.004111 0.001904 2.159 0.032087 *
## SOP 0.022216 0.009651 2.302 0.022436 *
## CGPA 0.172364 0.020102 8.574 0.00000000000000354 ***
## Research 0.053053 0.015066 3.521 0.000538 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0816 on 189 degrees of freedom
## (6 observations deleted due to missingness)
## Multiple R-squared: 0.8289, Adjusted R-squared: 0.8244
## F-statistic: 183.2 on 5 and 189 DF, p-value: < 0.00000000000000022
shapiro.test(model2$residuals)
##
## Shapiro-Wilk normality test
##
## data: model2$residuals
## W = 0.91343, p-value = 0.0000000028
bptest(model2)
##
## studentized Breusch-Pagan test
##
## data: model2
## BP = 23.654, df = 5, p-value = 0.000253
Dikarenakan setelah dilakukan transformasi pada variabel target model masih belum memenuhi asumsi normalitas dan homoscedasticity maka akan dilakukan transformasi dan feature engineering.
ggcorr(admission1, label = T, hjust = 0.8, layout.exp = 2)
Dari hasil visualisasi korelasi antar variabel diketahui bahwa variabel variabel calon prediktor memiliki korelasi cukup tinggi dengan variabel target. Kali ini kita akan menghindari variabel dengan korelasi diatas 0.6 dan melakukan transformasi pada variabel prediktor.
admission4 <- admission1 %>%
select(LOR, Research, Chance.of.Admit) %>%
mutate(Research = scale(Research)^2,
LOR = scale(LOR)^2)
head(admission4)
## LOR Research Chance.of.Admit
## 303 0.209500108 0.7068826 0.65
## 304 0.004530712 0.7068826 0.73
## 305 2.273329896 1.4001899 0.62
## 306 0.004530712 0.7068826 0.74
## 307 0.004530712 0.7068826 0.79
## 308 0.350858313 0.7068826 0.80
Membuat model dari data yang telah dilakukan transformasi dan melakukan uji statistik untuk mengetahui apakah model memenuhi asumsi linear model atau tidak.
modell <- lm(Chance.of.Admit~ ., admission4)
model6 <- step(modell, direction = "backward", trace = 0)
summary(model6)
##
## Call:
## lm(formula = Chance.of.Admit ~ Research, data = admission4)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.292456 -0.064314 0.003827 0.075686 0.223827
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.95200 0.02278 41.79 <0.0000000000000002 ***
## Research -0.23984 0.02166 -11.07 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1033 on 193 degrees of freedom
## (6 observations deleted due to missingness)
## Multiple R-squared: 0.3885, Adjusted R-squared: 0.3854
## F-statistic: 122.6 on 1 and 193 DF, p-value: < 0.00000000000000022
shapiro.test(model6$residuals)
##
## Shapiro-Wilk normality test
##
## data: model6$residuals
## W = 0.98898, p-value = 0.1373
Karena model6 memiliki nilai P-value = 0.1373 > 0.05 maka asumsi normalitas terpenuhi.
bptest(formula = model6)
##
## studentized Breusch-Pagan test
##
## data: model6
## BP = 0.33026, df = 1, p-value = 0.5655
Karena model6 memiliki nilai P-value = 0.5655 > 0.05 maka asumsi homoscedasticity terpenuhi.
Dengan menggunakan data admission predict ini diketahui bahwa model dengan prediktor niali CGPA (model_cgpa) memiliki error yang lebih kecil dibandingkan dengan model dengan banyak prediktor, namun model_cgpa tidak memenuhi asumsi linearitas. setelah dilakukan perbaikan dengan melakukan feature engineering didapatkan model6 yang memenuhi asumsi linearitas.
Dari hasil analisis didapatkan bahwa variabel Research sangat mempengaruhi seseorang mendapat kesempatan untuk diterima di suatu program magister di US.