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 yjest 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, wyktórych obecny jest gaussian.wma wartości 1-20, gdziexjest między 11 a 30, i 51 do 70. W przeciwnym raziewwynosi 0.w2:w + 1, aby nie było 0 wartości.
mgcvPakiet R ułatwia określenie szeregu możliwych modeli tych danych:
Modele 1 i 2 są dość intuicyjne. Prognozowanie ytylko na podstawie wartości indeksu w xdomyślnej gładkości powoduje coś niejasno poprawnego, ale zbyt płynnego. Prognozowanie ytylko na podstawie wwyników w modelu „przeciętnego gaussa” obecnego w y, i brak „świadomości” innych punktów danych, z których wszystkie mają wwartość 0.
Model 3 wykorzystuje zarówno wygładzanie 1D, jak xi wzapewnia dobre dopasowanie. Model 4 zastosowania xoraz ww 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. mgcvDokumentacja 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 xjest wygładzany „przez” w2(czyli jest w + 1). Dziwne dla mnie jest to, że brak zer w w2wywoł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)


