【问题标题】:R Weekly Time Series ObjectR 每周时间序列对象
【发布时间】:2018-08-30 23:04:07
【问题描述】:

我有以下向量,其中包含 12 月每一天的数据。

vector1 <- c(1056772, 674172, 695744, 775040, 832036,735124,820668,1790756,1329648,1195276,1267644,986716,926468,828892,826284,749504,650924,822256,3434204,2502916,1262928,1025980,1828580,923372,658824,956916,915776,1081736,869836,898736,829368)

现在我想每周创建一个时间序列对象并使用以下代码sn-p:

weeklyts = ts(vector1,start=c(2016,12,01), frequency=7)

但是,起点和终点不正确。我总是得到以下时间序列:

> weeklyts
Time Series:
Start = c(2017, 5) 
End = c(2021, 7) 
Frequency = 7 
 [1] 1056772  674172  695744  775040  832036  735124  820668 1790756 1329648 1195276 1267644  986716  926468  828892  826284  749504
[17]  650924  822256 3434204 2502916 1262928 1025980 1828580  923372  658824  956916  915776 1081736  869836  898736  829368

现在有人知道我做错了吗?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    要获得按预期开始和结束的时间序列,您需要考虑时间序列。从 2016 年 12 月起,您有 31 天的时间。

    timeserie 开始选项处理 2 个数字,而不是 3 个。因此,如果您从 2016 年的第 1 个月开始,则类似于 c(2016, 1)。请参见以下示例。

    ts(1:12, start = c(2016, 1), frequency = 12) 
         Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
    2016   1   2   3   4   5   6   7   8   9  10  11  12
    

    现在 ts 和每日数据令人烦恼。 ts 无法处理闰年。这就是为什么你会看到人们使用 365.25 的频率来获得年度时间序列。为了获得一个好的 2016 年 12 月系列,我们可以执行以下操作:

    ts(vector1, start = c(2016, 336), frequency = 366)
    Time Series:
    Start = c(2016, 336) 
    End = c(2016, 366) 
    Frequency = 366 
     [1] 1056772  674172  695744  775040  832036  735124  820668 1790756 1329648 1195276 1267644  986716  926468  828892  826284  749504
    [17]  650924  822256 3434204 2502916 1262928 1025980 1828580  923372  658824  956916  915776 1081736  869836  898736  829368
    

    注意以下正在发生的事情:

    1. 频率为 366,因为 2016 年是闰年
    2. 开始是 c(2016, 336),因为 336 是 "2016-12-01" 一年中的一天

    我个人使用 xts 包(和 zoo)来处理每日数据,并使用 xts 中的函数聚合到每周时间序列。然后这些可以与像预测这样的 ts 时间序列的包一起使用。

    编辑:添加小 xts 示例

    my_df <- data.frame(dates = seq.Date(as.Date("2016-12-01"), as.Date("2017-01-31"), by = "day"),
                        var1 = rep(1:31, 2))
    
    library(xts)
    my_xts <- xts(my_df[, -1], order.by = my_df$dates)
    
    # rollup to weekly. Dates shown are the last day in the weekperiod.
    my_xts_weekly <- period.apply(my_xts, endpoints(my_xts, on = "weeks"), colSums)
    head(my_xts_weekly)
               [,1]
    2016-12-04   10
    2016-12-11   56
    2016-12-18  105
    2016-12-25  154
    2017-01-01  172
    2017-01-08   35
    

    根据您的需要,您可以将其转换回 data.frames 等。阅读period.apply 的帮助,因为您可以在滚动机制中指定自己的函数。并阅读 xts(和动物园)小插曲。

    【讨论】:

    • 非常感谢!你能举一个 xts 和 zoo 包变体的例子吗?不知道 ts 对于日常数据是不合理的。
    • 您的示例是每日数据,不是吗?如果可能的话,我更喜欢每周一次。
    • @nississippi,添加示例
    • 一个后续问题。我的目标是根据数据进行预测。使用 xts 函数时,我得到一个 zoo 对象。有了这个我不能再使用fit4 &lt;- tbats(weeklyts3) fc4 &lt;- forecast(fit4)了。您在这里有其他建议吗?当使用 ets 而不是 tbats 时,我在每个预测的日子都会得到相同的结果。这是非常不现实的......
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2016-09-07
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多