Kita menggunakan dataset Graduate Admissions dari Kaggle. Dataset ini dibuat dengan tujuan membantu siswa dalam memilih universitas dengan profil mereka. Hasil yang diprediksi memberi insight tentang peluang mereka untuk masuk universitas berdasarkan profil mereka.
Apa yang akan kita lakukan ?
Kita akan mengolah data dengan regresi linear menggunakan dataset graduate admissions. Langkah - langkah yang akan kita lakukan sebagai berikut:
Chance.of.Admit sebagai variabel target dan variabel lainnya sebagai prediktorChance.of.Admit dengan variabel prediktor lainnyaregresi linear untuk menjelaskan variabel Chance.of.Admit berdasarkan prediktor## 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...
Dataset graduate admissions memiliki variabel-variabel sebagai berikut:
Dataset memiliki 500 baris dan 9 kolom. Variabel target kita adalah Chance.of.Admit.
Serial.No. adalah nomor pengenal peserta sehingga kita bisa mengabaikannya.Kita akan menggunakan variabel lain sebagai prediktor.
Langkah pertama kita perlu memisahkan data yang tidak akan kita gunakan dari dataset kita
Langkah selanjutnya kita harus mengecek apakah di dataset kita terdapat missing values
## GRE.Score TOEFL.Score University.Rating SOP
## 0 0 0 0
## LOR CGPA Research Chance.of.Admit
## 0 0 0 0
Tidak terdapat missing values di dataset Graduate Admissions
Lihat Kolerasi Antar Variabel
Grafik tersebut menunjukkan bahwa semua variabel memiliki korelasi yang kuat dengan variabel Chance.of.Admit.
Sebelumnya kita perlu membagi data menjadi dataset train dan dataset uji. Kita akan menggunakan dataset train untuk melatih model regresi linier. Dataset pengujian akan digunakan sebagai pembanding dan melihat apakah model menjadi overfit atau tidak dalam memprediksi data baru yang belum terlihat selama fase pelatihan.
Kita akan 80% dari data sebagai data pelatihan dan 20% sebagai data pengujian.
Kita akan memulai membuat model pertama dengan menggunakan seluruh variabel menjadi prediktor.
##
## Call:
## lm(formula = Chance.of.Admit ~ ., data = gradAdmission_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.26765 -0.02392 0.01151 0.03327 0.14979
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2733204 0.1221932 -10.421 < 2e-16 ***
## GRE.Score 0.0017502 0.0006009 2.913 0.003789 **
## TOEFL.Score 0.0028152 0.0010102 2.787 0.005584 **
## University.Rating 0.0054974 0.0043271 1.270 0.204674
## SOP 0.0045725 0.0053186 0.860 0.390474
## LOR 0.0174360 0.0047358 3.682 0.000264 ***
## CGPA 0.1205607 0.0110485 10.912 < 2e-16 ***
## Research 0.0205563 0.0075931 2.707 0.007082 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06134 on 392 degrees of freedom
## Multiple R-squared: 0.8194, Adjusted R-squared: 0.8162
## F-statistic: 254.2 on 7 and 392 DF, p-value: < 2.2e-16
Selanjutnya kita akan membuat model kedua dengan tanpa prediktor.
##
## Call:
## lm(formula = Chance.of.Admit ~ 1, data = gradAdmission_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3865 -0.0865 0.0035 0.1135 0.2435
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.726500 0.007154 101.6 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1431 on 399 degrees of freedom
Dari hasil pemodelan antara model 1 dan model 2, kita bisa lihat model 1 memiliki adjusted r-squared sebesar 81,94% . Bearti variabel prediktor menjelaskan variansi dari variabel target cukup baik.
Tentu ada kemungkinan untuk meningkatkan adjusted r-squared dengan cara kita harus mengecek prediktor apa saja yang bagus digunakan dalam pemodelan. Untuk mengeceknya kita akan menggunakan backward dan forward
Backward elimination melakukan pengurangan prediktor (membuang prediktor dari yang paling tidak signifikan mempengaruhi target) dari model yang mencakup seluruh prediktor
## Start: AIC=-2225.19
## Chance.of.Admit ~ GRE.Score + TOEFL.Score + University.Rating +
## SOP + LOR + CGPA + Research
##
## Df Sum of Sq RSS AIC
## - SOP 1 0.00278 1.4775 -2226.4
## - University.Rating 1 0.00607 1.4808 -2225.6
## <none> 1.4748 -2225.2
## - Research 1 0.02757 1.5023 -2219.8
## - TOEFL.Score 1 0.02922 1.5040 -2219.3
## - GRE.Score 1 0.03192 1.5067 -2218.6
## - LOR 1 0.05100 1.5257 -2213.6
## - CGPA 1 0.44796 1.9227 -2121.1
##
## Step: AIC=-2226.44
## Chance.of.Admit ~ GRE.Score + TOEFL.Score + University.Rating +
## LOR + CGPA + Research
##
## Df Sum of Sq RSS AIC
## <none> 1.4775 -2226.4
## - University.Rating 1 0.01184 1.4894 -2225.2
## - Research 1 0.02766 1.5052 -2221.0
## - GRE.Score 1 0.03101 1.5085 -2220.1
## - TOEFL.Score 1 0.03185 1.5094 -2219.9
## - LOR 1 0.06135 1.5389 -2212.2
## - CGPA 1 0.48214 1.9597 -2115.5
Pada backward prediktor yang digunakan adalah GRE.Score,TOEFL.Score,University.Rating,LOR,CGPA,Research
Forward selection melakukan penambahan prediktor (menambah prediktor dari yang paling signifikan mempengaruhi target) dari model tanpa prediktor
forward <- step(object = model_none, direction = "forward",
scope = list(lower=model_none, upper=model_all),trace = F)Setelah itu kita bandingkan kinerja antara backward dan forward
## # Comparison of Model Performance Indices
##
## Model | Type | AIC | BIC | R2 | R2 (adj.) | RMSE | Sigma | BF | p
## ----------------------------------------------------------------------------------
## backward | lm | -1089.29 | -1057.35 | 0.82 | 0.82 | 0.06 | 0.06 | 1.00 |
## forward | lm | -1089.29 | -1057.35 | 0.82 | 0.82 | 0.06 | 0.06 | 1.00 |
Berdasarkan adj.rsquared dan RMSE, baik model stepwise backward maupun stepwise forward, kedua model memiliki performace sama baiknya. Jadi kita gunakan satu di antara mereka.
Analisis regresi adalah suatu teknik statistikal yang dipergunakan untuk menganalisis pengaruh di antara suatu variabel dependen dan variabel independen. Dalam menggunakan analisis regresi terdapat hal-hal yang harus dipenuhi, yaitu asumsi-asumsinya. Adapun pada sesi ini, kita akan melakukan uji asumsi berupa:
Dilakukan sebelum membuat model untuk memastikan bahwa variabel prediktor dengan target memiliki hubungan yang linear. Dapat dicek dengan menghitung nilai korelasi menggunakan function ggcorr() dari library GGally
Grafik tersebut menunjukkan bahwa semua variabel memiliki korelasi yang kuat dengan variabel Chance.of.Admit.
Residual adalah beda antara y aktual dengan y prediksi. Uji asumsi normalitas regresi linear dapat diuji dengan berbagai metode uji normalitas.
Dilakukan dengan cara:
Grafik tersebut menunjukkan distribusi normal. Artinya error banyak berkumpul disekitar angka 0.
shapiro.test()Shapiro-Wilk hypothesis:
##
## Shapiro-Wilk normality test
##
## data: backward$residuals
## W = 0.91232, p-value = 1.787e-14
Hasil dari shapiro.test() p-value > alpha (alpha = 0.05) yang bearti gagal tolak h0 (terima h0)
Maka error/residual berdistribusi normal
Harapannya dari model yang terbentuk memperoleh error/residual yang variansinya tidak membentuk sebuah pola (harus menyebar random). Artinya ketika error tidak membentuk pola, model kita sudah berhasil menangkap pola pada data.
Dilakukan dengan cara:
bptest() dari library lmtestBreusch-Pagan hypothesis :
##
## studentized Breusch-Pagan test
##
## data: backward
## BP = 21.087, df = 6, p-value = 0.00177
Hasil dari bptest() pvalue > alpha yang bearti gagal tolak H0 (terima h0) Maka residual bersifat Homoscedasticity
Harapannya pada model linear regression, tidak terjadi multikolinearitas. Multikolinearitas terjadi ketika antar variabel prediktor yang digunakan pada model memiliki hubungan yang kuat. Ditakutkan ketikan antar prediktor memiliki hubungan kuat, informasi yang dijelaskan redundan.
Dilakukan dengan menghitung nilai vif menggunakan function vif() dari library car. Ketika nilai VIF lebih kecil dari 10, asumsi no-multicolinearity terpenuhi
## GRE.Score TOEFL.Score University.Rating LOR
## 4.730943 4.006843 2.176064 1.869430
## CGPA Research
## 4.581451 1.493267
Kita cek RSME dari dataset train
## [1] 0.06077687
Kita cek RSME dari dataset test
## [1] 0.05451787
Dari proses olah data berikut ini prediktor yang mempengaruhi Chance.of.Admit:
Proses pemodelan memperoleh hasil:
Hasil pada RMSE menunjukkan pada model bersifat overfit.