首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R中的时间序列:如何设置跨两年的周周期?

R中的时间序列:如何设置跨两年的周周期?
EN

Stack Overflow用户
提问于 2019-05-31 02:05:34
回答 1查看 482关注 0票数 2

我有跨两年的周周期(7天)的时间序列。我有58个价值观。开始为:2017-08-05,结束为:2018-09-08。我需要在R中处理这个时间序列-使用SARIMA模型等进行预测。但是我在R中定义周期/频率有问题。当我使用分解函数时,我得到错误:"time series has no or less than 2 periods"。Arima函数不能正常工作。详细信息如下。我可以用什么方式导入我的数据,以便以请求的频率在R中使用?

我的数据(小例子):

文件: sessions2.csv

代码语言:javascript
复制
date        count
11.11.2017  55053
18.11.2017  45256
25.11.2017  59091
2.12.2017   50030
9.12.2017   41769
16.12.2017  63042
23.12.2017  51838
30.12.2017  47652
6.1.2018    18731
13.1.2018   54470
20.1.2018   22514
27.1.2018   63818
3.2.2018    51605
10.2.2018   26312
17.2.2018   11111

data1.csv仅包含值。例如:

代码语言:javascript
复制
53053
45256
59091
50045
41769
65042
51838

我在R中尝试过:

代码语言:javascript
复制
sessions1 <- scan("data1.csv")
sessionsTS <- ts(sessions1, frequency=52, start=decimal_date(ymd("2017-11-11")))

输出sessionsTS和错误:

代码语言:javascript
复制
> sessionsTS
Time Series:
Start = 2017.59178082192 
End = 2018.68418328598 
Frequency = 52 

请用什么时间格式表示这些数字(开始、结束)?我可以用什么方法来转换成十进制日期呢?

代码语言:javascript
复制
> sessionsComponents <- decompose(sessionsTS)
Error in decompose(sessionsTS) : 
  time series has no or less than 2 periods

> arima(sessionsTS, order = c(0, 1, 0), seasonal = list(order = c(2, 0, 0), period = 52), xreg = NULL, include.mean = TRUE)
Error in optim(init[mask], armaCSS, method = optim.method, hessian = FALSE,  : 
  initial value in 'vmmin' is not finite

> fit <- Arima(sessionsTS, order = c(0, 1, 0), seasonal = list(order = c(2, 0, 0), period = 52))
Error in optim(init[mask], armaCSS, method = optim.method, hessian = FALSE,  : 
  initial value in 'vmmin' is not finite

> sarima(sessionsTS,1,1,0,2,0,0,52)
Error in sarima(sessionsTS, 1, 1, 0, 2, 0, 0, 52) : 
  unused arguments (0, 0, 52)

接下来,我尝试了:

代码语言:javascript
复制
dataSeries <- read.table("sessions2.csv", header=TRUE, sep = ";", row.names=1)
dataTS <- as.xts(dataSeries , frequency=52, start=decimal_date(ymd("2017-11-11")))

> sessionsComponents2 <- decompose(dataTS)
Error in decompose(dataTS) : time series has no or less than 2 periods 

> model = Arima(dataTS, order=c(0,1,0), seasonal = c(2,0,0))
> model
Series: dataTS 
ARIMA(0,1,0)

在这种情况下,Arima的使用没有季节性...

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-05-31 02:23:54

您的数据是每周采样一次的,因此如果周期也是一周,则需要设置frequency=1,但在这一点上,没有必要进行季节性建模。有一个每年的周期是有意义的,就像您通过设置frequency=52所做的那样,但是您没有足够的周期来做任何估计,为此您将需要至少104个观察值(至少两个周期,正如错误消息所解释的那样)。

所以简而言之,除非你得到更多的数据,否则你不能做你想做的事情。

部分回答您关于ts()和时间格式的问题。如果你这样做:

代码语言:javascript
复制
tt <- read.table(text="
date        count
11.11.2017  55053
18.11.2017  45256
25.11.2017  59091
2.12.2017   50030
9.12.2017   41769
16.12.2017  63042
23.12.2017  51838
30.12.2017  47652
6.1.2018    18731
13.1.2018   54470
20.1.2018   22514
27.1.2018   63818
3.2.2018    51605
10.2.2018   26312
17.2.2018   11111", header=TRUE)

tt$date <- as.Date(tt$date, format="%d.%m.%Y")

ts(tt$count, frequency=52, start=c(2017, 45))
# Time Series:
# Start = c(2017, 45) 
# End = c(2018, 7) 
# Frequency = 52 
#  [1] 55053 45256 59091 50030 41769 63042 51838 47652 18731
#      54470 22514 63818 51605 26312 11111

start在2017年的45周,end在2018年的第7周。

您可以使用format(tt$date, "%W")查找周数字。有关更多详细信息,请查看?strptime,了解%W的含义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56383432

复制
相关文章

相似问题

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