Regression Model

Background

Regresi Linier adalah suatu model statistik yang umum dan paling sederhana yang digunakan untuk Machine Learning untuk melakukan prediksi dengan cara supervised learning.

Regresi linier hanya dapat dilakukan untuk data yang bersifat disktit atau kontinue dan regresi linier melibatkan 2 variable dimana salah satunya adalah variabel independen (x) dan variable dependen (y)

Linear Regression

Model simpel linear regression adalah sebagai berikut :

Untuk memperjelas tentang linear regression, kita akan gunakan data Admission_Predict untuk melakukan prediksi terhadap Chance of Admit ada beberapa variabel prediktor yang telah tersedia

# import libs
library(tidyverse)
library(lubridate)
library(GGally)
library(MLmetrics)
library(lmtest)
library(car)
library(plotly)
library(ggplot2)

Data preparation

ad <- read.csv("data_input/Admission_Predict_Ver1.1.csv")
head(ad)
##   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(ad)
## Rows: 500
## Columns: 9
## $ Serial.No.        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15...
## $ GRE.Score         <int> 337, 324, 316, 322, 314, 330, 321, 308, 302, 323,...
## $ TOEFL.Score       <int> 118, 107, 104, 110, 103, 115, 109, 101, 102, 108,...
## $ University.Rating <int> 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          <int> 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 admission berisi 9 kolom dan 500 bari untuk tipe semua data yang telah diimport adalah bersifat disktit dan kontinue

cek missing value agar tidak mengganggu pada pemodelan.

anyNA(ad)
## [1] FALSE

remove unused varible & adjust data type

ad <- ad %>% 
  select(-Serial.No.) %>% 
  mutate(Research = as.factor(Research))

EDA

ggcorr(data = ad, label = T, label_size = 5, hjust = 1, layout.exp = 2)

kita bisa lihat bahwa grade point averag (GPA) adalah variabel prediktor yang memiliki correlation yang kuat terhadap variabel target

ggplot(data = ad, aes(x = Chance.of.Admit, y = CGPA ))+
  geom_point()+
  geom_smooth(method = "lm", se = FALSE)+
  labs(title = "Chance.of.Admit",
       x = "Chance.of.Admit",
       y = "CGPA")+
  theme_minimal()

Dengan mengamati graph diatas, kita dapat melihat lebih jelas bahwa variabel CGPA memiliki hubungan yang kuat positif mempengaruhi terhadap Chance.of.Admit

Modeling

kita akan membuat model regresi linear dengan variabel yang memiliki kolerasi tertinggi dan chace.of.admit sebagai targetnya.

ad_lm1 <- lm(formula = Chance.of.Admit~CGPA, data = ad)

summary(ad_lm1)
## 
## Call:
## lm(formula = Chance.of.Admit ~ CGPA, data = ad)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.276592 -0.028169  0.006619  0.038483  0.176961 
## 
## Coefficients:
##             Estimate Std. Error t value            Pr(>|t|)    
## (Intercept) -1.04434    0.04230  -24.69 <0.0000000000000002 ***
## CGPA         0.20592    0.00492   41.85 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06647 on 498 degrees of freedom
## Multiple R-squared:  0.7787, Adjusted R-squared:  0.7782 
## F-statistic:  1752 on 1 and 498 DF,  p-value: < 0.00000000000000022

Dapat kita lihat bahwa R-square memiliki nilai 77.87% nilai nya cukup bagus, artinya nilai CGPA sudah bisa menjelaskan nilai dari chace of admit sebesar 77.87% ketika diketahui informasi CGPA sebesar 100%, maka dapat diketahui informasi chace of admit sebesar 77.87%, 22.13% infomasi lain dijelaskan oleh faktor external lainnya. dengan kata lain CGPA berkontribusi sebesar 77.87% terhadap chance of admit.

selanjutnya kita akan membuat model dengan all predictor

ad_lm <- lm(formula = Chance.of.Admit~., data = ad)

summary(ad_lm)
## 
## Call:
## lm(formula = Chance.of.Admit ~ ., data = ad)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.266657 -0.023327  0.009191  0.033714  0.156818 
## 
## Coefficients:
##                     Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)       -1.2757251  0.1042962 -12.232 < 0.0000000000000002 ***
## GRE.Score          0.0018585  0.0005023   3.700             0.000240 ***
## TOEFL.Score        0.0027780  0.0008724   3.184             0.001544 ** 
## University.Rating  0.0059414  0.0038019   1.563             0.118753    
## SOP                0.0015861  0.0045627   0.348             0.728263    
## LOR                0.0168587  0.0041379   4.074            0.0000538 ***
## CGPA               0.1183851  0.0097051  12.198 < 0.0000000000000002 ***
## Research1          0.0243075  0.0066057   3.680             0.000259 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05999 on 492 degrees of freedom
## Multiple R-squared:  0.8219, Adjusted R-squared:  0.8194 
## F-statistic: 324.4 on 7 and 492 DF,  p-value: < 0.00000000000000022

