Saya telah menjelajahi sejumlah alat untuk perkiraan, dan telah menemukan Generalized Additive Models (GAMs) memiliki potensi paling besar untuk tujuan ini. GAM itu luar biasa! Mereka memungkinkan untuk model yang rumit untuk ditentukan dengan sangat ringkas. Namun, kejelasan yang sama itu membuat saya kebingungan, khususnya terkait dengan bagaimana GAM memahami istilah interaksi dan kovariat.
Pertimbangkan contoh kumpulan data (kode yang dapat direproduksi di akhir posting) yang y
merupakan fungsi monoton yang diganggu oleh beberapa gaussians, ditambah beberapa noise:
Kumpulan data memiliki beberapa variabel prediktor:
x
: Indeks data (1-100).w
: Fitur sekunder yang menandai bagiany
tempat gaussian hadir.w
memiliki nilai 1-20 dix
antara 11 dan 30, dan 51 hingga 70. Jika tidak,w
adalah 0.w2
:w + 1
, sehingga tidak ada nilai 0.
mgcv
Paket R membuatnya mudah untuk menentukan sejumlah model yang mungkin untuk data ini:
Model 1 dan 2 cukup intuitif. Memprediksi y
hanya dari nilai indeks x
pada kelancaran default menghasilkan sesuatu yang samar-samar benar, tetapi terlalu mulus. Memprediksi y
hanya dari w
hasil dalam model "rata-rata gaussian" hadir y
, dan tidak ada "kesadaran" dari titik data lainnya, yang semuanya memiliki w
nilai 0.
Model 3 menggunakan keduanya x
dan w
sebagai smooth 1D, menghasilkan kecocokan yang bagus. Penggunaan Model 4 x
dan w
dalam 2D mulus, juga memberikan kecocokan yang bagus. Kedua model ini sangat mirip, meskipun tidak identik.
Model 5 model x
"oleh" w
. Model 6 melakukan yang sebaliknya. mgcv
Dokumentasi menyatakan bahwa "dengan argumen memastikan bahwa fungsi yang lancar dikalikan dengan [kovariat yang diberikan dalam argumen 'oleh']". Jadi bukankah seharusnya Model 5 & 6 setara?
Model 7 dan 8 menggunakan salah satu prediktor sebagai istilah linier. Ini masuk akal bagi saya, karena mereka hanya melakukan apa yang akan dilakukan GLM dengan prediktor ini, dan kemudian menambahkan efek ke seluruh model.
Terakhir, Model 9 sama dengan Model 5, kecuali yang x
dihaluskan "oleh" w2
(yang w + 1
). Yang aneh bagi saya di sini adalah bahwa tidak adanya nol w2
menghasilkan efek yang sangat berbeda dalam interaksi "oleh".
Jadi, pertanyaan saya adalah ini:
- Apa perbedaan antara spesifikasi dalam Model 3 dan 4? Apakah ada contoh lain yang akan menjelaskan perbedaannya lebih jelas?
- Apa, tepatnya, yang "dilakukan" di sini? Banyak dari apa yang saya baca di buku Wood dan situs web ini menunjukkan bahwa "oleh" menghasilkan efek multiplikasi, tetapi saya mengalami kesulitan memahami intuisi itu.
- Mengapa ada perbedaan yang mencolok antara Model 5 dan 9?
Reprex berikut, ditulis dalam R.
library(magrittr)
library(tidyverse)
library(mgcv)
set.seed(1222)
data.ex <- tibble(
x = 1:100,
w = c(rep(0, 10), 1:20, rep(0, 20), 1:20, rep(0, 30)),
w2 = w + 1,
y = dnorm(x, mean = rep(c(20, 60), each = 50), sd = 3) + (seq(0, 1, length = 100)^2) / 2 + rnorm(100, sd = 0.01)
)
models <- tibble(
model = 1:9,
formula = c('y ~ s(x)', 'y ~ s(w)', 'y ~ s(x) + s(w)', 'y ~ s(x, w)', 'y ~ s(x, by = w)', 'y ~ s(w, by = x)', 'y ~ x + s(w)', 'y ~ w + s(x)', 'y ~ s(x, by = w2)'),
gam = map(formula, function(x) gam(as.formula(x), data = data.ex)),
data.to.plot = map(gam, function(x) cbind(data.ex, predicted = predict(x)))
)
plot.models <- unnest(models, data.to.plot) %>%
mutate(facet = sprintf('%i: %s', model, formula)) %>%
ggplot(data = ., aes(x = x, y = y)) +
geom_point() +
geom_line(aes(y = predicted), color = 'red') +
facet_wrap(facets = ~facet)
print(plot.models)