стохастичне проти детермінованої тенденції / сезонність у прогнозуванні часових рядів


16

Я маю помірний досвід прогнозування часових рядів. Я переглянув декілька книг з прогнозуванням, і не бачу наступних питань, вирішених у жодній із них.

У мене є два питання:

  1. Як я можу визначити об'єктивно (за допомогою статистичного тесту), якщо для даного часового ряду є:

    • Стохастична сезонність або детермінована сезонність
    • Стохастична тенденція або детермінований тренд
  2. Що буде, якщо я буду моделювати часовий ряд як детерміновану тенденцію / сезонність, коли серія має чітко стохастичну складову?

Будемо дуже вдячні за будь-яку допомогу у вирішенні цих питань.

Приклад даних для тенденції:

7,657
5,451
10,883
9,554
9,519
10,047
10,663
10,864
11,447
12,710
15,169
16,205
14,507
15,400
16,800
19,000
20,198
18,573
19,375
21,032
23,250
25,219
28,549
29,759
28,262
28,506
33,885
34,776
35,347
34,628
33,043
30,214
31,013
31,496
34,115
33,433
34,198
35,863
37,789
34,561
36,434
34,371
33,307
33,295
36,514
36,593
38,311
42,773
45,000
46,000
42,000
47,000
47,500
48,000
48,500
47,000
48,900

Існують 4 можливі стани природи. Немає аналітичного рішення цього питання, оскільки простір вибірки моделі порівняно необмежений. Щоб емпірично відповісти на це хвилююче питання, я допоміг розробити AUTOBOX autobox.com/cms . AUTOBOX проводить турнір з вивчення всіх 4 цих випадків і оцінює якість 4-х результативних моделей з точки зору необхідності та достатності. Чому ви не опублікуєте приклад часового ряду на ваш вибір, і я опублікую 4 результати, що показують, як вирішено цю проблему.
IrishStat

Відповіді:


15

1) Що стосується вашого першого питання, в літературі були розроблені та обговорені деякі статистичні дані тестів для перевірки нульової стаціонарності та нульового одиничного кореня. Деякі з багатьох робіт, написаних з цього питання, такі:

Пов’язана з тенденцією:

  • Dickey, D. y Fuller, W. (1979a), Розподіл оцінок для авторегресивних часових рядів з одиничним коренем, Журнал Американської статистичної асоціації 74, 427-31.
  • Dickey, D. y Fuller, W. (1981), статистика коефіцієнтів ймовірності для авторегресивних часових рядів з одиничним коренем, Econometrica 49, 1057-1071.
  • Kwiatkowski, D., Phillips, P., Schmidt, P. y Shin, Y. (1992), Тестуючи нульову гіпотезу стаціонарності щодо альтернативи одиничного кореня: Наскільки ми впевнені, що економічні часові ряди мають одиничний корінь? , Journal of Econometrics 54, 159-178.
  • Phillips, P. y Perron, P. (1988), Тестування одиничного кореня в регресії часових рядів, Biometrika 75, 335-46.
  • Durlauf, S. y Phillips, P. (1988), Тенденції проти випадкових прогулянок в аналізі часових рядів, Econometrica 56, 1333-54.

Пов'язаний із сезонним компонентом:

  • Hylleberg, S., Engle, R., Granger, C. y Yoo, B. (1990), Сезонна інтеграція та коінтеграція, Journal of Econometrics 44, 215-38.
  • Canova, F. y Hansen, BE (1995), Чи постійні сезонні структури з часом? тест на сезонну стабільність, Журнал ділової та економічної статистики 13, 237-252.
  • Франс, П. (1990), Тестування на сезонні кореневі одиниці у щомісячних даних, Технічний звіт 9032, Економетричний інститут.
  • Ghysels, E., Lee, H. y Noh, J. (1994), Тестування одиничних коренів у сезонних часових рядах. деякі теоретичні розширення та дослідження монте-карло, Journal of Econometrics 62, 415-442.

Підручник Banerjee, A., Dolado, J., Galbraith, J. y Hendry, D. (1993), Коінтеграція, Виправлення помилок та економетричний аналіз нестаціонарних даних, Advanced Texts in Econometrics. Оксфордський університетський прес - також хороша довідка.

