Data bisa diperoleh untuk tugas dapat diperoleh di package ISLR.Silahkan Install dulu packagenya. Gunakan model-model non-linier yang sudah dipelajari pada data Auto dengan peubah respon mpg dan pilih tiga kolom untuk dijadikan peubah prediktor.
a. Apakah ada bukti untuk hubungan non-linier untuk peubah-peubah yang anda pilih? Buat visualisasi untuk Mendukung jawaban Anda.
b. Tentukan model non-linear terbaik untuk masing pasangan peubah (Secara visual dan/atau secara empiris)
untuk menjawab pertanyaan diatas maka Data yang akan digunakan dalam tugas ini yaitu “Auto Data Set” yang merupakan data yang tersedia di R yang terdiri dari 392 obserpasi dan 9 variabel. namun untuk menjawab pertanyaan diatas maka hanya akan digunakan satu variabel terikat yaitu mpg dan 3 variabel bebas yaitu displacement, horsepower, dan weight.Namun untuk mendapatkan model terbaik akan dilakukan perhitungan secara terpisah untuk masing masing variabel. Adapun dilakukan tahapn-tahapan yang akan dilakukan sebagai berikut:
- membangkitkan data
- memodelkan data dengan regresi linier
- mencari model regresi polinomial terbaik
- mencari model fungsi tangga terbaik
- mencari model regresi spline terbaik - mencari model smoothing spline - mencari model LOESS - membandingkan kelima model terbaik untuk memperoleh model paling baik.
- kesimpulan
Langkah pertama yang harus dilakukan adalah membangkitkan data terlebih dahulu. selanjutnya data akan di sajikan dalam bentuk visual, adapun program yang digunakan adalah sebagai berikut:
#instal packdisplacements
library(ISLR)
library(splines)
library(rsample)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.4 v dplyr 1.0.7
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 2.0.1 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
#bangkitkan data
attach(Auto)
## The following object is masked from package:ggplot2:
##
## mpg
head(cbind(mpg, displacement ))
## mpg displacement
## [1,] 18 307
## [2,] 15 350
## [3,] 18 318
## [4,] 16 304
## [5,] 17 302
## [6,] 15 429
plot(displacement, mpg, pch=20, col="red",
xlab="displacement", ylab="mile per gallon")
sebelum menggunakan alternatif dari regresi linier, maka akan cek terlebih dahulu model jika data dimodelkan dengan Regresi linier. program R yang dapat di gunakan adalah sebagai berikut:
mod_linear = lm(mpg~displacement,data=Auto)
ggplot(Auto,aes(x=displacement, y=mpg)) +
geom_point(alpha=0.55, color="red") +
stat_smooth(method = "lm",
formula = y~x,lty = 1,
col = "blue",se = F)+
theme_bw()
Secara visual kita dapat melihat bahwa medel regeresi linier tidak merefresentasikan pengaruh Horepower terhadap mpg. sehingga kita harus menggunakan metode lain untuk memodelkan data, dimana diantaranya :
setelah kita mengetahui bahwa model regresi linier tidak merefresentasikan dari data maka salah satu metode yang dapat di coba adalah analisis regresi polinomial. adapun program yang digunakan yaitu
# Cross Validation dengan 10 lipatan
set.seed(123)
cross_val <- vfold_cv(Auto,v=10, strata = "mpg")
# menghitung RMSE dan MAE untuk masing-masing model dengan db 1:4
df <- 1:4
best_metric_poly2 <- map_dfr(df, function(i) {
metric_poly2 <- map_dfr(cross_val$splits, function(x){
mod <- lm(mpg ~ poly(displacement, df=i),data=Auto[x$in_id,])
# disini kita prediksi menggunakan data testing
pred <- predict(mod,newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
rmse <- mlr3measures::rmse(truth = truth, response = pred)
mae <- mlr3measures::mae(truth = truth, response = pred)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
})
metric_poly2
# menghitung rata-rata untuk db=2
mean_metric_poly2 <- colMeans(metric_poly2)
mean_metric_poly2
})
best_metric_poly2 <- cbind(df=df,best_metric_poly2)
# menampilkan hasil all breaks
best_metric_poly2
best_metric_poly2 %>% slice_min(rmse)
best_metric_poly2 %>% slice_min(mae)
berdasarkan hasil perhitungan diatas makas dapat diketahui bahwa model terbaik untuk vold 10 adalah pada saat db 2 karena memiliki RMSE dan MAE terkecil. untuk melihat melihat visual dari model regresi polinomial dengan db 2 maka dapat dilihat dari output program berikut:
#Regresi Polinomial df 2
polinom = lm(mpg ~ poly(displacement,2))
prediksi = predict( polinom , data.frame(displacement), interval="predict" )
plot(displacement, mpg, pch=20, col="red",
xlab="displacement", ylab="mile per gallon",
main="Regresi Polinomial df 2")
ix <- sort(displacement,index.return=T)$ix
lines(displacement[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
setelah mendapat model retbaik dengan menggunakan regresi polinomial maka selanjutnya akan dilakaukan pemodelan dengan fungsi tangga.
Untuk memperoleh model terbaik dari model fungsi tangga maka dapat dilakukan dengan program sebagai berikut:
#validasi silang dengan vold 10
set.seed(123)
cross_val <- vfold_cv(Auto,v=10, strata = "mpg")
breaks <- 2:10
best_tangga <- map_dfr(breaks, function(i){
metric_tangga <- map_dfr(cross_val$splits,
function(x){
training <- Auto[x$in_id,]
training$displacement <- cut(training$displacement,i)
mod <- lm(mpg ~ displacement, data=training)
labs_x <- levels(mod$model[,2])
labs_x_breaks <- cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs_x) ),
upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs_x) ))
testing <- Auto[-x$in_id,]
displacement_new <- cut(testing$displacement,c(labs_x_breaks[1,1],labs_x_breaks[,2]))
pred <- predict(mod,newdata=list(displacement=displacement_new))
truth <- testing$mpg
data_eval <- na.omit(data.frame(truth,pred))
rmse <- mlr3measures::rmse(truth = data_eval$truth,response = data_eval$pred)
mae <- mlr3measures::mae(truth = data_eval$truth,response = data_eval$pred)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
metric_tangga
# menghitung rata-rata untuk 10 folds
mean_metric_tangga <- colMeans(metric_tangga)
mean_metric_tangga
})
best_tangga <- cbind(breaks=breaks,best_tangga)
# menampilkan hasil all breaks
best_tangga
#berdasarkan rmse
best_tangga %>% slice_min(rmse)
#berdasarkan mae
best_tangga %>% slice_min(mae)
berdasarkan hasil perhitungan diatas diperoleh kesimpulan jika dilihat dari RMSE dan MAE terkecil maka model terbaim fungsi tangga adalah dengan df 10,untuk melihat visualisasinya maka dapat dilihat dari output program berikut:
#Fungsi Tangga dengan df 10
tangga = lm(mpg ~ cut(displacement,10))
prediksi = predict(tangga , data.frame(displacement), interval="predict" )
plot(displacement, mpg, pch=20, col="red",
xlab="displacement", ylab="mile per gallon",
main="Fungsi Tangga dengan df 10")
ix <- sort(displacement,index.return=T)$ix
lines(displacement[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
setelah memperoleh model terbaik dengan menggunakan metode fungsi tangga maka selanjutnya akan dicari model terbaik dengan metode resgresi spline
untuk mencari model terbaik regresi Spline maka dapat dicari dengan menggunkan program sebagai berikut:
#validasi silang dengan vold 10
set.seed(123)
cross_val <- vfold_cv(Auto,v=10,strata = "mpg")
df <- 2:5
best_spline3 <- map_dfr(df, function(i){
metric_spline3 <- map_dfr(cross_val$splits,
function(x){
mod <- lm(mpg ~ ns(displacement,df=i),
data=Auto[x$in_id,])
pred <- predict(mod,
newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
rmse <- mlr3measures::rmse(truth = truth,
response = pred
)
mae <- mlr3measures::mae(truth = truth,
response = pred
)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
metric_spline3
# menghitung rata-rata untuk 10 folds
mean_metric_spline3 <- colMeans(metric_spline3)
mean_metric_spline3
})
best_spline3 <- cbind(df=df,best_spline3)
# menampilkan hasil all breaks
best_spline3
#berdasarkan rmse
best_spline3 %>% slice_min(rmse)
#berdasarkan mae
best_spline3 %>% slice_min(mae)
Berdasarkan hasil output diatas maka, model terbaik adalah dengan menggunakan db 2. untuk untuk memvisualisasikan model yang diperoleh dapat digunakan program sebagai berikut:
#Regresi Spline dengan df 2
library(splines)
knots <- attr(ns(Auto$displacement, df=2), "knots")
knots
## 50%
## 151
regspline = lm(mpg ~ ns(displacement, knots=knots))
prediksi = predict(regspline , data.frame(displacement), interval="predict" )
plot(displacement, mpg, pch=20, col="red",
xlab="displacement", ylab="mile per gallon",
main="cubic splines dengan df 2")
ix <- sort(displacement,index.return=T)$ix
lines(displacement[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
abline(v=knots, col="grey50", lty=2)
setelah memperoleh model terbaik dari masing masing metode maka langkah selanjutnya adalah membandingkan mana yang terbaik antara model model tersebut.
untuk mencari model terbaik smoothing Spline maka dapat dicari dengan menggunkan program sebagai berikut:
model_sms <- with(data = Auto,smooth.spline(displacement,mpg))
model_sms
## Call:
## smooth.spline(x = displacement, y = mpg)
##
## Smoothing Parameter spar= 0.08978477 lambda= 6.674266e-09 (13 iterations)
## Equivalent Degrees of Freedom (Df): 52.73308
## Penalized Criterion (RSS): 471.1873
## GCV: 16.58384
pred_data <- broom::augment(model_sms)
ggplot(pred_data,aes(x=x,y=y))+
geom_point(alpha=0.55, color="red")+
geom_line(aes(y=.fitted),col="blue",
lty=1)+
xlab("displacement")+
ylab("mil per Galon")+
theme_bw()
#model menggunakan df 2
model_sms <- with(data = Auto,smooth.spline(displacement,mpg,df=2))
model_sms
## Call:
## smooth.spline(x = displacement, y = mpg, df = 2)
##
## Smoothing Parameter spar= 1.499962 lambda= 102.9865 (31 iterations)
## Equivalent Degrees of Freedom (Df): 2.006462
## Penalized Criterion (RSS): 3970.274
## GCV: 21.56861
pred_data <- broom::augment(model_sms)
ggplot(pred_data,aes(x=x,y=y))+
geom_point(alpha=0.55, color="red")+
geom_line(aes(y=.fitted),col="blue",
lty=1)+
xlab("displacement")+
ylab("mil per Galon")+
theme_bw()
dari hasil output diatas dapat dilihat model dengan menggunakan df 2 menyesuaikan dengan regresi dpline. selanjutnya akan di carai model dengan metode LOESS.
untuk mencari model terbaik LOESS maka dapat dicari dengan menggunkan program sebagai berikut:
set.seed(123)
cross_val <- vfold_cv(Auto,v=10,strata = "mpg")
span <- seq(0.1,1,length.out=52)
best_loess <- map_dfr(span, function(i){
metric_loess <- map_dfr(cross_val$splits,
function(x){
mod <- loess(mpg ~ displacement,span = i,
data=Auto[x$in_id,])
pred <- predict(mod,
newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
data_eval <- na.omit(data.frame(pred=pred,
truth=truth))
rmse <- mlr3measures::rmse(truth = data_eval$truth,
response = data_eval$pred
)
mae <- mlr3measures::mae(truth = data_eval$truth,
response = data_eval$pred
)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
head(metric_loess,20)
# menghitung rata-rata untuk 10 folds
mean_metric_loess <- colMeans(metric_loess)
mean_metric_loess
}
)
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 5.4643e-017
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 2.2064e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 1.1005e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 1.6453e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 1.1055e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 4
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97.5
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 0.5
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 3.3015e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 97
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 1.1005e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1
best_loess <- cbind(span=span,best_loess)
# menampilkan hasil all breaks
best_loess
#berdasarkan rmse
best_loess %>% slice_min(rmse)
#berdasarkan mae
best_loess %>% slice_min(mae)
Berdasarkan hasil output diatas maka model terbaiknya span 0.1176471 karena memiliki RMSE dan MAE paling kecil untuk memvisualisasikan kedua model yang diperoleh dapat digunakan program sebagai berikut:
library(ggplot2)
# span 0.1176471
ggplot(Auto, aes(displacement,mpg)) +
geom_point(alpha=20,color="red") +
stat_smooth(method='loess',
formula=y~x,
span = 0.1176471 ,
col="blue",
lty=1,
se=F)
setelah memperoleh semua model terbaik maka langkah selanjutnya adalah membandingkan MSE dan MAE untuk semua model yang di peroleh. agar mendapatkan satu model terbaik.
untuk memperoleh model terbaik untuk data Auto maka akan di bandingkan ketiga metode tersebut. adapun program R yang digunakan sebagai berikut:
nilai_metric <- rbind(best_metric_poly2%>% select(-1) %>% slice_min(rmse),
best_tangga %>% select(-1)%>% slice_min(rmse),
best_spline3 %>% select(-1)%>% slice_min(rmse),
best_loess %>% select(-1) %>% slice_min(rmse)
)
nama_model <- c("polinom df 2",
"Fungsi Tangga df 10 ",
"spline df 2",
"LOESS span 0.1176471 "
)
data.frame(nama_model,nilai_metric)
Berdasarkan hasil perhitungan diatas dengan menggunkana regresi polinom diperoleh model terbaiknya adalah resgresi polinom dengan df 2. Sedangkan dengan menggunakan Fungsi tangga di peroleh model terbaik berdasarkan adalah df 10. sedangkan, menggunakan metode natural cubik spline diperoleh model terbaik yaitu model natural cubik spline dan smoothing spline dengan df 2.sedangkan dengan LOESS metode terbaiknya span 0.1176471. Dari semua semua metode terbaik tersebut, dibandingkan antara yang satu dengan yang lainnya sehingga diperoleh model yang terbaik untuk menduga data Auto adalah LOESS metode terbaiknya span 0.1176471.
Langkah pertama yang harus dilakukan adalah membangkitkan data terlebih dahulu. selanjutnya data akan di sajikan dalam bentuk visual, adapun program yang digunakan adalah sebagai berikut:
#instal packhorsepowers
library(ISLR)
library(splines)
library(rsample)
library(tidyverse)
#bangkitkan data
attach(Auto)
## The following objects are masked from Auto (pos = 3):
##
## acceleration, cylinders, displacement, horsepower, mpg, name,
## origin, weight, year
## The following object is masked from package:ggplot2:
##
## mpg
head(cbind(mpg, horsepower ))
## mpg horsepower
## [1,] 18 130
## [2,] 15 165
## [3,] 18 150
## [4,] 16 150
## [5,] 17 140
## [6,] 15 198
plot(horsepower, mpg, pch=20, col="red",
xlab="Horse Power", ylab="mile per gallon")
sebelum menggunakan alternatif dari regresi linier, maka akan cek terlebih dahulu model jika data dimodelkan dengan Regresi linier. program R yang dapat di gunakan adalah sebagai berikut:
mod_linear = lm(mpg~horsepower,data=Auto)
ggplot(Auto,aes(x=horsepower, y=mpg)) +
geom_point(alpha=0.55, color="red") +
stat_smooth(method = "lm",
formula = y~x,lty = 1,
col = "blue",se = F)+
theme_bw()
Secara visual kita dapat melihat bahwa medel regeresi linier tidak merefresentasikan pengaruh Horepower terhadap mpg. sehingga kita harus menggunakan metode lain untuk memodelkan data, dimana diantaranya :
setelah kita mengetahui bahwa model regresi linier tidak merefresentasikan dari data maka salah satu metode yang dapat di coba adalah analisis regresi polinomial. adapun program yang digunakan yaitu
# Cross Validation dengan 10 lipatan
set.seed(123)
cross_val <- vfold_cv(Auto,v=10, strata = "mpg")
# menghitung RMSE dan MAE untuk masing-masing model dengan db 1:4
df <- 1:4
best_metric_poly2 <- map_dfr(df, function(i) {
metric_poly2 <- map_dfr(cross_val$splits, function(x){
mod <- lm(mpg ~ poly(horsepower, df=i),data=Auto[x$in_id,])
# disini kita prediksi menggunakan data testing
pred <- predict(mod,newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
rmse <- mlr3measures::rmse(truth = truth, response = pred)
mae <- mlr3measures::mae(truth = truth, response = pred)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
})
metric_poly2
# menghitung rata-rata untuk db=2
mean_metric_poly2 <- colMeans(metric_poly2)
mean_metric_poly2
})
best_metric_poly2 <- cbind(df=df,best_metric_poly2)
# menampilkan hasil all breaks
best_metric_poly2
best_metric_poly2 %>% slice_min(rmse)
best_metric_poly2 %>% slice_min(mae)
berdasarkan hasil perhitungan diatas makas dapat diketahui bahwa model terbaik untuk vold 10 adalah pada saat db 2 karena memiliki RMSE dan MAE terkecil. untuk melihat melihat visual dari model regresi polinomial dengan db 2 maka dapat dilihat dari output program berikut:
#Regresi Polinomial df 2
polinom = lm(mpg ~ poly(horsepower,2))
prediksi = predict( polinom , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=20, col="red",
xlab="Horse Power", ylab="mile per gallon",
main="Regresi Polinomial df 2")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
setelah mendapat model retbaik dengan menggunakan regresi polinomial maka selanjutnya akan dilakaukan pemodelan dengan fungsi tangga.
Untuk memperoleh model terbaik dari model fungsi tangga maka dapat dilakukan dengan program sebagai berikut:
#validasi silang dengan vold 10
set.seed(123)
cross_val <- vfold_cv(Auto,v=10, strata = "mpg")
breaks <- 2:10
best_tangga <- map_dfr(breaks, function(i){
metric_tangga <- map_dfr(cross_val$splits,
function(x){
training <- Auto[x$in_id,]
training$horsepower <- cut(training$horsepower,i)
mod <- lm(mpg ~ horsepower, data=training)
labs_x <- levels(mod$model[,2])
labs_x_breaks <- cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs_x) ),
upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs_x) ))
testing <- Auto[-x$in_id,]
horsepower_new <- cut(testing$horsepower,c(labs_x_breaks[1,1],labs_x_breaks[,2]))
pred <- predict(mod,newdata=list(horsepower=horsepower_new))
truth <- testing$mpg
data_eval <- na.omit(data.frame(truth,pred))
rmse <- mlr3measures::rmse(truth = data_eval$truth,response = data_eval$pred)
mae <- mlr3measures::mae(truth = data_eval$truth,response = data_eval$pred)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
metric_tangga
# menghitung rata-rata untuk 10 folds
mean_metric_tangga <- colMeans(metric_tangga)
mean_metric_tangga
})
best_tangga <- cbind(breaks=breaks,best_tangga)
# menampilkan hasil all breaks
best_tangga
#berdasarkan rmse
best_tangga %>% slice_min(rmse)
#berdasarkan mae
best_tangga %>% slice_min(mae)
berdasarkan hasil perhitungan diatas diperoleh kesimpulan jika dilihat dari RMSE dan MAE terkecil maka model terbaim fungsi tangga adalah dengan df 7,untuk melihat visualisasinya maka dapat dilihat dari output program berikut:
#Fungsi Tangga dengan df 7
tangga = lm(mpg ~ cut(horsepower,7))
prediksi = predict(tangga , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=20, col="red",
xlab="Horse Power", ylab="mile per gallon",
main="Fungsi Tangga dengan df 7")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
setelah memperoleh model terbaik dengan menggunakan metode fungsi tangga maka selanjutnya akan dicari model terbaik dengan metode resgresi spline
untuk mencari model terbaik regresi Spline maka dapat dicari dengan menggunkan program sebagai berikut:
#validasi silang dengan vold 10
set.seed(123)
cross_val <- vfold_cv(Auto,v=10,strata = "mpg")
df <- 2:5
best_spline3 <- map_dfr(df, function(i){
metric_spline3 <- map_dfr(cross_val$splits,
function(x){
mod <- lm(mpg ~ ns(horsepower,df=i),
data=Auto[x$in_id,])
pred <- predict(mod,
newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
rmse <- mlr3measures::rmse(truth = truth,
response = pred
)
mae <- mlr3measures::mae(truth = truth,
response = pred
)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
metric_spline3
# menghitung rata-rata untuk 10 folds
mean_metric_spline3 <- colMeans(metric_spline3)
mean_metric_spline3
})
best_spline3 <- cbind(df=df,best_spline3)
# menampilkan hasil all breaks
best_spline3
#berdasarkan rmse
best_spline3 %>% slice_min(rmse)
#berdasarkan mae
best_spline3 %>% slice_min(mae)
Berdasarkan hasil output diatas maka, model terbaik adalah dengan menggunakan db 5. untuk untuk memvisualisasikan model yang diperoleh dapat digunakan program sebagai berikut:
#Regresi Spline dengan df 5
library(splines)
knots <- attr(ns(Auto$horsepower, df=5), "knots")
knots
## 20% 40% 60% 80%
## 72 88 100 140
regspline = lm(mpg ~ ns(horsepower, knots=knots))
prediksi = predict(regspline , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=20, col="red",
xlab="Horse Power", ylab="mile per gallon",
main="cubic splines dengan df 5")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
abline(v=knots, col="grey50", lty=2)
setelah memperoleh model terbaik dari masing masing metode maka langkah selanjutnya adalah membandingkan mana yang terbaik antara model model tersebut.
untuk mencari model terbaik smoothing Spline maka dapat dicari dengan menggunkan program sebagai berikut:
model_sms <- with(data = Auto,smooth.spline(horsepower,mpg))
model_sms
## Call:
## smooth.spline(x = horsepower, y = mpg)
##
## Smoothing Parameter spar= 0.2648644 lambda= 5.101567e-07 (12 iterations)
## Equivalent Degrees of Freedom (Df): 42.14987
## Penalized Criterion (RSS): 1117.657
## GCV: 18.64132
pred_data <- broom::augment(model_sms)
ggplot(pred_data,aes(x=x,y=y))+
geom_point(alpha=0.55, color="red")+
geom_line(aes(y=.fitted),col="blue",
lty=1)+
xlab("horsepower")+
ylab("mil per Galon")+
theme_bw()
#model menggunakan df 5
model_sms <- with(data = Auto,smooth.spline(horsepower,mpg,df=5))
model_sms
## Call:
## smooth.spline(x = horsepower, y = mpg, df = 5)
##
## Smoothing Parameter spar= 0.8891706 lambda= 0.01650666 (14 iterations)
## Equivalent Degrees of Freedom (Df): 5.000611
## Penalized Criterion (RSS): 2564.889
## GCV: 19.02216
pred_data <- broom::augment(model_sms)
ggplot(pred_data,aes(x=x,y=y))+
geom_point(alpha=0.55, color="red")+
geom_line(aes(y=.fitted),col="blue",
lty=1)+
xlab("horsepower")+
ylab("mil per Galon")+
theme_bw()
dari hasil output diatas dapat dilihat model dengan menggunakan df 5 menyesuaikan dengan regresi dpline. selanjutnya akan di carai model dengan metode LOESS.
untuk mencari model terbaik LOESS maka dapat dicari dengan menggunkan program sebagai berikut:
set.seed(123)
cross_val <- vfold_cv(Auto,v=10,strata = "mpg")
span <- seq(0.1,1,length.out=42)
best_loess <- map_dfr(span, function(i){
metric_loess <- map_dfr(cross_val$splits,
function(x){
mod <- loess(mpg ~ horsepower,span = i,
data=Auto[x$in_id,])
pred <- predict(mod,
newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
data_eval <- na.omit(data.frame(pred=pred,
truth=truth))
rmse <- mlr3measures::rmse(truth = data_eval$truth,
response = data_eval$pred
)
mae <- mlr3measures::mae(truth = data_eval$truth,
response = data_eval$pred
)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
head(metric_loess,20)
# menghitung rata-rata untuk 10 folds
mean_metric_loess <- colMeans(metric_loess)
mean_metric_loess
}
)
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 88
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 2
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 5.4554e-017
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 4
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 4
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 89
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 88
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 2
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 1.0996e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 4
best_loess <- cbind(span=span,best_loess)
# menampilkan hasil all breaks
best_loess
#berdasarkan rmse
best_loess %>% slice_min(rmse)
#berdasarkan mae
best_loess %>% slice_min(mae)
Berdasarkan hasil output diatas maka model terbaiknya span 0.1219512 karena memiliki RMSE dan MAE paling kecil untuk memvisualisasikan kedua model yang diperoleh dapat digunakan program sebagai berikut:
library(ggplot2)
# span 0.1219512
ggplot(Auto, aes(horsepower,mpg)) +
geom_point(alpha=20,color="red") +
stat_smooth(method='loess',
formula=y~x,
span = 0.1219512 ,
col="blue",
lty=1,
se=F)
setelah memperoleh semua model terbaik maka langkah selanjutnya adalah membandingkan MSE dan MAE untuk semua model yang di peroleh. agar mendapatkan satu model terbaik.
untuk memperoleh model terbaik untuk data Auto maka akan di bandingkan ketiga metode tersebut. adapun program R yang digunakan sebagai berikut:
nilai_metric <- rbind(best_metric_poly2%>% select(-1) %>% slice_min(rmse),
best_tangga %>% select(-1)%>% slice_min(rmse),
best_spline3 %>% select(-1)%>% slice_min(rmse),
best_loess %>% select(-1) %>% slice_min(rmse)
)
nama_model <- c("polinom df 2",
"Fungsi Tangga df 7 ",
"spline df 5",
"LOESS span 0.1219512 "
)
data.frame(nama_model,nilai_metric)
Berdasarkan hasil perhitungan diatas dengan menggunkana regresi polinom diperoleh model terbaiknya adalah resgresi polinom dengan df 2. Sedangkan dengan menggunakan Fungsi tangga di peroleh model terbaik berdasarkan adalah df 7. sedangkan, menggunakan metode natural cubik spline diperoleh model terbaik yaitu model natural cubik spline dan smoothing spline dengan df 5.sedangkan dengan LOESS metode terbaiknya span 0.1219512. Dari semua semua metode terbaik tersebut, dibandingkan antara yang satu dengan yang lainnya sehingga diperoleh model yang terbaik untuk menduga data Auto adalah LOESS metode terbaiknya span 0.1219512.
Langkah pertama yang harus dilakukan adalah membangkitkan data terlebih dahulu. selanjutnya data akan di sajikan dalam bentuk visual, adapun program yang digunakan adalah sebagai berikut:
#instal packweights
library(ISLR)
library(splines)
library(rsample)
library(tidyverse)
#bangkitkan data
attach(Auto)
## The following objects are masked from Auto (pos = 3):
##
## acceleration, cylinders, displacement, horsepower, mpg, name,
## origin, weight, year
## The following objects are masked from Auto (pos = 4):
##
## acceleration, cylinders, displacement, horsepower, mpg, name,
## origin, weight, year
## The following object is masked from package:ggplot2:
##
## mpg
head(cbind(mpg, weight ))
## mpg weight
## [1,] 18 3504
## [2,] 15 3693
## [3,] 18 3436
## [4,] 16 3433
## [5,] 17 3449
## [6,] 15 4341
plot(weight, mpg, pch=20, col="red",
xlab="weight", ylab="mile per gallon")
sebelum menggunakan alternatif dari regresi linier, maka akan cek terlebih dahulu model jika data dimodelkan dengan Regresi linier. program R yang dapat di gunakan adalah sebagai berikut:
mod_linear = lm(mpg~weight,data=Auto)
ggplot(Auto,aes(x=weight, y=mpg)) +
geom_point(alpha=0.55, color="red") +
stat_smooth(method = "lm",
formula = y~x,lty = 1,
col = "blue",se = F)+
theme_bw()
Secara visual kita dapat melihat bahwa medel regeresi linier tidak merefresentasikan pengaruh Horepower terhadap mpg. sehingga kita harus menggunakan metode lain untuk memodelkan data, dimana diantaranya :
setelah kita mengetahui bahwa model regresi linier tidak merefresentasikan dari data maka salah satu metode yang dapat di coba adalah analisis regresi polinomial. adapun program yang digunakan yaitu
# Cross Validation dengan 10 lipatan
set.seed(123)
cross_val <- vfold_cv(Auto,v=10, strata = "mpg")
# menghitung RMSE dan MAE untuk masing-masing model dengan db 1:4
df <- 1:4
best_metric_poly2 <- map_dfr(df, function(i) {
metric_poly2 <- map_dfr(cross_val$splits, function(x){
mod <- lm(mpg ~ poly(weight, df=i),data=Auto[x$in_id,])
# disini kita prediksi menggunakan data testing
pred <- predict(mod,newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
rmse <- mlr3measures::rmse(truth = truth, response = pred)
mae <- mlr3measures::mae(truth = truth, response = pred)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
})
metric_poly2
# menghitung rata-rata untuk db=2
mean_metric_poly2 <- colMeans(metric_poly2)
mean_metric_poly2
})
best_metric_poly2 <- cbind(df=df,best_metric_poly2)
# menampilkan hasil all breaks
best_metric_poly2
best_metric_poly2 %>% slice_min(rmse)
best_metric_poly2 %>% slice_min(mae)
berdasarkan hasil perhitungan diatas makas dapat diketahui bahwa model terbaik untuk vold 10 adalah pada saat db 2 karena memiliki RMSE dan MAE terkecil. untuk melihat melihat visual dari model regresi polinomial dengan db 2 maka dapat dilihat dari output program berikut:
#Regresi Polinomial df 2
polinom = lm(mpg ~ poly(weight,2))
prediksi = predict( polinom , data.frame(weight), interval="predict" )
plot(weight, mpg, pch=20, col="red",
xlab="weight", ylab="mile per gallon",
main="Regresi Polinomial df 2")
ix <- sort(weight,index.return=T)$ix
lines(weight[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
setelah mendapat model retbaik dengan menggunakan regresi polinomial maka selanjutnya akan dilakaukan pemodelan dengan fungsi tangga.
Untuk memperoleh model terbaik dari model fungsi tangga maka dapat dilakukan dengan program sebagai berikut:
#validasi silang dengan vold 10
set.seed(123)
cross_val <- vfold_cv(Auto,v=10, strata = "mpg")
breaks <- 2:10
best_tangga <- map_dfr(breaks, function(i){
metric_tangga <- map_dfr(cross_val$splits,
function(x){
training <- Auto[x$in_id,]
training$weight <- cut(training$weight,i)
mod <- lm(mpg ~ weight, data=training)
labs_x <- levels(mod$model[,2])
labs_x_breaks <- cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs_x) ),
upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs_x) ))
testing <- Auto[-x$in_id,]
weight_new <- cut(testing$weight,c(labs_x_breaks[1,1],labs_x_breaks[,2]))
pred <- predict(mod,newdata=list(weight=weight_new))
truth <- testing$mpg
data_eval <- na.omit(data.frame(truth,pred))
rmse <- mlr3measures::rmse(truth = data_eval$truth,response = data_eval$pred)
mae <- mlr3measures::mae(truth = data_eval$truth,response = data_eval$pred)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
metric_tangga
# menghitung rata-rata untuk 10 folds
mean_metric_tangga <- colMeans(metric_tangga)
mean_metric_tangga
})
best_tangga <- cbind(breaks=breaks,best_tangga)
# menampilkan hasil all breaks
best_tangga
#berdasarkan rmse
best_tangga %>% slice_min(rmse)
#berdasarkan mae
best_tangga %>% slice_min(mae)
berdasarkan hasil perhitungan diatas diperoleh kesimpulan jika dilihat dari RMSE dan MAE terkecil maka model terbaim fungsi tangga adalah dengan df 6,untuk melihat visualisasinya maka dapat dilihat dari output program berikut:
#Fungsi Tangga dengan df 6
tangga = lm(mpg ~ cut(weight,6))
prediksi = predict(tangga , data.frame(weight), interval="predict" )
plot(weight, mpg, pch=20, col="red",
xlab="weight", ylab="mile per gallon",
main="Fungsi Tangga dengan df 6")
ix <- sort(weight,index.return=T)$ix
lines(weight[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
setelah memperoleh model terbaik dengan menggunakan metode fungsi tangga maka selanjutnya akan dicari model terbaik dengan metode resgresi spline
untuk mencari model terbaik regresi Spline maka dapat dicari dengan menggunkan program sebagai berikut:
#validasi silang dengan vold 10
set.seed(123)
cross_val <- vfold_cv(Auto,v=10,strata = "mpg")
df <- 2:5
best_spline3 <- map_dfr(df, function(i){
metric_spline3 <- map_dfr(cross_val$splits,
function(x){
mod <- lm(mpg ~ ns(weight,df=i),
data=Auto[x$in_id,])
pred <- predict(mod,
newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
rmse <- mlr3measures::rmse(truth = truth,
response = pred
)
mae <- mlr3measures::mae(truth = truth,
response = pred
)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
metric_spline3
# menghitung rata-rata untuk 10 folds
mean_metric_spline3 <- colMeans(metric_spline3)
mean_metric_spline3
})
best_spline3 <- cbind(df=df,best_spline3)
# menampilkan hasil all breaks
best_spline3
#berdasarkan rmse
best_spline3 %>% slice_min(rmse)
#berdasarkan mae
best_spline3 %>% slice_min(mae)
Berdasarkan hasil output diatas maka, model terbaik adalah dengan menggunakan db 2. untuk untuk memvisualisasikan model yang diperoleh dapat digunakan program sebagai berikut:
#Regresi Spline dengan df 2
library(splines)
knots <- attr(ns(Auto$weight, df=2), "knots")
knots
## 50%
## 2803.5
regspline = lm(mpg ~ ns(weight, knots=knots))
prediksi = predict(regspline , data.frame(weight), interval="predict" )
plot(weight, mpg, pch=20, col="red",
xlab="weight", ylab="mile per gallon",
main="cubic splines dengan df 2")
ix <- sort(weight,index.return=T)$ix
lines(weight[ix], prediksi[ix],
main = "Polynomial Regression", col="blue",
type="l", lwd=3)
abline(v=knots, col="grey50", lty=2)
setelah memperoleh model terbaik dari masing masing metode maka langkah selanjutnya adalah membandingkan mana yang terbaik antara model model tersebut.
untuk mencari model terbaik smoothing Spline maka dapat dicari dengan menggunkan program sebagai berikut:
model_sms <- with(data = Auto,smooth.spline(weight,mpg))
model_sms
## Call:
## smooth.spline(x = weight, y = mpg)
##
## Smoothing Parameter spar= 1.138481 lambda= 0.08299391 (16 iterations)
## Equivalent Degrees of Freedom (Df): 3.674305
## Penalized Criterion (RSS): 6000.624
## GCV: 17.63865
pred_data <- broom::augment(model_sms)
ggplot(pred_data,aes(x=x,y=y))+
geom_point(alpha=0.55, color="red")+
geom_line(aes(y=.fitted),col="blue",
lty=1)+
xlab("weight")+
ylab("mil per Galon")+
theme_bw()
#model menggunakan df 3,6
model_sms <- with(data = Auto,smooth.spline(weight,mpg,df=3.6))
model_sms
## Call:
## smooth.spline(x = weight, y = mpg, df = 3.6)
##
## Smoothing Parameter spar= 1.144923 lambda= 0.09248475 (16 iterations)
## Equivalent Degrees of Freedom (Df): 3.599565
## Penalized Criterion (RSS): 6003.44
## GCV: 17.63918
pred_data <- broom::augment(model_sms)
ggplot(pred_data,aes(x=x,y=y))+
geom_point(alpha=0.55, color="red")+
geom_line(aes(y=.fitted),col="blue",
lty=1)+
xlab("weight")+
ylab("mil per Galon")+
theme_bw()
dari hasil output diatas dapat dilihat model dengan menggunakan df 3.6 . selanjutnya akan di carai model dengan metode LOESS.
untuk mencari model terbaik LOESS maka dapat dicari dengan menggunkan program sebagai berikut:
set.seed(123)
cross_val <- vfold_cv(Auto,v=10,strata = "mpg")
span <- seq(0.1,1,length.out=3.6)
best_loess <- map_dfr(span, function(i){
metric_loess <- map_dfr(cross_val$splits,
function(x){
mod <- loess(mpg ~ weight,span = i,
data=Auto[x$in_id,])
pred <- predict(mod,
newdata=Auto[-x$in_id,])
truth <- Auto[-x$in_id,]$mpg
data_eval <- na.omit(data.frame(pred=pred,
truth=truth))
rmse <- mlr3measures::rmse(truth = data_eval$truth,
response = data_eval$pred
)
mae <- mlr3measures::mae(truth = data_eval$truth,
response = data_eval$pred
)
metric <- c(rmse,mae)
names(metric) <- c("rmse","mae")
return(metric)
}
)
head(metric_loess,20)
# menghitung rata-rata untuk 10 folds
mean_metric_loess <- colMeans(metric_loess)
mean_metric_loess
}
)
best_loess <- cbind(span=span,best_loess)
# menampilkan hasil all breaks
best_loess
#berdasarkan rmse
best_loess %>% slice_min(rmse)
#berdasarkan mae
best_loess %>% slice_min(mae)
Berdasarkan hasil output diatas maka model terbaiknya span 1 karena memiliki RMSE dan MAE paling kecil untuk memvisualisasikan kedua model yang diperoleh dapat digunakan program sebagai berikut:
library(ggplot2)
# span i
ggplot(Auto, aes(weight,mpg)) +
geom_point(alpha=20,color="red") +
stat_smooth(method='loess',
formula=y~x,
span = 1 ,
col="blue",
lty=1,
se=F)
setelah memperoleh semua model terbaik maka langkah selanjutnya adalah membandingkan MSE dan MAE untuk semua model yang di peroleh. agar mendapatkan satu model terbaik.
untuk memperoleh model terbaik untuk data Auto maka akan di bandingkan ketiga metode tersebut. adapun program R yang digunakan sebagai berikut:
nilai_metric <- rbind(best_metric_poly2%>% select(-1) %>% slice_min(rmse),
best_tangga %>% select(-1)%>% slice_min(rmse),
best_spline3 %>% select(-1)%>% slice_min(rmse),
best_loess %>% select(-1) %>% slice_min(rmse)
)
nama_model <- c("polinom df 2",
"Fungsi Tangga df 6 ",
"spline df 2",
"LOESS span 11 "
)
data.frame(nama_model,nilai_metric)
Berdasarkan hasil perhitungan diatas dengan menggunkana regresi polinom diperoleh model terbaiknya adalah resgresi polinom dengan df 2. Sedangkan dengan menggunakan Fungsi tangga di peroleh model terbaik berdasarkan adalah df 6. sedangkan, menggunakan metode natural cubik spline diperoleh model terbaik yaitu model natural cubik spline df 2 dan smoothing spline dengan df 3,6.sedangkan dengan LOESS metode terbaiknya span 1. Dari semua semua metode terbaik tersebut, dibandingkan antara yang satu dengan yang lainnya sehingga diperoleh model yang terbaik untuk menduga data Auto adalah polinom dengan df 2.