我打算对我的数据集进行time series分析。我从一个csv文件中导入了数据(从2015年1月到2017年12月的月度数据),我在RStudio中的代码如下:
library(timetk)
library(tidyquant)
library(timeSeries)
library(tseries)
library(forecast)
mydata1 <- read.csv("mydata.csv", as.is=TRUE, header = TRUE)
mydata1
date pkgrev
1 1/1/2015 39103770
2 2/1/2015 27652952
3 3/1/2015 30324308
4 4/1/2015 35347040
5 5/1/2015 31093119
6 6/1/2015 20670477
7 7/1/2015 24841570
mydata2 <- mydata1 %>%
mutate(date = mdy(date))
mydata2
date pkgrev
1 2015-01-01 39103770
2 2015-02-01 27652952
3 2015-03-01 30324308
4 2015-04-01 35347040
5 2015-05-01 31093119
6 2015-06-01 20670477
7 2015-07-01 24841570
class(mydata2)
[1] "data.frame"在运行这段代码时,事情变得有点奇怪(至少对我来说是这样):
mydata2_ts <- ts(mydata2, start=c(2015,1), freq=12)
mydata2_ts
date pkgrev
Jan 2015 16436 39103770
Feb 2015 16467 27652952
Mar 2015 16495 30324308
Apr 2015 16526 35347040
May 2015 16556 31093119
Jun 2015 16587 20670477
Jul 2015 16617 24841570我真的不明白日期列中的值!日期似乎已经转换成数字格式了。
class(mydata2_ts)
[1] "mts" "ts" "matrix"现在,运行以下代码会给出一个错误:
stlRes <- stl(mydata2_ts, s.window = "periodic")
Error in stl(mydata2_ts, s.window = "periodic") :
only univariate series are allowed我的过程怎么了?
发布于 2017-11-04 09:19:04
出现此错误的原因是试图将带有两个变量(date + pkgrev)的数据集输入到STL的参数中,该参数只接受一个单变量时间序列作为适当的参数。
要解决这个问题,您可以创建一个不带日期变量的单变量ts对象。在您的示例中,您需要在代码mydata2$pkgrev中使用mydata2["pkgrev"] (或者在将mydata2转换为dataframe之后使用mydata2),而不是使用mydata2。在参数中指定开始日期和频率时,ts对象已经提供了时间信息。
如果您想使用ts对象及其相应的date变量创建一个新的dataframe,我建议您使用以下代码:
mydata3 = cbind(as.Date(time(mydata2_ts)), mydata2_ts)
mydata3 = as.data.frame(mydata3)然而,为了STL分解的目的,第一个参数的输入应该是ts对象,即mydata2_ts。
https://stackoverflow.com/questions/47109134
复制相似问题