首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日时间序列分析

日时间序列分析
EN

Stack Overflow用户
提问于 2017-09-29 18:17:22
回答 2查看 1.3K关注 0票数 0

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

应该是这样吗?

代码语言:javascript
复制
myts <- ts(sales, start=c(2016, 1), frequency=6)

谢谢你的帮助!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 18:26:13

ts希望您对时间序列的每个元素都有值,也就是说,它期望您在数据中有第七天的值。

一种选择是扩展日期索引,以包括您丢失的观察结果。你可以用na.approxna来填充那些缺失的观测结果,但是你不能给ts每周六天的时间,让它理解为七天的周期。

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

票数 1
EN

Stack Overflow用户

发布于 2017-09-29 18:59:00

这真的取决于你想要对数据做什么。

1)例如,如果您的目标只是绘制它,那么"ts"类并不适合,因为它不擅长表示日期。在注释的末尾定义了salestt的测试向量,尝试这样做。

代码语言:javascript
复制
library(zoo)
z <- zoo(sales, tt)
plot(z)

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

代码语言:javascript
复制
acf(sales)

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

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

代码语言:javascript
复制
library(zoo)

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

给予:

代码语言:javascript
复制
          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)每周一次的,您可以考虑的另一件事是使用每周系列,例如,只使用星期六:

代码语言:javascript
复制
library(zoo)
z <- zoo(sales, tt)
zw <- z[weekdays(time(z)) == "Saturday"]

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46494770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档