我有一个关于产品销售的每日时间序列,我的系列从2016年1月1日开始,到2017年8月31日为止,我的问题是,我不知道我应该使用的频率值,因为它是六天一周(我的一周从周一开始,到周六结束),周日没有数据。
应该是这样吗?
myts <- ts(sales, start=c(2016, 1), frequency=6)谢谢你的帮助!!
发布于 2017-09-29 18:26:13
ts希望您对时间序列的每个元素都有值,也就是说,它期望您在数据中有第七天的值。
一种选择是扩展日期索引,以包括您丢失的观察结果。你可以用na.approx或na来填充那些缺失的观测结果,但是你不能给ts每周六天的时间,让它理解为七天的周期。
这样做的一个好方法是查看zoo,它具有处理这类情况的特定功能。
发布于 2017-09-29 18:59:00
这真的取决于你想要对数据做什么。
1)例如,如果您的目标只是绘制它,那么"ts"类并不适合,因为它不擅长表示日期。在注释的末尾定义了sales和tt的测试向量,尝试这样做。
library(zoo)
z <- zoo(sales, tt)
plot(z)2) acf,如果要计算自相关函数,那么使用普通向量sales或ts(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)https://stackoverflow.com/questions/46494770
复制相似问题