nilai r-squarenya adalah 0.8219007 artinya model yang kita buat dapat menjelaskan sebesar 0.8219007 dan sisanya oleh faktor lain.

Prediksi Model

ad1_predict <- predict(object = ad_lm1, newdata = ad)
ad_predict <- predict(object = ad_lm, newdata = ad)
head(ad1_predict)
##         1         2         3         4         5         6 
## 0.9428093 0.7821904 0.6030385 0.7410060 0.6462821 0.8789736
head(ad_predict)
##         1         2         3         4         5         6 
## 0.9518830 0.8040313 0.6534481 0.7445193 0.6315496 0.8744934

Evaluasi Model

Berikutnya kita akan melihat kebaikan dari suatu model dengan menggunakan Adjusted R-square,

summary(ad_lm1)$adj.r.square
## [1] 0.7782075
summary(ad_lm)$adj.r.square
## [1] 0.8193668

Berdasaran hasil adj Adjusted R-square maka untuk sementara akan dipilih model dengan all prediktor

RMSE

RMSE(y_pred = ad1_predict, y_true = ad$Chance.of.Admit)
## [1] 0.06633679
RMSE(y_pred = ad_predict, y_true = ad$Chance.of.Admit)
## [1] 0.05950421

Jika membandingkan nilai RMSE yang didapat maka model dengan all predictor memiliki RMSE yang lebih kecil

range(ad$Chance.of.Admit)
## [1] 0.34 0.97

Jika dibandingkan dengan nilai actual interval Chance.of.Admit maka nilai RMSE yang di hasilkan masih cukup kecil

Step wise regression

Regresi Stepwise adalah salah satu metode untuk mendapatkan model terbaik dari sebuah analisis regresi, dengan menggunakan metode backward, forward dan both.

model_none_ad <- lm(Chance.of.Admit~1, data = ad)
model_all_ad <- lm(Chance.of.Admit~., data = ad)
model_all_backward <- stats::step(object = model_all_ad, direction = "backward")
## 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

dari hasil strepwise “backward” suggest variabel prediktor yang harus digunakan untukk membuat model linear regression adalah Chance.of.Admit ~ GRE.Score + TOEFL.Score + University.Rating + LOR + CGPA + Research

backward_lm <- lm(formula = Chance.of.Admit~ University.Rating+TOEFL.Score+Research+GRE.Score+LOR+CGPA, data = ad)

summary(backward_lm)
## 
## Call:
## lm(formula = Chance.of.Admit ~ University.Rating + TOEFL.Score + 
##     Research + GRE.Score + LOR + CGPA, data = ad)
## 
## 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 < 0.0000000000000002 ***
## University.Rating  0.0064279  0.0035318   1.820             0.069363 .  
## TOEFL.Score        0.0028072  0.0008676   3.236             0.001295 ** 
## Research1          0.0243538  0.0065985   3.691             0.000248 ***
## GRE.Score          0.0018528  0.0005016   3.694             0.000246 ***
## LOR                0.0172873  0.0039464   4.380            0.0000145 ***
## CGPA               0.1189994  0.0095344  12.481 < 0.0000000000000002 ***
## ---
## 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: < 0.00000000000000022
model_forward <- stats::step(object = model_none_ad, direction = "forward", scope = list(lower = model_none_ad, upper = model_all_ad ))
## Start:  AIC=-1957
## Chance.of.Admit ~ 1
## 
##                     Df Sum of Sq    RSS     AIC
## + CGPA               1    7.7401 2.2003 -2709.0
## + GRE.Score          1    6.5275 3.4129 -2489.5
## + TOEFL.Score        1    6.2388 3.7016 -2448.9
## + University.Rating  1    4.7344 5.2060 -2278.4
## + SOP                1    4.6525 5.2879 -2270.6
## + LOR                1    4.1401 5.8003 -2224.3
## + Research           1    2.9620 6.9784 -2131.9
## <none>                           9.9404 -1957.0
## 
## Step:  AIC=-2709.01
## Chance.of.Admit ~ CGPA
## 
##                     Df Sum of Sq    RSS     AIC
## + GRE.Score          1  0.208115 1.9922 -2756.7
## + TOEFL.Score        1  0.171696 2.0286 -2747.6
## + Research           1  0.142249 2.0580 -2740.4
## + LOR                1  0.114950 2.0853 -2733.8
## + University.Rating  1  0.090932 2.1094 -2728.1
## + SOP                1  0.062627 2.1377 -2721.4
## <none>                           2.2003 -2709.0
## 
## Step:  AIC=-2756.69
## Chance.of.Admit ~ CGPA + GRE.Score
## 
##                     Df Sum of Sq    RSS     AIC
## + LOR                1  0.116232 1.8759 -2784.8
## + Research           1  0.062232 1.9299 -2770.6
## + University.Rating  1  0.059192 1.9330 -2769.8
## + TOEFL.Score        1  0.049984 1.9422 -2767.4
## + SOP                1  0.049062 1.9431 -2767.2
## <none>                           1.9922 -2756.7
## 
## Step:  AIC=-2784.75
## Chance.of.Admit ~ CGPA + GRE.Score + LOR
## 
##                     Df Sum of Sq    RSS     AIC
## + Research           1  0.049001 1.8269 -2796.0
## + TOEFL.Score        1  0.040748 1.8352 -2793.7
## + University.Rating  1  0.022370 1.8536 -2788.8
## + SOP                1  0.009319 1.8666 -2785.2
## <none>                           1.8759 -2784.8
## 
## Step:  AIC=-2795.98
## Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research
## 
##                     Df Sum of Sq    RSS     AIC
## + TOEFL.Score        1  0.044229 1.7827 -2806.2
## + University.Rating  1  0.018523 1.8084 -2799.1
## + SOP                1  0.007774 1.8192 -2796.1
## <none>                           1.8269 -2796.0
## 
## Step:  AIC=-2806.24
## Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research + TOEFL.Score
## 
##                     Df Sum of Sq    RSS     AIC
## + University.Rating  1 0.0118980 1.7708 -2807.6
## <none>                           1.7827 -2806.2
## + SOP                1 0.0035451 1.7792 -2805.2
## 
## Step:  AIC=-2807.59
## Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research + TOEFL.Score + 
##     University.Rating
## 
##        Df  Sum of Sq    RSS     AIC
## <none>               1.7708 -2807.6
## + SOP   1 0.00043486 1.7704 -2805.7

