Is there a way to specify minimum or maximum possible values in a forecast done with ETS/ARIMA models?
Such as when forecasting a trend in % that can only go between 0% and 100%.
I am using R package forecast
(and function forecast
).
If your time series y
has a natural bound [a, b]
, you should take a "logit-alike" transform first:
f <- function (x, a, b) log((x - a) / (b - x))
yy <- f(y, a, b)
Then the resulting yy
is unbounded on (-Inf, Inf)
, suitable for Gaussian error assumption. Use yy
for time series modelling, and take back-transform later on the prediction / forecast:
finv <- function (x, a, b) (b * exp(x) + a) / (exp(x) + 1)
y <- finv(yy, a, b)
Note, the above transform f
(hence finv
) is monotone, so if the 95%-confidence interval for yy
is [l, u]
, the corresponding confidence interval for y
is [finv(l), finv(u)]
.
If your y
is only bounded on one side, consider "log-alike" transform.
- bounded on
[a, Inf)
, consideryy <- log(y - a)
; - bounded on
(-Inf, a]
, consideryy <- log(a - y)
.
Wow, I didn't know Rob Hyndman has a blog. Thanks to @ulfelder for providing it. I added it here to make my answer more solid: Forecasting within limits.
This one is more specific, which I have not covered. What to do when data need a log transform but it can take 0 somewhere. I would just add a small tolerance, say yy <- log(y + 1e-7)
to proceed.
来源:https://stackoverflow.com/questions/40302029/how-to-specify-minimum-or-maximum-possible-values-in-a-forecast