首页 文章

每日时间序列分析

提问于
浏览
0

我有关于产品销售的每日时间序列,我的系列从2016年1月1日开始到2017年8月31日,我的问题是我不知道我应该使用的频率值,考虑到它是一个六天工作周(我的周从星期一开始,到星期六结束),周日没有数据 .

应该这样吗?

myts <- ts(sales, start=c(2016, 1), frequency=6)

谢谢你的帮助 !!

2 回答

  • 1

    期望您拥有时间序列中每个元素的值,即,它会期望您在数据中具有第七天的值 .

    一种选择是扩展日期索引以包括您缺少的观察结果 . 您可以使用 na.approxna 来填充那些缺失的观察结果,但是您不能在每周六天给出 ts 并期望它将其理解为七天周期 .

    这样做的一个好方法是查看 zoo ,它具有处理这些情况的特定功能 .

  • 0

    这实际上取决于您想要对数据做什么 .

    1) plot 例如,如果您的目标只是绘制它,那么 "ts" class不适合,因为它不擅长表示日期 . 试试这个,我们在最后的Note中为 salestt 定义了测试向量 .

    library(zoo)
    z <- zoo(sales, tt)
    plot(z)
    

    2) acf 如果要计算自相关函数,那么使用普通向量 salests(sales) 就可以了:

    acf(sales)
    

    3) StructTS 如果你想使用 StructTS 拟合结构时间序列,那么你需要决定一个周期的长度,即它是否每周重复一次? 25美分硬币?年? . 通常情况下,年度周期适合销售,但一般情况下,您需要两个完整周期才能执行任何操作,因此您实际上没有足够的数据 .

    4) monthly/quarterly 如果您愿意将其减少为月度或季度数据,那么您可以使用 ts 但每月只有20个点或季度为7个 . 这里我们使用了每个月的最后一点:

    library(zoo)
    
    z <- zoo(sales, tt)
    zm <- aggregate(z, as.yearmon, tail, 1) 
    tsm <- as.ts(zm)
    tsm
    

    赠送:

    Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
    2016 3.258097 3.931826 4.356709 4.644391 4.867534 5.049856 5.204007 5.342334
    2017 5.828946 5.897154 5.968708 6.030685 6.093570 6.150603 6.204558 6.257668
              Sep      Oct      Nov      Dec
    2016 5.459586 5.564520 5.659482 5.749393
    2017
    

    5) weekly 你可以考虑的另一件事是使用星期六来使用每周系列,例如:

    library(zoo)
    z <- zoo(sales, tt)
    zw <- z[weekdays(time(z)) == "Saturday"]
    

    Note: 我们使用了这个虚拟数据:

    set.seed(123)
    tt <- seq(as.Date("2016-01-01"), as.Date("2017-08-31"), "day")
    tt <- tt[! weekdays(tt) == "Sunday"]
    n <- length(tt)
    sales <- log(1:n)
    

相关问题