【问题标题】:In R, auto.arima fails to capture seasonality在 R 中,auto.arima 无法捕捉季节性
【发布时间】:2017-04-25 02:58:34
【问题描述】:

auto.arima() 没有为我的系列提供任何季节性组件,即使我可以看到有一个存在。该函数为我提供了一个非季节性的 ARIMA 阶数模型 (5,0,0)。因此,当我尝试使用该模型进行预测时,它只是给出了平均值。时间序列是澳大利亚墨尔本十年的每日最低气温。

Click this link to see the data and the auto.arima forecast

`

library(readr)

temp <- read_csv("~/Downloads/Melbourne Minimum Temp.csv", 
                 col_types = cols(Date = col_date(format = "%m/%d/%y"), 
                                  Temp = col_number()))

t <- ts(temp$Temp, start = temp$Date\[1], end = temp$Date[nrow(temp)])

auto.arima(t, trace = T)

`

尝试将数据用作 ts 对象、xts 对象和向量。

【问题讨论】:

  • 您还应该发布您定义时间序列的方式。如果 auto.arima 没有检测到季节性,您可能在创建系列时没有指定正确的频率。您还可以使用auto.arima(...,D=1) 强制进行季节性差异。
  • 我没有创建这个系列;这是墨尔本每日最低气温的真实数据。我尝试设置 D=1,但没有成功。
  • 如果您想要一个有用的答案,您需要提供更多信息:这可能是您数据的一个子集,但至少您应该发布您用于生成该预测的实际代码.尤其是您定义时间序列的部分。
  • @RickArko 我没有定义时间序列,我下载了它here。如果可以,请下载该数据并尝试在其上使用auto.arima()
  • 您可以发布您尝试过的确切代码吗? auto.arima() 要求您的输入属于您需要定义的 timeseries 类。

标签: r time-series forecasting


【解决方案1】:

只是报告一个很好的解释 - 像往常一样 - Rob Hyndman 的博文。

https://robjhyndman.com/hyndsight/dailydata/

与您的问题相关的部分说(完全引用页面):

当时间序列长到足以容纳一年以上时,那么 可能需要考虑年度季节性和每周 季节性。在这种情况下,多季节模型(例如 TBATS)是 必填。

y <- msts(x, seasonal.periods=c(7,365.25))
fit <- tbats(y)
fc <- forecast(fit)
plot(fc)

这应该捕获每周模式以及更长的年度模式 图案。周期 365.25 是允许的一年的平均长度 闰年。在一些国家,替代年或额外年 可能需要长度。

我认为它完全符合您的要求。

我还尝试使用 msts 简单地创建时间序列

y <- msts(x[1:1800], seasonal.periods=c(7,365.25))

(为了更快,我将时间序列减半)

然后直接在其上运行 auto.arima(),强制一个季节性组件 D=1

fc = auto.arima(y,D=1,trace=T,stepwise = F)

这需要一段时间.. 因为我设置了 stepwise = FALSE(如果您希望它查看所有没有快捷方式的组合,您也可以设置 approximation=FALSE)

Series: y 
ARIMA(1,0,3)(0,1,0)[365] 

Coefficients:
         ar1      ma1      ma2      ma3
      0.9036  -0.3647  -0.3278  -0.0733
s.e.  0.0500   0.0571   0.0405   0.0310

sigma^2 estimated as 12.63:  log likelihood=-3854.1
AIC=7718.19   AICc=7718.23   BIC=7744.54

然后是预测

for_fc = forecast(fc)
plot(for_fc)

我在输出的顶部添加了一个包含完整时间序列(红色)的图形 情节(for_fc) 它似乎工作得很好——但这只是一个快速的测试。

【讨论】:

  • 时隔3年才随机回到这个帖子哈哈哈!谢谢回答;有趣的是,几个月后我切换到 Python 并且从那以后一直在使用 Python:P
猜你喜欢
  • 2020-02-21
  • 2016-09-20
  • 1970-01-01
  • 2023-03-23
  • 2015-05-03
  • 2020-06-27
  • 2022-01-11
  • 2020-07-01
  • 1970-01-01
相关资源
最近更新 更多