Это еще одна ситуация, когда термины Фурье полезны для обработки сезонности. Сезон не только довольно длинный, он не целочисленный (в среднем 365,25 ÷ 7 = 52,18). Таким образом, модели ARIMA и ETS не имеют тенденцию давать хорошие результаты, даже с периодом 52 в качестве приближения.
Регресс с ошибками ARIMA
Самый простой подход — это регрессия с ошибками ARIMA. Ниже приведен пример использования еженедельные данные по США завершили автомобильного бензина поставляемой продукции (в тысячах баррелей в день) в период с февраля 1991 года по май 2005 года обновленная версия данных доступна с сайта ОВОС . Я выбираю количество членов Фурье, минимизируя AICc. Порядок модели ARIMA также выбирается путем минимизации AICc, хотя это делается внутри auto.arima()
функции.
library(forecast) gas <- ts(read.csv("http://robjhyndman.com/data/gasoline.csv", header=FALSE)[,1], freq=365.25/7, start=1991+31/7/365.25) bestfit <- list(aicc=Inf) for(i in 1:25) { fit <- auto.arima(gas, xreg=fourier(gas, K=i), seasonal=FALSE) if(fit$aicc < bestfit$aicc) bestfit <- fit else break; } fc <- forecast(bestfit, xreg=fourierf(gas, K=12, h=104)) plot(fc)
Подогнанная модель имеет 12 пар терминов Фурье и может быть записана как
где процесс ARIMA (3,1,3). Поскольку
модель нестационарна, модель фактически оценивается по разностям переменных с обеих сторон этого уравнения. Вот почему нет необходимости в терминах перехвата. Существует 24 параметра для определения сезонности, что довольно много, но, очевидно, требуется в соответствии с выбором AIC. (BIC дал бы меньше.) Общее количество степеней свободы — 31 (остальные семь получены из 6 параметров ARMA и параметра дрейфа).
TBATS
Альтернативным подходом является модель TBATS, представленная De Livera et al. (JASA, 2011) . При этом используется модель пространства состояний, которая является обобщением тех, которые лежат в основе экспоненциального сглаживания. Это также позволяет автоматически преобразовывать Бокса-Кокса и ошибки ARMA. Алгоритм моделирования полностью автоматизирован:
gastbats <- tbats(gas) fc2 <- forecast(gastbats, h=104) plot(fc2, ylab="thousands of barrels per day")
( tbats
Функция генерирует некоторые предупреждения здесь, но все равно работает нормально. Я исправлю предупреждения в следующей версии.)
Здесь подобранная модель задается в верхней части графика как TBATS (0,999, {2,2}, 1, {<52,18,8>}). То есть преобразование Бокса-Кокса, равное 0,999 (по существу, ничего не делающее), ошибки ARMA (2,2), параметр демпфирования, равный 1 (ничего не делая), и 8 пар Фурье с периодом . Эта модель может быть написана как
где представляет собой процесс АРМА (2,2) и
,
,
и
сглаживающие параметры. Здесь сезонность была обработана с 18 параметрами (шестнадцать начальных значений для
и
и два параметра сглаживания
и
). Общее количество степеней свободы равно 26 (остальные 8 получены из двух параметров сглаживания
и
четырех параметров ARMA, а также значений начального уровня и наклона
и
).
Какой использовать?
В этом примере прогнозы почти идентичны, и дифференцировать две модели практически невозможно. Модель TBATS предпочтительна, когда сезонность изменяется во времени или когда есть несколько сезонных периодов. Подход ARIMA предпочтителен, если есть ковариаты, которые являются полезными предикторами, поскольку они могут быть добавлены в качестве дополнительных регрессоров.