Как определить отставание во временных рядах?

87
13

Я работаю над проблемой временных рядов и хочу разложить, чтобы получить базовую информацию о запаздывании. Цель состоит в том, чтобы оценить отставание выходной переменной на основе изменений в переменной изменения как часть приведенного ниже примера data.frame. Полный data.frame имеет больше данных, но он все по неделям и следует той же структуре, что и в этом примере.


year <- c(2010,2010,2010,2010)
week <- c("P7W1","P7W2","P7W3","P7W4")
output <- c(3295,4379,4284,4832)
change <- c(1912,2177,1587,2708)

timeTest <- data.frame(year,week,output,change)


Я создал объект временного ряда со следующим.


timeObject <- ts(timeTest, start=c(2010,7), frequency=52)

Однако, когда я выполнял разложение (timeObject), у меня появилось сообщение об ошибке, в котором указывалось, что у меня было не менее 2 периодов. Мне явно чего-то не хватает, любые советы приветствуются.

спросил(а) 2021-01-19T16:42:18+03:00 2 месяца, 3 недели назад
1
Решение
113

Чтобы выполнить разложение() или его двоюродный брат stl(), вам нужно иметь как минимум две полные
периоды данных. Период определяется как 1/частота. Поэтому, если вы работаете с еженедельными данными, где частота = 52, ваш период составляет один год, и вам нужны данные за два года.


Например, запуск метода разложения() с набором данных из 103 недель не будет выполнен:


decompose(ts(runif(103), frequency=52))

Error in decompose(ts(runif(103), frequency = 52)) :
time series has no or less than 2 periods


Но работает разворачивание() с 104 точками данных:

decompose(ts(runif(104), frequency=52))

$seasonal
Time Series:
Start = c(1, 1)
End = c(2, 52)
Frequency = 52
[1] -0.015447737 0.392006955 0.185528936 0.372505618 -0.079588619
[6] -0.351928149 -0.472617951 -0.306461367 -0.475596801 0.266197693
[11] 0.167468113 -0.332837411 -0.427845149 -0.001199151 0.276361737
...
$type
[1] "additive"

attr(,"class")
[1] "decomposed.ts"


PS. Вы также можете посмотреть на acf(), который будет вычислять автокорреляцию. Это будет работать, даже если у вас есть менее двух полных лет данных. Например:


acf (ts (runif (100), частота = 52))


enter image description here

ответил(а) 2021-01-19T16:42:18+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема