繁体   English   中英

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

[英]R time series modeling on weekly data using ts() object

我正在尝试使用基于每周数据的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

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

ts <- ts(df, frequency=52, start=c(2007,1))

我遇到的问题是:

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这样的年份边界中包括那些周。 我应该把它作为2007年或2006年最后一周的第wk 1包括在内吗?

3)当我使用ts <- ts(df, frequency=52, start=c(2007,1))然后将其打印出来时,我得到的结果如下所示,而不是2007.01,2007.02,2007.52 ......,我得到了2007.000,2007.019,......,得自1/52 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 

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

xts <- xts(df,order.by=businessWeekDate)

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

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

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

首先确保您的数据每年只有52个数据。 要做到这一点,用53个数据确定年份并删除对你的季节性模式不太重要的数据(例如,如果你想查看圣诞节销售季节性,请不要删除12月的一周(!)

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

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

关于你的第四个问题,我认为错误是因为你只有一个期间数据(52周),你可能需要另外52周的数据来完成2个期间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM