stochastischer vs. deterministischer Trend / Saisonalität in der Zeitreihenvorhersage

16

Ich habe einen moderaten Hintergrund in der Vorhersage von Zeitreihen. Ich habe mehrere Prognosebücher angeschaut und sehe in keinem die folgenden Fragen.

Ich habe zwei Fragen:

  1. Wie würde ich objektiv (über einen statistischen Test) feststellen, ob eine bestimmte Zeitreihe Folgendes aufweist:

    • Stochastische Saisonalität oder deterministische Saisonalität
    • Stochastischer Trend oder deterministischer Trend
  2. Was würde passieren, wenn ich meine Zeitreihen als deterministische Tendenz / Saisonalität modelliere, wenn die Reihe eine eindeutig stochastische Komponente hat?

Jede Hilfe bei der Beantwortung dieser Fragen wäre sehr dankbar.

Beispieldaten für Trend:

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
Prognostiker
quelle
Es gibt 4 mögliche Naturzustände. Es gibt keine analytische Lösung für diese Frage, da der Modellprobenraum relativ unbegrenzt ist. Um diese ärgerliche Frage empirisch zu beantworten, habe ich AUTOBOX autobox.com/cms mitentwickelt . AUTOBOX führt ein Turnier durch, um alle 4 dieser Fälle zu untersuchen und bewertet die Qualität der 4 resultierenden Modelle in Bezug auf Notwendigkeit und Ausreichend. Warum veröffentlichen Sie keine Beispiel-Zeitreihen Ihrer Wahl und ich werde die 4 Ergebnisse veröffentlichen, die zeigen, wie dieses Problem gelöst wurde.
IrishStat

Antworten:

15

1) In Bezug auf Ihre erste Frage wurden einige Teststatistiken entwickelt und in der Literatur diskutiert, um die Null der Stationarität und die Null einer Einheitswurzel zu testen. Einige der vielen Artikel, die zu diesem Thema verfasst wurden, sind die folgenden:

Bezogen auf den Trend:

  • Dickey, D. y. Fuller, W. (1979a), Verteilung der Schätzer für autoregressive Zeitreihen mit einer Einheitswurzel, Journal of the American Statistical Association 74, 427-31.
  • Dickey, D. y. Fuller, W. (1981), Wahrscheinlichkeitsverhältnisstatistik für autoregressive Zeitreihen mit einer Einheitswurzel, Econometrica 49, 1057-1071.
  • Kwiatkowski, D., Phillips, P., Schmidt, P. und Shin, Y. (1992), Testen der Nullhypothese der Stationarität gegen die Alternative einer Einheitswurzel: Wie sicher sind wir uns, dass ökonomische Zeitreihen eine Einheitswurzel haben? , Journal of Econometrics 54, 159 & ndash; 178.
  • Phillips, P. und Perron, P. (1988), Testing for a unit root in time series regression, Biometrika 75, 335-46.
  • Durlauf, S. und Phillips, P. (1988), Trends versus random walkes in time series analysis, Econometrica 56, 1333-54.

Bezogen auf die saisonale Komponente:

  • Hylleberg, S., Engle, R., Granger, C. und Yoo, B. (1990), Seasonal Integration and Cointegration, Journal of Econometrics 44, 215-38.
  • Canova, F. y Hansen, BE (1995), Sind saisonale Muster über die Zeit konstant? ein Test für die saisonale Stabilität, Journal of Business and Economic Statistics 13, 237-252.
  • Franses, P. (1990), Testen auf saisonale Einheitswurzeln in monatlichen Daten, Technical Report 9032, Econometric Institute.
  • Ghysels, E., Lee, H. und Noh, J. (1994), Testen auf Einheitswurzeln in saisonalen Zeitreihen. Einige theoretische Erweiterungen und eine Monte-Carlo-Untersuchung, Journal of Econometrics 62, 415-442.

Das Lehrbuch Banerjee, A., Dolado, J., Galbraith, J. und Hendry, D. (1993), Co-Integration, Fehlerkorrektur und die ökonometrische Analyse instationärer Daten, Advanced Texts in Econometrics. Oxford University Press ist auch eine gute Referenz.

