Smoothing Splines
Menurut Harezlak dan Teixeira-Pinto (2020), pendekatan spline dapat pula dilakukan dengan ide yang mirip seperti yang dilakukan pada regularisasi. Metode smoothing spline menggunakan penalti pada jumlah kuadrat sisaan seperti yang terlihat pada rumus berikut ini: \[\sum_{i=1}^n {(y_i-f(x_i))}^2+\lambda\int f''(t)^2 dt\] Fungsi smooth.spline() dapat digunakan untuk melakukan smoothing spline pada R. Sebagai ilustrasi, data triceps yang tersedia di package MultiKink akan digunakan.
library(splines)
library(MultiKink)
data("triceps")
sspline <- smooth.spline(triceps$age, triceps$triceps,lambda=0.5)
plot(triceps$age, triceps$triceps)
lines(sspline, col="blue")Seandainya kita menggunakan lambda yang lebih kecil, maka hasil pemulusan menjadi lebih kasar, seperti yang terlihat pada ilustrasi berikut.
sspline2 <- smooth.spline(triceps$age, triceps$triceps,lambda=0.0001)
plot(triceps$age, triceps$triceps)
lines(sspline2, col="blue")Pengaturan juga dapat dilakukan dengan mengubah nilai pada argumen spar. Beberapa diskusi mengenai topik ini juga dapat dilihat pada link ini.
Splines for Wage
Berikut ini adalah ilustrasi yang diambil dari Ganegja (2018) menggunakan data Wage yang diambil dari package ISLR. Pada ilustrasi ini, pengaturan dilakukan dengan argumen df.
library(ISLR)
data(Wage)
attach(Wage)
agelims =range(age)
plot(age ,wage ,xlim=agelims ,cex =.5, col =" darkgrey ")
title (" Smoothing Spline ")
fit=smooth.spline (age ,wage ,df =16)
fit2=smooth.spline (age ,wage ,cv=TRUE)
lines(fit,col ="red ",lwd =2)
lines(fit2,col =" blue",lwd=2)
legend ("topright",legend =c("16 DF " ,"6.8 DF"), col=c("red "," blue "),
lty =1, lwd =2, cex =.8)Local Regression
Masih menggunakan data Wage seperti pada ilustrasi sebelumnya, kali ini kita akan mencoba melakukan pendekatan local regression dengan fungsi loess().
plot(age ,wage ,xlim=agelims ,cex =.5, col =" darkgrey ")
title (" Local Regression ")
fit=loess(wage~age ,span =.2, data=Wage)
fit2=loess(wage~age ,span =.5, data=Wage)
age.grid=seq (from=agelims[1], to=agelims[2])
lines(age.grid,predict(fit ,data.frame(age=age.grid)), col ="red",lwd =2)
lines(age.grid,predict(fit2 ,data.frame(age=age.grid)), col ="blue",lwd =2)
legend("topright",legend =c("Span =0.2" ," Span =0.5"), col=c("red","blue"),lty =1,
lwd =2, cex =.8)Pendekatan ini juga dapat dilakukan dengan fungsi geom_smooth() pada package ggplot2.
library(ggplot2)
ggplot(Wage, aes(age,wage)) +
geom_point() +
geom_smooth(method='loess')## `geom_smooth()` using formula 'y ~ x'
Tuning dapat dilakukan dengan mengatur nilai span, seperti yang dapat dilihat pada ilustrasi berikut.
ggplot(Wage, aes(age,wage)) +
geom_point() +
geom_smooth(method='loess', span=0.1, colour="red")## `geom_smooth()` using formula 'y ~ x'
ggplot(Wage, aes(age,wage)) +
geom_point() +
geom_smooth(method='loess', span=0.8, colour="blue") ## `geom_smooth()` using formula 'y ~ x'
detach(Wage)Ilustrasi lain dapat dilihat pada sumber yang kami gunakan, yaitu Mint (2019).
References
Gagneja, P. (2018, January 23). R labs from ISL Book(Trevor&Hastie). https://rstudio-pubs-static.s3.amazonaws.com/354377_f6bf3b57b60c4e25b218b4090ab52d08.html
Mint, L. (2019). Topic 9 local regression and GAMs | MATH 253: Machine learning. Leslie Myint. https://lmyint.github.io/253_spring_2019/local-regression-and-gams.html
Harezlak, J., & Teixeira-Pinto, A. (2020, September 15). 3 smoothing splines | Machine learning for biostatistics. Bookdown. https://bookdown.org/tpinto_home/Beyond-Linearity/smoothing-splines.html