проблема в поиске значения acf для задачи временного ряда

1

Я пытаюсь найти значение acf в задаче временного ряда. У меня есть набор данных с 2003 по 2017 год.

Я создаю временные ряды данных, используя следующую функцию

tf = ts(df$x, start = c(2003,1), end = c(2017,12), frequency = 12)

Когда я пытаюсь найти значение acf путем построения графика с использованием функции

acf(ts)

Мой график похож на этот

Изображение 174551

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

fit = arima(tf, c(p,2,3))

Для справки https://github.com/girijesh18/dataset/blob/master/timeSeries.csv мои данные выглядят так:

Я не могу понять, какую ценность я должен использовать для "p". Я также пробовал разные значения для "р" между диапазоном от 1 до 20, но предсказанное значение не очень точное. Любая помощь будет оценена по достоинству.

Теги:
time-series

2 ответа

1
Лучший ответ

Во-первых, я бы выбрал разницу в ваших временных рядах, чтобы поднять его, у него есть значительная стохастическая тенденция. Наиболее очевидным признаком этого, помимо временных рядов, имеющих устойчивое восходящее повышение, является то, что компоненты ACF отнимают много времени. В то время как вы можете поместить модель в данные, как есть с термином дрейфа, гораздо легче читать графики ACF и PACF, когда тренд не существует.

tf <- structure(c(58082, 48500, 45723, 53662, 46723, 45070, 49782, 55437,
57672, 61121, 43857, 49819, 50750, 53589, 53812, 53575, 52339, 51115,
56529, 61498, 58757, 72876, 55999, 58374, 63885, 63287, 60027, 65795,
62850, 61908, 68108, 72639, 77105, 84996, 65488, 62178, 74750, 66085,
59711, 69304, 68357, 67133, 74545, 73623, 82071, 89533, 72117, 69004,
72681, 80214, 80744, 81643, 87599, 86213, 97495, 97841, 104953, 110353,
90415, 83875, 93160, 89539, 85021, 91314, 87036, 83731, 91047, 94552,
105628, 94743, 84954, 72535, 77898, 68418, 60609, 73703, 67298, 64375,
73550, 76887, 77538, 92233, 73267, 77779, 80634, 72736, 81475, 87595,
87386, 88874, 95145, 96991, 95186, 106122, 81173, 77941, 88576, 86372,
77850, 91188, 90547, 87803, 95264, 90054, 100544, 96302, 82402, 78297,
91847, 86235, 87557, 91139, 93116, 93855, 94172, 100003, 97051, 86785,
84849, 81682, 88273, 85645, 80121, 92187, 96409, 97609, 94971, 111356,
102049, 110838, 97596, 88747, 100882, 97801, 99312, 100163, 112241, 101667,
122227, 127548, 123216, 131987, 112248, 118140, 128127, 114529, 151671,
135476, 148513, 141155, 142314, 142144, 139774, 142715, 124773, 111401,
129554, 140624, 128378, 130208, 141051, 132299, 145779, 152341, 146552,
150930, 139732, 133423, 154363, 148374, 137392, 149258, 160086, 154738,
159570, 164496, 166885, 188369, 144181, 148121, 169758, 158890, 159699,
161691, 165828, 175617, 181875, 182883), .Tsp = c(1, 188, 1), class = "ts")

par(mfrow=c(3, 1), mar=c(3, 3, 2, 1), mgp=c(2, 0.6, 0), oma=c(0, 0, 0, 0))
plot(tf); acf(tf, main=""); pacf(tf, main="")

Рисунок 1

Изображение 174551

tf.d <- diff(tf)
plot(tf.d); acf(tf.d, main=""); pacf(tf.d, main="")

Рис.2

Изображение 174551

Теперь мы можем начать интерпретацию графиков, начиная с ACF. Мы видим, что корреляция в запаздывании 1 отрицательна, это часто случается, когда мы принимаем разницу в серии и называем "сверхдифференцированием". Из серии с точками данных, которые были чрезмерно похожи на прошлые точки данных, теперь они чрезмерно отличаются от прошлых точек данных, увеличивая колебания периода 1. Из графика видно, что уровень примерно равен -0.3, которые, хотя, вероятно, не настолько велики, чтобы вызывать проблемы, можно иметь в виду. Обычная мудрость также говорит нам о том, что ACF, который так же умирает после 1 запаздывания, должен быть оснащен коэффициентом MA (1), мой опыт в том, что лучше начать с коэффициентов AR, поскольку они могут сделать избыточные коэффициенты MA. Но может быть и обратное, так что MA (1) должно быть среди моделей-кандидатов.
Рассматривая график PACF, мы видим два значимых компонента в лагах 1 и 2, что указывает на модель AR (2).
Смотря далее на графики ACF и PACF, мы видим намеки на волнообразную функцию и положительный пик в отставании 12, который говорит мне, что это либо ежемесячные, либо двухчасовые данные, и у нас есть сезонный компонент. Выяснение сезонных компонентов не сильно отличается от определения внесезонных компонентов, мы просто опишем корреляции с точки зрения сезонных/периодических лагов вместо запаздывания образца.