2) Ihr zweites Anliegen ist in der Literatur begründet. Wenn es einen Einheitswurzeltest gibt, folgt die herkömmliche t-Statistik, die Sie für einen linearen Trend anwenden würden, nicht der Standardverteilung. Siehe zum Beispiel Phillips, P. (1987), Zeitreihenregression mit Einheitswurzel, Econometrica 55 (2), 277-301.

Wenn eine Einheitswurzel existiert und ignoriert wird, verringert sich die Wahrscheinlichkeit, dass der Koeffizient eines linearen Trends Null ist, wenn die Null zurückgewiesen wird. Das heißt, wir würden am Ende zu oft einen deterministischen linearen Trend für ein bestimmtes Signifikanzniveau modellieren. Bei Vorhandensein einer Einheitswurzel sollten wir stattdessen die Daten transformieren, indem wir regelmäßig Unterschiede zu den Daten vornehmen.

3) Wenn Sie zur Veranschaulichung R verwenden, können Sie mit Ihren Daten die folgende Analyse durchführen.

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

Zunächst können Sie den Dickey-Fuller-Test für die Null einer Unit-Root anwenden:

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

und der KPSS-Test für die Reverse-Null-Hypothese, Stationarität gegen die Alternative der Stationarität um einen linearen Trend:

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

Ergebnisse: ADF-Test, bei dem 5% Signifikanzniveau wird eine Einheitswurzel nicht verworfen; Beim KPSS-Test wird der Nullpunkt der Stationarität zugunsten eines Modells mit linearem Trend verworfen.

Nebenbei bemerkt: Die Verwendung lshort=FALSEder Null des KPSS-Tests wird bei 5% nicht abgelehnt, wählt jedoch 5 Verzögerungen aus. Eine weitere Untersuchung, die hier nicht gezeigt wird, legt nahe, dass die Auswahl von 1-3 Verzögerungen für die Daten geeignet ist und dazu führt, dass die Nullhypothese verworfen wird.

Grundsätzlich sollten wir uns an dem Test orientieren, für den wir die Nullhypothese ablehnen konnten (und nicht an dem Test, für den wir die Null nicht abgelehnt (akzeptiert) haben). Eine Regression der ursprünglichen Reihe auf einen linearen Trend erweist sich jedoch als nicht zuverlässig. Einerseits ist das R-Quadrat hoch (über 90%), was in der Literatur als Indikator für eine falsche Regression angeführt wird.

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

Andererseits werden die Residuen automatisch korreliert:

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

Darüber hinaus kann die Null einer Einheitswurzel in den Residuen nicht verworfen werden.

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

An dieser Stelle können Sie ein Modell auswählen, das zum Abrufen von Vorhersagen verwendet werden soll. Beispielsweise können Vorhersagen, die auf einem strukturellen Zeitreihenmodell und einem ARIMA-Modell basieren, wie folgt erhalten werden.

# 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

Ein Plot der Vorhersagen:

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)

Trendvorhersagen

Die Prognosen sind in beiden Fällen ähnlich und sehen vernünftig aus. Beachten Sie, dass die Prognosen einem relativ deterministischen Muster folgen, das einem linearen Trend ähnelt, aber wir haben keinen linearen Trend explizit modelliert. Der Grund ist folgender: i) In dem lokalen Trendmodell wird die Varianz der Steigungskomponente als Null geschätzt. Dies verwandelt die Trendkomponente in eine Drift, die den Effekt eines linearen Trends hat. ii) ARIMA (0,1,1), ein Modell mit einer Drift wird in einem Modell für die differenzierte Reihe ausgewählt. Die Auswirkung des konstanten Terms auf eine differenzierte Reihe ist ein linearer Trend. Dies wird in diesem Beitrag besprochen .

