Eksplorowałem szereg narzędzi do prognozowania i odkryłem, że Uogólnione Modele Addytywne (GAM) mają największy potencjał do tego celu. GRY są świetne! Pozwalają na bardzo zwięzłe określenie złożonych modeli. Jednak ta sama zwięzłość powoduje pewne zamieszanie, szczególnie w odniesieniu do tego, w jaki sposób GAM postrzegają terminy interakcji i zmienne towarzyszące.
Rozważ przykładowy zestaw danych (odtwarzalny kod na końcu postu), w którym y
jest monotoniczna funkcja zakłócona przez kilku gaussów, plus trochę szumu:
Zestaw danych ma kilka zmiennych predykcyjnych:
x
: Indeks danych (1-100).w
: Drugorzędna cecha, która wyznacza sekcje, wy
których obecny jest gaussian.w
ma wartości 1-20, gdziex
jest między 11 a 30, i 51 do 70. W przeciwnym raziew
wynosi 0.w2
:w + 1
, aby nie było 0 wartości.
mgcv
Pakiet R ułatwia określenie szeregu możliwych modeli tych danych:
Modele 1 i 2 są dość intuicyjne. Prognozowanie y
tylko na podstawie wartości indeksu w x
domyślnej gładkości powoduje coś niejasno poprawnego, ale zbyt płynnego. Prognozowanie y
tylko na podstawie w
wyników w modelu „przeciętnego gaussa” obecnego w y
, i brak „świadomości” innych punktów danych, z których wszystkie mają w
wartość 0.
Model 3 wykorzystuje zarówno wygładzanie 1D, jak x
i w
zapewnia dobre dopasowanie. Model 4 zastosowania x
oraz w
w 2D gładka, również dając piękny dopasowanie. Te dwa modele są bardzo podobne, choć nie identyczne.
Model 5 modeli x
„przez” w
. Model 6 robi odwrotnie. mgcv
Dokumentacja stwierdza, że „argument przez zapewnia, że funkcja gładka zostaje pomnożona przez [zmienną podaną w argumencie„ przez ”]. Czy zatem modele 5 i 6 nie powinny być równoważne?
Modele 7 i 8 wykorzystują jeden z predyktorów jako termin liniowy. Są dla mnie intuicyjne, ponieważ robią po prostu to, co GLM zrobiłby z tymi predyktorami, a następnie dodają efekt do reszty modelu.
Wreszcie, Model 9 jest taki sam jak Model 5, z tą różnicą, że x
jest wygładzany „przez” w2
(czyli jest w + 1
). Dziwne dla mnie jest to, że brak zer w w2
wywołuje znacząco inny efekt w interakcji „przez”.
Więc moje pytania są następujące:
- Jaka jest różnica między specyfikacjami w modelach 3 i 4? Czy jest jakiś inny przykład, który lepiej uwidoczniłby różnicę?
- Czym dokładnie jest „robienie” tutaj? Wiele z tego, co przeczytałem w książce Wooda i na tej stronie, sugeruje, że „przez” daje efekt multiplikatywny, ale mam problem z uchwyceniem intuicji.
- Dlaczego miałaby być tak zauważalna różnica między modelami 5 i 9?
Następuje reprex napisany w 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)