Simulieren Sie prognostizierte Beispielpfade aus dem tbats-Modell

8

Unter Verwendung des hervorragenden Prognosepakets von Rob Hyndman stieß ich auf die Notwendigkeit, nicht nur Vorhersageintervalle zu haben, sondern auch eine Reihe zukünftiger Pfade zu simulieren, wenn man frühere Beobachtungen einer Zeitreihe mit komplexen Saisonalitäten berücksichtigt. Es gibt etwas für weniger komplexe Zeitreihen mit nur einer oder zwei Saisonalitäten (simulate.ets () im Prognosepaket), aber in meinem Fall würde ich für das komplexere tbats-Modell das Äquivalent von simulate.ets () benötigen.

Ich gehe davon aus, dass die zum Erstellen solcher Pfade erforderlichen Daten bereits im Anpassungsobjekt vorhanden sind, die Möglichkeit zum Erstellen von Beispielpfaden jedoch nicht direkt zugänglich zu sein scheint. Daher habe ich eine naive Lösung gefunden und möchte wissen, ob dieser Ansatz richtig ist.

require(forecast)
fit = bats(test,use.parallel=T,use.damped.trend=F,use.trend=T,seasonal.periods=seasonal.periods)

Naiv stelle ich mir vor, dass Beispielpfade mithilfe der Punktprognose von erstellt werden können

fit 

> forecast(fit)
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
1960.016       24.48576 23.82518 25.14633 23.47550 25.49602
1960.032       24.79870 23.88004 25.71735 23.39374 26.20366
1960.048       25.31743 24.39878 26.23608 23.91247 26.72239
1960.065       25.69254 24.77389 26.61120 24.28759 27.09750 
1960.081       26.06863 25.14998 26.98729 24.66367 27.47359
1960.097       26.43215 25.51350 27.35080 25.02719 27.83711
1960.113       26.77674 25.85809 27.69540 25.37179 28.18170

und einfaches Hinzufügen zufällig gezeichneter Werte aus dem Modellanpassungsverfahren.

> fit$errors
Time Series:
Start = c(1959, 2) 
End = c(1960, 1) 
Frequency = 365 
  [1]  0.140656913 -0.455335141 -0.558989185  1.697532911 -0.114406022  0.366182718 -0.377056927  0.396144296

Deshalb mit

prediction = forecast(fit)
errors = fit$errors

path = prediction$mean + sample(errors, size = length(prediction$mean))
plot(ts(path))

Es kann ein Abtastpfad erstellt werden.

Geben Sie hier die Bildbeschreibung ein

Ist dies eine gültige Methode zum Erstellen von Beispielpfaden? Wenn nicht, was wäre ein richtiger Weg?

Vielen Dank für jede Hilfe!

Peter Lustig
quelle

Antworten:

2

Nein, diese Methode ist im Allgemeinen nicht gültig.

Hier ist ein einfaches, anschauliches Gegenbeispiel. Angenommen, Sie haben einen zufälligen Spaziergang ohne Drift:

Yt=Yt1+εt
εtN(0,1)

Dieser Prozess fällt in die TBATS-Klasse (es handelt sich lediglich um ein ETS-Modell vom Typ "ANN" mit ohne komplexe Saisonalität, Box-Cox-Transformation oder ARMA-Fehler).α=1

So sieht es aus, wenn Sie Ihre Methode für simulierte Daten verwenden:

Geben Sie hier die Bildbeschreibung ein

Der "simulierte Pfad" ist flach und weist eine geringe Varianz auf, während die Originaldaten ziemlich stark von seinem mittleren Wert abweichen. Es "sieht" überhaupt nicht wie die Originaldaten aus.

Wenn wir den Vorgang viele Male wiederholen und die empirischen Quantile für die mittleren 95% der Verteilung an jedem Horizont berechnen, werden Sie feststellen, dass sie im Vergleich zu den von angegebenen Intervallen falsch sind forecast.tbats(wenn die Methode funktioniert hat, sollten sie mit den äußeren übereinstimmen). graue Intervalle):

Geben Sie hier die Bildbeschreibung ein

Viele Zeitreihenmodelle können als Transformation einer Folge unkorrelierter Zufallsvariablen angesehen werden. Die genaue Transformation hängt vom Modell ab. Bei einer bestimmten Transformation können Sie im Allgemeinen die Residuen nehmen (nennen Sie sie ), sie erneut abtasten und diese Transformation dann anwenden, um sie aus demselben Prozess zu simulieren.εt^

Zum Beispiel transformiert der Random Walk eine Folge von nicht korrelierten Variablen durch die oben angegebene Rekursion (die kumulative Summe). Wenn Ihre ursprüngliche Serie bei endet , können Sie aus und dieselbe Rekursion auf anwenden Erhalten Sie einen simulierten Wert für wie folgt:εtTεT+1{ε1^,,εT^}YT+1

YT+1=YT+εT+1

Wenn Sie die Quantile wie zuvor berechnen, sollten Sie sich der Grauzone nähern.

Im Allgemeinen erfordert diese Art von modellbasiertem Bootstrap daher geringfügig unterschiedlichen Code für unterschiedliche Modelle, um unterschiedliche Transformationen für das neu abgetastete durchzuführen . Die Funktion übernimmt dies für Sie für die ETS-Klasse, aber es scheint immer noch kein Äquivalent für TBATS im Paket zu geben, soweit ich das beurteilen kann.εtsimulate.ets

Chris Haug
quelle
Gibt es eine Empfehlung, wie Sie dies für TBATS tun können, ohne eine simulate.tbatsMethode erstellen zu müssen ?
Bryan Shalloway
1
Ich persönlich hatte kein Bedürfnis danach und kenne keine vorhandene Implementierung, aber die Implementierung sollte relativ einfach sein. Sie können entweder das aus zeichnen oder das wie oben beschrieben neu abtasten. Führen Sie diese dann einfach durch die Modellrekursionen. Beachten Sie, dass Sie dadurch nur eine Stichprobe von , die jedoch nicht enthalten ist Parameterunsicherheit, aber zitierte Vorhersageintervalle selten. εTN(0,σ^2)ε^ip(YT+1,...,YT+h|Y1,...,YT,θ^)
Chris Haug
-2

Dies ist wahrscheinlich eine sehr späte Antwort, aber ich verstehe nicht, warum nicht.

Ihr Ansatz scheint richtig zu sein. Es gibt jedoch einen einfacheren Weg, dies zu tun.

Sie haben Ihrer Prognose bereits einen Variablennamen zugewiesen. Sie müssen einfach plot(prediction). Durch Hinzufügen der Variablen, hdie die Anzahl der Perioden für die Prognose darstellt, predictionkönnen Sie die Prognoselänge steuern. Zum Beispiel könnte man sagen prediction <- forecast(fit, h = 48). Beachten Sie, dass der Wert von hdavon abhängt, wie weit Sie in die Zukunft sehen möchten.

Mustafa Hasanbulli
quelle
1
Ich interessiere mich nicht für die Handlung selbst, sondern für den Zugang zu einer Reihe von Prognosen.
Peter Lustig