Sie können überprüfen, ob bei Auswahl eines lokalen Modells oder eines ARIMA (0,1,0) ohne Drift die Prognosen eine gerade horizontale Linie sind und daher keine Ähnlichkeit mit der beobachteten Dynamik der Daten aufweisen. Nun, dies ist Teil des Puzzles von Unit-Root-Tests und deterministischen Komponenten.

Edit 1 (Prüfung von Residuen): Die Autokorrelation und die partielle ACF lassen keine Struktur in den Residuen erkennen.

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

Wie von IrishStat vorgeschlagen, ist es auch ratsam, nach Ausreißern zu suchen. Mit dem Paket werden zwei additive Ausreißer erkannt 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

Betrachtet man den ACF, so kann man sagen, dass die Residuen bei einem Signifikanzniveau von 5% auch in diesem Modell zufällig sind.

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

Bildbeschreibung hier eingeben

In diesem Fall scheint das Vorhandensein potenzieller Ausreißer die Leistung der Modelle nicht zu verzerren. Dies wird durch den Jarque-Bera-Test für Normalität unterstützt; Die Normalitätsnull in den Residuen aus den Anfangsmodellen ( fit1, fit2) wird bei einem Signifikanzniveau von 5% nicht verworfen.

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

Edit 2 (Plot der Residuen und ihrer Werte) So sehen die Residuen aus:

Residuen

