Разложение данных временного ряда: «не более 2 периодов» - PullRequest
0 голосов
/ 08 октября 2018

У меня есть строка данных временного ряда, которые я пытаюсь разложить.Каждая точка данных соответствует дате начала данного месяца и выглядит примерно так:

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

Я преобразовываю данные во временные ряды, используя следующее:

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

ЗатемЯ пытаюсь разложить, используя:

decompose(A1)

Я получаю следующую ошибку:

временной ряд не имеет или меньше 2 периодов`

Iтакже использовали пакет zoo для создания аналогичных временных рядов, но получили тот же результат.

Есть мысли?

Спасибо!

1 Ответ

0 голосов
/ 08 октября 2018

Как видно из исходного кода функции 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.
...