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.
@ZheyuanLi wird nicht Ihre Fehlerschätzungen dann falsch sein? Das klingt eher nach einer statistischen Frage – shadowtalker
@ssdecontrol vielleicht könnten die Fehlerschätzungen durch eine Decke/Boden begrenzt werden? – Mihael
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