Ich habe eine Reihe von Prognosewerkzeugen untersucht und festgestellt, dass generalisierte additive Modelle (GAMs) für diesen Zweck das größte Potenzial haben. GAMs sind großartig! Sie ermöglichen es, komplexe Modelle sehr präzise zu spezifizieren. Diese Prägnanz führt jedoch zu einigen Verwirrungen, insbesondere in Bezug darauf, wie GAMs Interaktionsterme und Kovariaten auffassen.
Betrachten Sie einen Beispieldatensatz (reproduzierbarer Code am Ende des Beitrags), in dem y
eine monotone Funktion enthalten ist, die von ein paar Gaußschen gestört wird, plus etwas Rauschen:
Der Datensatz enthält einige Prädiktorvariablen:
x
: Der Index der Daten (1-100).w
: Ein sekundäres Merkmal, das die Abschnittey
angibt, in denen sich ein Gaußscher befindet.w
hat Werte von 1-20, wobeix
zwischen 11 und 30 und 51 bis 70 liegt. Andernfallsw
ist 0.w2
:w + 1
, damit es keine 0-Werte gibt.
Das mgcv
Paket von R macht es einfach, eine Reihe möglicher Modelle für diese Daten anzugeben:
Die Modelle 1 und 2 sind ziemlich intuitiv. Wenn Sie y
nur anhand des Indexwerts in x
der Standardglätte vorhersagen, wird etwas vage Richtiges, aber zu Glattes erzeugt. Das Vorhersagen erfolgt y
nur anhand von w
Ergebnissen in einem Modell des "durchschnittlichen Gaußschen", das in vorhanden ist y
, und ohne "Kenntnis" der anderen Datenpunkte, die alle den w
Wert 0 haben.
Modell 3 verwendet beides x
und w
als 1D-Glättung, was eine gute Passform ergibt. Modell 4 verwendet x
und w
in einer 2D glatt, auch eine schöne Passform. Diese beiden Modelle sind sehr ähnlich, aber nicht identisch.
Modell 5 Modelle x
"von" w
. Modell 6 macht das Gegenteil. mgcv
In der Dokumentation heißt es: "Das Argument by stellt sicher, dass die Glättungsfunktion mit [der im Argument 'by' angegebenen Kovariate] multipliziert wird." Sollten die Modelle 5 und 6 nicht gleichwertig sein?
Die Modelle 7 und 8 verwenden einen der Prädiktoren als linearen Term. Diese machen für mich intuitiv Sinn, da sie einfach das tun, was ein GLM mit diesen Prädiktoren tun würde, und den Effekt dann dem Rest des Modells hinzufügen.
Schließlich ist Modell 9 dasselbe wie Modell 5, mit der Ausnahme, dass x
"durch" geglättet wird w2
(was ist w + 1
). Was mir hier seltsam vorkommt, ist, dass das Fehlen von Nullen w2
in der "by" -Interaktion einen bemerkenswert unterschiedlichen Effekt erzeugt.
Meine Fragen lauten also:
- Was ist der Unterschied zwischen den Spezifikationen in den Modellen 3 und 4? Gibt es ein anderes Beispiel, das den Unterschied deutlicher macht?
- Was genau macht "by" hier? Vieles von dem, was ich in Woods Buch und auf dieser Website gelesen habe, deutet darauf hin, dass "by" einen multiplikativen Effekt erzeugt, aber ich habe Probleme, die Intuition davon zu verstehen.
- Warum gibt es einen so großen Unterschied zwischen den Modellen 5 und 9?
Es folgt Reprex, geschrieben 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)