Moving Beyond Linearity

Data

library(ISLR)
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 (Stepwise 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)
regnatspline = lm(mpg ~ ns(horsepower, knots = c(80,120,160,200)))
prediksi = predict(regnatspline , 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)