Mobil BMW dikenal dengan segmentasi produk yang identik dengan kemewahan serta fasilitas dan kecanggihnya. Selain itu, mobil BMW memiliki model, harga, transmisi jarak tempuh, bahan bakar, jenis, pajak, mpg, dan ukuran yang berbeda-beda. Cara yang dapat digunakan dalam memilih mobil BMW berdasarkan hal tersebut adalah dengan penerapan regresi linear. Karena, terdapat beberapa data yang dapat digunakan dalam melakukan perhitungan guna mendapatkan perkiraan harga mobil BMW. Metode regresi linear digunakan sebagai penentuan harga jual mobil BMW. Tujuan dari penelitian ini adalah menerapkan metode Regresi Linear dalam menentukan harga jual mobil BMW berdasarkan model, tahun pembuatan, harga, transmisi jarak tempuh, bahan bakar, jenis, pajak, mpg, dan ukuran. Sistem yang dibangun ini untuk membantu memprediksi harga jual mobil BMW dapat bermanfaat dan baik.
library(dplyr)## Warning: package 'dplyr' was built under R version 4.1.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Package “dplyr” adalah package yang diperlukan untuk melakukan manipulasi data frame. Kelebihan “dplyr” adalah fungsional untuk eksplorasi dan transformasi data serta fungsi yang intuitif dan mudah dimengerti.
library(GGally)## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(ggplot2)“ggplot2” adalah package plot pada R yang divisualisasikan dalam bentuk grafik. “GGally” memperluas “ggplot2” dengan menambahkan beberapa fungsi untuk memudahkan dalam merubah data kedalam bentuk grafik. Beberapa grafik yang digunakan dalam model kami adalah tabel korelasi, histogram, qqnorm, dan boxplot.
library(caret)## Warning: package 'caret' was built under R version 4.1.2
## Loading required package: lattice
Package "caret (Classification And REgression Training) adalah sekumpulan fungsi yang mencoba merampingkan proses untuk membuat model prediktif. Tool pada package tersebut antara lain, data splitting, pre-processing, feature selection, model tuning using resampling, dan variable importance estimation
library(car)## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
Package “car” (Companion to Applied Regression) adalah package untuk memeriksa volidity dari berbagai teknik regresi yang memerlukan banyak tes pada hasil kita.
library(MLmetrics)## Warning: package 'MLmetrics' was built under R version 4.1.2
##
## Attaching package: 'MLmetrics'
## The following objects are masked from 'package:caret':
##
## MAE, RMSE
## The following object is masked from 'package:base':
##
## Recall
Package “MLmetrics” adalah package yang digunakan untuk mengevaluasi matriks.
library(lime)## Warning: package 'lime' was built under R version 4.1.2
##
## Attaching package: 'lime'
## The following object is masked from 'package:dplyr':
##
## explain
Package “MLmetrics” adalah package yang digunakan untuk membuat fungsi penjelas pada data training.
library(rsample)## Warning: package 'rsample' was built under R version 4.1.2
Package “rsample” adalah package yang digunakan untuk menyediakan fungsi untuk membuat berbagai jenis sampel ulang dan kelas yang sesuai untuk analisis data.
library(lmtest)## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
Package “lmtest” adalah package yang digunakan untuk melakukan pemeriksaan diagnostik dalam model regresi linier.
mobil_bmw<-read.csv("Mobil_bmw.csv")
head(mobil_bmw)tail(mobil_bmw)Fungsi head adalah untuk menampilkan 6 data teratas, sedangkan fungsi tail adalah untuk menampilkan data terakhir.
Cek tipe data ini bertujuan untuk mengetahui tipe data pada setiap variabel.
str(mobil_bmw)## 'data.frame': 10781 obs. of 9 variables:
## $ model : chr " 5 Series" " 6 Series" " 5 Series" " 1 Series" ...
## $ year : int 2014 2018 2016 2017 2014 2016 2017 2018 2017 2016 ...
## $ price : int 11200 27000 16000 12750 14500 14900 16000 16250 14250 14250 ...
## $ transmission: chr "Automatic" "Automatic" "Automatic" "Automatic" ...
## $ mileage : int 67068 14827 62794 26676 39554 35309 38538 10401 42668 36099 ...
## $ fuelType : chr "Diesel" "Petrol" "Diesel" "Diesel" ...
## $ tax : int 125 145 160 145 160 125 125 145 30 20 ...
## $ mpg : num 57.6 42.8 51.4 72.4 50.4 60.1 60.1 52.3 62.8 68.9 ...
## $ engineSize : num 2 2 3 1.5 3 2 2 1.5 2 2 ...
Berdasarkan tipe data di atas, data yang digunakan yaitu data character, integer, dan numeric. Pada variabel model, transmission, dan fuelType menggunakkan tipe data character; pada variabbel yaer, price, mileage, dan tax mengggunakan tipe data integer; dan pada variabel mpg dan engineSize menggunakan tipe data numeric.
colSums(is.na(mobil_bmw))## model year price transmission mileage fuelType
## 0 0 0 0 0 0
## tax mpg engineSize
## 0 0 0
anyNA(mobil_bmw)## [1] FALSE
Cek null diatas diasumsikan data terdapat null value. Berdasarkan hasil cek null di atas, diperoleh outpute nol semua. Sehingga, FALSE atau kontra terhadap asumsi awal dan dapat disimpulkan bahwa tidak ada nilai yang hilang pada data
Data dengan tipe kategorikal umumnya pada analisis regresi haruslah bertipe factor agar nantinya dapat diikutsertakan dalam pembuatan model regresi.Oleh karena itu data kategori selain bertipe factor akan diubah terlebih dahulu ke bentuk factor.
mobil_bmw[,c("model","year","transmission","fuelType")]<-lapply(mobil_bmw[,c("model","year","transmission","fuelType")],as.factor)Akan dicek kembali apakah data tersebut benar benar sudah bertipe factor
str(mobil_bmw)## 'data.frame': 10781 obs. of 9 variables:
## $ model : Factor w/ 24 levels " 1 Series"," 2 Series",..: 5 6 5 1 7 5 5 2 4 5 ...
## $ year : Factor w/ 25 levels "1996","1997",..: 19 23 21 22 19 21 22 23 22 21 ...
## $ price : int 11200 27000 16000 12750 14500 14900 16000 16250 14250 14250 ...
## $ transmission: Factor w/ 3 levels "Automatic","Manual",..: 1 1 1 1 1 1 1 2 2 1 ...
## $ mileage : int 67068 14827 62794 26676 39554 35309 38538 10401 42668 36099 ...
## $ fuelType : Factor w/ 5 levels "Diesel","Electric",..: 1 5 1 1 1 1 1 5 1 1 ...
## $ tax : int 125 145 160 145 160 125 125 145 30 20 ...
## $ mpg : num 57.6 42.8 51.4 72.4 50.4 60.1 60.1 52.3 62.8 68.9 ...
## $ engineSize : num 2 2 3 1.5 3 2 2 1.5 2 2 ...
Berdasarkan hasil pengecekan data di atas, diperoleh bahwasannya data kategorikal sudah bertipe factor
summary(mobil_bmw)## model year price transmission
## 3 Series:2443 2019 :3485 Min. : 1200 Automatic:3588
## 1 Series:1969 2016 :1882 1st Qu.: 14950 Manual :2527
## 2 Series:1229 2017 :1721 Median : 20462 Semi-Auto:4666
## 5 Series:1056 2015 : 922 Mean : 22733
## 4 Series: 995 2018 : 848 3rd Qu.: 27940
## X1 : 804 2020 : 733 Max. :123456
## (Other) :2285 (Other):1190
## mileage fuelType tax mpg
## Min. : 1 Diesel :7027 Min. : 0.0 Min. : 5.5
## 1st Qu.: 5529 Electric: 3 1st Qu.:135.0 1st Qu.: 45.6
## Median : 18347 Hybrid : 298 Median :145.0 Median : 53.3
## Mean : 25497 Other : 36 Mean :131.7 Mean : 56.4
## 3rd Qu.: 38206 Petrol :3417 3rd Qu.:145.0 3rd Qu.: 62.8
## Max. :214000 Max. :580.0 Max. :470.8
##
## engineSize
## Min. :0.000
## 1st Qu.:2.000
## Median :2.000
## Mean :2.168
## 3rd Qu.:2.000
## Max. :6.600
##
indek=c()
for (i in 1:length(names(mobil_bmw))){
if(is.numeric(mobil_bmw[,i])==TRUE){
indek=c(indek,i)
}
}
dataku=mobil_bmw[,indek]Fungsi data secelction diatas adalah untuk menyeleksi data dimana data yang diambil hanyalah data bertipe numerik, outputnya akan digunakan untuk ggcor karena data pada korelasi harus berbentuk numeric
library(GGally)
ggcorr(dataku,label=T,label_size=3,hjust=0.9)Berdasarkan tabel diatas diperoleh bahwasanya semua variabel prediktor (khususnya bertipe numerik) memiliki korelasi dengan variabel targetnya yaitu price. Adapun nilai korelasi masing masing variabel prediktor dengan variabel “price” yaitu:
\(\text{1) price - miliage}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(-0,6\) atau korelasinya negatif.
\(\text{2) price - tax}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(0,3\) atau korelasinya positif.
\(\text{3) price - mpg}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(-0,2\) atau korelasinya negatif.
\(\text{4) price - engineSize}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(0,5\) atau korelasinya positif.
num_data <-mobil_bmw
for (i in 1:length(names(num_data))){
if(is.numeric(num_data[,i])==TRUE){
hist( num_data[,i], main=c("hist of ",names(num_data)[i]), breaks=20, prob=TRUE)
}
}for (i in 1:length(names(num_data))){
if(is.numeric(num_data[,i])==TRUE){
qqnorm(num_data[,i],main=c("Q-Q Plot ",names(num_data)[i]))
qqline(num_data[,i])
}
}for (i in 1:length(names(mobil_bmw))){
if(is.numeric(mobil_bmw[,i])==TRUE){
boxplot(mobil_bmw[,i] , main=names(mobil_bmw)[i])
}
}Berdasarkan tabel korelasi diperoleh bahwasanya semua variabel prediktor (khususnya bertipe numerik) memiliki korelasi dengan variabel targetnya yaitu price. Adapun nilai korelasi masing masing variabel prediktor dengan variabel “price” yaitu:
\(\text{1) price - miliage}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(-0,6\) atau korelasinya negatif artinya korelasi variabel-variabel tersebut berbanding terbalik
\(\text{2) price - tax}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(0,3\) atau korelasinya positif artinya korelasi variabel-variabel tersebut berbanding linier
\(\text{3) price - mpg}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(-0,2\) atau korelasinya negatif artinya korelasi variabel-variabel tersebut berbanding terbalik
\(\text{4) price - engineSize}\)Price sebagai variabel target dan tax sebagai variabel prediktor memiliki nilai korelasi sebesar \(0,5\) atau korelasinya positif artinya korelasi variabel-variabel tersebut berbanding linier
mobil_bmw=mobil_bmw[mobil_bmw$price<40000,]
boxplot(mobil_bmw$price , main="boxplot price")Dilihat dari visualisasi data baik itu pada boxplot ,histogram maupun qqnorm terlihat bahwa “price” memiliki outlier pada range \(>40000\). Outlier inilah yang menyebabkan model nantinya dapat bersifat bias,sehingga kita harus menghilangkan outlier tersebut dengan cara mengambil data pada kisaran \(<40000\).
Tahap ini merupakan tahap validasi data yang digunakan untuk mengevaluasi kinerja model atau algoritma dimana data dipisahkan menjadimenjadi dua bagian yaitu data training dan data testing,dimana proporsi masing masing \(85\%\) data trainning dan sisanya sebesar \(15\%\) untuk data testing.Metode validasi yang digunakan yaitu cross validation.
set.seed(100)
idx <- initial_split(mobil_bmw,prop = 0.85,strata = "price")
concrete.train <- training(idx)
concrete.test <- testing(idx)Pada tahap ini data training diproses untuk kemudian dibentuk model.Model yang digunakan yaitu model linier,dimana semua variabel diikutsertakan sebagai variabel prediktor terkecuali variabel price yang mana digunakan sebagai vaiabel target.
mod.linear <- lm(formula = price ~., concrete.train)
summary(mod.linear)##
## Call:
## lm(formula = price ~ ., data = concrete.train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16880.8 -1589.4 -97.9 1409.7 23705.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.203e+02 2.649e+03 -0.121 0.903772
## model 2 Series -2.237e+02 1.062e+02 -2.106 0.035266 *
## model 3 Series 2.018e+03 9.446e+01 21.364 < 2e-16 ***
## model 4 Series 2.396e+03 1.182e+02 20.278 < 2e-16 ***
## model 5 Series 3.732e+03 1.210e+02 30.833 < 2e-16 ***
## model 6 Series 4.416e+03 3.012e+02 14.658 < 2e-16 ***
## model 7 Series 7.020e+03 3.853e+02 18.218 < 2e-16 ***
## model i3 3.081e+04 1.355e+03 22.731 < 2e-16 ***
## model i8 2.740e+04 2.668e+03 10.271 < 2e-16 ***
## model M2 8.858e+03 1.519e+03 5.830 5.76e-09 ***
## model M3 1.280e+04 6.669e+02 19.196 < 2e-16 ***
## model M4 1.332e+04 4.227e+02 31.512 < 2e-16 ***
## model M5 9.666e+03 1.113e+03 8.685 < 2e-16 ***
## model M6 9.462e+03 1.355e+03 6.983 3.10e-12 ***
## model X1 2.477e+03 1.243e+02 19.934 < 2e-16 ***
## model X2 3.253e+03 1.902e+02 17.101 < 2e-16 ***
## model X3 6.783e+03 1.539e+02 44.070 < 2e-16 ***
## model X4 8.163e+03 2.602e+02 31.377 < 2e-16 ***
## model X5 1.074e+04 2.274e+02 47.205 < 2e-16 ***
## model X6 1.095e+04 4.187e+02 26.162 < 2e-16 ***
## model Z3 3.438e+03 2.205e+03 1.559 0.119051
## model Z4 4.300e+03 2.992e+02 14.371 < 2e-16 ***
## year1997 4.047e+03 4.316e+03 0.938 0.348361
## year1998 4.677e+03 4.316e+03 1.084 0.278568
## year1999 5.440e+03 3.898e+03 1.396 0.162897
## year2000 4.119e+03 3.215e+03 1.281 0.200067
## year2001 1.000e+04 3.119e+03 3.208 0.001342 **
## year2002 6.123e+03 2.985e+03 2.051 0.040303 *
## year2003 4.159e+03 3.216e+03 1.293 0.195981
## year2004 4.813e+03 2.773e+03 1.736 0.082628 .
## year2005 3.807e+03 2.942e+03 1.294 0.195688
## year2006 6.104e+03 2.737e+03 2.230 0.025767 *
## year2007 7.444e+03 2.735e+03 2.722 0.006506 **
## year2008 7.730e+03 2.688e+03 2.876 0.004043 **
## year2009 8.617e+03 2.675e+03 3.221 0.001282 **
## year2010 8.970e+03 2.662e+03 3.370 0.000756 ***
## year2011 8.717e+03 2.656e+03 3.282 0.001034 **
## year2012 1.058e+04 2.639e+03 4.009 6.14e-05 ***
## year2013 1.159e+04 2.630e+03 4.407 1.06e-05 ***
## year2014 1.256e+04 2.629e+03 4.777 1.81e-06 ***
## year2015 1.389e+04 2.628e+03 5.288 1.27e-07 ***
## year2016 1.523e+04 2.627e+03 5.796 7.02e-09 ***
## year2017 1.688e+04 2.627e+03 6.425 1.39e-10 ***
## year2018 1.872e+04 2.628e+03 7.125 1.12e-12 ***
## year2019 2.332e+04 2.627e+03 8.878 < 2e-16 ***
## year2020 2.570e+04 2.629e+03 9.776 < 2e-16 ***
## transmissionManual -1.136e+03 8.601e+01 -13.211 < 2e-16 ***
## transmissionSemi-Auto 4.131e+02 7.145e+01 5.781 7.67e-09 ***
## mileage -8.394e-02 1.955e-03 -42.934 < 2e-16 ***
## fuelTypeElectric 4.132e+03 1.601e+03 2.582 0.009845 **
## fuelTypeHybrid 5.782e+03 2.901e+02 19.926 < 2e-16 ***
## fuelTypeOther 4.894e+03 5.413e+02 9.041 < 2e-16 ***
## fuelTypePetrol -4.919e+02 9.076e+01 -5.420 6.12e-08 ***
## tax -5.510e+00 6.906e-01 -7.979 1.67e-15 ***
## mpg -6.516e+01 3.799e+00 -17.150 < 2e-16 ***
## engineSize 3.323e+03 8.374e+01 39.688 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2622 on 8460 degrees of freedom
## Multiple R-squared: 0.8867, Adjusted R-squared: 0.8859
## F-statistic: 1203 on 55 and 8460 DF, p-value: < 2.2e-16
Model.admission.none<-lm(price~1, data = concrete.train)
model.forward<-step(object = Model.admission.none,direction = "forward",data = concrete.train,
scope=list(lower=Model.admission.none,upper=mod.linear))## Start: AIC=152560.9
## price ~ 1
##
## Df Sum of Sq RSS AIC
## + year 24 3.0423e+11 2.0905e+11 144959
## + mileage 1 2.4807e+11 2.6521e+11 146940
## + transmission 2 1.2187e+11 3.9141e+11 150256
## + model 21 1.0408e+11 4.0920e+11 150673
## + tax 1 5.7401e+10 4.5588e+11 151553
## + engineSize 1 3.5269e+10 4.7801e+11 151957
## + mpg 1 1.0483e+10 5.0280e+11 152387
## + fuelType 4 9.5913e+09 5.0369e+11 152408
## <none> 5.1328e+11 152561
##
## Step: AIC=144959.2
## price ~ year
##
## Df Sum of Sq RSS AIC
## + model 21 1.0709e+11 1.0196e+11 138887
## + engineSize 1 7.2119e+10 1.3693e+11 141358
## + transmission 2 3.9296e+10 1.6975e+11 143190
## + tax 1 3.3180e+10 1.7587e+11 143489
## + mileage 1 1.1768e+10 1.9728e+11 144468
## + mpg 1 2.8439e+09 2.0620e+11 144845
## + fuelType 4 1.5295e+09 2.0752e+11 144905
## <none> 2.0905e+11 144959
##
## Step: AIC=138887
## price ~ year + model
##
## Df Sum of Sq RSS AIC
## + engineSize 1 2.3508e+10 7.8451e+10 136657
## + mileage 1 1.7011e+10 8.4948e+10 137334
## + transmission 2 9.6197e+09 9.2340e+10 138047
## + tax 1 5.0204e+09 9.6939e+10 138459
## + mpg 1 4.8258e+09 9.7134e+10 138476
## + fuelType 4 9.9416e+08 1.0097e+11 138812
## <none> 1.0196e+11 138887
##
## Step: AIC=136656.9
## price ~ year + model + engineSize
##
## Df Sum of Sq RSS AIC
## + mileage 1 1.4530e+10 6.3921e+10 134915
## + transmission 2 3.6527e+09 7.4798e+10 136255
## + fuelType 4 1.8343e+09 7.6617e+10 136463
## + mpg 1 5.1109e+08 7.7940e+10 136603
## + tax 1 1.3786e+08 7.8313e+10 136644
## <none> 7.8451e+10 136657
##
## Step: AIC=134914.6
## price ~ year + model + engineSize + mileage
##
## Df Sum of Sq RSS AIC
## + transmission 2 2665535513 6.1256e+10 134556
## + fuelType 4 1140137012 6.2781e+10 134769
## + mpg 1 93930136 6.3827e+10 134904
## + tax 1 44357417 6.3877e+10 134911
## <none> 6.3921e+10 134915
##
## Step: AIC=134555.9
## price ~ year + model + engineSize + mileage + transmission
##
## Df Sum of Sq RSS AIC
## + fuelType 4 953377784 6.0302e+10 134430
## + mpg 1 99371102 6.1156e+10 134544
## + tax 1 80374083 6.1175e+10 134547
## <none> 6.1256e+10 134556
##
## Step: AIC=134430.3
## price ~ year + model + engineSize + mileage + transmission +
## fuelType
##
## Df Sum of Sq RSS AIC
## + mpg 1 1695474330 5.8607e+10 134189
## + tax 1 110812617 6.0191e+10 134417
## <none> 6.0302e+10 134430
##
## Step: AIC=134189.4
## price ~ year + model + engineSize + mileage + transmission +
## fuelType + mpg
##
## Df Sum of Sq RSS AIC
## + tax 1 437734382 5.8169e+10 134128
## <none> 5.8607e+10 134189
##
## Step: AIC=134127.6
## price ~ year + model + engineSize + mileage + transmission +
## fuelType + mpg + tax
backward_model<-step(object = mod.linear,direction = "backward",trace=T,data=concrete.train)## Start: AIC=134127.6
## price ~ model + year + transmission + mileage + fuelType + tax +
## mpg + engineSize
##
## Df Sum of Sq RSS AIC
## <none> 5.8169e+10 134128
## - tax 1 4.3773e+08 5.8607e+10 134189
## - mpg 1 2.0224e+09 6.0191e+10 134417
## - transmission 2 2.2902e+09 6.0459e+10 134452
## - fuelType 4 2.8021e+09 6.0971e+10 134520
## - engineSize 1 1.0830e+10 6.9000e+10 135580
## - mileage 1 1.2674e+10 7.0843e+10 135804
## - model 21 4.8920e+10 1.0709e+11 139283
## - year 24 6.1412e+10 1.1958e+11 140217
backward_model##
## Call:
## lm(formula = price ~ model + year + transmission + mileage +
## fuelType + tax + mpg + engineSize, data = concrete.train)
##
## Coefficients:
## (Intercept) model 2 Series model 3 Series
## -3.203e+02 -2.237e+02 2.018e+03
## model 4 Series model 5 Series model 6 Series
## 2.396e+03 3.732e+03 4.416e+03
## model 7 Series model i3 model i8
## 7.020e+03 3.081e+04 2.740e+04
## model M2 model M3 model M4
## 8.858e+03 1.280e+04 1.332e+04
## model M5 model M6 model X1
## 9.666e+03 9.462e+03 2.477e+03
## model X2 model X3 model X4
## 3.253e+03 6.783e+03 8.163e+03
## model X5 model X6 model Z3
## 1.074e+04 1.095e+04 3.438e+03
## model Z4 year1997 year1998
## 4.300e+03 4.047e+03 4.677e+03
## year1999 year2000 year2001
## 5.440e+03 4.119e+03 1.000e+04
## year2002 year2003 year2004
## 6.123e+03 4.159e+03 4.813e+03
## year2005 year2006 year2007
## 3.807e+03 6.104e+03 7.444e+03
## year2008 year2009 year2010
## 7.730e+03 8.617e+03 8.970e+03
## year2011 year2012 year2013
## 8.717e+03 1.058e+04 1.159e+04
## year2014 year2015 year2016
## 1.256e+04 1.389e+04 1.523e+04
## year2017 year2018 year2019
## 1.688e+04 1.872e+04 2.332e+04
## year2020 transmissionManual transmissionSemi-Auto
## 2.570e+04 -1.136e+03 4.131e+02
## mileage fuelTypeElectric fuelTypeHybrid
## -8.394e-02 4.132e+03 5.782e+03
## fuelTypeOther fuelTypePetrol tax
## 4.894e+03 -4.919e+02 -5.510e+00
## mpg engineSize
## -6.516e+01 3.323e+03
Metode stepwise digunakan untuk mencari model optimal dimana pada metode ini secara automaic mesin akan mengombinasikan semua variabel yang mungkin untuk mendapat model model,sehingga nantinya kita bisa melihat model dengan kompenen variabel apa yang menyebabkan model optimal atau paling baik.
mod.linear.step<- step(object = mod.linear, direction = "both")## Start: AIC=134127.6
## price ~ model + year + transmission + mileage + fuelType + tax +
## mpg + engineSize
##
## Df Sum of Sq RSS AIC
## <none> 5.8169e+10 134128
## - tax 1 4.3773e+08 5.8607e+10 134189
## - mpg 1 2.0224e+09 6.0191e+10 134417
## - transmission 2 2.2902e+09 6.0459e+10 134452
## - fuelType 4 2.8021e+09 6.0971e+10 134520
## - engineSize 1 1.0830e+10 6.9000e+10 135580
## - mileage 1 1.2674e+10 7.0843e+10 135804
## - model 21 4.8920e+10 1.0709e+11 139283
## - year 24 6.1412e+10 1.1958e+11 140217
summary(mod.linear.step)##
## Call:
## lm(formula = price ~ model + year + transmission + mileage +
## fuelType + tax + mpg + engineSize, data = concrete.train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16880.8 -1589.4 -97.9 1409.7 23705.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.203e+02 2.649e+03 -0.121 0.903772
## model 2 Series -2.237e+02 1.062e+02 -2.106 0.035266 *
## model 3 Series 2.018e+03 9.446e+01 21.364 < 2e-16 ***
## model 4 Series 2.396e+03 1.182e+02 20.278 < 2e-16 ***
## model 5 Series 3.732e+03 1.210e+02 30.833 < 2e-16 ***
## model 6 Series 4.416e+03 3.012e+02 14.658 < 2e-16 ***
## model 7 Series 7.020e+03 3.853e+02 18.218 < 2e-16 ***
## model i3 3.081e+04 1.355e+03 22.731 < 2e-16 ***
## model i8 2.740e+04 2.668e+03 10.271 < 2e-16 ***
## model M2 8.858e+03 1.519e+03 5.830 5.76e-09 ***
## model M3 1.280e+04 6.669e+02 19.196 < 2e-16 ***
## model M4 1.332e+04 4.227e+02 31.512 < 2e-16 ***
## model M5 9.666e+03 1.113e+03 8.685 < 2e-16 ***
## model M6 9.462e+03 1.355e+03 6.983 3.10e-12 ***
## model X1 2.477e+03 1.243e+02 19.934 < 2e-16 ***
## model X2 3.253e+03 1.902e+02 17.101 < 2e-16 ***
## model X3 6.783e+03 1.539e+02 44.070 < 2e-16 ***
## model X4 8.163e+03 2.602e+02 31.377 < 2e-16 ***
## model X5 1.074e+04 2.274e+02 47.205 < 2e-16 ***
## model X6 1.095e+04 4.187e+02 26.162 < 2e-16 ***
## model Z3 3.438e+03 2.205e+03 1.559 0.119051
## model Z4 4.300e+03 2.992e+02 14.371 < 2e-16 ***
## year1997 4.047e+03 4.316e+03 0.938 0.348361
## year1998 4.677e+03 4.316e+03 1.084 0.278568
## year1999 5.440e+03 3.898e+03 1.396 0.162897
## year2000 4.119e+03 3.215e+03 1.281 0.200067
## year2001 1.000e+04 3.119e+03 3.208 0.001342 **
## year2002 6.123e+03 2.985e+03 2.051 0.040303 *
## year2003 4.159e+03 3.216e+03 1.293 0.195981
## year2004 4.813e+03 2.773e+03 1.736 0.082628 .
## year2005 3.807e+03 2.942e+03 1.294 0.195688
## year2006 6.104e+03 2.737e+03 2.230 0.025767 *
## year2007 7.444e+03 2.735e+03 2.722 0.006506 **
## year2008 7.730e+03 2.688e+03 2.876 0.004043 **
## year2009 8.617e+03 2.675e+03 3.221 0.001282 **
## year2010 8.970e+03 2.662e+03 3.370 0.000756 ***
## year2011 8.717e+03 2.656e+03 3.282 0.001034 **
## year2012 1.058e+04 2.639e+03 4.009 6.14e-05 ***
## year2013 1.159e+04 2.630e+03 4.407 1.06e-05 ***
## year2014 1.256e+04 2.629e+03 4.777 1.81e-06 ***
## year2015 1.389e+04 2.628e+03 5.288 1.27e-07 ***
## year2016 1.523e+04 2.627e+03 5.796 7.02e-09 ***
## year2017 1.688e+04 2.627e+03 6.425 1.39e-10 ***
## year2018 1.872e+04 2.628e+03 7.125 1.12e-12 ***
## year2019 2.332e+04 2.627e+03 8.878 < 2e-16 ***
## year2020 2.570e+04 2.629e+03 9.776 < 2e-16 ***
## transmissionManual -1.136e+03 8.601e+01 -13.211 < 2e-16 ***
## transmissionSemi-Auto 4.131e+02 7.145e+01 5.781 7.67e-09 ***
## mileage -8.394e-02 1.955e-03 -42.934 < 2e-16 ***
## fuelTypeElectric 4.132e+03 1.601e+03 2.582 0.009845 **
## fuelTypeHybrid 5.782e+03 2.901e+02 19.926 < 2e-16 ***
## fuelTypeOther 4.894e+03 5.413e+02 9.041 < 2e-16 ***
## fuelTypePetrol -4.919e+02 9.076e+01 -5.420 6.12e-08 ***
## tax -5.510e+00 6.906e-01 -7.979 1.67e-15 ***
## mpg -6.516e+01 3.799e+00 -17.150 < 2e-16 ***
## engineSize 3.323e+03 8.374e+01 39.688 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2622 on 8460 degrees of freedom
## Multiple R-squared: 0.8867, Adjusted R-squared: 0.8859
## F-statistic: 1203 on 55 and 8460 DF, p-value: < 2.2e-16
prediction_test <- predict(object = mod.linear.step,newdata = concrete.test, interval = "confidence", level = 0.95)MAE<-mean(abs(prediction_test - concrete.test$price))
MAE## [1] 1997.778
prediction_train <- predict(object = mod.linear.step,newdata = concrete.train, interval = "confidence", level = 0.95)MAE<-mean(abs(prediction_train - concrete.train$price))
MAE## [1] 1965.681
library(dplyr)
predict.admission <- predict(object = mod.linear.step, newdata = concrete.test
%>% select(-price))Berikut merupakan perbandingan hasil dari data prediksi dengan data sebenarnya
head(data.frame(Prediksi= predict.admission,Sebenarnya=concrete.test$price))library(MLmetrics)
RMSE(y_pred = predict.admission,y_true = concrete.test$price)## [1] 2592.122
MAE<-mean(abs(predict.admission - concrete.test$price))
MAE## [1] 1979.214
#Normality Test
library(nortest)
lillie.test(mod.linear$residuals)##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: mod.linear$residuals
## D = 0.046338, p-value < 2.2e-16
Berdasarkan hasil normality test, diadapat p-valuenya bernilai \(2,2\times e^\text{-16}\) yang artinya \(p-value<0,05\) sehingga \(H_0\) diterima dan \(H_1\) ditolak berarti data tidak berdistribusi normal.
bptest(formula = mod.linear.step)##
## studentized Breusch-Pagan test
##
## data: mod.linear.step
## BP = 1032.5, df = 55, p-value < 2.2e-16
vif(mod.linear.step)## GVIF Df GVIF^(1/(2*Df))
## model 146.165715 21 1.126014
## year 22.306434 24 1.066823
## transmission 1.651878 2 1.133691
## mileage 3.008201 1 1.734417
## fuelType 6.052199 4 1.252389
## tax 2.299355 1 1.516362
## mpg 19.333570 1 4.396996
## engineSize 2.210234 1 1.486686
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.
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.
Berdasarkan model di atas, diperoleh :C R-squared :\(\text{0.8867}\)Karena berdasarkan R-squared yang bernilai \(88,67\%\) dan Adjusted R-squared yang bernilai \(88,59\%\), artinya model dapat meramalkan Y sebesar \(88,67\%\) dan Y meramalkan model sebesar \(88,59\%\), yang artinya nilai tersebut sudah berada pada model terbaik.