\(\text{1. Introduction}\)

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.

\(\text{2. Library and Setup}\)

\(\text{a. Package dplyr}\)

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.

\(\text{b. GGally dan ggplot}\)

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.

\(\text{c. Package caret}\)

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

\(\text{d. Package car}\)

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.

\(\text{e. Package MLmetrics}\)

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.

\(\text{f. Package lime}\)

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.

\(\text{g. Package rsample}\)

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.

\(\text{h. Package lmtest}\)

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.

\(\text{3. Read Data}\)

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.

\(\text{4. Preproccessing Data}\)

\(\text{a. Cek Tipe Data}\)

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.

\(\text{b. Cek Null Data}\)

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

\(\text{c. Convert tipe 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)

\(\text{Cek tipe data}\)

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

\(\text{d. Ringkasan Data}\)

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  
## 

Data selection(filter numeric only)

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

\(\text{5. Visualisasi Data}\)

\(\text{a. Tabel Korelasi}\)

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.

\(\text{b. Histogram}\)

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)
  }
  
}

\(\text{c. QQnorm}\)

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])
  }
}

\(\text{d. Boxplot}\)

for (i in 1:length(names(mobil_bmw))){
  if(is.numeric(mobil_bmw[,i])==TRUE){
    
    boxplot(mobil_bmw[,i] , main=names(mobil_bmw)[i])
    
  }
}

\(\text{6. Deskripsi Statistik}\)

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

\(\text{7. Data Cleansing}\)

\(\text{a. Remove Outlier}\)

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\).

\(\text{8. Validasi Data}\)

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)

\(\text{9. Building Model}\)

\(\text{a. Linier Model}\)

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

\(\text{b. Tunning Model}\)

\(\text{i) Forward}\)

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

\(\text{ii) Backward}\)

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

\(\text{iii) Stepwise}\)

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

\(\text{10. Evaluasi Model}\)

\(\text{a. Test Model}\)

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))

\(\text{b. perbandingan hasil prediksi}\)

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

\(\text{11. Kesimpulan}\)

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.


\[ Adjusted\ R^2 = 1 - \frac{(1-R^2)(n-1)}{n-k-1} \]
Keterangan:
\(n\) : Jumlah data
\(k\) : Jumlah variabel prediktor
\(R^2\) : Nilai \(R^2\)

Model yang digunakan adalah linier model.

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}\)
Adjusted R-squared :\(\text{0.8859}\)

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.