Data

library(ISLR)
## Warning: package 'ISLR' was built under R version 4.0.3
attach(Auto)
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=19, col="coral",
     xlab="Horse Power", ylab="mile per gallon")

Regresi Polinomial

polinom = lm(mpg ~ poly(horsepower,4))
prediksi = predict( polinom , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=19, col="coral",
     xlab="Horse Power", ylab="mile per gallon",
     main="Regresi Polinomial Ordo 4")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix], 
      main = "Polynomial Regression", col="blue",
      type="l", lwd=2)

Fungsi Tangga (Piecewise Constant)

tangga = lm(mpg ~ cut(horsepower,12))
prediksi = predict(tangga , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=19, col="coral",
     xlab="Horse Power", ylab="mile per gallon",
     main="Fungsi Tangga dengan 11 knots")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix], 
      main = "Polynomial Regression", col="blue",
      type="l", lwd=2)

Regresi Spline

library(splines)
regspline = lm(mpg ~ bs(horsepower, knots=c(80, 120, 160, 200)))
prediksi = predict(regspline , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=19, col="coral",
     xlab="Horse Power", ylab="mile per gallon",
     main="cubic splines dengan knots 80, 120, 160, 200")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix], 
      main = "Polynomial Regression", col="blue",
      type="l", lwd=2)
abline(v=c(80, 120, 160, 200), col="grey50", lty=2)

Regresi Natural Spline

library(splines)
regspline = lm(mpg ~ ns(horsepower, knots=c(80, 120, 160, 200)))
prediksi = predict(regspline , data.frame(horsepower), interval="predict" )
plot(horsepower, mpg, pch=19, col="coral",
     xlab="Horse Power", ylab="mile per gallon",
     main="natural cubic splines dengan knots 80, 120, 160, 200")
ix <- sort(horsepower,index.return=T)$ix
lines(horsepower[ix], prediksi[ix], 
      main = "Polynomial Regression", col="blue",
      type="l", lwd=2)
abline(v=c(80, 120, 160, 200), col="grey50", lty=2)