mgcv: определение факторов более гладких взаимодействий для "глобальных" сгруппированных сглаживаний - PullRequest
0 голосов
/ 21 мая 2019

Я нашел препринт Иерархического ГАМ GH репо ) Pedersen et al. чрезвычайно полезен при моделировании межгрупповой изменчивости функциональных реакций, но я наткнулся на камень преткновения.

У меня есть данные временных рядов (подсчитанные во времени) со следующими основными ожиданиями:

  1. существует глобальный функциональный отклик интереса между счетами и временем;
  2. глобальная функция варьируется среди нескольких «фиксированных» групп (2-5), вероятно, с аналогичными параметрами сглаживания;
  3. Кажется, что существует систематическая тенденция в "случайных" отклонениях от этой глобальной функции из года в год (то есть форма функциональной реакции смещается в последовательном направлении); но
  4. тренд годовых отклонений по-разному применяется к «фиксированным» группам.

Здесь я попытаюсь проиллюстрировать надуманным примером, так как боюсь, что мое описание не дотягивает. Я моделирую 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()

Итак, мои вопросы:

  1. Подходит ли базовый набор сглаживающих факторов для фиксированной группы лечения (s(x, by = ftrt)) по сравнению с каким-то глобальным сглаживанием (s(x))?
  2. Есть ли лучший способ учесть "случайные" годовые отклонения в плавных формах отдельно по группам лечения?
  3. Есть ли способ зафиксировать "тенденцию" изменения формы для определенных групп, то есть моделировать линейное изменение параметров сглаживания или аналогичное?
...