2) Ваша друга турбота виправдана літературою. Якщо є одиничний кореневий тест, то традиційна t-статистика, яку ви застосовували б за лінійною тенденцією, не відповідає стандартному розподілу. Див., Наприклад, Phillips, P. (1987), регресія часових рядів з одиничним коренем, Econometrica 55 (2), 277-301.

Якщо одиничний корінь існує і ігнорується, то ймовірність відхилення нуля, що коефіцієнт лінійного тренду дорівнює нулю, зменшується. Тобто ми закінчили б моделювати детерміновану лінійну тенденцію занадто часто для заданого рівня значущості. За наявності одиничного кореня ми повинні замість цього перетворити дані, регулярно переходячи до даних.

3) Для ілюстрації, якщо ви використовуєте R, ви можете зробити наступний аналіз зі своїми даними.

x <- structure(c(7657, 5451, 10883, 9554, 9519, 10047, 10663, 10864, 
  11447, 12710, 15169, 16205, 14507, 15400, 16800, 19000, 20198, 
  18573, 19375, 21032, 23250, 25219, 28549, 29759, 28262, 28506, 
  33885, 34776, 35347, 34628, 33043, 30214, 31013, 31496, 34115, 
  33433, 34198, 35863, 37789, 34561, 36434, 34371, 33307, 33295, 
  36514, 36593, 38311, 42773, 45000, 46000, 42000, 47000, 47500, 
  48000, 48500, 47000, 48900), .Tsp = c(1, 57, 1), class = "ts")

Спочатку ви можете застосувати тест Діккі-Фуллера для нуля одиничного кореня:

require(tseries)
adf.test(x, alternative = "explosive")
#   Augmented Dickey-Fuller Test
#   Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.453
#   alternative hypothesis: explosive

і тест KPSS для зворотної нульової гіпотези, стаціонарності проти альтернативи стаціонарності навколо лінійної тенденції:

kpss.test(x, null = "Trend", lshort = TRUE)
#   KPSS Test for Trend Stationarity
#   KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01

Результати: тест ADF, на рівні 5% значущості одиничний корінь не відкидається; Тест KPSS, нульова стаціонарність відхиляється на користь моделі з лінійною тенденцією.

Зауваження: використання lshort=FALSEнуля тесту KPSS не відхиляється на рівні 5%, однак він вибирає 5 логів; подальша інспекція, яка не показана тут, припускає, що вибір 1-3 відстань є відповідним для даних та призводить до відхилення нульової гіпотези.

В принципі, ми повинні керуватися тестом, для якого ми змогли відкинути нульову гіпотезу (а не тестом, для якого ми не відхилили (ми прийняли) нуль). Однак регресія оригінальної серії на лінійну тенденцію виявляється не достовірною. З одного боку, R-квадрат високий (понад 90%), що вказується в літературі як показник помилкової регресії.

fit <- lm(x ~ 1 + poly(c(time(x))))
summary(fit)
#Coefficients:
#                 Estimate Std. Error t value Pr(>|t|)    
#(Intercept)       28499.3      381.6   74.69   <2e-16 ***
#poly(c(time(x)))  91387.5     2880.9   31.72   <2e-16 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 2881 on 55 degrees of freedom
#Multiple R-squared:  0.9482,   Adjusted R-squared:  0.9472 
#F-statistic:  1006 on 1 and 55 DF,  p-value: < 2.2e-16

З іншого боку, залишки автокорельовані:

acf(residuals(fit)) # not displayed to save space

Більше того, нуль одиничного кореня у залишках не може бути відхилений.

adf.test(residuals(fit))
#   Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary

На даний момент ви можете вибрати модель, яку будете використовувати для отримання прогнозів. Наприклад, прогнози на основі структурної моделі часового ряду та на моделі ARIMA можна отримати наступним чином.

# StructTS
fit1 <- StructTS(x, type = "trend")
fit1
#Variances:
# level    slope  epsilon  
#2982955        0   487180 
# 
# forecasts
p1 <- predict(fit1, 10, main = "Local trend model")
p1$pred
# [1] 49466.53 50150.56 50834.59 51518.62 52202.65 52886.68 53570.70 54254.73
# [9] 54938.76 55622.79

