分解时间序列数据:"no or less than 2 periods"
Decomposing Time-Series Data: "no or less than 2 periods"
我有一个字符串,我正在尝试分解它的时间序列数据。每个数据点对应于给定月份的开始日期,看起来像:
A <- c(5,6,7,8,9,8,5,6,10,11)
我使用以下方法将数据转换为时间序列:
A1 <- as.ts(A, frequency=12)
然后我尝试分解使用:
decompose(A1)
我收到以下错误:
time series has no or less than 2 periods`
我也使用 zoo
包创建了类似的时间序列,但得到了相同的结果。
有什么想法吗?
从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.
试试看:
A <- c(5,6,7,8,9,8,5,6,10,11)
B<-decompose(ts(A1,frequency = 2))
我有一个字符串,我正在尝试分解它的时间序列数据。每个数据点对应于给定月份的开始日期,看起来像:
A <- c(5,6,7,8,9,8,5,6,10,11)
我使用以下方法将数据转换为时间序列:
A1 <- as.ts(A, frequency=12)
然后我尝试分解使用:
decompose(A1)
我收到以下错误:
time series has no or less than 2 periods`
我也使用 zoo
包创建了类似的时间序列,但得到了相同的结果。
有什么想法吗?
从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.
试试看:
A <- c(5,6,7,8,9,8,5,6,10,11)
B<-decompose(ts(A1,frequency = 2))