J'ai exploré un certain nombre d'outils de prévision et j'ai trouvé que les modèles additifs généralisés (GAM) avaient le plus de potentiel à cette fin. Les GAM sont super! Ils permettent de spécifier très succinctement des modèles complexes. Cependant, cette même concision me cause une certaine confusion, en particulier en ce qui concerne la façon dont les GAM conçoivent les termes d'interaction et les covariables.
Prenons un exemple d'ensemble de données (code reproductible à la fin de l'article) dans lequel se y
trouve une fonction monotone perturbée par quelques gaussiens, plus du bruit:
L'ensemble de données comporte quelques variables prédictives:
x
: L'index des données (1-100).w
: Une caractéristique secondaire qui délimite les sectionsy
où un gaussien est présent.w
a des valeurs de 1 à 20 où sex
situe entre 11 et 30, et 51 à 70. Sinon,w
est 0.w2
:w + 1
, pour qu'il n'y ait pas de valeur 0.
Le mgcv
package de R facilite la spécification d'un certain nombre de modèles possibles pour ces données:
Les modèles 1 et 2 sont assez intuitifs. Prédire y
uniquement à partir de la valeur d'index dans x
le lissage par défaut produit quelque chose de vaguement correct, mais trop lisse. Prédire y
uniquement à partir des w
résultats dans un modèle de la «moyenne gaussienne» présente dans y
les autres points de données, et aucune «prise de conscience», qui ont tous une w
valeur de 0.
Le modèle 3 utilise à la fois x
et en w
tant que lisses 1D, produisant un ajustement agréable. Le modèle 4 utilise x
et w
dans un 2D lisse, donnant également un bon ajustement. Ces deux modèles sont très similaires, mais pas identiques.
Modèle 5 modèles x
"par" w
. Le modèle 6 fait le contraire. mgcv
La documentation de 'stipule que "l'argument by garantit que la fonction lisse est multipliée par [la covariable donnée dans l'argument" by "]". Les modèles 5 et 6 ne devraient-ils donc pas être équivalents?
Les modèles 7 et 8 utilisent l'un des prédicteurs comme terme linéaire. Cela a un sens intuitif pour moi, car ils font simplement ce qu'un GLM ferait avec ces prédicteurs, puis ajoutent l'effet au reste du modèle.
Enfin, le modèle 9 est le même que le modèle 5, sauf qu'il x
est lissé "par" w2
(qui est w + 1
). Ce qui est étrange pour moi ici, c'est que l'absence de zéros dans w2
produit un effet remarquablement différent dans l'interaction "par".
Donc, mes questions sont les suivantes:
- Quelle est la différence entre les spécifications des modèles 3 et 4? Y a-t-il un autre exemple qui ferait mieux ressortir la différence?
- Que fait exactement "en" ici? Une grande partie de ce que j'ai lu dans le livre de Wood et ce site Web suggère que "par" produit un effet multiplicatif, mais j'ai du mal à en saisir l'intuition.
- Pourquoi y aurait-il une différence aussi notable entre les modèles 5 et 9?
Reprex suit, écrit en 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)
Réponses:
Q1 Quelle est la différence entre les modèles 3 et 4?
Le modèle 3 est un modèle purement additif
nous avons donc une constante plus l'effet lisse de plus l'effet lisse de .x wα X w
Le modèle 4 est une interaction fluide de deux variables continues
Dans un sens pratique, le modèle 3 dit que quel que soit l'effet de , l'effet de sur la réponse est le même; si nous fixons à une valeur connue et faisons varier sur une certaine plage, les contributions de au modèle ajusté restent les mêmes. Vérifiez ceci si vous voulez dériver du modèle 3 pour une valeur fixe de et quelques valeurs différentes de et utilisez l' argument de la méthode. Vous verrez une contribution constante aux valeurs ajustées / prévues pour .x x w f 1 ( x )w X X w F1( x )
predict()
x
w
type = 'terms'
predict()
s(x)
Ce n'est pas le cas du modèle 4; ce modèle dit que l'effet lisse de varie en douceur avec la valeur de et vice versa.wX w
Notez que sauf si et sont dans les mêmes unités ou si nous nous attendons à la même ondulation dans les deux variables, vous devez utiliser pour ajuster l'interaction.wX w
te()
Dans un sens, le modèle 4 convient
mais notez que cela estime 4 paramètres de lissage:
Le
te()
modèle ne contient que deux paramètres de lissage, un par base marginale.w2
Q2 Que fait exactement "en" ici?
by
by
by
Q3 Pourquoi y aurait-il une différence aussi notable entre les modèles 5 et 9?
la source
by
autant plus perplexe l'existence du paramètre.