untuk model stepwise “forward” suggest variabel prediktor yang harus digunakan adalah Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research + TOEFL.Score + University.Rating

forward_lm <- lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research + TOEFL.Score +University.Rating, data = ad)


summary(model_forward)
## 
## Call:
## lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research + 
##     TOEFL.Score + University.Rating, data = ad)
## 
## 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 < 0.0000000000000002 ***
## CGPA               0.1189994  0.0095344  12.481 < 0.0000000000000002 ***
## GRE.Score          0.0018528  0.0005016   3.694             0.000246 ***
## LOR                0.0172873  0.0039464   4.380            0.0000145 ***
## Research1          0.0243538  0.0065985   3.691             0.000248 ***
## TOEFL.Score        0.0028072  0.0008676   3.236             0.001295 ** 
## University.Rating  0.0064279  0.0035318   1.820             0.069363 .  
## ---
## 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: < 0.00000000000000022

Assumption

  1. Linearity : memiliki hubungan linear antara variabel prediktor dengan target variabel
  2. Residual Normal : eror berdistribusi normal
  3. No-Heteroskedastisity : erornya tidak berpola dan homogen
  4. No-Multikolinearity : tidak ada multikolinearitas antar variabel independen

LINEARITY

Ketika pengecekan linearity, kita dapat melihat nilai kolerasi antar variable ketika terdapat nilai yang tidak linear maka bisa dilakukan transformasi data menggunakan log() atau exp()

ggcorr(ad, label = T )

## Shapirotest

Untuk pengcekan terhadap residual telah berdistribusi normal maka bisa dilakukan dengan uji shapiro.test atau dengan histogram

H0 : residual berdisitribusi normal H1 : residual tidak berdistribusi normal

hist(ad_lm$residuals, breaks = 20)

berdasarkan hasil histogram maka residual berdistribusi normal.

shapiro.test(ad_lm$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  ad_lm$residuals
## W = 0.92549, p-value = 0.000000000000004824

Berdasarkan hasil shapiro.tes nilai nya p-value yang dihasilkan lebih kecil dari 0.05 sehingga tolak H0 untuk asumsi ini tidak terpenuhi, harus dilakukan tuning kedalam beberapa parameter seperti menghapus outlier

Non-Heteroskedastisity

plot(ad_lm$residuals)

bptest(ad_lm)
## 
##  studentized Breusch-Pagan test
## 
## data:  ad_lm
## BP = 30.516, df = 7, p-value = 0.00007634

No-Multikolinearity

Untuk melihat setiap prediktor tidak memiliki korelasi yang kuat antar prediktor, kita dapat menggunakan fungsi vif dengan nilai dari setiap prediktor < 10

vif(ad_lm)
##         GRE.Score       TOEFL.Score University.Rating               SOP 
##          4.464249          3.904213          2.621036          2.835210 
##               LOR              CGPA          Research 
##          2.033555          4.777992          1.494008

Conclusion

Hasil dari model linier regression yang telah dibuat masih harus banyak improvment karena masih ada asumsi yang belum terpenuhi.

hasil model final yang dilipih adalah Chance.of.Admit (Y) = -1.2757251 + 0.0018585(GRE.Score) + 0.0018585(TOEFL.Score)+0.0059414(University.Rating) + 0.0015861(SOP)+ 0.0168587(LOR)+0.1183851(GPA)+0.0243075(Research1)

Jika kita masukan nilai 1 pada GRE.score maka akan menaikan nilai chance of admit