深情的鸵鸟 · 好书:相见恨晚的金融学或经济学书籍-腾讯云开 ...· 1 年前 · |
粗眉毛的牛排 · cordova+vue ...· 1 年前 · |
玩篮球的日光灯 · C++定义变量使用方式简介-c++定义全局变量· 1 年前 · |
文雅的数据线 · java一对一映射 ...· 1 年前 · |
我有跨两年的周周期(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))
玩篮球的日光灯 · C++定义变量使用方式简介-c++定义全局变量 1 年前 |