tendenza / stagionalità stocastica vs deterministica nella previsione di serie storiche


16

Ho un background moderato nella previsione delle serie storiche. Ho esaminato diversi libri di previsioni e non vedo le seguenti domande poste in nessuno di essi.

Ho due domande:

  1. Come determinerei obiettivamente (tramite test statistico) se una determinata serie temporale ha:

    • Stagionalità stocastica o stagionalità deterministica
    • Tendenza stocastica o tendenza deterministica
  2. Cosa succederebbe se modellassi le mie serie storiche come una tendenza / stagionalità deterministica quando la serie ha una componente chiaramente stocastica?

Qualsiasi aiuto per rispondere a queste domande sarebbe molto apprezzato.

Dati di esempio per tendenza:

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

Ci sono 4 possibili stati della natura. Non esiste una soluzione analitica a questa domanda poiché lo spazio campione del modello è relativamente illimitato. Per rispondere empiricamente a questa fastidiosa domanda, ho contribuito a sviluppare AUTOBOX autobox.com/cms . AUTOBOX organizza un torneo per esaminare tutti e 4 questi casi e valuta la qualità dei 4 modelli risultanti in termini di necessità e sufficienza. Perché non pubblichi una serie temporale di esempio a tua scelta e posterò i 4 risultati che mostrano come questo problema è stato risolto.
IrishStat,

Risposte:


15

1) Per quanto riguarda la tua prima domanda, alcune statistiche di test sono state sviluppate e discusse in letteratura per testare il null di stazionarietà e il null di una radice unitaria. Alcuni dei numerosi articoli scritti su questo numero sono i seguenti:

Correlato alla tendenza:

  • Dickey, D. y Fuller, W. (1979a), Distribuzione degli stimatori per serie temporali autoregressive con radice unitaria, Journal of American Statistical Association 74, 427-31.
  • Dickey, D. y Fuller, W. (1981), Statistiche del rapporto di verosimiglianza per serie temporali autoregressive con radice unitaria, Econometrica 49, 1057-1071.
  • Kwiatkowski, D., Phillips, P., Schmidt, P. y Shin, Y. (1992), Testare l'ipotesi nulla di stazionarietà contro l'alternativa di una radice unitaria: Quanto siamo sicuri che quelle serie temporali economiche abbiano una radice unitaria? , Journal of Econometrics 54, 159-178.
  • Phillips, P. y Perron, P. (1988), Test per una radice unitaria nella regressione delle serie storiche, Biometrika 75, 335-46.
  • Durlauf, S. y Phillips, P. (1988), Tendenze contro passeggiate casuali nell'analisi delle serie temporali, Econometrica 56, 1333-54.

Relativo al componente stagionale:

  • Hylleberg, S., Engle, R., Granger, C. y Yoo, B. (1990), Integrazione stagionale e cointegrazione, Journal of Econometrics 44, 215-38.
  • Canova, F. y Hansen, BE (1995), Gli schemi stagionali sono costanti nel tempo? un test per la stabilità stagionale, Journal of Business and Economic Statistics 13, 237-252.
  • Franses, P. (1990), Test per radici unitarie stagionali in dati mensili, Rapporto tecnico 9032, Istituto econometrico.
  • Ghysels, E., Lee, H. y Noh, J. (1994), Test per radici unitarie in serie storiche stagionali. alcune estensioni teoriche e un'indagine di Monte Carlo, Journal of Econometrics 62, 415-442.

Il libro di testo Banerjee, A., Dolado, J., Galbraith, J. y Hendry, D. (1993), Co-integrazione, Correzione errori e analisi econometrica di dati non stazionari, Advanced Texts in Econometrics. Oxford University Press è anche un buon riferimento.

2) La tua seconda preoccupazione è giustificata dalla letteratura. Se esiste un test radice unitario, la statistica t tradizionale che si applica su una tendenza lineare non segue la distribuzione standard. Vedere ad esempio Phillips, P. (1987), regressione di serie temporali con radice unitaria, Econometrica 55 (2), 277-301.

Se esiste una radice unitaria e viene ignorata, viene ridotta la probabilità di rifiutare il valore zero del coefficiente di una tendenza lineare. Cioè, finiremmo per modellare una tendenza lineare deterministica troppo spesso per un dato livello di significatività. In presenza di una radice unitaria dovremmo invece trasformare i dati prendendo differenze regolari con i dati.

3) A scopo illustrativo, se si utilizza R è possibile eseguire la seguente analisi con i propri dati.

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

