tren stokastik vs deterministik / musiman dalam perkiraan deret waktu


16

Saya memiliki latar belakang sedang dalam peramalan seri waktu. Saya telah melihat beberapa buku peramalan, dan saya tidak melihat pertanyaan-pertanyaan berikut ini dialaminya.

Saya punya dua pertanyaan:

  1. Bagaimana saya menentukan secara obyektif (melalui uji statistik) jika seri waktu tertentu memiliki:

    • Musim Stochastic atau Musim Deterministik
    • Tren Stochastic atau Tren Deterministik
  2. Apa yang akan terjadi jika saya memodelkan deret waktu saya sebagai tren / musiman deterministik ketika deret tersebut memiliki komponen stokastik yang jelas?

Bantuan apa pun yang menjawab pertanyaan-pertanyaan ini akan sangat dihargai.

Contoh data untuk tren:

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

Ada 4 kemungkinan kondisi alam. Tidak ada solusi analitik untuk pertanyaan ini karena ruang sampel model relatif tidak terbatas. Untuk secara empiris menjawab pertanyaan yang menjengkelkan ini, saya telah membantu mengembangkan AUTOBOX autobox.com/cms . AUTOBOX menjalankan turnamen untuk memeriksa semua 4 kasus ini dan menilai kualitas dari 4 model yang dihasilkan dalam hal kebutuhan dan kecukupan. Mengapa Anda tidak memposting contoh rangkaian waktu pilihan Anda dan saya akan memposting 4 hasil yang menunjukkan bagaimana masalah ini telah diselesaikan.
IrishStat

Jawaban:


15

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)

perkiraan tren

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")

ACF-PACF

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")

masukkan deskripsi gambar di sini

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:

residu

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

1
Apakah Anda memverifikasi bahwa residu dari model Anda adalah acak yaitu tidak ada outlier atau struktur ARIMA yang diperlukan untuk menguji signifikansi dari koefisien yang diperkirakan menjadi bermakna. Perhatikan bahwa jika Anda memiliki outlier dalam residu, ACF tidak ada artinya karena varians kesalahan yang membengkak mengarah ke ACF yang diremehkan. Bisakah Anda memberikan plot kesalahan yang membuktikan / menyarankan keacakan jika tidak kesimpulan Anda tentang residu yang tidak berkorelasi mungkin salah.
IrishStat

Jelas analisis yang lengkap membutuhkan pemeriksaan residu. Saya membatasi jawaban saya untuk menyebutkan beberapa alat yang dapat digunakan untuk menerapkan tes yang "peramal" tanyakan dan menggambarkan penggunaannya. Saya senang melihat Anda tertarik pada detail lebih lanjut, saya telah mengedit pertanyaan saya.
javlacalle

Saya telah meminta plot waktu dari residu. Bisakah Anda menyediakannya dan juga menyediakan residunya sendiri sehingga saya dapat memprosesnya dengan AUTOBOX untuk memastikan bahwa mereka bebas dari struktur yang terbukti. Tes JB tidak disukai ketika menguji Pulsa, Pergeseran Level, Pulsa Musiman dan / atau tren waktu lokal dalam kumpulan data meskipun keberadaan jenis struktur ini dapat memicu penolakan terhadap asumsi normalitas. Gagasan bahwa jika nol tidak ditolak itu adalah bukti penerimaan itu bisa berbahaya. Silakan lihat unc.edu/~jbhill/tsay.pdf
IrishStat

1
Terima kasih. Saya menyerahkan 57 residu dan 5 dari mereka secara sementara ditandai sebagai luar biasa. Dalam urutan kepentingan (51,3,27,52 dan 48). Grafik Anda secara visual mendukung titik ini. Kesalahan yang dihasilkan menunjukkan tidak ada pelanggaran keacakan dan kemudian tidak ada ACF yang signifikan. Untuk menyesuaikan nilai yang diamati untuk mengakomodasi deteksi anomali, gunakan yang berikut ini: + [X1 (T)] [(- 4494,5)]: PULSE 51 + [X2 (T)] [(+ 4937.5)]: PULSE 3 + [X3 (T)] [(+ 4884.5)]: PULSA 27 + [X4 (T)] [(+ 4505.5)]: PULSA 52 + [X5 (T)] [(+ 3967.5)]: PULSA 48
IrishStat

