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
Selanjutnya dipilih 3 peubah dari data Auto yakni mpg,horsepower dan origin
## 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
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)
Dapat diperoleh nilai penduga peubah respon yang tidak masuk akal (respon bernilai negatif)
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)Statistika dan Sains Data, IPB University, kevinalifviansyah@apps.ipb.ac.id↩︎