# ARIMA
require(forecast)
fit2 <- auto.arima(x, ic="bic", allowdrift = TRUE)
fit2
#ARIMA(0,1,0) with drift         
#Coefficients:
#         drift
#      736.4821
#s.e.  267.0055
#sigma^2 estimated as 3992341:  log likelihood=-495.54
#AIC=995.09   AICc=995.31   BIC=999.14
#
# forecasts
p2 <- forecast(fit2, 10, main = "ARIMA model")
p2$mean
# [1] 49636.48 50372.96 51109.45 51845.93 52582.41 53318.89 54055.37 54791.86
# [9] 55528.34 56264.82

Сюжет прогнозів:

par(mfrow = c(2, 1), mar = c(2.5,2.2,2,2))
plot((cbind(x, p1$pred)), plot.type = "single", type = "n", 
  ylim = range(c(x, p1$pred + 1.96 * p1$se)), main = "Local trend model")
grid()
lines(x)
lines(p1$pred, col = "blue")
lines(p1$pred + 1.96 * p1$se, col = "red", lty = 2)
lines(p1$pred - 1.96 * p1$se, col = "red", lty = 2)
legend("topleft", legend = c("forecasts", "95% confidence interval"), 
  lty = c(1,2), col = c("blue", "red"), bty = "n")
plot((cbind(x, p2$mean)), plot.type = "single", type = "n", 
  ylim = range(c(x, p2$upper)), main = "ARIMA (0,1,0) with drift")
grid()
lines(x)
lines(p2$mean, col = "blue")
lines(ts(p2$lower[,2], start = end(x)[1] + 1), col = "red", lty = 2)
lines(ts(p2$upper[,2], start = end(x)[1] + 1), col = "red", lty = 2)

прогнози тенденцій

Прогнози схожі в обох випадках і виглядають розумними. Зауважте, що прогнози дотримуються відносно детермінованої структури, подібної до лінійної тенденції, але ми не моделювали явно лінійну тенденцію. Причина полягає в наступному: i) в локальній трендовій моделі дисперсія компонента нахилу оцінюється як нуль. Це перетворює трендовий компонент у дрейф, що має ефект лінійного тренду. ii) ARIMA (0,1,1), модель з дрейфом вибирається в моделі для диференційованих рядів. Вплив постійного члена на диференційований ряд є лінійною тенденцією. Про це йдеться у цьому дописі .

Ви можете перевірити, що якщо обрана локальна модель або ARIMA (0,1,0) без дрейфу, то прогнози є прямою горизонтальною лінією і, отже, не матимуть подібності зі спостережуваною динамікою даних. Ну, це частина головоломки одиничних кореневих тестів та детермінованих компонентів.

Редагування 1 (перевірка залишків): Автокореляція та частковий ACF не пропонують структури в залишках.

resid1 <- residuals(fit1)
resid2 <- residuals(fit2)
par(mfrow = c(2, 2))
acf(resid1, lag.max = 20, main = "ACF residuals. Local trend model")
pacf(resid1, lag.max = 20, main = "PACF residuals. Local trend model")
acf(resid2, lag.max = 20, main = "ACF residuals. ARIMA(0,1,0) with drift")
pacf(resid2, lag.max = 20, main = "PACF residuals. ARIMA(0,1,0) with drift")

ACF-PACF

Як запропонував IrishStat, перевірка наявності інших людей також є доцільною. За допомогою упаковки виявляються дві добавки, що відпадають tsoutliers.

require(tsoutliers)
resol <- tsoutliers(x, types = c("AO", "LS", "TC"), 
  remove.method = "bottom-up", 
  args.tsmethod = list(ic="bic", allowdrift=TRUE))
resol
#ARIMA(0,1,0) with drift         
#Coefficients:
#         drift        AO2       AO51
#      736.4821  -3819.000  -4500.000
#s.e.  220.6171   1167.396   1167.397
#sigma^2 estimated as 2725622:  log likelihood=-485.05
#AIC=978.09   AICc=978.88   BIC=986.2
#Outliers:
#  type ind time coefhat  tstat
#1   AO   2    2   -3819 -3.271
#2   AO  51   51   -4500 -3.855

