The dataset contains several parameters which are considered important during the application for Masters Programs.
The parameters included are :
GRE Scores ( out of 340 )
TOEFL Scores ( out of 120 )
University Rating ( out of 5 )
Statement of Purpose and Letter of Recommendation Strength ( out of 5 )
Undergraduate GPA ( out of 10 )
Research Experience ( either 0 or 1 )
Chance of Admit ( ranging from 0 to 1 )
#> Rows: 400
#> Columns: 8
#> $ GRE.Score <int> 337, 324, 316, 322, 314, 330, 321, 308, 302, 323, 3…
#> $ TOEFL.Score <int> 118, 107, 104, 110, 103, 115, 109, 101, 102, 108, 1…
#> $ 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, 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.0…
#> $ 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.5…
#> GRE.Score TOEFL.Score University.Rating SOP
#> 0 0 0 0
#> LOR CGPA Research Chance.of.Admit
#> 0 0 0 0
Business Problem
Ingin memprediksi Chance.of.Admit berdasarkan CGPA (Undergraduate GPA). Tentukan:
Cek persebaran data
Cek persebaran variabel Chance.of.Admit:
Cek korelasi antar variabel target dan prediktor
- menggunakan nilai korelasi
#> [1] 0.8732891
Ketika kita mendapatkan ada dua variabel yang saling berhubungan erat. Maka dapat dikatakan kedua variabel tersebut memiliki indikasi pasangan prediktor - target yang baik.
Nilai korelasi yang besar adalah indikasi yang baik untuk hubungan prediktor dan target.
Selanjutnya jika kita ingin menjawab dari business problem yang kita miliki, yaitu kita ingin melakukan prediksi Chance.of.Admit berdasarkan nilai CGPA, maka formula yang kita buat adalah sebagai berikut.
#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA, data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.274575 -0.030084 0.009443 0.041954 0.180734
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.07151 0.05034 -21.29 <0.0000000000000002 ***
#> CGPA 0.20885 0.00584 35.76 <0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06957 on 398 degrees of freedom
#> Multiple R-squared: 0.7626, Adjusted R-squared: 0.762
#> F-statistic: 1279 on 1 and 398 DF, p-value: < 0.00000000000000022
Model yang diperoleh:
y = b0 +b1X Chance.of.Admit = -1.07151 + 0.20885CGPA
karena nilai slope positif, artinya hubungan antara chance.of.admit dengan CGPA berhubungan lurus, ketika chance.of.admit naik, maka CGPA naik, begitu sebaliknya.
Variabel prediktor berpengaruh signifikan terhadap variabel target, hal ini dapat dilihat dari nilai p-value < 0.05 sehingga CGPA berpengaruh signifikan terhadap Chance.of.Admit.
Interpretasi model regresi
Intercept: Titik awal garis regresi terbentuk, menunjukkan nilai target variabel ketika nilai prediktor = 0
Slope: kenaikan setiap 1 satuan, kenaikan 1 prediktor meningkatkan target variabel sebesar slope
Koefisien bernilai positif = korelasi positif
Interpretasi summary() model
#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA, data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.274575 -0.030084 0.009443 0.041954 0.180734
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.07151 0.05034 -21.29 <0.0000000000000002 ***
#> CGPA 0.20885 0.00584 35.76 <0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06957 on 398 degrees of freedom
#> Multiple R-squared: 0.7626, Adjusted R-squared: 0.762
#> F-statistic: 1279 on 1 and 398 DF, p-value: < 0.00000000000000022
Dari model_chance kita peroleh R-Squared sebesar 76.26%, artinya model regresi kita hanya mampu menjelaskan variansi dari Profit sebesar 76.3% berdasarkan CGPA (Undergraduate GPA).
Goodness of fit dari model ini dapat dilihat dari nilai R-squared sebesar 0.7626/ 76.26%
# Visualizing fitting line
plot(x = admission$CGPA, y = admission$Chance.of.Admit)
abline(model_chance, col = "red")Melakukan Pengecekkan Leverage:
hist()
boxplot()
Melakukan pengecekan outlier pada variabel CGPA
* Subset data admission tanpa melibatkan nilai outlier pada variabel Sales
#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA, data = chance_no)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.274546 -0.030154 0.008999 0.042068 0.180851
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.072810 0.051013 -21.03 <0.0000000000000002 ***
#> CGPA 0.208995 0.005916 35.33 <0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06965 on 397 degrees of freedom
#> Multiple R-squared: 0.7587, Adjusted R-squared: 0.7581
#> F-statistic: 1248 on 1 and 397 DF, p-value: < 0.00000000000000022
Formulasi model no outlier :
Profit = -1.072810 + 0.2089954*CGPA
Kita akan coba bandingkan model regresi yang menggunakan nilai outlier pada variabel CGPA dan tanpa nilai outlier
plot(admission$CGPA, admission$Chance.of.Admit)
abline(model_chance$coefficients[1], model_chance$coefficients[2], col = "red")
abline(model_chance_no$coefficients[1], model_chance_no$coefficients[2], col = "blue") Kesimpulan:
Outlier yang dimiliki pada data Sales merupakan outlier yang high leverage low influence karena jika dilihat dari kemiringan garis regresi yang terbentuk pada model yang menggunakan outlier dan model tanpa outlier, kemiringan garisnya sama/pada satu garis.
#> [1] 0.7626339
#> [1] 0.7586926
Multiple linear regression merupakan metode linear regresi dengan menggunakan lebih dari 1 variabel prediktor.
# Model dengan menggunakan semua prediktor
model_chance_admit_all <- lm(formula = Chance.of.Admit~., data = admission)
summary(model_chance_admit_all)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ ., data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.26259 -0.02103 0.01005 0.03628 0.15928
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.2594325 0.1247307 -10.097 < 0.0000000000000002 ***
#> GRE.Score 0.0017374 0.0005979 2.906 0.00387 **
#> TOEFL.Score 0.0029196 0.0010895 2.680 0.00768 **
#> University.Rating 0.0057167 0.0047704 1.198 0.23150
#> SOP -0.0033052 0.0055616 -0.594 0.55267
#> LOR 0.0223531 0.0055415 4.034 0.000066 ***
#> CGPA 0.1189395 0.0122194 9.734 < 0.0000000000000002 ***
#> Research 0.0245251 0.0079598 3.081 0.00221 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06378 on 392 degrees of freedom
#> Multiple R-squared: 0.8035, Adjusted R-squared: 0.8
#> F-statistic: 228.9 on 7 and 392 DF, p-value: < 0.00000000000000022
Dari output yang didapatkan terdapat variabel yang sangat signifikan yaitu:
Dari output yang didapatkan terdapat variabel yang sangat tidak signifikan yaitu:
Ketika kita menggunakan lebih dari satu prediktor, R-Square akan selalu bertambah seiring dengan bertambahnya variabel prediktor baru meskipun belum tentu memiliki pengaruh terhadap model. Untuk mengatasi hal ini, dibuat metrik baru bernama Adjusted R-Square yang menghitung nilai R-Square tetapi juga mempertimbangkan jumlah variabel yang digunakan sehingga nilai R-Square yang ditampilkan lebih tepat.
R-squared digunakan untu simple linear regression, sedangkan Adjusted R-squared digunakan untuk multiple regression. Karena Adjusted R-squared memperhitungkan banyak observasi dan variabel prediktor yang digunakan.
Mari kita buat beberapa model dan kita bandingkan nilai r-squared nya:
model_admit1 <- lm(Chance.of.Admit ~ CGPA, admission)
model_admit2 <- lm(Chance.of.Admit ~ CGPA+LOR, admission)
model_admit3 <- lm(Chance.of.Admit ~ CGPA+LOR+TOEFL.Score, admission)#> [1] 0.7626339
#> [1] 0.7756277
#> [1] 0.7896201
#> [1] 0.7620375
#> [1] 0.7744974
#> [1] 0.7880263
Summary ->
Feature selection merupakan tahapan dalam memilih variabel yang akan digunakan
Mengevaluasi model stepwise menggunakan nilai AIC (Akaike Information Criterion/ Information Loss). AIC menunjukkan banyak informasi yang hilang pada model.
Bentuk Model:
#>
#> Call:
#> lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR +
#> CGPA + Research, data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.263542 -0.023297 0.009879 0.038078 0.159897
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.2984636 0.1172905 -11.070 < 0.0000000000000002 ***
#> GRE.Score 0.0017820 0.0005955 2.992 0.00294 **
#> TOEFL.Score 0.0030320 0.0010651 2.847 0.00465 **
#> LOR 0.0227762 0.0048039 4.741 0.00000297 ***
#> CGPA 0.1210042 0.0117349 10.312 < 0.0000000000000002 ***
#> Research 0.0245769 0.0079203 3.103 0.00205 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06374 on 394 degrees of freedom
#> Multiple R-squared: 0.8027, Adjusted R-squared: 0.8002
#> F-statistic: 320.6 on 5 and 394 DF, p-value: < 0.00000000000000022
Summary: Setelah dilakukan Feature Selection menggunakan Backward Elimination, didapatkan model dengan nilai AIC terkecil yaitu:
-> lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR + CGPA + Research, data = admission)
Dengan nilai R-Squared sebesar: 0.8027/ 80.27%
Memuat mmodel tanpa prediktor:
model_forward <- step(object = model_chance_admit_none, direction = "forward",
scope = list(lower = model_chance_admit_none, upper = model_chance_admit_all), trace = F)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ CGPA + GRE.Score + LOR + Research +
#> TOEFL.Score, data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.263542 -0.023297 0.009879 0.038078 0.159897
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.2984636 0.1172905 -11.070 < 0.0000000000000002 ***
#> CGPA 0.1210042 0.0117349 10.312 < 0.0000000000000002 ***
#> GRE.Score 0.0017820 0.0005955 2.992 0.00294 **
#> LOR 0.0227762 0.0048039 4.741 0.00000297 ***
#> Research 0.0245769 0.0079203 3.103 0.00205 **
#> TOEFL.Score 0.0030320 0.0010651 2.847 0.00465 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06374 on 394 degrees of freedom
#> Multiple R-squared: 0.8027, Adjusted R-squared: 0.8002
#> F-statistic: 320.6 on 5 and 394 DF, p-value: < 0.00000000000000022
model_both <- step(object = model_chance_admit_all, direction = "both",
scope = list(lower = model_chance_admit_none, upper = model_chance_admit_all), trace = F)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR +
#> CGPA + Research, data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.263542 -0.023297 0.009879 0.038078 0.159897
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.2984636 0.1172905 -11.070 < 0.0000000000000002 ***
#> GRE.Score 0.0017820 0.0005955 2.992 0.00294 **
#> TOEFL.Score 0.0030320 0.0010651 2.847 0.00465 **
#> LOR 0.0227762 0.0048039 4.741 0.00000297 ***
#> CGPA 0.1210042 0.0117349 10.312 < 0.0000000000000002 ***
#> Research 0.0245769 0.0079203 3.103 0.00205 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.06374 on 394 degrees of freedom
#> Multiple R-squared: 0.8027, Adjusted R-squared: 0.8002
#> F-statistic: 320.6 on 5 and 394 DF, p-value: < 0.00000000000000022
Perbandingan nilai adjusted r-squared pada ketiga model yang sudah dibuat
#> [1] "model backward: 0.800218756144748"
#> [1] "model forward: 0.800218756144748"
#> [1] "model both: 0.800218756144748"
Dapat disimpulkan setelah dilakukan perbandingan nilai adjusted r-squared pada ketiga model yang telah dilakukan Feature Selection, dihasilkan nilai adjusted r-squared yang sama yaitu sebesar 0.8027/80.27%.
Mencari hasil prediksi dengan confidence interval 95%
set.seed(100)
random_admission <- sample(nrow(admission),10)
admission_test <- admission[random_admission,]admission_predict <- predict(object = model_backward, newdata = admission_test, interval = "prediction",
level = 0.95)
admission_predict#> fit lwr upr
#> 202 0.7129861 0.5869537 0.8390184
#> 358 0.6122619 0.4854007 0.7391231
#> 112 0.7700433 0.6443491 0.8957375
#> 206 0.5214041 0.3952517 0.6475564
#> 4 0.7394830 0.6134049 0.8655611
#> 311 0.7489737 0.6229587 0.8749887
#> 326 0.8558390 0.7299232 0.9817548
#> 98 0.8550961 0.7283098 0.9818825
#> 391 0.6243625 0.4983321 0.7503929
#> 7 0.7119613 0.5854532 0.8384694
Visualisasi Confidence Interval untuk Data Copiers
library(ggplot2)
ggplot(admission, aes(x = CGPA, y= Chance.of.Admit))+
geom_point() +
geom_smooth(method = "lm", level = 0.95)Harapan dalam membuat madel linear regression, error yang dihasilkan berdistribusi normal. Artinya error banyak berkumpul disekitar angka 0. untuk menguji asumsi ini dpat dilakukan:
hist()shapiro.test(). harapannya p-value > alpha agar keputusan yang diambil adalah gagal tolak H0)Shapiro-Wilk hypotesis test:
\[ H_0: error/residual\ berdistribusi\ normal\\ H_1: error/residual\ tidak\ berdistribusi\ normal \]
#>
#> Shapiro-Wilk normality test
#>
#> data: model_backward$residuals
#> W = 0.92193, p-value = 0.0000000000001443
Kesimpulan: Asumsi normality of residuals pada model_backward tidak terpenuhi
Jika asumsi normalitas tidak terpenuhi, maka hasil uji signifikansi serta nilai standard error dari intercept dan slope setiap prediktor yang dihasilkan bersifat bias atau tidak mencerminkan nilai sebenarnya. Jika residual memiliki distribusi yang tidak normal, bisa lakukan transformasi data pada target variabel atau menambahkan sample data.
model_hampir_final <- lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR +
CGPA + Research, data = admission)
summary(model_hampir_final)#>
#> Call:
#> lm(formula = Chance.of.Admit ~ GRE.Score + TOEFL.Score + LOR +
#> CGPA + Research, data = admission)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.171814 -0.014398 0.005996 0.024588 0.100183
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.3593729 0.0756934 -4.748 0.00000288 ***
#> GRE.Score 0.0010467 0.0003843 2.723 0.00675 **
#> TOEFL.Score 0.0017364 0.0006874 2.526 0.01193 *
#> LOR 0.0140040 0.0031002 4.517 0.00000830 ***
#> CGPA 0.0734977 0.0075731 9.705 < 0.0000000000000002 ***
#> Research 0.0138537 0.0051113 2.710 0.00701 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.04114 on 394 degrees of freedom
#> Multiple R-squared: 0.7777, Adjusted R-squared: 0.7749
#> F-statistic: 275.7 on 5 and 394 DF, p-value: < 0.00000000000000022
#>
#> Shapiro-Wilk normality test
#>
#> data: model_hampir_final$residuals
#> W = 0.9105, p-value = 0.00000000000001225
#>
#> studentized Breusch-Pagan test
#>
#> data: model_hampir_final
#> BP = 29.923, df = 5, p-value = 0.00001527
#Multiculinearity
#> GRE.Score TOEFL.Score LOR CGPA Research
#> 4.585053 4.104255 1.829491 4.808767 1.530007
# install.packages("performance")
library(performance)
# asumsi multikolinearity
check_collinearity(model_hampir_final)#> Warning: Non-normality of residuals detected (p < .001).
#> Warning: Heteroscedasticity (non-constant error variance) detected (p = 0.000).