1
@ B_Miner Biasanya Anda akan mulai dengan melihat fungsi autokorelasi residu. Jika autokorelasi signifikan dan besar untuk pesanan besar (yaitu ACF tidak membusuk secara eksponensial ke nol) maka Anda dapat mempertimbangkan menerapkan uji unit root pada residu. Jika analisis residu menunjukkan bahwa ada unit root, itu berarti bahwa Anda mungkin harus mengambil perbedaan pertama dua kali pada data asli (yaitu mengambil perbedaan lagi dalam seri berbeda).
javlacalle

4

Sehubungan dengan data non-musiman Anda ... Tren dapat berupa dua bentuk y (t) = y (t − 1) + θ0 (A) Tren Stochastic atau Y (t) = a + bx1 + cx2 (B) Deterministic Tren dll di mana x1 = 1,2,3,4 .... t dan x2 = 0,0,0,0,0,1,2,3,4 sehingga satu tren berlaku untuk pengamatan 1 − t dan tren kedua berlaku untuk pengamatan 6 sampai t.

Seri non-musiman Anda berisi 29 nilai. Saya menggunakan AUTOBOX perangkat lunak yang telah saya bantu kembangkan dengan cara yang sepenuhnya otomatis. AUTOBOX adalah prosedur transparan karena merinci setiap langkah dalam proses pemodelan. Grafik dari seri / nilai-nilai / perkiraan dipasang di sini masukkan deskripsi gambar di sini. Menggunakan AUTOBOX untuk membentuk model tipe A menyebabkan hal-hal berikut masukkan deskripsi gambar di sini. Persamaan disajikan lagi di sini masukkan deskripsi gambar di sini, Statistik model adalah masukkan deskripsi gambar di sini. Sebidang residual ada di sini masukkan deskripsi gambar di sinisementara tabel nilai yang diperkirakan di sini masukkan deskripsi gambar di sini. Membatasi AUTOBOX ke model tipe B menyebabkan AUTOBOX mendeteksi tren yang meningkat pada periode 14 :. masukkan deskripsi gambar di sini masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini!masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini

Dalam hal membandingkan model: Karena jumlah pengamatan yang dipasang berbeda (masing-masing 26 dan 29) tidak mungkin untuk menggunakan metrik standar (yaitu r-square, standar error, AIC dll) untuk menentukan dominasi walaupun dalam kasus ini anggukan akan pergi ke A. Residu dari A lebih baik karena struktur AR (2). Prakiraan dari B sedikit agresif sedangkan pola perkiraan A lebih intuitif. Seseorang dapat menahan mengatakan 4 pengamatan dan mengevaluasi akurasi perkiraan untuk perkiraan periode 1 dari 4 asal yang berbeda (25,26,27 dan 28).


2Irish stanks untuk respons kecerdasan. Saya telah membaca beberapa bahwa kita akan menggabungkan tren stokastik dan deterministik lainnya yaitu yt = y (t-1) + a + bt = ct? apakah itu akan membantu
peramal

Bentuk model y (t) = B0 + B1 * t + a (t) [tha / phi] runtuh jika phi dikatakan [1-B] karena membersihkan pecahan pada dasarnya berbeda dengan variabel t yang menghasilkan konstanta bertabrakan dengan B0. Dengan kata lain struktur ARIMA bergabung dengan indikator waktu dapat membuat kekacauan. Model yang Anda tentukan dapat diperkirakan tetapi jelas bukan pendekatan yang disukai (mungkin kurang endogenitas!). Orang lain yang membaca ini dapat berkomentar dapat membantu dalam hal ini. Ini bukan bagian yang tepat dari Fungsi Transfer i.imgur.com/dv4bAts.png
IrishStat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.