我有一个关于产品销售的每日时间序列,我的系列从 01/01/2016 到 31/08/2017,我的问题是我不知道应该使用什么频率值,考虑到它是一周六天(我的一周从星期一开始,星期六结束),星期天没有数据。
应该是这样吗?
myts <- ts(sales, start=c(2016, 1), frequency=6)
谢谢你的帮助 !!
我有一个关于产品销售的每日时间序列,我的系列从 01/01/2016 到 31/08/2017,我的问题是我不知道应该使用什么频率值,考虑到它是一周六天(我的一周从星期一开始,星期六结束),星期天没有数据。
应该是这样吗?
myts <- ts(sales, start=c(2016, 1), frequency=6)
谢谢你的帮助 !!
ts
期望您具有时间序列的每个元素的值,即期望您在数据中具有第七天的值。
一种选择是扩展日期索引以包含您缺失的观察结果。na.approx
您可以用或填充那些缺失的观察结果na
,但您不能给出ts
一个六天的一周并期望它能够将其理解为一个七天的周期。
一个很好的方法是查看zoo
,它具有处理这些情况的特定功能。
这实际上取决于您想对数据做什么。
1)例如,如果您的目标只是绘制它,那么"ts"
类不适合,因为它不擅长表示日期。sales
试试这个,我们在最后tt
的注释中定义了测试向量。
library(zoo)
z <- zoo(sales, tt)
plot(z)
2) acf如果你想计算自相关函数,那么使用普通向量sales
orts(sales)
就可以了:
acf(sales)
3) StructTS如果你想拟合一个结构化的时间序列,StructTS
那么你需要决定一个周期的长度,即它每周重复一次吗?四分之一?年?。通常,年度周期适合销售,但一般来说,您需要两个完整的周期才能做任何事情,因此您实际上没有足够的数据来做这件事。
4)每月/每季度如果您愿意将其减少为每月或每季度的数据,那么您可以使用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)