低调的镜子 · 北京这17家人均30元的小馆儿,深藏不露,好 ...· 2 月前 · |
神勇威武的红豆 · 罗文主持召开支持科技创新政策企业高校科研院所 ...· 2 月前 · |
玩足球的篮球 · 王佩丰vba教程网盘 - 百度· 4 月前 · |
礼貌的炒饭 · 三宝泰佛:佛牌新手须知-如何快速选择适合您的 ...· 6 月前 · |
很酷的生菜 · 如果《围城》中的方鸿渐再遇唐晓芙,剧情会怎样 ...· 10 月前 · |
我有跨两年的周周期(7天)的时间序列。我有58个价值观。开始为:
2017-08-05
,结束为:
2018-09-08
。我需要在R中处理这个时间序列-使用SARIMA模型等进行预测。但是我在R中定义周期/频率有问题。当我使用分解函数时,我得到错误:
"time series has no or less than 2 periods"
。Arima函数不能正常工作。详细信息如下。我可以用什么方式导入我的数据,以便以请求的频率在R中使用?
我的数据(小例子):
文件: sessions2.csv
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仅包含值。例如:
53053
45256
59091
50045
41769
65042
51838
我在R中尝试过:
sessions1 <- scan("data1.csv")
sessionsTS <- ts(sessions1, frequency=52, start=decimal_date(ymd("2017-11-11")))
输出sessionsTS和错误:
> sessionsTS
Time Series:
Start = 2017.59178082192
End = 2018.68418328598
Frequency = 52
请用什么时间格式表示这些数字(开始、结束)?我可以用什么方法来转换成十进制日期呢?
> 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)
接下来,我尝试了:
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的使用没有季节性...
非常感谢您的帮助。
发布于 2019-05-31 02:23:54
您的数据是每周采样一次的,因此如果周期也是一周,则需要设置
frequency=1
,但在这一点上,没有必要进行季节性建模。有一个每年的周期是有意义的,就像您通过设置
frequency=52
所做的那样,但是您没有足够的周期来做任何估计,为此您将需要至少104个观察值(至少两个周期,正如错误消息所解释的那样)。
所以简而言之,除非你得到更多的数据,否则你不能做你想做的事情。
部分回答您关于
ts()
和时间格式的问题。如果你这样做:
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))