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")
Як запропонував 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