Я исследовал ряд инструментов для прогнозирования и обнаружил, что Обобщенные аддитивные модели (GAM) обладают наибольшим потенциалом для этой цели. ГАМ - это здорово! Они позволяют указывать сложные модели очень кратко. Однако та же краткость вызывает у меня некоторую путаницу, особенно в отношении того, как GAM представляют себе термины взаимодействия и ковариаты.
Рассмотрим примерный набор данных (воспроизводимый код в конце поста), в котором y
есть монотонная функция, возмущенная парой гауссианов, плюс некоторый шум:
Набор данных имеет несколько переменных-предикторов:
x
: Индекс данных (1-100).w
: Вторичная особенность, которая выделяет участки,y
где присутствует гауссиан.w
имеет значения 1-20, гдеx
находится от 11 до 30, и от 51 до 70. В противном случаеw
равно 0.w2
:w + 1
, так что нет 0 значений.
mgcv
Пакет R позволяет легко определить ряд возможных моделей для этих данных:
Модели 1 и 2 довольно интуитивно понятны. Прогнозирование y
только по значению индекса x
при гладкости по умолчанию дает что-то неопределенно правильное, но слишком гладкое. Прогнозирование y
только на основе w
результатов в модели «среднего гауссова», присутствующего в нем y
, и отсутствие «осведомленности» о других точках данных, все из которых имеют w
значение 0.
Модель 3 использует как сглаживание, так x
и w
1D, обеспечивая хорошее прилегание. Модель 4 использует x
и w
в 2D гладкой, а также дает хорошую посадку. Эти две модели очень похожи, но не идентичны.
Модель 5 моделей x
"мимо" w
. Модель 6 делает наоборот. mgcv
Документация гласит, что «аргумент by гарантирует, что функция сглаживания умножается на [ковариату, заданную в аргументе« by »]». Так не должны ли модели 5 и 6 быть эквивалентными?
Модели 7 и 8 используют один из предикторов в качестве линейного члена. Они имеют для меня интуитивный смысл, поскольку они просто делают то, что GLM делает с этими предикторами, а затем добавляют эффект к остальной части модели.
Наконец, модель 9 такая же, как модель 5, за исключением того, что x
сглаживается «по» w2
(то есть w + 1
). Что для меня странно, так это то, что отсутствие нулей w2
приводит к совершенно другому эффекту в «побочном» взаимодействии.
Итак, мои вопросы таковы:
- В чем разница между спецификациями в моделях 3 и 4? Есть ли какой-то другой пример, который бы более четко обозначил разницу?
- Что именно "здесь" делает? Многое из того, что я прочитал в книге Вуда и на этом сайте, говорит о том, что «by» производит мультипликативный эффект, но мне трудно понять его интуицию.
- Почему между моделями 5 и 9 такая заметная разница?
Представлять следует, написано в 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)