0
$\begingroup$

I'm forecasting 12 periods h=12 using an ETS() model on a time series that I integrated using a first difference diff() (because the time series are non-stationary). Once I get my forecast, I revert back to the "undifferenced" form by doing the following:

y <- x$"Point Forecast"
h0 <- as.numeric(329.50)
z <- h0 + cumsum(y)
x$"Point Forecast" <- z

y <- x$"Lo 80"
h0 <- as.numeric(329.50)
z <- h0 + cumsum(y)
x$"Lo 80" <- z

y <- x$"Hi 80"
h0 <- as.numeric(329.50)
z <- h0 + cumsum(y)
x$"Hi 80" <- z

y <- x$"Lo 95"
h0 <- as.numeric(329.50)
z <- h0 + cumsum(y)
x$"Lo 95" <- z

y <- x$"Hi 95"
h0 <- as.numeric(329.50)
z <- h0 + cumsum(y)
x$"Hi 95" <- z

where I know that h0 is my last observed value before the forecast, of 329.50.

The data frame x of the original integrated forecasts obtained by ETS() that I am using is the following:

x <- structure(list(`Point Forecast` = c(2.73396083817015, 2.73396083817015, 
2.73396083817015, 2.73396083817015, 2.73396083817015, 2.73396083817015, 
2.73396083817015, 2.73396083817015, 2.73396083817015, 2.73396083817015, 
2.73396083817015, 2.73396083817015), `Lo 80` = c(-33.1647601039751, 
-33.164760283557, -33.1647604631388, -33.1647606427207, -33.1647608223026, 
-33.1647610018844, -33.1647611814663, -33.1647613610481, -33.16476154063, 
-33.1647617202119, -33.1647618997937, -33.1647620793756), `Hi 80` = c(38.6326817803154, 
38.6326819598973, 38.6326821394791, 38.632682319061, 38.6326824986429, 
38.6326826782247, 38.6326828578066, 38.6326830373884, 38.6326832169703, 
38.6326833965522, 38.632683576134, 38.6326837557159), `Lo 95` = c(-52.1683950477271, 
-52.1683953223739, -52.1683955970206, -52.1683958716674, -52.1683961463142, 
-52.1683964209609, -52.1683966956077, -52.1683969702544, -52.1683972449012, 
-52.168397519548, -52.1683977941947, -52.1683980688415), `Hi 95` = c(57.6363167240674, 
57.6363169987142, 57.6363172733609, 57.6363175480077, 57.6363178226545, 
57.6363180973012, 57.636318371948, 57.6363186465947, 57.6363189212415, 
57.6363191958883, 57.636319470535, 57.6363197451818)), .Names = c("Point Forecast", 
"Lo 80", "Hi 80", "Lo 95", "Hi 95"), row.names = c("Nov 2016", 
"Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017", "Apr 2017", "May 2017", 
"Jun 2017", "Jul 2017", "Aug 2017", "Sep 2017", "Oct 2017"), class = "data.frame")

However, once I get the "undifferenced" values, the forecast interval values are ridiculous, it cannot be normal (see the plot below)? Some values are even negative, which does not make sense as I am forecasting a stock's closing price. Am I missing something?

Thank you.

enter image description here

$\endgroup$
  • $\begingroup$ 80% or 95% prediction intervals this wide are certainly not a priori ridiculous, especially for non-stationary data. (Incidentally, ETS does not assume stationarity. No need to difference by hand. Then again, ETS is probably not very useful for stock prices.) ETS assumes normally distributed innovations, so its predictions (and PIs) can certainly go negative. You may want to rethink your ETS assumption, possibly go with a random walk forecast and (G)ARCH for volatility. $\endgroup$ – Stephan Kolassa Nov 23 '17 at 15:34
  • $\begingroup$ Well, no, it's not ridiculous that the intervals are wide or that they are negative given your model and your data, but they are computed incorrectly: you can't just add up the bounds over time like you did for the point forecasts. $\endgroup$ – Chris Haug Nov 23 '17 at 17:01
  • $\begingroup$ @ChrisHaug how would you recommend doing it? What is the right way? $\endgroup$ – Notna Nov 23 '17 at 17:15
  • $\begingroup$ The prediction intervals are computed from the predictive density of the model (although in the time series context, typically this is conditional on the parameter estimates because it's more tractable). In some cases you can derive an exact expression, in others you might have to simulate from this density and compute empirical quantiles. In this specific case, I don't see any reason to difference first because as @StephanKolassa said, ETS can handle it and will give you the correct intervals. $\endgroup$ – Chris Haug Nov 23 '17 at 18:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.