Pemodelan Tak Linear

Library

Packages yang digunakan yaitu

## Warning: package 'tidyverse' was built under R version 4.3.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Warning: package 'rsample' was built under R version 4.3.1
## Warning: package 'DT' was built under R version 4.3.1
## Warning: package 'ISLR' was built under R version 4.3.1

Data Set

Data yang digunakan yakni Auto pada package ISLR

data("Auto", package="ISLR")
datatable(Auto, class = 'cell-border stripe')

Selanjutnya dipilih 3 peubah dari data Auto yakni mpg,horsepower dan origin

data1 <- Auto %>% 
  select(mpg,horsepower,origin)
head(data1,10)
##    mpg horsepower origin
## 1   18        130      1
## 2   15        165      1
## 3   18        150      1
## 4   16        150      1
## 5   17        140      1
## 6   15        198      1
## 7   14        220      1
## 8   14        215      1
## 9   14        225      1
## 10  15        190      1

Visualisasi Data

Scatter Plot MPG VS HorsePower

ggplot(data1, aes(x=horsepower,y=mpg, color=origin))+geom_point(size=2)

Regresi Linear

ggplot(data1, aes(x=horsepower,y=mpg, color=origin))+geom_point(size=2)+ stat_smooth(method = "lm", formula = y~x,lty = 1,col = "red",se = F)+theme_bw()

Hal yang kurang bisa diterima dari model linear diatas 1. Model linear tidak mengikuti pola hubungan pada data (jika dilakukan prediksi hasilnya akan kurang baik)

  1. Dapat diperoleh nilai penduga peubah respon yang tidak masuk akal (respon bernilai negatif)

  2. Sifat dan perilaku sisaan cenderung tidak sesuai dengan harapan

Solusi yang dapat dilakukan untuk mengatasi pemodelan yang polanya tidak linear

Pemodelan Tak Linear

Regresi Polinomial

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

Fungsi Tangga (Piecewise Function)

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

Regresi Spline

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

karena ujung dari grafik masih memiliki ragam yang besar maka kita gunakan Natural Cubic Spline.

Natural Spline

regresi_spline = lm(data1$mpg ~ bs(data1$horsepower, knots=c(80, 120, 160, 200)))
prediksi = predict(regresi_spline , data.frame(data1$horsepower), interval="predict" )
ggplot(data1,aes(x=horsepower, y=mpg,xlab="Horsepower",ylab="mpg")) +
                 geom_point(alpha=0.55, color="red")+
    stat_smooth(method = "lm", 
               formula = y~ns(x, df=6), 
               lty = 1,se=F)


  1. Statistika dan Sains Data, IPB University, ↩︎