3

我想使用广义加法模型来研究 R 中的时间序列数据。我的数据是每月的,我想估计季节性效应和长期趋势效应。我在这里这里关注了 Gavin Simpson 的一些有用的帖子:

我的数据如下所示:

旅行

我的 github页面上有完整的数据集:

我试图指定一个具有平滑季节性和趋势项的广义加法模型,如下所示:

    df <- read.csv('trips.csv')
    head(df)
    # A tibble: 276 × 2
     date ntrips
   <date>  <int>
    1  1994-01-01    157
    2  1994-02-01    169
    3  1994-03-01    195
    4  1994-04-01    124
    5  1994-05-01    169

    #add a time column
    trips <- tbl_df(trips) %>% mutate(time=as.numeric(date))

    mod1 <- gamm(ntrips~s(month,bs="cc",k=12) + s(time),data=trips)

我提取了对季节性影响的估计如下:

    pred <- predict(mod1$gam,newdata=trips,type="terms")
    seas <- data.frame(s=pred[,1],date=trips$date)
    ggplot(seas,aes(x=date,y=s)) + geom_line()

这个情节包括在下面:

季节性游戏

我的问题是:在原始数据中,季节性峰值每年都会略有变化。在令人尴尬的简单 GAM 中,我指定了季节性影响是恒定的。有没有办法用 GAM 来适应随时间变化的季节性?

我使用 Cleveland 等人的 STL 方法 分析了这些数据:

使用 STL 范式,如何摆动或平滑允许季节性影响似乎是一个偏好或选择问题。如果我可以让数据告诉我随机误差和变化的季节性峰值之间的区别,我会更愿意。GAMS 似乎更适合这个目标,因为它们更容易用于统计模型拟合类型的练习......但我想知道 R 包中是否有一个参数用于拟合 gams,它允许随时间变化的季节性影响。

4

1 回答 1

4

答案是:是的,可以针对您感兴趣的问题制定 GAM 模型。如果我们假设模型的趋势和季节分量平滑交互,我们就有了连续-连续交互的平滑等效项。这种交互可以使用两个边缘平滑的张量积拟合在 GAM 中:

  1. 季节性循环平滑,并且
  2. 长期趋势平稳

顺便说一句,我有更多关于这些的博客文章:

阅读这些以获得更多详细信息,但基本方面是适合以下模型:

## fix the knots are just passed the ends of the month numbers
## this allows Dec and Jan to have their own estimates
knots <- list(month = c(0.5, 12.5))

## original model, fixed seasonal component
m1 <- gam(ntrips ~ s(month, bs="cc", k=12) + s(time), data = trips,
          knots = knots)

## modified model with
m2a <- gam(ntrips ~ te(month, time, bs = c("cc","tp"), k = c(12, 10)), data = trips,
          knots = knots))

第二个模型的替代方法是对两个主要效应和交互作用进行类似方差分析的分解。在上述修改后的模型中,所有三个分量都绑定在单张量积平滑中,te()即模型的一部分。

类似方差分析的分解变体将使用

m2b <- gam(ntrips ~ ti(month, bs = 'cc', k = 12) +
             ti(time, bs = 'tp', k = 10) +
             ti(month, time, bs = c("cc","tp")), data = trips,
           knots = knots)

第三个ti()是平滑交互,与季节性和长期趋势的主要平滑效应分开。

我已经展示了这些拟合使用,但如果您需要包含模型残差的 ARMA 过程,gam()它们也可以使用。gamm()

于 2017-11-22T17:35:31.993 回答