1) Mengenai pertanyaan pertama Anda, beberapa statistik uji telah dikembangkan dan dibahas dalam literatur untuk menguji nol stasioneritas dan nol dari unit root. Beberapa dari banyak makalah yang ditulis tentang masalah ini adalah sebagai berikut:
Terkait dengan tren:
- Dickey, D. y Fuller, W. (1979a), Distribusi estimator untuk seri waktu autoregresif dengan unit root, Jurnal Asosiasi Statistik Amerika 74, 427-31.
- Dickey, D. y Fuller, W. (1981), statistik rasio kemungkinan untuk seri waktu autoregresif dengan unit root, Econometrica 49, 1057-1071.
- Kwiatkowski, D., Phillips, P., Schmidt, P. y Shin, Y. (1992), Menguji hipotesis nol stasioneritas terhadap alternatif unit root: Seberapa yakin kita bahwa deret waktu ekonomi memiliki unit root? , Jurnal Ekonometrika 54, 159-178.
- Phillips, P. y Perron, P. (1988), Pengujian untuk unit root dalam regresi deret waktu, Biometrika 75, 335-46.
- Durlauf, S. y Phillips, P. (1988), Tren versus jalan acak dalam analisis deret waktu, Econometrica 56, 1333-54.
Terkait dengan komponen musiman:
- Hylleberg, S., Engle, R., Granger, C. y Yoo, B. (1990), Integrasi dan kointegrasi musiman, Jurnal Ekonometrika 44, 215-38.
- Canova, F. y Hansen, BE (1995), Apakah pola musiman konstan sepanjang waktu? tes untuk stabilitas musiman, Jurnal Bisnis dan Statistik Ekonomi 13, 237-252.
- Franses, P. (1990), Pengujian untuk akar unit musiman dalam data bulanan, Laporan Teknis 9032, Econometric Institute.
- Ghysels, E., Lee, H. y Noh, J. (1994), Menguji akar unit dalam seri waktu musiman. beberapa ekstensi teoritis dan investigasi monte carlo, Journal of Econometrics 62, 415-442.
Buku teks Banerjee, A., Dolado, J., Galbraith, J. y Hendry, D. (1993), Ko-Integrasi, Koreksi Kesalahan, dan analisis ekonometrik data non-stasioner, Teks Lanjutan dalam Ekonometrika. Oxford University Press juga merupakan referensi yang bagus.
2) Kekhawatiran kedua Anda dibenarkan oleh literatur. Jika ada tes root unit maka t-statistik tradisional yang akan Anda terapkan pada tren linier tidak mengikuti distribusi standar. Lihat misalnya, Phillips, P. (1987), Regresi deret waktu dengan root unit, Econometrica 55 (2), 277-301.
Jika unit root ada dan diabaikan, maka kemungkinan menolak nol bahwa koefisien tren linier adalah nol berkurang. Artinya, kita akan berakhir memodelkan tren linier deterministik terlalu sering untuk tingkat signifikansi tertentu. Di hadapan unit root kita harus mengubah data dengan mengambil perbedaan reguler ke data.
3) Sebagai ilustrasi, jika Anda menggunakan R Anda dapat melakukan analisis berikut dengan data Anda.
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")
Pertama, Anda bisa menerapkan tes Dickey-Fuller untuk null dari unit root:
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
dan tes KPSS untuk hipotesis nol terbalik, stasioneritas terhadap alternatif stasioneritas di sekitar tren linier:
kpss.test(x, null = "Trend", lshort = TRUE)
# KPSS Test for Trend Stationarity
# KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01
Hasil: Tes ADF, pada tingkat signifikansi 5%, root unit tidak ditolak; Uji KPSS, nol stasioneritas ditolak demi model dengan tren linier.
Selain catatan: menggunakan lshort=FALSE
nol dari tes KPSS tidak ditolak pada level 5%, namun, ia memilih 5 lag; pemeriksaan lebih lanjut yang tidak diperlihatkan di sini menunjukkan bahwa memilih 1-3 lag sesuai untuk data dan mengarah pada penolakan hipotesis nol.
Pada prinsipnya, kita harus membimbing diri kita dengan ujian yang dengannya kita mampu menolak hipotesis nol (bukan dengan tes yang kita tidak menolak (kita menerima) nol). Namun, regresi dari seri asli pada tren linier ternyata tidak dapat diandalkan. Di satu sisi, R-square tinggi (lebih dari 90%) yang ditunjukkan dalam literatur sebagai indikator regresi palsu.
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
Di sisi lain, residu tersebut berkorelasi otomatis:
acf(residuals(fit)) # not displayed to save space
Selain itu, nol dari unit root di residual tidak dapat ditolak.
adf.test(residuals(fit))
# Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary
Pada titik ini, Anda dapat memilih model yang akan digunakan untuk mendapatkan perkiraan. Misalnya, perkiraan berdasarkan model deret waktu struktural dan model ARIMA dapat diperoleh sebagai berikut.
# 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
Alur ramalan:
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)
Perkiraannya sama dalam kedua kasus dan terlihat masuk akal. Perhatikan bahwa prakiraan mengikuti pola yang relatif deterministik mirip dengan tren linier, tetapi kami tidak memodelkan tren linier secara eksplisit. Alasannya adalah sebagai berikut: i) dalam model tren lokal, varians dari komponen lereng diperkirakan nol. Ini mengubah komponen tren menjadi drift yang memiliki efek tren linier. ii) ARIMA (0,1,1), model dengan drift dipilih dalam model untuk seri yang dibedakan. Efek dari istilah konstan pada seri yang dibedakan adalah tren linier. Ini dibahas dalam posting ini .
Anda dapat memeriksa bahwa jika model lokal atau ARIMA (0,1,0) tanpa penyimpangan dipilih, maka perkiraannya adalah garis horizontal lurus dan, karenanya, tidak akan memiliki kemiripan dengan dinamika data yang diamati. Nah, ini adalah bagian dari teka-teki tes unit root dan komponen deterministik.
Sunting 1 (inspeksi residu):
Autokorelasi dan ACF parsial tidak menyarankan struktur dalam residu.
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")
Seperti yang disarankan IrishStat, memeriksa keberadaan pencilan juga disarankan. Dua pencilan aditif terdeteksi menggunakan paket 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
Melihat ACF, kita dapat mengatakan bahwa, pada tingkat signifikansi 5%, residualnya acak dalam model ini juga.
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")
Dalam hal ini, keberadaan outlier potensial tampaknya tidak mengganggu kinerja model. Ini didukung oleh uji Jarque-Bera untuk normalitas; null normalitas dalam residual dari model awal ( fit1
, fit2
) tidak ditolak pada tingkat signifikansi 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
Sunting 2 (plot residu dan nilainya)
Ini adalah bagaimana residu terlihat seperti:
Dan ini adalah nilainya dalam format 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