每日时间序列分析

Daily Time Series Analysis

我有一个关于产品销售的每日时间序列,我的系列从 01/01/2016 开始到 31/08/2017,我的问题是我不知道我应该使用什么频率值,考虑到这是一个六天的一周(我的一周从星期一开始到星期六结束)并且没有星期日的数据。

应该是这样吧?

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

感谢您的帮助!!

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

一种选择是扩展日期索引以包括您遗漏的观察结果。您可以用 na.approxna 填充那些缺失的观察结果,但您不能给 ts 一个六天的一周并期望它把它理解为一个七天的周期。

一个好的方法是查看 zoo,它具有处理此类情况的特定功能。

这实际上取决于您要对数据执行的操作。

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

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

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

acf(sales)

3) StructTS 如果您想使用 StructTS 拟合结构时间序列,那么您需要决定一个周期的长度,即它是否重复每周?四分之一?年?。通常一个年度周期适合销售,但一般来说,您需要两个完整的周期才能做任何事情,因此您实际上没有足够的数据。

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) 每周 您可以考虑的另一件事是仅使用星期六来使用每周系列,例如:

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

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

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)