Дивлячись на ACF, можна сказати, що на рівні 5% значущості залишки є випадковими і в цій моделі.

par(mfrow = c(2, 1))
acf(residuals(resol$fit), lag.max = 20, main = "ACF residuals. ARIMA with additive outliers")
pacf(residuals(resol$fit), lag.max = 20, main = "PACF residuals. ARIMA with additive outliers")

введіть тут опис зображення

У цьому випадку наявність потенційних випускників не спотворює продуктивність моделей. Це підтверджується тестом Жарка-Бера на нормальність; нульова нормальність у залишках від початкових моделей ( fit1, fit2) не відкидається на рівні 5% значущості.

jarque.bera.test(resid1)[[1]]
# X-squared = 0.3221, df = 2, p-value = 0.8513
jarque.bera.test(resid2)[[1]]
#X-squared = 0.426, df = 2, p-value = 0.8082

Редагувати 2 (графік залишків та їх значення) Ось як виглядають залишки:

залишки

Це їх значення у форматі csv:

0;6.9205
-0.9571;-2942.4821
2.6108;4695.5179
-0.5453;-2065.4821
-0.2026;-771.4821
0.1242;-208.4821
0.1909;-120.4821
-0.0179;-535.4821
0.1449;-153.4821
0.484;526.5179
1.0748;1722.5179
0.3818;299.5179
-1.061;-2434.4821
0.0996;156.5179
0.4805;663.5179
0.8969;1463.5179
0.4111;461.5179
-1.0595;-2361.4821
0.0098;65.5179
0.5605;920.5179
0.8835;1481.5179
0.7669;1232.5179
1.4024;2593.5179
0.3785;473.5179
-1.1032;-2233.4821
-0.3813;-492.4821
2.2745;4642.5179
0.2935;154.5179
-0.1138;-165.4821
-0.8035;-1455.4821
-1.2982;-2321.4821
-1.9463;-3565.4821
-0.1648;62.5179
-0.1022;-253.4821
0.9755;1882.5179
-0.5662;-1418.4821
-0.0176;28.5179
0.5;928.5179
0.6831;1189.5179
-1.8889;-3964.4821
0.3896;1136.5179
-1.3113;-2799.4821
-0.9934;-1800.4821
-0.4085;-748.4821
1.2902;2482.5179
-0.0996;-657.4821
0.5539;981.5179
2.0007;3725.5179
1.0227;1490.5179
0.27;263.5179
-2.336;-4736.4821
1.8994;4263.5179
0.1301;-236.4821
-0.0892;-236.4821
-0.1148;-236.4821
-1.1207;-2236.4821
0.4801;1163.5179

1
Чи ви переконалися, що залишки з ваших моделей були випадковими, тобто відсутні аутлайнери або структура ARIMA, необхідна для перевірки значущості оцінених коефіцієнтів для значущості. Зауважте, що якщо у вас є залишки в залишках, ACF є безглуздим, оскільки роздута помилка дисперсії призводить до заниженого ACF. Надайте, будь ласка, графіки помилок, які доводять / підказують випадковість, інакше ваші висновки щодо залишків, які не пов'язані між собою, можуть бути помилковими.
IrishStat

Безумовно, повний аналіз вимагає огляду залишків. Я обмежився своєю відповіддю, щоб назвати деякі інструменти, за допомогою яких можна застосувати тести, про які запитував "синоптик", і проілюстрував їх використання. Я радий бачити, що вас цікавить більше деталей, я відредагував своє запитання.
javlacalle

Я попросив провести часовий графік залишків. Чи можете ви надати їх, а також надати самі залишки, щоб я міг обробити їх AUTOBOX, щоб підтвердити, що вони не мають чітко підтвердженої структури. Тест JB не є переважним при тестуванні на імпульси, зсув рівня, сезонні імпульси та / або місцеві тенденції часу в наборі даних, хоча наявність таких типів структури може викликати відхилення припущення про нормальність. Думка, що якщо нуль не буде відхилено, це доказ його прийняття, може бути небезпечним. Перегляньте unc.edu/~jbhill/tsay.pdf
IrishStat

1
Спасибі. Я подав 57 залишків, і 5 з них були попередньо позначені як виняткові. За порядком важливості (51,3,27,52 та 48). Ваш графік візуально підтримує цю точку. Отримані помилки не виявляють жодних порушень випадковості, а згодом і не мають значного АКФ. Для коригування спостережуваних значень для встановлення виявлення аномалії використовуйте наступне: + [X1 (T)] [(- 4494.5)]: PULSE 51 + [X2 (T)] [(+ 4937.5)]: PULSE 3 + [X3 (T)] [(+ 4884.5)]: PULSE 27 + [X4 (T)] [(+ 4505.5)]: PULSE 52 + [X5 (T)] [(+ 3967.5)]: PULSE 48
IrishStat

1
@B_Miner Зазвичай ви почнете з перегляду функції автокореляції залишків. Якщо автокореляція є значною і великою для великих замовлень (тобто ACF не розпадається експоненціально до нуля), ви можете розглянути можливість застосування одиничного кореневого тесту на залишки. Якщо аналіз залишків дозволяє припустити, що існує одиничний корінь, це означатиме, що ви, мабуть, повинні взяти перші відмінності двічі за вихідними даними (тобто знову взяти відмінності в диференційованому ряду).
javlacalle

4

Стосовно ваших несезонних даних ... Тенденції можуть бути двох форм y (t) = y (t − 1) + θ0 (A) Стохастична тенденція або Y (t) = a + bx1 + cx2 (B) Детерміновані Тенденція тощо, де x1 = 1,2,3,4 .... t і x2 = 0,0,0,0,0,1,2,3,4, таким чином, одна тенденція застосовується до спостережень 1 - t, а друга - стосується спостережень 6 - t.

Ваша несезонна серія містила 29 значень. Я використав AUTOBOX частину програмного забезпечення, яке допомогло мені розвиватися абсолютно автоматично. AUTOBOX - це прозора процедура, оскільки вона детально описує кожен етап процесу моделювання. Тут представлений графік серії / пристосованих значень / прогнозіввведіть тут опис зображення . Використання AUTOBOX для формування моделі типу A призвело до наступного введіть тут опис зображення. Тут знову представлено рівняння введіть тут опис зображення, статистика моделі є введіть тут опис зображення. Сюжет залишків знаходиться тут, введіть тут опис зображеннятоді як таблиця прогнозованих значень тут введіть тут опис зображення. Обмеження AUTOBOX на модель типу B призвело до того, що AUTOBOX виявив посилений тренд у період 14 :. введіть тут опис зображення введіть тут опис зображеннявведіть тут опис зображення!введіть тут опис зображеннявведіть тут опис зображеннявведіть тут опис зображення

З точки зору порівняння моделей: Оскільки кількість пристосованих спостережень відрізняється (26 і 29 відповідно), неможливо використовувати стандартні показники (тобто r-квадрат, стандарт помилок, AIC тощо) для визначення домінування, хоча в цьому випадку кивок перейти до А. Залишки від A краще завдяки структурі AR (2). Прогнози з B є агресивними, тоді як модель прогнозів A є більш інтуїтивно зрозумілою. Можна стримуватись, сказати, 4 спостереження та оцінити точність прогнозу на 1 період, прогнозуючи 4 різних джерела (25,26,27 та 28).


2Ірландські статистичні показники для чудової відповіді. Я читав, що ми поєднували стохастичні та детерміновані тенденції, тобто yt = y (t-1) + a + bt = ct? чи буде це корисно
синоптик

Форма моделі y (t) = B0 + B1 * t + a (t) [thetha / phi] руйнується, якщо phi скажеться [1-B], оскільки очищення дробів по суті диференціює змінну t, що дає постійне зіткнення з B0. Іншими словами, структура ARIMA, поєднана з показниками часу, може створити хаос. Вказана вами модель є оцінною, але, безумовно, не є сприятливим підходом (можливо, відсутність ендогенності!). Хтось, хто читає це, може прокоментувати це, може допомогти в цьому. Це не належний підмножина функції передачі i.imgur.com/dv4bAts.png
IrishStat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.