【问题标题】:Decomposing Time-Series Data: "no or less than 2 periods"分解时间序列数据:“不超过 2 个周期”
【发布时间】:2018-10-08 13:58:24
【问题描述】:

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

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

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

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

然后我尝试分解使用:

decompose(A1)

我收到以下错误:

时间序列有不少于或少于 2 个周期`

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

有什么想法吗?

【问题讨论】:

    标签: r time-series decomposition


    【解决方案1】:

    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.
    

    【讨论】:

      【解决方案2】:

      试试看:

      A <- c(5,6,7,8,9,8,5,6,10,11)
      
      B<-decompose(ts(A1,frequency = 2))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 2016-01-19
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多