Und dies sind ihre Werte in einem CSV-Format:

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
quelle
1
Haben Sie sich vergewissert, dass die Residuen Ihrer Modelle zufällig sind, dh keine Ausreißer oder ARIMA-Struktur, die erforderlich sind, um die Signifikanz der geschätzten Koeffizienten auf ihre Aussagekraft zu prüfen? Beachten Sie, dass bei Ausreißern in den Residuen der ACF bedeutungslos ist, da die aufgeblähte Fehlervarianz zu einem unterschätzten ACF führt. Können Sie bitte Darstellungen der Fehler bereitstellen, die die Zufälligkeit beweisen / vermuten lassen, da Ihre Schlussfolgerungen über die nicht korrelierten Residuen möglicherweise falsch sind.
IrishStat
Auf jeden Fall erfordert eine vollständige Analyse die Überprüfung der Rückstände. Ich habe meine Antwort darauf beschränkt, um einige Tools zu nennen, die verwendet werden können, um die Tests anzuwenden, nach denen "forecaster" gefragt hat, und deren Verwendung zu veranschaulichen. Ich freue mich, dass Sie sich für weitere Details interessieren, ich habe meine Frage bearbeitet.
Javlacalle
Ich hatte nach einem Zeitdiagramm der Reste gefragt. Können Sie sie bitte bereitstellen und auch die Residuen selbst bereitstellen, damit ich sie mit AUTOBOX verarbeiten kann, um zu bestätigen, dass sie frei von erkennbarer Struktur sind. Der JB-Test wird nicht bevorzugt, wenn Impulse, Pegelverschiebungen, saisonale Impulse und / oder lokale Zeittrends in einem Datensatz getestet werden, obwohl das Vorhandensein solcher Strukturen die Ablehnung der Normalitätsannahme auslösen könnte. Die Idee, dass die Null, wenn sie nicht abgelehnt wird, ein Beweis für ihre Akzeptanz ist, kann gefährlich sein. Bitte sehen Sie unc.edu/~jbhill/tsay.pdf
IrishStat
1
Vielen Dank. Ich reichte die 57 Residuen ein und 5 davon wurden vorläufig als außergewöhnlich markiert. In der Reihenfolge der Wichtigkeit (51,3,27,52 und 48). Ihr Diagramm unterstützt diesen Punkt visuell. Die resultierenden Fehler zeigen keine Verletzung der Zufälligkeit und folglich keine signifikante ACF. Verwenden Sie zum Anpassen der beobachteten Werte zur Anpassung an die Anomalieerkennung Folgendes: + [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 In der Regel betrachten Sie zunächst die Autokorrelationsfunktion der Residuen. Wenn die Autokorrelationen bei großen Aufträgen signifikant und groß sind (dh der ACF fällt nicht exponentiell auf Null ab), können Sie die Residuen einem Einheitswurzeltest unterziehen. Wenn die Analyse der Residuen darauf hindeutet, dass es eine Einheitswurzel gibt, bedeutet dies, dass Sie wahrscheinlich zweimal die ersten Differenzen zu den Originaldaten nehmen sollten (dh die Differenzen in der differenzierten Reihe erneut nehmen).
Javlacalle
4

In Bezug auf Ihre nicht saisonalen Daten ... Trends können zwei Formen haben: y (t) = y (t - 1) + θ0 (A) Stochastischer Trend oder Y (t) = a + bx1 + cx2 (B) Deterministisch Trend usw., wobei x1 = 1,2,3,4 .... t und x2 = 0,0,0,0,0,1,2,3,4, somit gilt ein Trend für Beobachtungen 1 - t und ein zweiter Trend gilt für die Beobachtungen 6 bis t.

Ihre nicht saisonale Serie enthielt 29 Werte. Ich habe AUTOBOX verwendet, eine Software, die ich auf völlig automatische Weise mitentwickelt habe. AUTOBOX ist ein transparentes Verfahren, da es jeden Schritt im Modellierungsprozess detailliert. Ein Diagramm der Serien / angepassten Werte / Vorhersagen wird hier dargestellt Bildbeschreibung hier eingeben. Die Verwendung von AUTOBOX zur Bildung eines Modells vom Typ A führte zu folgenden Ergebnissen Bildbeschreibung hier eingeben. Die Gleichung wird hier noch einmal vorgestellt Bildbeschreibung hier eingeben. Die Statistiken des Modells sind Bildbeschreibung hier eingeben. Eine grafische Darstellung der Residuen ist hier, Bildbeschreibung hier eingebenwährend die Tabelle der prognostizierten Werte hier ist Bildbeschreibung hier eingeben. Die Beschränkung von AUTOBOX auf ein Modell des Typs B führte dazu, dass AUTOBOX im Zeitraum 14: einen erhöhten Trend feststellte. Bildbeschreibung hier eingeben Bildbeschreibung hier eingebenBildbeschreibung hier eingeben!Bildbeschreibung hier eingebenBildbeschreibung hier eingebenBildbeschreibung hier eingeben

In Bezug auf den Modellvergleich: Da sich die Anzahl der angepassten Beobachtungen unterscheidet (26 bzw. 29), ist es nicht möglich, Standardmetriken (dh r-Quadrat, Fehlerstandard dev, AIC usw.) zur Bestimmung der Dominanz zu verwenden, obwohl dies in diesem Fall der Fall wäre gehe zu A. Die Residuen von A sind aufgrund der AR (2) -Struktur besser. Die Vorhersagen von B sind ein bisschen aggressiv, während das Muster der A-Vorhersagen intuitiver ist. Man könnte sagen, 4 Beobachtungen zurückhalten und die Prognosegenauigkeit für eine 1-Perioden-Prognose aus 4 verschiedenen Quellen (25, 26, 27 und 28) bewerten.

IrishStat
quelle
2Irish stat steht für excellect response. Ich habe gelesen, dass wir andere stochastische und deterministische Trends kombinieren würden, die yt = y (t-1) + a + bt = ct sind.
Prognostiker
Die Modellform y (t) = B0 + B1 * t + a (t) [tha / phi] kollabiert, wenn phi [1-B] ist, da das Löschen von Brüchen, die die Variable t wesentlich unterscheiden, eine Konstante ergibt, die mit B0 kollidiert. Mit anderen Worten: Eine mit Zeitindikatoren verbundene ARIMA-Struktur kann Chaos verursachen. Das von Ihnen angegebene Modell ist schätzbar, aber definitiv kein bevorzugter Ansatz (möglicherweise mangelnde Endogenität!). Jemand anders, der diesen Kommentar lesen kann, könnte hier Abhilfe schaffen. Es ist keine richtige Teilmenge einer Übertragungsfunktion. I.imgur.com/dv4bAts.png
IrishStat