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.
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.
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.