Eu estive explorando várias ferramentas de previsão e constatei que os Modelos Aditivos Generalizados (GAMs) têm o maior potencial para essa finalidade. GAMs são ótimos! Eles permitem que modelos complexos sejam especificados de maneira muito sucinta. No entanto, essa mesma sucessão está me causando alguma confusão, especificamente no que diz respeito à forma como os GAMs concebem termos e covariáveis de interação.
Considere um exemplo de conjunto de dados (código reproduzível no final do post) no qual yé uma função monotônica perturbada por alguns gaussianos, além de algum ruído:
O conjunto de dados possui algumas variáveis preditoras:
x: O índice dos dados (1-100).w: Um recurso secundário que marca as seções emyque um gaussiano está presente.wpossui valores de 1 a 20,xentre 11 e 30 e 51 a 70. Caso contrário,wé 0.w2:w + 1, para que não haja 0 valores.
O mgcvpacote de R facilita a especificação de vários modelos possíveis para esses dados:
Os modelos 1 e 2 são bastante intuitivos. Prever yapenas a partir do valor do índice na xsuavidade padrão produz algo vagamente correto, mas suave demais. Prever yapenas a partir de wresultados em um modelo do "gaussiano médio" presente em y, e nenhuma "conscientização" dos outros pontos de dados, todos com o wvalor 0.
O modelo 3 usa ambos xe wcomo 1D suaviza, produzindo um bom ajuste. O modelo 4 usa xe wem um 2D suave, também dando um bom ajuste. Esses dois modelos são muito semelhantes, embora não sejam idênticos.
Modelo 5 modelos x"por" w. O modelo 6 faz o oposto. mgcvA documentação de 'afirma que "o argumento by garante que a função suave seja multiplicada por [a covariável fornecida no argumento' by ']". Os modelos 5 e 6 não deveriam ser equivalentes?
Os modelos 7 e 8 usam um dos preditores como um termo linear. Isso faz sentido para mim, pois eles estão simplesmente fazendo o que um GLM faria com esses preditores e adicionando o efeito ao restante do modelo.
Por fim, o Modelo 9 é igual ao Modelo 5, exceto que xé suavizado "por" w2(que é w + 1). O que é estranho para mim aqui é que a ausência de zeros w2produz um efeito notavelmente diferente na interação "por".
Então, minhas perguntas são estas:
- Qual é a diferença entre as especificações nos modelos 3 e 4? Existe algum outro exemplo que destacaria a diferença mais claramente?
- O que exatamente "está" fazendo aqui? Muito do que li no livro de Wood e neste site sugere que "by" produz um efeito multiplicativo, mas estou tendo problemas para entender a intuição.
- Por que haveria uma diferença tão notável entre os modelos 5 e 9?
Reprex segue, escrito em 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)


