【问题标题】:R time series modeling on weekly data using ts() object使用 ts() 对象对每周数据进行 R 时间序列建模
【发布时间】:2014-04-06 23:22:54
【问题描述】:

我正在尝试根据每周数据使用 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 &lt;- ts(df, frequency=52, start=c(2007,1)) 然后打印它时,我得到了如下所示的结果,所以不是 2007.01、2007.02、2007.52...,而是从 @ 获得的 2007.000、2007.019、... 987654330@。这在数学上是正确的,但并不容易解释。有没有办法像数据框一样将其标记为日期本身,或者至少是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() 函数转换为可以使用decompose() 函数的ts 对象sp。我尝试了xts(),但我收到一条错误消息,指出" time series has no or less than 2 periods"。我想这是因为xts() 不允许我指定频率,对吧?

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

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

【问题讨论】:

标签: r time-series


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 可以肯定的是,在不同的开始日期下,您实际上会将start=decimal_date(ymd("2006-12-27") 部分更改为不同的日期,对吧?例如,时间序列 1 从 2006-12-27 开始,而另一个可能从 2007-02-05 开始,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2022-08-17
    • 2019-08-13
    • 2019-11-03
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多