首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分解时间序列数据:“不少于2个周期”

分解时间序列数据:“不少于2个周期”
EN

Stack Overflow用户
提问于 2018-10-08 13:58:24
回答 2查看 9.6K关注 0票数 5

我有一个字符串,一个时间序列数据,我正在尝试分解。每个数据点对应于给定月份的开始日期,看起来类似于:

代码语言:javascript
运行
复制
A <- c(5,6,7,8,9,8,5,6,10,11)

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

代码语言:javascript
运行
复制
A1 <- as.ts(A, frequency=12)

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

代码语言:javascript
运行
复制
decompose(A1)

我得到以下错误:

时间序列不小于两个周期

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

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 14:10:28

decompose()函数的源代码中可以看出,您的数据的频率必须在1以上,并且不丢失的数据点的数量应该至少是频率值的2倍:

代码语言:javascript
运行
复制
> 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:

代码语言:javascript
运行
复制
A  <- c(5,6,7,8,9,8,5,6,10,11)
A1 <- as.ts(A, frequency=12)
> frequency(A1)
# 1

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

代码语言:javascript
运行
复制
A1 <- ts(A, frequency=12)
> frequency(A1)
# 12

但是,在这种情况下,同样的错误将被触发,因为您有10个观察结果,而所需的数目至少为24。

为了使它发挥作用,至少有24项意见:

代码语言:javascript
运行
复制
A1 <- ts(runif(24, 1, 100), frequency=12)
decompose(A1)
# works.
票数 7
EN

Stack Overflow用户

发布于 2020-05-27 20:36:48

试一试:

代码语言:javascript
运行
复制
A <- c(5,6,7,8,9,8,5,6,10,11)

B<-decompose(ts(A1,frequency = 2))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52703938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档