mgcv:为“全局”分组平滑指定因子平滑的交互

时间:2019-05-21 17:15:09

标签: r smoothing gam mgcv

我发现了Pedersen等人的Hierarchical GAM pre-print(和GH repo)。对功能响应中的群体间变异建模非常有帮助,但我遇到了绊脚石。

我有一些时间序列数据(时间计数),具有以下基本期望:

  1. 在计数和时间之间存在感兴趣的全局功能响应;
  2. 全局功能在几个“固定”组(2-5)之间变化,可能具有相似的平滑参数;
  3. [li]这种全局功能的“随机”偏差似乎每年都有系统的趋势(即,功能响应的形状朝着一致的方向漂移);但是
  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)

按治疗年份进行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. 对于某些组,是否有任何方法可以捕获形状变化中的“趋势”,即对平滑参数或类似参数的线性变化进行建模?

0 个答案:

没有答案