2016-10-28 1 views
2

Gibt es eine Möglichkeit, in einer mit ETS/ARIMA-Modellen durchgeführten Prognose minimale oder maximal mögliche Werte anzugeben?Wie kann man Minimum oder Maximum in einer Prognose angeben?

Wie bei der Vorhersage eines Trends in%, der nur zwischen 0% und 100% liegen kann.

Ich verwende R-Paket forecast (und Funktion forecast).

+0

@ZheyuanLi wird nicht Ihre Fehlerschätzungen dann falsch sein? Das klingt eher nach einer statistischen Frage – shadowtalker

+0

@ssdecontrol vielleicht könnten die Fehlerschätzungen durch eine Decke/Boden begrenzt werden? – Mihael

+0

Nicht wirklich ein StackOverflow Q, aber: Eine Option wäre, Ihre 0-1-Daten in Log-Odds umzuwandeln, ETS/ARIMA für diese Zeitreihe auszuführen und dann nach Modellierung und Prognose wieder in 0-1 zu transformieren. – ulfelder

Antwort

3

Wenn Ihre Zeitreihe y eine natürliche Grenze [a, b] hat, sollten Sie nehmen eine „Logit-alike“ verwandeln zuerst:

f <- function (x, a, b) log((x - a)/(b - x)) 
yy <- f(y, a, b) 

Dann wird die resultierende yy auf (-Inf, Inf), geeignet für die Gaußsche Fehler Annahme unbeschränkt ist. Verwenden Sie yy für Zeitreihenmodellierung, und nehmen Sie Rücktransformation später auf der Vorhersage/Prognose:

finv <- function (x, a, b) (b * exp(x) + a)/(exp(x) + 1) 
y <- finv(yy, a, b) 

Hinweis, die oben f Transformations (daher finv) ist monoton, so dass, wenn das 95% -Konfidenzintervall für yy ist [l, u] ist das entsprechende Konfidenzintervall für y[finv(l), finv(u)].


Wenn Ihr y nur auf einer Seite begrenzt ist, sollten Sie "log-alike" verwandeln.

  • gebunden an [a, Inf), betrachten yy <- log(y - a);
  • begrenzt auf (-Inf, a], betrachten yy <- log(a - y). Wow

, ich wusste nicht, Rob Hyndman hat einen Blog. Danke an @ulfelder für die Bereitstellung. Ich habe es hier hinzugefügt, um meine Antwort solider zu machen: Forecasting within limits.

Dieser ist spezifischer, den ich nicht behandelt habe. What to do when data need a log transform but it can take 0 somewhere. Ich würde nur eine kleine Toleranz hinzufügen, sagen wir yy <- log(y + 1e-7), um fortzufahren.

Verwandte Themen