分解时间序列数据:“不超过2个周期”

时间:2018-10-08 13:58:25

标签: r time-series decomposition

我有一个字符串,它是我要分解的时间序列数据。每个数据点都与给定月份的开始日期相对应,如下所示:

A <- c(5,6,7,8,9,8,5,6,10,11)

我使用以下方法将数据转换为时间序列:

A1 <- as.ts(A, frequency=12)

然后我尝试使用以下方法分解:

decompose(A1)

我收到以下错误:

  

时间序列不超过2个周期”

我还使用了zoo包来创建类似的时间序列,但得到的结果相同。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

decompose()函数的源代码可以看出,您的数据必须具有高于1的频率,并且非缺失数据点的数量至少应为频率值的2倍:

> decompose
function (x, type = c("additive", "multiplicative"), filter = NULL) {
  type <- match.arg(type)
  l <- length(x)
  f <- frequency(x)
  if (f <= 1 || length(na.omit(x)) < 2 * f)
     stop("time series has no or less than 2 periods")
  ...

在您的情况下,因为时间序列(其构造方式)的频率为1,所以会引发错误:

A  <- c(5,6,7,8,9,8,5,6,10,11)
A1 <- as.ts(A, frequency=12)
> frequency(A1)
# 1

您可以使用正确的频率调用ts而不是as.ts来构建时间序列对象:

A1 <- ts(A, frequency=12)
> frequency(A1)
# 12

但是在这种情况下,由于您有10个观测值,而所需的数字至少为24,则会触发相同的错误。

为了使其生效-至少要进行24次观察:

A1 <- ts(runif(24, 1, 100), frequency=12)
decompose(A1)
# works.

答案 1 :(得分:0)

尝试:

A <- c(5,6,7,8,9,8,5,6,10,11)

B<-decompose(ts(A1,frequency = 2))