стохастик против детерминированной тенденции / сезонности в прогнозировании временных рядов

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) Что касается вашего первого вопроса, некоторые статистические данные были разработаны и обсуждены в литературе для проверки нулевой стационарности и нулевого единичного корня. Вот некоторые из многочисленных работ, написанных по этому вопросу:

Связанные с трендом:

  • Дики, Д. и Фуллер, В. (1979a), Распределение оценок для авторегрессионных временных рядов с единичным корнем, Журнал Американской статистической ассоциации 74, 427-31.
  • Дики, Д. и Фуллер, В. (1981), Статистика отношения правдоподобия для авторегрессионных временных рядов с единичным корнем, Econometrica 49, 1057-1071.
  • Квятковский Д., Филлипс П., Шмидт П. и Шин Ю. (1992). Проверка нулевой гипотезы стационарности против альтернативы единичного корня: насколько мы уверены, что экономические временные ряды имеют единичный корень? , Журнал эконометрики 54, 159-178.
  • Phillips, P. y Perron, P. (1988), Тестирование на единичный корень в регрессии временных рядов, Biometrika 75, 335-46.
  • Durlauf, S. y Phillips, P. (1988), Тенденции против случайных блужданий в анализе временных рядов, Econometrica 56, 1333-54.

Связанные с сезонной составляющей:

  • Хиллеберг С., Энгл Р., Грейнджер С. и Ю, Б. (1990), Сезонная интеграция и коинтеграция, журнал эконометрики 44, 215-38.
  • Canova, F. y Hansen, BE (1995), Являются ли сезонные закономерности постоянными во времени? тест на сезонную стабильность, Журнал деловой и экономической статистики 13, 237-252.
  • Franses, P. (1990), Тестирование сезонных единичных корней в месячных данных, Технический отчет 9032, Эконометрический институт.
  • Ghysels, E., Lee, H. y Noh, J. (1994), Тестирование на единичные корни в сезонных временных рядах. некоторые теоретические расширения и исследование Монте-Карло, журнал эконометрики 62, 415-442.

Учебник Банерджи, А., Доладо, Дж., Гэлбрейт, Дж. И Хендри, Д. (1993), Коинтеграция, исправление ошибок и эконометрический анализ нестационарных данных, Расширенные тексты в эконометрике. Издательство Оксфордского университета также является хорошим справочным материалом.

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
javlacalle
источник
1
Проверяли ли вы, что остатки в ваших моделях были случайными, то есть отсутствуют выбросы или структура ARIMA, которая требуется для проверки значимости оцененных коэффициентов на значимость. Обратите внимание, что если у вас есть выбросы в остатках, ACF не имеет смысла, так как дисперсия раздутой ошибки приводит к недооценке ACF. Можете ли вы предоставить графики ошибок, которые доказывают / предполагают случайность, в противном случае ваши выводы о некоррелированных остатках могут быть ложными.
IrishStat
Определенно, полный анализ требует проверки остатков. Я ограничил свой ответ названием некоторых инструментов, которые можно использовать для применения тестов, о которых спрашивал «прогнозист», и проиллюстрировал их использование. Я рад видеть, что вас интересует более подробная информация, я отредактировал свой вопрос.
Javlacalle
Я попросил график времени остатков. Не могли бы вы предоставить их, а также сами остатки, чтобы я мог обработать их с помощью AUTOBOX, чтобы подтвердить, что они не имеют доказанной структуры. Тест JB не является предпочтительным при тестировании импульсов, сдвигов уровней, сезонных импульсов и / или трендов местного времени в наборе данных, хотя наличие таких структур может привести к отклонению предположения о нормальности. Идея о том, что если ноль не отклонен, а является доказательством его приемлемости, может быть опасной. Пожалуйста, смотрите unc.edu/~jbhill/tsay.pdf
IrishStat
1
Благодарю. Я представил 57 остатков, и 5 из них были предварительно помечены как исключительные. В порядке значимости (51,3,27,52 и 48). Ваш график визуально поддерживает эти точки. В результате ошибки не обнаруживают нарушения случайности и, следовательно, не имеют значительного ACF. Чтобы скорректировать ваши наблюдаемые значения в соответствии с обнаружением аномалий, пожалуйста, используйте следующее: + [X1 (T)] [(- 4494.5)]: PULSE 51 + [X2 (T)] [(+ 4937.5)]: PULSE 3 + [X3 (T)] [(+ 4884,5)]: ИМПУЛЬС 27 + [X4 (T)] [(+ 4505,5)]: ИМПУЛЬС 52 + [X5 (T)] [(+ 3967,5)]:
ИМПУЛЬС
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 к т.

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

С точки зрения сравнения моделей: поскольку количество подходящих наблюдений различается (26 и 29 соответственно), невозможно использовать стандартные метрики (т. Е. R-квадрат, стандартное отклонение dev, AIC и т. Д.) Для определения доминирования, хотя в этом случае кивок будет перейти к A. Остатки от A лучше благодаря структуре AR (2). Прогнозы от B немного агрессивны, а схема прогнозов A более интуитивна. Можно было бы сказать 4 наблюдения и оценить точность прогноза для прогноза на 1 период из 4 различных источников (25, 26, 27 и 28).

IrishStat
источник
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