Innanzitutto, puoi applicare il test Dickey-Fuller per il null di una radice unità:

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

e il test KPSS per l'ipotesi nulla inversa, la stazionarietà contro l'alternativa della stazionarietà attorno a una tendenza lineare:

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

Risultati: test ADF, a livello di significatività del 5% una radice unitaria non viene respinta; Test KPSS, il nulla di stazionarietà viene rifiutato a favore di un modello con una tendenza lineare.

A parte la nota: l'utilizzo lshort=FALSEdel null del test KPSS non viene rifiutato al livello del 5%, tuttavia seleziona 5 ritardi; un'ulteriore ispezione non mostrata qui ha suggerito che la scelta di 1-3 ritardi è appropriata per i dati e porta a respingere l'ipotesi nulla.

In linea di principio, dovremmo guidare noi stessi dal test per il quale siamo stati in grado di rifiutare l'ipotesi nulla (piuttosto che dal test per il quale non abbiamo rifiutato (abbiamo accettato) il null). Tuttavia, una regressione della serie originale su una tendenza lineare risulta non affidabile. Da un lato, il R-quadrato è alto (oltre il 90%) che è indicato in letteratura come un indicatore di regressione spuria.

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

D'altra parte, i residui sono autocorrelati:

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

Inoltre, il valore nullo di una radice unitaria nei residui non può essere respinto.

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

A questo punto, puoi scegliere un modello da utilizzare per ottenere previsioni. Ad esempio, le previsioni basate su un modello strutturale di serie storiche e su un modello ARIMA possono essere ottenute come segue.

# 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

Un diagramma delle previsioni:

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)

previsioni di tendenza

Le previsioni sono simili in entrambi i casi e sembrano ragionevoli. Si noti che le previsioni seguono un modello relativamente deterministico simile a una tendenza lineare, ma non abbiamo modellato esplicitamente una tendenza lineare. Il motivo è il seguente: i) nel modello di tendenza locale, la varianza della componente di pendenza è stimata come zero. Ciò trasforma la componente tendenza in una deriva che ha l'effetto di una tendenza lineare. ii) ARIMA (0,1,1), un modello con deriva viene selezionato in un modello per le serie differenziate. L'effetto del termine costante su una serie differenziata è una tendenza lineare. Questo è discusso in questo post .

È possibile verificare che se si sceglie un modello locale o un ARIMA (0,1,0) senza deriva, le previsioni sono una linea orizzontale diritta e, quindi, non avrebbero alcuna somiglianza con la dinamica osservata dei dati. Bene, questo fa parte del puzzle dei test unitari e dei componenti deterministici.

Modifica 1 (ispezione dei residui): l'autocorrelazione e l'ACF parziale non suggeriscono una struttura nei residui.

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

Come ha suggerito IrishStat, è consigliabile anche verificare la presenza di valori anomali. Vengono rilevati due valori anomali additivi utilizzando il pacchetto 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

Osservando l'ACF, possiamo dire che, al livello di significatività del 5%, i residui sono casuali anche in questo modello.

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

inserisci qui la descrizione dell'immagine

In questo caso, la presenza di potenziali valori anomali non sembra distorcere le prestazioni dei modelli. Ciò è supportato dal test di Jarque-Bera per la normalità; il valore nullo della normalità nei residui dai modelli iniziali ( fit1, fit2) non viene rifiutato al livello di significatività del 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

Modifica 2 (grafico dei residui e dei loro valori) Ecco come appaiono i residui:

residui

E questi sono i loro valori in formato 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
Hai verificato che i residui dei tuoi modelli fossero casuali, cioè nessun valore anomalo o struttura ARIMA necessaria per testare la significatività dei coefficienti stimati. Si noti che se si hanno valori anomali nei residui, l'ACF non ha senso poiché la varianza dell'errore gonfio porta a un ACF sottovalutato. Potete per favore tracciare gli errori che dimostrano / suggeriscono casualità, altrimenti le vostre conclusioni sui residui non correlati potrebbero essere probabilmente false.
IrishStat,

Sicuramente un'analisi completa richiede l'ispezione dei residui. Ho limitato la mia risposta per nominare alcuni strumenti che possono essere utilizzati per applicare i test di cui "previsioni" stava chiedendo e illustrato il loro utilizzo. Sono felice di vedere che sei interessato a maggiori dettagli, ho modificato la mia domanda.
javlacalle,