tf.d12 <- ts(tf.d, f=12)
plot(tf.d12); acf(tf.d12, main="", lag.max=12*4); pacf(tf.d12, main="", lag.max=12*4)

Рис.3

Изображение 174551

Глядя на график ACF, мы видим сильные компоненты в периодах лага, 1, 2, 3, 4..., несколько напоминающих первый график ACF, что означает, что у нас есть компонент сезонного различия первого порядка, но вместо того, чтобы снова преобразовывать данные, мы будем установите D на 1 в том, что теперь стало моделью SARIMA. Как уже упоминалось вначале, нестационарность закроет признаки процесса MA на графике ACF, поэтому нам придется подождать и посмотреть, если это необходимо.
На графике PACF мы можем выделить значимые компоненты при 1, 2 и, возможно, 3 временных задержках, но в духе скупости мы предположим, что SAR (2) будет достаточным.

Следующий шаг теперь - подгонять все модели и оценивать ACF и PACF остатков. Если мы были умны в выборе моделей-кандидатов, то здесь не должно быть слишком много. Не зная ничего о природе данных, эти три были выбраны более или менее произвольно.

ari1 <- arima(tf.d12, order=c(2, 0, 0), seasonal=c(2, 1, 0))
ari2 <- arima(tf.d12, order=c(1, 0, 1), seasonal=c(2, 1, 0))
ari3 <- arima(tf.d12, order=c(1, 0, 1), seasonal=c(2, 1, 1))

par(mfcol=c(3, 2), mar=c(3, 3, 2, 1), mgp=c(2, 0.6, 0), oma=c(0, 0, 1.5, 0))
acf(residuals(ari1), main="", ylim=c(-0.2, 1), lag.max=12*4)
mtext(ari1$call, 3, cex=0.8)
acf(residuals(ari2), main="", ylim=c(-0.2, 1), lag.max=12*4)
mtext(ari2$call, 3, cex=0.8)
acf(residuals(ari3), main="", ylim=c(-0.2, 1), lag.max=12*4)
mtext(ari3$call, 3, cex=0.8)
pacf(residuals(ari1), main="", ylim=c(-0.2, 0.44), lag.max=12*4)
mtext(ari1$call, 3, cex=0.8)
pacf(residuals(ari2), main="", ylim=c(-0.2, 0.44), lag.max=12*4)
mtext(ari2$call, 3, cex=0.8)
pacf(residuals(ari3), main="", ylim=c(-0.2, 0.44), lag.max=12*4)
mtext(ari3$call, 3, cex=0.8)
mtext("residual values", 3, outer=TRUE, cex=1.3)

Рис.4

Изображение 174551

Такие графики, эмпирические и теоретические знания о данных, применение информационных критериев (например, AICc) и проверка (например, CV) приведут вас к соответствующей модели. Слепое доверие auto.arima() нехорошо.

Некоторые дополнительные примечания:

par(mfrow=c(1, 1), mar=c(3, 3, 2, 1), mgp=c(2, 0.6, 0), oma=c(0, 0, 0, 0))
plot(stl(tf.d12, "periodic"))

Рис.5

Изображение 174551

Если мы разложим tf.d12 мы увидим, что в данных сохраняется небольшая тенденция. Возможно, потребуется добавить несезонное различие к модели:

arima(tf.d12, order=c(2, 1, 1), seasonal=c(2, 1, 1))

Разложение также показывает, что похоже на временную составляющую остатка, величины, по-видимому, со временем увеличиваются. Наша модель не справляется с этим.

tsoutliers::locate.outliers указывает на один аддитивный выброс при индексе 145 и пару временных изменений на 71 и 149.

Извините, что это немного затянулось, я начал изучать данные и не мог остановиться. В конце концов, все это могло бы быть более подходящим для Cross Validated, где также есть много более осведомленных людей, которые могли бы дать второе мнение.

  • 0
    @ girijesh96: Робер Нау из Университета Дьюка имеет сайт, который является очень полным и читаемым ресурсом. Помимо этого, чтение вопросов и ответов на резюме, как правило, полезно.
  • 0
    Вы очень правы, что мы не можем слепо доверять автоариме. Я пробовал автоариму, но результат был не очень убедительным, поэтому я отказался от идеи автоаримы. И да, это ежемесячные данные. Я также нашел два выброса в одном индексе
Показать ещё 3 комментария
0

Для определения P вы используете PACF, а не ACF.

Гораздо проще использовать функцию auto.arima из пакета прогноза в R, который автоматически найдет для вас лучшие значения p, q, d.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню