使用ts()对象对每周数据进行R时间序列建模

use*_*664 28 r time-series

我正在尝试使用基于每周数据的R进行时间序列建模和预测,如下所示:

biz week     Amount        Count
2006-12-27   973710.7     816570
2007-01-03  4503493.2    3223259
2007-01-10  2593355.9    1659136
2007-01-17  2897670.9    2127792
2007-01-24  3590427.5    2919482
2007-01-31  3761025.7    2981363
2007-02-07  3550213.1    2773988
2007-02-14  3978005.1    3219907
2007-02-21  4020536.0    3027837
2007-02-28  4038007.9    3191570
2007-03-07  3504142.2    2816720
2007-03-14  3427323.1    2703761
...
2014-02-26  99999999.9   1234567
Run Code Online (Sandbox Code Playgroud)

关于我的数据:如上所示,每周都标有一周的第一天(我的周从周三开始,到周二结束).当我构建我的ts对象时,我尝试了

ts <- ts(df, frequency=52, start=c(2007,1))
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是:

1)有些年份可能有53周,因此frequency=52这些年不适用;

2)我的开始周/日期是2006-12-27,我该如何设置启动参数?start=c(2006,52)或者start=c(2007,1)自2006-12-27周以来真的跨过年界?另外,对于建模,最好是拥有完整的年份数据(比如2007年我的开始年份,如果我只有部分年份的数据),最好不要使用2007,而是从2008年开始?那么2014年:既然还不是完整的一年,我应该使用我的建模吗?无论哪种方式,我仍然有一个问题,是否在2006-12-27这样的年份边界中包括那些周.我应该包括wk 12007年还是2006年的最后一周?

3)当我使用ts <- ts(df, frequency=52, start=c(2007,1)),然后打印出来,我得到了如下图所示的结果,这样反而2007.01,2007.02,2007.52 ...,我得到了2007.000,2007.019,...,它从获取1/52=0.019.这在数学上是正确的,但不容易解释.有没有办法将它标记为日期本身就像数据框或至少一样2007 wk1, 2007 wk2...

=========

Time Series:
Start = c(2007, 1) 
End = c(2014, 11) 
Frequency = 52 
          Amount        Count
2007.000   645575.4     493717
2007.019  2185193.2    1659577
2007.038  1016711.8     860777
2007.058  1894056.4    1450101
2007.077  2317517.6    1757219
2007.096  2522955.8    1794512
2007.115  2266107.3    1723002 
Run Code Online (Sandbox Code Playgroud)

4)我的目标是对每周数据建模,然后尝试将其分解以查看季节性组件.好像我必须使用该ts()函数转换为ts可以使用该decompose()函数的对象sp .我试过xts(),我得到一个错误说明" time series has no or less than 2 periods".我想这是因为xts()不会让我指定频率,对吧?

xts <- xts(df,order.by=businessWeekDate)
Run Code Online (Sandbox Code Playgroud)

5)我在这个论坛和其他地方寻找答案; 大多数例子都是每月一次,虽然每周都有一些时间序列问题,但没有一个答案是直截了当的.希望有人可以帮助我回答我的问题.

nas*_*ddd 21

使用非整数频率可以很好地工作,并且与大多数模型(auto.arima,ets,...)兼容.对于开始日期,我只使用lubridate中的便利函数.这里的重要性是在处理可能不同的开始和结束日期的多个时间序列时保持一致.

library(lubridate)
ts(df$Amount, 
   freq=365.25/7, 
   start=decimal_date(ymd("2006-12-27")))
Run Code Online (Sandbox Code Playgroud)


Roc*_*nce 3

首先确保您的数据每年正好有 52 个数据。为此,请识别具有 53 个数据的年份,并删除对您的季节性模式不太重要的数据(例如,如果您想检查圣诞节销售季节性,请不要删除 12 月的一周(!)

Xts 是一种很好的格式,因为它更灵活,但是所有分解和预测工具通常都与 ts 一起使用,因为它们每个周期需要固定数量的数据。

关于你关于非完整年份的问题。这不应该是一个问题。R 不知道什么时候是一月或十二月,因此一年可以随时开始和结束。

  • 非常感谢您的回答,这里有 Hyndman 教授建议的链接 [链接] http://robjhyndman.com/hyndsight/forecasting-weekly-data/ (2认同)