每日时间序列分析


24

我正在尝试进行时间序列分析,并且是该领域的新手。我每天都在统计2006-2009年的某个事件,因此我想为其拟合时间序列模型。这是我取得的进步:

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)

我得到的结果图是:

时间序列图

为了验证是否存在季节性和趋势数据,或者不是,我按照此提到的步骤

ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal

在Rob J Hyndman的博客中

library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")

deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df 
#P value
1-pchisq(deviance,df)

两种情况都表明没有季节性。

当我绘制该系列的ACF和PACF时,得到的是:

ACF 聚氯乙烯

我的问题是:

  1. 这是处理每日时间序列数据的方式吗?该页面建议我应该同时查看每周和年度模式,但是这种方法对我来说并不明确。

  2. 一旦有了ACF和PACF图,我将不知道如何进行。

  3. 我可以简单地使用auto.arima函数吗?

    适合<-arima(myts,order = c(p,d,q)

*****更新了Auto.Arima结果******

当我根据罗布海德门的评论的数据的频率改变为7 这里,auto.arima选择一个季节性ARIMA模型和输出:

Series: timeSeriesObj 
ARIMA(1,1,2)(1,0,1)[7]                    

Coefficients:
       ar1      ma1     ma2    sar1     sma1
      0.89  -1.7877  0.7892  0.9870  -0.9278
s.e.   NaN      NaN     NaN  0.0061   0.0162

sigma^2 estimated as 21.72:  log likelihood=-4319.23
AIC=8650.46   AICc=8650.52   BIC=8682.18 

******更新了季节性检查******

当我以频率7测试季节性时,它输出True,但季节性为365.25,则输出false。这足以得出缺乏年度季节性的结论吗?

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

返回:

True

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

返回:

False

产生什么输出str(x)
S. Kolassa-恢复莫妮卡

它产生num [1:1460] 17 12 12 17 13 14 14 5 12 21 ...
statBeginner 2015年

您可以发布数据吗?
天气预报员

不幸的是,我不能。
statBeginner

2
好吧,除了统计测试以外,我还需要依靠视觉检查和领域知识来检测季节性。关于Arima是否可以处理多个季节性问题,您肯定会感到ARIMA是否可以处理任何类型的季节性,R简单的处理能力却无法解决 。如果您要预测的产品涉及较高的库存/制造成本,我将寻求商业解决方案。R对于像您这样的预测任务有严格的限制。查看有关每日天气预报的问题,以及本网站的其他内容。
预报者

Answers:


25

您的ACF和PACF表示您至少具有每周的季节性,这由滞后7、14、21等处的峰值显示。

您可能还具有年度季节性,尽管从您的时间序列中并不明显。

在可能存在多个季节性的情况下,最好的选择可能是tbats模型,该模型显式地对多种类型的季节性进行建模。装入forecast包装:

library(forecast)

您的输出自str(x)表示x尚未携带有关可能具有多个季节性的信息。看一下?tbats,然后比较的输出str(taylor)。分配季节:

x.msts <- msts(x,seasonal.periods=c(7,365.25))

现在您可以拟合tbats模型。(请耐心等待,可能需要一段时间。)

model <- tbats(x.msts)

最后,您可以预测并绘制:

plot(forecast(model,h=100))

你不应该使用arima()或者auto.arima(),因为这些只能处理一个单一类型的季节性的:无论是每周一次每年一次。不要问我如何auto.arima()处理您的数据。它可以选择一种季节性,也可以完全不考虑它们。


编辑以评论中的其他问题:

  1. 如何检查数据是否具有年度季节性?我可以每月创建另一个事件总数系列,并使用其ACF来决定吗?

根据月度数据计算模型可能是可行的。然后,您可以例如比较有季节性和无季节性的模型之间的AIC。

但是,我宁愿使用保留样本来评估预测模型。保留最后100个数据点。适合使用按年的模型每周季节性到数据(如上面)的其余部分,然后配合一个仅每周季节性,例如,使用auto.arima()tsfrequency=7。使用两种模型预测进入保留期。使用MAE,MSE或与损失函数最相关的任何方法,检查哪个错误较低。如果误差之间的差异很小,则使用更简单的模型。否则,使用误差较小的那个。

布丁的证明在饮食中,时间序列模型的证明在预测中。

为了改进问题,请勿使用单个保留样本(鉴于系列末尾的上升,可能会产生误导),而请使用滚动原点预测,也称为“时间序列交叉验证”。(我非常建议您使用完整的免费在线预测教科书

  1. 那么,季节性ARIMA模型通常不能处理多个季节性?它是模型本身的属性还是只是R中的函数编写方式?

标准ARIMA模型通过季节性差异处理季节性。对于季节性月度数据,您不会建模原始时间序列,而是建模2015年3月至2014年3月之间,2015年2月至2014年2月之间的时间序列差异等等。(要获得原始规模的预测,您当然需要再次保持一致。)

没有立即明显的方法可以将此想法扩展到多个季节。

当然,您可以使用ARIMAX进行某些操作,例如,通过包含每月的虚拟变量来模拟年度季节性,然后使用每周的季节性ARIMA建模残差。如果要在R中执行此操作,请使用ts(x,frequency=7),创建每月虚拟变量的矩阵,并将其输入到的xreg参数中auto.arima()

我不记得有任何出版物专门将ARIMA扩展到多个季节,尽管我敢肯定有人在上一段中做了一些事情。


以下是根据您的回答提出的几个问题:1.如何检查数据是否具有年度季节性?我可以每月创建另一个事件总数系列,并使用其acf来决定吗?2.因此,季节性ARIMA模型通常不能处理多个季节性?它是模型本身的属性还是只是R中的函数编写方式?
statBeginner'1

更新的帖子具有Auto.Arima的每周季节性结果
statBeginner 2015年

1
@StephanKolassa,我前一段时间从AT&T 找到这篇文章,该文章使用了多个季节性ARIMA。R由于R没有能力处理多季节的ARIMA ,因此无法使用本文中的模型。
预报者

2
@forecaster:太好了,谢谢!看来它们在公式3.1中确实存在两次微分。我有点担心这样会丢失大量数据。不幸的是,他们没有将其结果与简单的基准进行比较,例如上周的需求。我喜欢的是他们还如何调查DSARIMA和类似tbats模型之间的预测组合。
S. Kolassa-恢复莫妮卡2015年

2
@StephanKolassa我同意,我非常支持使用阿姆斯特朗的《预测原则》所支持的朴素预测作为基准,并且只有在提高准确性的情况下才增加复杂性。通过在合奏中使用幼稚的方法,我在几次kaggle比赛中都获得了前2%的成绩。
预报者

3

使用现有的R包分解季节性数据的最佳方法是Rlibeemd中的ceemdan()。此技术提取多个时期的季节性。默认设置效果很好。它使用Hilbert-Huang变换代替Fourier变换。傅立叶变换的一个严重缺点是,当大多数感兴趣的序列都不是时,它只能处理固定的线性数据。例如,随机游走y_t = y_ {t-1} + e_t是最简单且经常遇到的随机游走。在实际中经常变化的其他方法可以使季节性变化的幅度固定。


1
请参阅基本的MathJax教程和参考,以获取有关将数学转化为答案的帮助。还请提供的“索赔的一些理由最佳 ”(或考虑修改的要求) -它必须是至少一样好每一个其他的选择,而不仅仅是他们的大部分。
Glen_b-恢复莫妮卡

1
可能值得一提的是,该软件包位于CRAN上
Glen_b -Reinstate Monica 17'May

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.