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.

Load Dataset

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

Exploratory Data Analysis

  • Cek Struktur Data dan ubah tipe data yang belum sesuai
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~
  • Cek Missing Value
anyNA(admission)
## [1] FALSE
  • Drop Kolom yang Tidak Diperlukan dan Cek Summary
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
  • Cek Korelasi Antar Variabel
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.

pembuatan model regresi

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.

Prediksi

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

Evaluasi Model

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

Asumsi linear model

  • Normality

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.

  • Homoscedasticity
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.

  • No Multicolinearity

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.

Perbaikan

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.

Kesimpulan

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.