Ho esplorato una serie di strumenti per le previsioni e ho scoperto che i modelli di additivi generalizzati (GAM) hanno il massimo potenziale per questo scopo. I GAM sono fantastici! Consentono di specificare in modo molto succinto modelli complessi. Tuttavia, quella stessa sintonia mi sta creando confusione, in particolare per quanto riguarda il modo in cui i GAM concepiscono termini di interazione e covariate.
Considera un set di dati di esempio (codice riproducibile alla fine del post) in cui yè una funzione monotonica perturbata da un paio di gaussiani, oltre ad alcuni rumori:
Il set di dati ha alcune variabili predittive:
x: L'indice dei dati (1-100).w: Una funzione secondaria che segna le sezioni inycui è presente un gaussiano.wha valori compresi tra 1xe 20, compresi tra 11 e 30 e tra 51 e 70. Altrimenti,wè 0.w2:w + 1, in modo che non ci siano 0 valori.
Il mgcvpacchetto di R rende semplice specificare un numero di possibili modelli per questi dati:
I modelli 1 e 2 sono abbastanza intuitivi. La previsione ysolo dal valore dell'indice nella xlevigatezza predefinita produce qualcosa di vagamente corretto, ma troppo regolare. Prevedere ysolo dai wrisultati in un modello del "gaussiano medio" presente ye nessuna "consapevolezza" degli altri punti dati, che hanno tutti un wvalore di 0.
Il modello 3 usa entrambi xe wcome smooth 1D, producendo una buona vestibilità. Il modello 4 utilizza xe win un 2D liscio, dando anche una buona vestibilità. Questi due modelli sono molto simili, sebbene non identici.
Modelli modello 5 x"by" w. Il modello 6 fa il contrario. mgcvLa documentazione afferma che "l'argomento by assicura che la funzione smooth venga moltiplicata per [la covariata fornita nell'argomento 'by']". Quindi i modelli 5 e 6 non dovrebbero essere equivalenti?
I modelli 7 e 8 usano uno dei predittori come termine lineare. Questi hanno un senso intuitivo per me, poiché stanno semplicemente facendo ciò che un GLM farebbe con questi predittori, e quindi aggiungendo l'effetto al resto del modello.
Infine, il Modello 9 è uguale al Modello 5, tranne per il fatto che xviene smussato "da" w2(che è w + 1). La cosa strana per me qui è che l'assenza di zeri in w2produce un effetto notevolmente diverso nell'interazione "by".
Quindi, le mie domande sono queste:
- Qual è la differenza tra le specifiche nei modelli 3 e 4? C'è qualche altro esempio che evidenzierebbe la differenza più chiaramente?
- Cosa sta facendo esattamente "by" qui? Gran parte di ciò che ho letto nel libro di Wood e in questo sito web suggerisce che "by" produce un effetto moltiplicativo, ma ho difficoltà a comprenderne l'intuizione.
- Perché ci sarebbe una differenza così notevole tra i modelli 5 e 9?
Segue Reprex, scritto in 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)