Avevo chiesto un diagramma temporale dei residui. Potete per favore fornirli e anche fornire i residui stessi in modo che io possa elaborarli con AUTOBOX per confermare che sono privi di struttura evidente. Il test JB non è preferito quando si eseguono test per impulsi, spostamenti di livello, impulsi stagionali e / o andamenti dell'ora locale in un set di dati, sebbene la presenza di questo tipo di struttura potrebbe innescare un rifiuto dell'assunzione della normalità. L'idea che se il null non viene rifiutato sia la prova della sua accettazione può essere pericolosa. Si prega di consultare unc.edu/~jbhill/tsay.pdf
IrishStat

1
Grazie. Ho presentato i 57 residui e 5 di essi sono stati provvisoriamente contrassegnati come eccezionali. In ordine di importanza (51,3,27,52 e 48). Il tuo grafico supporta visivamente questi punti. Gli errori risultanti non mostrano alcuna violazione della casualità e, successivamente, nessun ACF significativo. Per regolare i valori osservati per adattarsi al rilevamento delle anomalie, utilizzare quanto segue: + [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 Normalmente inizierai guardando la funzione di autocorrelazione dei residui. Se le autocorrelazioni sono significative e grandi per ordini di grandi dimensioni (ovvero l'ACF non decade in modo esponenziale a zero), è possibile considerare l'applicazione di un test radice unitario sui residui. Se l'analisi dei residui suggerisce che esiste una radice unitaria, ciò significherebbe che probabilmente dovresti prendere le prime differenze due volte sui dati originali (ovvero prendere di nuovo differenze nelle serie differenziate).
javlacalle,

4

Rispetto ai dati non stagionali ... Le tendenze possono essere di due forme y (t) = y (t − 1) + θ0 (A) Trend stocastico o Y (t) = a + bx1 + cx2 (B) Deterministico Tendenza ecc. Dove x1 = 1,2,3,4 .... te x2 = 0,0,0,0,0,1,2,3,4 quindi una tendenza si applica alle osservazioni 1 − t e una seconda tendenza si applica alle osservazioni da 6 a t.

Le tue serie non stagionali contenevano 29 valori. Ho usato AUTOBOX un software che avevo contribuito a sviluppare in modo totalmente automatico. AUTOBOX è una procedura trasparente in quanto dettaglia ogni fase del processo di modellazione. Un grafico delle serie / valori adattati / previsioni è presentato quiinserisci qui la descrizione dell'immagine . L'uso di AUTOBOX per formare un modello di tipo A ha portato a quanto segue inserisci qui la descrizione dell'immagine. L'equazione è di nuovo presentata qui inserisci qui la descrizione dell'immagine, Le statistiche del modello sono inserisci qui la descrizione dell'immagine. Un diagramma dei residui è qui inserisci qui la descrizione dell'immaginementre la tabella dei valori previsti è qui inserisci qui la descrizione dell'immagine. Limitare AUTOBOX a un modello di tipo B ha portato AUTOBOX a rilevare un aumento della tendenza al periodo 14:. inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine!inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine

In termini di modelli a confronto: poiché il numero di osservazioni adattate differisce (rispettivamente 26 e 29), non è possibile utilizzare metriche standard (es. R-square, errore standard di sviluppo, AIC ecc.) Per determinare il dominio, sebbene in questo caso il cenno vai su A. I residui di A sono migliori grazie alla struttura AR (2). Le previsioni da B sono un po 'aggressive, mentre il modello delle previsioni A è più intuitivo. Si potrebbero trattenere dire 4 osservazioni e valutare l'accuratezza della previsione per una previsione a 1 periodo da 4 origini distinte (25,26,27 e 28).


2 Stat irlandese puzza per una risposta eccellente. Ho letto alcuni che avremmo combinato altre tendenze stocastiche e deterministiche che è yt = y (t-1) + a + bt = ct? sarebbe utile
previsioni

La forma del modello y (t) = B0 + B1 * t + a (t) [thetha / phi] collassa se phi è detto [1-B] poiché le frazioni di compensazione essenzialmente differenziano la variabile t producendo una costante collisione con B0. In altre parole, la struttura ARIMA unita agli indicatori del tempo può creare scompiglio. Il modello che hai specificato è stimabile ma sicuramente non è un approccio favorito (forse mancanza di endogeneità!). Qualcun altro leggendo questo può commentare potrebbe aiutare su questo. Non è un sottoinsieme corretto di una funzione di trasferimento i.imgur.com/dv4bAts.png
IrishStat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.