a. Metode GAM

GAM (Generalized Additive Models) adalah salah satu metode dalam analisis regresi yang memperluas model linear dengan memperkenalkan variabel prediktor non-linier melalui fungsi-fungsi non-parametrik yang disebut dengan fungsi smoothing. Beberapa metode yang digunakan dalam GAM antara lain yaitu:
1. Splines: suatu fungsi matematis yang memungkinkan fitting data dalam bentuk kurva-kurva polinomial. Splines biasanya digunakan untuk menangani variabel numerik dan memperhalus kurva yang dihasilkan.
2. LOESS (Locally Estimated Scatterplot Smoothing): metode yang digunakan untuk menentukan regresi non-parametrik dengan mencari pola data secara lokal dan membangun regresi pada setiap titik data.
3. Generalized Cross-Validation (GCV): metode yang digunakan untuk memilih jumlah dan lokasi knots (titik pembelahan) dalam model spline,dengan tujuan meminimalkan kerugian pada data yang belum dipelajari.
4. Smoothing parameter estimation: metode yang digunakan untuk menentukan parameter smoothing dalam model GAM, dengan tujuan meminimalkan kerugian prediksi pada data yang belum dipelajari.
5. Penalized regression: metode yang digunakan untuk memperhalus kurva dan mengurangi overfitting pada model GAM dengan memberikan hukuman (penalty) pada koefisien yang besar. Metode ini termasuk dalam kelompok model non-parametrik.
6. Bayesian methods: metode yang memperkenalkan ketidakpastian dalam model GAM dengan menggunakan metode Bayesian untuk menentukan distribusi posteriori dari parameter model. Metode ini digunakan untuk memperbaiki model overfitting dan memperbaiki prediksi pada data yang belum dipelajari.

b. Algoritma GAM

Input: X: variabel prediktor y: variabel target family: distribusi residual Langkah: 
1. Buat data train dan data test dengan menggunakan sampel data. 
2. Hitung nilai setiap fungsi smoothing berdasarkan metode smoothing yang dipilih (seperti splines, LOESS, dsb.)
3. Tentukan variabel dependen Y dan variabel independen X1, X2, …, Xp. 
4. Tentukan variabel yang perlu di-smoothingkan dengan fungsi smoothing s(). 
5. Gunakan teknik cross-validation atau informasi informasi lain yang tersedia untuk menentukan nilai df (degree of freedom) untuk setiap fungsi smoothing. 
6. Buat model GAM dengan mengkombinasikan fungsi link, fungsi smoothing, dan variabel independen. 
7. Keluarkan model GAM dengan parameter berdasarkan data train.

Output: Model GAM dengan parameter berdasarkan data train dan dapat digunakan untuk memprediksi nilai target y baru berdasarkan variabel prediktor X.

Kode GAM

Import Library

library(ISLR)
library(leaps)
library(gam)
## Loading required package: splines
## Loading required package: foreach
## Loaded gam 1.22-2

Dataset horsepower yang sering digunakan yaitu dataset “mtcars”. Dataset tersebut terdiri dari informasi tentang 32 mobil berbeda yang diuji oleh majalah Motor Trend pada tahun 1974

data(mtcars)
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
names(mtcars)
##  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
## [11] "carb"

Ubah data tersebut menjadi data train dan data test

train <- sample(length(mtcars$hp), length(mtcars$hp)/2)
test <- train
mtcars.train <- mtcars[train,]
mtcars.test <- mtcars[test,]

Fungsi regsubsets digunakan untuk melakukan seleksi variabel dengan menggunakan metode forward. Variabel respon adalah hp dan variabel prediktornya adalah semua variabel pada mtcars.train. Batas maksimum jumlah variabel yang digunakan yaitu 10.

fit <- regsubsets(hp~., data = mtcars.train, nvmax = 10, method="forward")
fit.summary <- summary(fit)

Membuat plot Cp dari dataset

par(mfrow =c(1,3))
plot(fit.summary$cp, xlab = "Number of variables", ylab = "Cp", type = "l")
min.cp <- min(fit.summary$cp)
std.cp<- sd(fit.summary$cp)
abline(h = min.cp + 0.2 * std.cp, col = "blue", lty = 2)
abline(h = min.cp - 0.2 * std.cp, col = "blue", lty = 2)
abline(v = 8, col = "blue", lty = 2)

Menampilkan data anova singkat untuk mengetahui degree pf freedom dari setiap variabel yang ada

fit <- aov(hp ~ mpg+cyl+disp+drat+wt+qsec+vs+gear+carb+am, data = mtcars)

Membuat model GAM berdasarkan beberapa variabel yang sesuai

fit.gam <- gam(hp ~ vs + s(mpg, df = 1)
+ s(disp, df = 1)
+s(drat, df = 1) + s(wt, df = 1)
+s(qsec, df = 1) +s(carb, df = 1), data=mtcars.train)
par(mfrow =c(3,3))
plot(fit.gam, se=TRUE ,col ="red")
## Warning in pf(nl.chisq/nldf, nldf, rdf): NaNs produced

Melakukan prediksi terhadap data test menggunakan model gam yang ada, serta menghitung nilai TSS (total sum of squares) dan RSS(residual sum of squares)

preds <- predict(fit.gam, mtcars.test)
err <- mean((mtcars.test$hp - preds)^2)
err
## [1] 223.7358
tss <- mean((mtcars.test$hp - mean(mtcars.test$hp))^2)
rss <- 1 - err/tss
rss
## [1] 0.9579651

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.