Salam sehat bagi para pembaca. Dalam report ini, kita akan memprediksi penerimaan mahasiswa baru. dimana data yang diperoleh berasal dari kaggle.
Dengan menggunakan metode Linear Regression, kita akan melihat faktor-faktor apa saja yang penting dalam penerimaan pendaftaran mahasiswa baru
admis <- read.csv("data input/Admission_Predict.csv")library(tidyverse)
glimpse(admis)#> Rows: 400
#> 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~
Diatas kita ada melihat stuktur data dan tidak semua tipe data sudah sesuai.
admis <- admis %>%
select(-Serial.No.) %>%
mutate_at(.vars = c("University.Rating", "SOP", "LOR", "Research"), .funs = as.factor)
glimpse(admis)#> 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 <fct> 4, 4, 3, 3, 2, 5, 3, 2, 1, 3, 3, 4, 4, 3, 3, 3, 3, 3~
#> $ SOP <fct> 4.5, 4, 3, 3.5, 2, 4.5, 3, 3, 2, 3.5, 3.5, 4, 4, 4, ~
#> $ LOR <fct> 4.5, 4.5, 3.5, 2.5, 3, 3, 4, 4, 1.5, 3, 4, 4.5, 4.5,~
#> $ CGPA <dbl> 9.65, 8.87, 8.00, 8.67, 8.21, 9.34, 8.20, 7.90, 8.00~
#> $ Research <fct> 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~
Selanjutnya kita ingin melihat apakah ada missing value (NA) dalam dataset yang akan digunakan.
anyNA(admis)#> [1] FALSE
colSums(is.na(admis))#> GRE.Score TOEFL.Score University.Rating SOP
#> 0 0 0 0
#> LOR CGPA Research Chance.of.Admit
#> 0 0 0 0
Data tidak mengandung missing value (NA) sehingga data bisa langsung digunakan untuk membuat model.
Dalam Linear Regression, kita harus menentukan Target dan Prediktor yang akan dipakai. dimana Target adalah Chances of Admit. kita belum mengetahui prediktor apa yang paling sesuai untuk mendapatkan hasil terbaik. jadi disini kita akan terlebih dahulu melihat korelasi antar semua varibel yang ada dalam data
library(GGally)
ggcorr(admis, label = TRUE, label_size = 2.9, hjust = 1, layout.exp = 2) dari tabel diatas, kita mendapatkan kalau CGPA memiliki nilai pengaruh positif paling tinggi dengan nilai sebesar 0.9 dan memiliki korelasi yang sangat positif dengan data numeric lainnya.
summary(admis)#> GRE.Score TOEFL.Score University.Rating SOP LOR
#> Min. :290.0 Min. : 92.0 1: 26 3.5 :70 3 :85
#> 1st Qu.:308.0 1st Qu.:103.0 2:107 4 :70 4 :77
#> Median :317.0 Median :107.0 3:133 3 :64 3.5 :73
#> Mean :316.8 Mean :107.4 4: 74 4.5 :53 4.5 :45
#> 3rd Qu.:325.0 3rd Qu.:112.0 5: 60 2.5 :47 2.5 :39
#> Max. :340.0 Max. :120.0 5 :37 2 :38
#> (Other):59 (Other):43
#> CGPA Research Chance.of.Admit
#> Min. :6.800 0:181 Min. :0.3400
#> 1st Qu.:8.170 1:219 1st Qu.:0.6400
#> Median :8.610 Median :0.7300
#> Mean :8.599 Mean :0.7244
#> 3rd Qu.:9.062 3rd Qu.:0.8300
#> Max. :9.920 Max. :0.9700
#>
boxplot(admis)Dari summary dan plot menunjukan kalau data tidak mengandung outlier (data yang berbeda jauh). sehingga kita tidak perlu melakukan subset data outlier.
sebelum membuat model, kita akan membagi data menjadi 2 bagian : data train untuk melatih model dan data test untuk menguji apakah model kita bisa melakukan prediksi dengan baik. kita akan membagi jumlah data menjadi 70:30
RNGkind(sample.kind= "Rounding")
set.seed(417)
idx <- sample(nrow(admis), nrow(admis)*0.7)
admis_train <- admis[idx,]
admis_test <- admis[-idx,]pertama kita akan membuat model linear regression target = chances of admit dan prediktor = CGPA karena CGPA memiliki nilai korelasi paling tinggi. model yang dibuat menggunakan data train.
model1 <- lm(Chance.of.Admit ~ CGPA, admis_train)
summary(model1)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA, data = admis_train)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.27490 -0.03008 0.01117 0.04376 0.18113
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.081448 0.061831 -17.49 <0.0000000000000002 ***
#> CGPA 0.210040 0.007177 29.26 <0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.07224 on 278 degrees of freedom
#> Multiple R-squared: 0.7549, Adjusted R-squared: 0.7541
#> F-statistic: 856.4 on 1 and 278 DF, p-value: < 0.00000000000000022
dengan summary diatas, kita mendapatkan Adjusted R-squared bernilai 0.7549. tapi kita hanya menggunakan 1 prediktor saja. kita akan menguji prediktor lain.
model2 <- lm(Chance.of.Admit ~., admis_train) # model dengan seluruh prediktor
model3 <- lm(Chance.of.Admit ~1, admis_train) # model tanpa prediktor
summary(model2)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ ., data = admis_train)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.241861 -0.021739 0.008546 0.036480 0.143385
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.3340458 0.1753833 -7.606 0.0000000000005373 ***
#> GRE.Score 0.0018453 0.0007838 2.354 0.019312 *
#> TOEFL.Score 0.0034439 0.0013101 2.629 0.009091 **
#> University.Rating2 -0.0401863 0.0234256 -1.715 0.087465 .
#> University.Rating3 -0.0306617 0.0247789 -1.237 0.217067
#> University.Rating4 -0.0300888 0.0278732 -1.079 0.281386
#> University.Rating5 -0.0125682 0.0293847 -0.428 0.669220
#> SOP1.5 -0.0106606 0.0454629 -0.234 0.814792
#> SOP2 0.0002387 0.0454317 0.005 0.995811
#> SOP2.5 0.0406525 0.0464336 0.875 0.382123
#> SOP3 0.0337096 0.0462139 0.729 0.466408
#> SOP3.5 -0.0004118 0.0468741 -0.009 0.992997
#> SOP4 0.0076293 0.0471860 0.162 0.871681
#> SOP4.5 0.0176808 0.0483229 0.366 0.714750
#> SOP5 0.0119528 0.0494514 0.242 0.809200
#> LOR2 0.0645862 0.0315349 2.048 0.041572 *
#> LOR2.5 0.0867666 0.0320974 2.703 0.007327 **
#> LOR3 0.0786591 0.0310427 2.534 0.011877 *
#> LOR3.5 0.1008464 0.0319011 3.161 0.001760 **
#> LOR4 0.1147890 0.0322274 3.562 0.000439 ***
#> LOR4.5 0.1209407 0.0340125 3.556 0.000449 ***
#> LOR5 0.1346831 0.0354160 3.803 0.000179 ***
#> CGPA 0.1174813 0.0145684 8.064 0.0000000000000285 ***
#> Research1 0.0175125 0.0102232 1.713 0.087921 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06551 on 256 degrees of freedom
#> Multiple R-squared: 0.8144, Adjusted R-squared: 0.7977
#> F-statistic: 48.83 on 23 and 256 DF, p-value: < 0.00000000000000022
Dengan memakai semua prediktor tanpa filtering, kita mendapatkan hasil Multiple R-squared sebesar 0.7977. kita akan mencoba melakukan filtering apakah bisa mendapatkan hasil yang optimal.
model_backwards <- step(model2, direction = "backward")#> Start: AIC=-1503.36
#> Chance.of.Admit ~ GRE.Score + TOEFL.Score + University.Rating +
#> SOP + LOR + CGPA + Research
#>
#> Df Sum of Sq RSS AIC
#> - University.Rating 4 0.023439 1.1222 -1505.5
#> - SOP 8 0.056923 1.1557 -1505.2
#> <none> 1.0988 -1503.4
#> - Research 1 0.012595 1.1114 -1502.2
#> - GRE.Score 1 0.023791 1.1226 -1499.4
#> - TOEFL.Score 1 0.029658 1.1285 -1497.9
#> - LOR 7 0.087932 1.1867 -1495.8
#> - CGPA 1 0.279124 1.3779 -1442.0
#>
#> Step: AIC=-1505.45
#> Chance.of.Admit ~ GRE.Score + TOEFL.Score + SOP + LOR + CGPA +
#> Research
#>
#> Df Sum of Sq RSS AIC
#> - SOP 8 0.046369 1.1686 -1510.1
#> <none> 1.1222 -1505.5
#> - Research 1 0.013808 1.1361 -1504.0
#> - GRE.Score 1 0.028756 1.1510 -1500.4
#> - TOEFL.Score 1 0.029001 1.1513 -1500.3
#> - LOR 7 0.083953 1.2062 -1499.2
#> - CGPA 1 0.291037 1.4133 -1442.9
#>
#> Step: AIC=-1510.11
#> Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR + CGPA + Research
#>
#> Df Sum of Sq RSS AIC
#> <none> 1.1686 -1510.1
#> - Research 1 0.012052 1.1807 -1509.2
#> - TOEFL.Score 1 0.026351 1.1950 -1505.9
#> - GRE.Score 1 0.035378 1.2040 -1503.8
#> - LOR 7 0.096322 1.2649 -1501.9
#> - CGPA 1 0.307999 1.4766 -1446.6
dari summary model_backwards, kita memilih model dengan AIC paling kecil.
summary(model_backwards)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR +
#> CGPA + Research, data = admis_train)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.26218 -0.02388 0.01114 0.03581 0.15854
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.3940302 0.1547624 -9.008 < 0.0000000000000002 ***
#> GRE.Score 0.0021600 0.0007583 2.848 0.004735 **
#> TOEFL.Score 0.0031393 0.0012770 2.458 0.014593 *
#> LOR2 0.0472605 0.0299801 1.576 0.116115
#> LOR2.5 0.0596601 0.0298158 2.001 0.046406 *
#> LOR3 0.0585383 0.0286819 2.041 0.042236 *
#> LOR3.5 0.0801689 0.0290416 2.760 0.006170 **
#> LOR4 0.0917593 0.0293332 3.128 0.001953 **
#> LOR4.5 0.1016158 0.0314542 3.231 0.001390 **
#> LOR5 0.1169775 0.0321802 3.635 0.000333 ***
#> CGPA 0.1175516 0.0139869 8.404 0.00000000000000256 ***
#> Research1 0.0168579 0.0101402 1.662 0.097584 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06603 on 268 degrees of freedom
#> Multiple R-squared: 0.8026, Adjusted R-squared: 0.7945
#> F-statistic: 99.05 on 11 and 268 DF, p-value: < 0.00000000000000022
dengan summary model_backwards yang sudah melakukan filtering, kita mendapatkan hasil Multiple R-squared 0.7945 dimana model sudah mendapatkan hasil yang cukup baik. tapi kita tetap harus melakukan trial dan error untuk melihat model manakah yang paling baik. selain backwards, ada metode forwards dan both
model_forward <- step(model3,
scope = list(upper = model2, lower = model3),
direction = "forward")#> Start: AIC=-1077.82
#> Chance.of.Admit ~ 1
#>
#> Df Sum of Sq RSS AIC
#> + CGPA 1 4.4689 1.4507 -1469.6
#> + GRE.Score 1 3.8926 2.0270 -1375.9
#> + TOEFL.Score 1 3.6523 2.2673 -1344.5
#> + University.Rating 4 3.0088 2.9108 -1268.6
#> + LOR 7 2.7299 3.1897 -1237.0
#> + SOP 8 2.6037 3.3159 -1224.1
#> + Research 1 1.8080 4.1117 -1177.9
#> <none> 5.9196 -1077.8
#>
#> Step: AIC=-1469.57
#> Chance.of.Admit ~ CGPA
#>
#> Df Sum of Sq RSS AIC
#> + GRE.Score 1 0.139803 1.3109 -1495.9
#> + TOEFL.Score 1 0.110214 1.3405 -1489.7
#> + Research 1 0.063820 1.3869 -1480.2
#> + LOR 7 0.114194 1.3365 -1478.5
#> + University.Rating 4 0.062632 1.3881 -1473.9
#> <none> 1.4507 -1469.6
#> + SOP 8 0.078268 1.3724 -1469.1
#>
#> Step: AIC=-1495.94
#> Chance.of.Admit ~ CGPA + GRE.Score
#>
#> Df Sum of Sq RSS AIC
#> + LOR 7 0.104261 1.2066 -1505.2
#> + TOEFL.Score 1 0.029538 1.2814 -1500.3
#> + Research 1 0.016241 1.2947 -1497.4
#> <none> 1.3109 -1495.9
#> + University.Rating 4 0.034732 1.2762 -1495.5
#> + SOP 8 0.066126 1.2448 -1494.4
#>
#> Step: AIC=-1505.15
#> Chance.of.Admit ~ CGPA + GRE.Score + LOR
#>
#> Df Sum of Sq RSS AIC
#> + TOEFL.Score 1 0.025970 1.1807 -1509.2
#> + Research 1 0.011671 1.1950 -1505.9
#> <none> 1.2066 -1505.2
#> + University.Rating 4 0.015090 1.1916 -1500.7
#> + SOP 8 0.042708 1.1639 -1499.2
#>
#> Step: AIC=-1509.24
#> Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score
#>
#> Df Sum of Sq RSS AIC
#> + Research 1 0.012052 1.1686 -1510.1
#> <none> 1.1807 -1509.2
#> + University.Rating 4 0.014029 1.1666 -1504.6
#> + SOP 8 0.044613 1.1361 -1504.0
#>
#> Step: AIC=-1510.11
#> Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score + Research
#>
#> Df Sum of Sq RSS AIC
#> <none> 1.1686 -1510.1
#> + SOP 8 0.046369 1.1222 -1505.5
#> + University.Rating 4 0.012885 1.1557 -1505.2
summary(model_forward)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score +
#> Research, data = admis_train)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.26218 -0.02388 0.01114 0.03581 0.15854
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.3940302 0.1547624 -9.008 < 0.0000000000000002 ***
#> CGPA 0.1175516 0.0139869 8.404 0.00000000000000256 ***
#> GRE.Score 0.0021600 0.0007583 2.848 0.004735 **
#> LOR2 0.0472605 0.0299801 1.576 0.116115
#> LOR2.5 0.0596601 0.0298158 2.001 0.046406 *
#> LOR3 0.0585383 0.0286819 2.041 0.042236 *
#> LOR3.5 0.0801689 0.0290416 2.760 0.006170 **
#> LOR4 0.0917593 0.0293332 3.128 0.001953 **
#> LOR4.5 0.1016158 0.0314542 3.231 0.001390 **
#> LOR5 0.1169775 0.0321802 3.635 0.000333 ***
#> TOEFL.Score 0.0031393 0.0012770 2.458 0.014593 *
#> Research1 0.0168579 0.0101402 1.662 0.097584 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06603 on 268 degrees of freedom
#> Multiple R-squared: 0.8026, Adjusted R-squared: 0.7945
#> F-statistic: 99.05 on 11 and 268 DF, p-value: < 0.00000000000000022
dengan metode model_forwards, kita mendapatkan hasil adjusted R-squared sebesar 0.7945.
model_both <- step(model3,
scope = list(upper = model2, lower = model3),
direction = "both")#> Start: AIC=-1077.82
#> Chance.of.Admit ~ 1
#>
#> Df Sum of Sq RSS AIC
#> + CGPA 1 4.4689 1.4507 -1469.6
#> + GRE.Score 1 3.8926 2.0270 -1375.9
#> + TOEFL.Score 1 3.6523 2.2673 -1344.5
#> + University.Rating 4 3.0088 2.9108 -1268.6
#> + LOR 7 2.7299 3.1897 -1237.0
#> + SOP 8 2.6037 3.3159 -1224.1
#> + Research 1 1.8080 4.1117 -1177.9
#> <none> 5.9196 -1077.8
#>
#> Step: AIC=-1469.57
#> Chance.of.Admit ~ CGPA
#>
#> Df Sum of Sq RSS AIC
#> + GRE.Score 1 0.1398 1.3109 -1495.9
#> + TOEFL.Score 1 0.1102 1.3405 -1489.7
#> + Research 1 0.0638 1.3869 -1480.2
#> + LOR 7 0.1142 1.3365 -1478.5
#> + University.Rating 4 0.0626 1.3881 -1473.9
#> <none> 1.4507 -1469.6
#> + SOP 8 0.0783 1.3724 -1469.1
#> - CGPA 1 4.4689 5.9196 -1077.8
#>
#> Step: AIC=-1495.94
#> Chance.of.Admit ~ CGPA + GRE.Score
#>
#> Df Sum of Sq RSS AIC
#> + LOR 7 0.10426 1.2066 -1505.2
#> + TOEFL.Score 1 0.02954 1.2814 -1500.3
#> + Research 1 0.01624 1.2947 -1497.4
#> <none> 1.3109 -1495.9
#> + University.Rating 4 0.03473 1.2762 -1495.5
#> + SOP 8 0.06613 1.2448 -1494.4
#> - GRE.Score 1 0.13980 1.4507 -1469.6
#> - CGPA 1 0.71614 2.0270 -1375.9
#>
#> Step: AIC=-1505.15
#> Chance.of.Admit ~ CGPA + GRE.Score + LOR
#>
#> Df Sum of Sq RSS AIC
#> + TOEFL.Score 1 0.02597 1.1807 -1509.2
#> + Research 1 0.01167 1.1950 -1505.9
#> <none> 1.2066 -1505.2
#> + University.Rating 4 0.01509 1.1916 -1500.7
#> + SOP 8 0.04271 1.1639 -1499.2
#> - LOR 7 0.10426 1.3109 -1495.9
#> - GRE.Score 1 0.12987 1.3365 -1478.5
#> - CGPA 1 0.41708 1.6237 -1424.0
#>
#> Step: AIC=-1509.24
#> Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score
#>
#> Df Sum of Sq RSS AIC
#> + Research 1 0.012052 1.1686 -1510.1
#> <none> 1.1807 -1509.2
#> - TOEFL.Score 1 0.025970 1.2066 -1505.2
#> + University.Rating 4 0.014029 1.1666 -1504.6
#> + SOP 8 0.044613 1.1361 -1504.0
#> - LOR 7 0.100693 1.2814 -1500.3
#> - GRE.Score 1 0.055880 1.2366 -1498.3
#> - CGPA 1 0.309991 1.4907 -1446.0
#>
#> Step: AIC=-1510.11
#> Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score + Research
#>
#> Df Sum of Sq RSS AIC
#> <none> 1.1686 -1510.1
#> - Research 1 0.012052 1.1807 -1509.2
#> - TOEFL.Score 1 0.026351 1.1950 -1505.9
#> + SOP 8 0.046369 1.1222 -1505.5
#> + University.Rating 4 0.012885 1.1557 -1505.2
#> - GRE.Score 1 0.035378 1.2040 -1503.8
#> - LOR 7 0.096322 1.2649 -1501.9
#> - CGPA 1 0.307999 1.4766 -1446.6
summary(model_both)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score +
#> Research, data = admis_train)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.26218 -0.02388 0.01114 0.03581 0.15854
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.3940302 0.1547624 -9.008 < 0.0000000000000002 ***
#> CGPA 0.1175516 0.0139869 8.404 0.00000000000000256 ***
#> GRE.Score 0.0021600 0.0007583 2.848 0.004735 **
#> LOR2 0.0472605 0.0299801 1.576 0.116115
#> LOR2.5 0.0596601 0.0298158 2.001 0.046406 *
#> LOR3 0.0585383 0.0286819 2.041 0.042236 *
#> LOR3.5 0.0801689 0.0290416 2.760 0.006170 **
#> LOR4 0.0917593 0.0293332 3.128 0.001953 **
#> LOR4.5 0.1016158 0.0314542 3.231 0.001390 **
#> LOR5 0.1169775 0.0321802 3.635 0.000333 ***
#> TOEFL.Score 0.0031393 0.0012770 2.458 0.014593 *
#> Research1 0.0168579 0.0101402 1.662 0.097584 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06603 on 268 degrees of freedom
#> Multiple R-squared: 0.8026, Adjusted R-squared: 0.7945
#> F-statistic: 99.05 on 11 and 268 DF, p-value: < 0.00000000000000022
dengan metode model_both, kita mendapatkan hasil adjusted R-squared sebesar 0.7945.
kita sudah melakukan 3 model. disini kita akan menyimpulkan model manakah yang lebih baik dengan melihat R square dan RMSE (nilai error)
summary(model_backwards)$adj.r.squared#> [1] 0.7944835
summary(model_forward)$adj.r.squared#> [1] 0.7944835
summary(model_both)$adj.r.squared#> [1] 0.7944835
kita mendapatkan nilai adj r squared semua model adalah sama.
model_backwards$call#> lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR +
#> CGPA + Research, data = admis_train)
model_forward$call#> lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score +
#> Research, data = admis_train)
model_both$call#> lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + TOEFL.Score +
#> Research, data = admis_train)
berikut adalah prediktor yang dipakai oleh masing-masing model.
library(MLmetrics)
RMSE(model_backwards$fitted.values,admis_train$Chance.of.Admit)#> [1] 0.06460361
RMSE(model_forward$fitted.values,admis_train$Chance.of.Admit)#> [1] 0.06460361
RMSE(model_both$fitted.values,admis_train$Chance.of.Admit)#> [1] 0.06460361
sama seperti hasil adj r squared. kita mendapatkan nilai RMSE yang sama sehingga kita bebas memilih model yang akan digunakan.
kita sudah membuat 3 model. kita akan menguji data test dengan semua model yang kita buat dan melihat mana yang terbaik
lm_predict1 <- predict(object = model_both, newdata = head(admis_test, 10))
lm_predict1#> 3 4 12 13 15 19 23 25
#> 0.6524563 0.7425027 0.8371898 0.8542442 0.6322582 0.7311647 0.9291836 0.9543384
#> 30 32
#> 0.4917475 0.7199330
predict(model_both, newdata = head(admis_test, 10),
level = 0.95, interval = "prediction")#> fit lwr upr
#> 3 0.6524563 0.5199958 0.7849169
#> 4 0.7425027 0.6095459 0.8754595
#> 12 0.8371898 0.7048335 0.9695460
#> 13 0.8542442 0.7219695 0.9865189
#> 15 0.6322582 0.4989131 0.7656033
#> 19 0.7311647 0.5993983 0.8629311
#> 23 0.9291836 0.7962740 1.0620931
#> 25 0.9543384 0.8212471 1.0874296
#> 30 0.4917475 0.3576625 0.6258326
#> 32 0.7199330 0.5863557 0.8535103
Insight: hasil prediksi untuk observasi pertama di kisaran 0.519 - 0.784 , dengan tingkat kepercayaan 95%
RMSE(y_pred = lm_predict1,
y_true = admis_test[1:10, "Chance.of.Admit"])#> [1] 0.05216433
nilai error yang dihasilkan oleh prediction adalah 0.0521
Harapannya ketika membuat model linear regression, error/residual yang dihasilkan berdistribusi normal. Artinya error banyak berkumpul disekitar angka 0. Untuk menguji asumsi ini dapat dilakukan:
hist(model_both$residuals) uji statistik dengan saphiro test
shapiro.test(model_both$residuals)#>
#> Shapiro-Wilk normality test
#>
#> data: model_both$residuals
#> W = 0.9114, p-value = 0.000000000008459
kita mendapatkan p value < 0.05 (nilai error tidak berdistribusi normal)
kesimpulannya adalah model tidak lolos uji asumsi
plot(model2$fitted.values, model_both$residuals)
abline(h = 0, col = "red")library(lmtest)
bptest(model_both)#>
#> studentized Breusch-Pagan test
#>
#> data: model_both
#> BP = 19.088, df = 11, p-value = 0.05954
kita mendapatkan nilai p value > 0.05 sehingga asumsi terpenuhi. kesimpulannya dimana model menghasilkan nilai error yang memiliki tidak memiliki pola(konstan)
library(car)
vif(model_both)#> GVIF Df GVIF^(1/(2*Df))
#> CGPA 4.544704 1 2.131831
#> GRE.Score 4.884780 1 2.210154
#> LOR 1.906321 7 1.047162
#> TOEFL.Score 3.923766 1 1.980850
#> Research 1.645248 1 1.282672
Kesimpulan: tidak ada VIF yang < 10 sehingga tidak ada antar variable saling berkorelasi amat kuat; asumsi terpenuhi.
Dari research yang kita lakukan, kita akan memakai model_both yang memakai semua prediktor sudah melalui tahap filtering both . dimana semua model mendapatkan nilai adj r squared sama besar. akan tetapi saat melakukan asumsi hanya pada saphiro test tidak lolos asumsi, sedangkan saat asumsi Homoscedasticity mendapatkan nilai p value > 0.05 sehingga lolos asumsi. nilai Vif value juga dibawah 10 artinya tidak ada antar variable saling berkorelasi amat kuat; asumsi terpenuhi.
walaupun model tidak lulus asumsi untuk saphiro, bukan berarti model tidak boleh dipakai, hanya saja bisa ditingkatkan atau kita bisa memakai metode lain untuk melakukan prediksi.
dari model yang sudah kita buat, kita mendapatkan kalau peluang mahasiswa diterima memiliki korelasi positif dengan GRE.Score, TOEFL.Score, University.Rating, SOP, LOR, CGPA, dan Research. sehingga mahasiswa harus memberikan nilai score yang bagus agar kemungkinan diterima semakin tinggi.