Я нашел препринт Иерархического ГАМ (и GH репо ) Pedersen et al. чрезвычайно полезен при моделировании межгрупповой изменчивости функциональных реакций, но я наткнулся на камень преткновения.
У меня есть данные временных рядов (подсчитанные во времени) со следующими основными ожиданиями:
- существует глобальный функциональный отклик интереса между счетами и временем;
- глобальная функция варьируется среди нескольких «фиксированных» групп (2-5), вероятно, с аналогичными параметрами сглаживания;
- Кажется, что существует систематическая тенденция в "случайных" отклонениях от этой глобальной функции из года в год (то есть форма функциональной реакции смещается в последовательном направлении); но
- тренд годовых отклонений по-разному применяется к «фиксированным» группам.
Здесь я попытаюсь проиллюстрировать надуманным примером, так как боюсь, что мое описание не дотягивает. Я моделирую 20 повторяющихся (годовых) временных рядов для двух «фиксированных» групп / обработок. В контроле (trt == 0) годовой разброс незначителен. В лечении (trt == 1) наблюдается систематическая тенденция в форме ответа.
library(reshape)
library(dplyr)
library(ggplot2)
set.seed(2020)
n_yr <- 20
n_trt <- 2
n_x <- 10
dat <- tibble(yr = rep(seq(0, n_yr - 1), n_trt)) %>%
expand.grid.df(tibble(x = rep(seq(0, 1, length.out = 10), n_trt),
tweak = c(rep(0, 15), rep(0.02, 5)),
trt = rep(0:1, each = n_x)), .) %>%
mutate(e = rnorm(n_x * n_yr * n_trt, 0, 0.3),
y = 3 + 9 * (x - tweak * yr) - 1 * (x - tweak * yr)^2 - 10 * (x - tweak * yr)^3 + e,
fyr = factor(yr),
ftrt = factor(trt),
fty = factor(interaction(trt,yr)))
ggplot(dat, aes(x, y)) + geom_line(aes(group = yr, colour = yr)) +
facet_grid(trt ~ .) + theme_bw() +
scale_colour_gradient("Year", low = "#2166ac", high = "#b2182b")
Каков соответствующий механизм для сбора функционального ответа (ответов), представляющего интерес, а также модели межгодового отклонения в ответе, которое варьируется между группами?
Мое лучшее предположение - смоделировать взаимодействие факторного сглаживания (используя обработку в качестве переменной by
) для моих "глобальных" сглаживаний. Но как тогда моделировать годовые отклонения от этих отдельных сглаживаний?
Простой сглаживающий фактор (fs
; ?factor.smooth.interaction
) по годам из одного глобального ответа кажется неадекватным:
library(mgcv)
m <- gam(y ~ s(x, by = ftrt, k = 5) + ftrt + s(x, fyr, bs = "fs", k = 5, m = 1),
data = dat, method = "REML")
plot(m, pages = 1)
A fs
взаимодействие по году лечения кажется более подходящим:
# Different smoothing parameters by treatment
m1 <- gam(y ~ s(x, by = ftrt, k = 5) + ftrt + s(x, fty, bs = "fs", k = 5, m = 1),
data = dat, method = "REML")
p <- plot(m1, pages = 1)
График ниже лучше иллюстрирует различия в годовых отклонениях от сглаживания лечения между обработками, а также «тенденцию» в форме этих отклонений для группы лечения:
df <- data.frame(p[[3]],
fty = rep(levels(dat$fty), each = 100),
trt = rep(rep(0:1, each = 100), 20),
yr = rep(0:19, each = 200))
ggplot(df, aes(x, fit, group = fty)) +
geom_line(aes(color = yr)) +
scale_colour_gradient("Year", low = "#2166ac", high = "#b2182b") +
facet_grid(trt ~ .) + theme_bw()
Итак, мои вопросы:
- Подходит ли базовый набор сглаживающих факторов для фиксированной группы лечения (
s(x, by = ftrt)
) по сравнению с каким-то глобальным сглаживанием (s(x)
)?
- Есть ли лучший способ учесть "случайные" годовые отклонения в плавных формах отдельно по группам лечения?
- Есть ли способ зафиксировать "тенденцию" изменения формы для определенных групп, то есть моделировать линейное изменение параметров сглаживания или аналогичное?