I have a long multi-seasonal time series, and the stl() decomposition got me this:

enter image description here

The remainder is definitely not white noise. Then what should be the next step to decide the model?

Try the model with ARMA error term? but it seems that the stl() decomposition of the remainder term still get non-WN remainder, which confused me.

remainder  <- demand.stl$time.series[,3]
  • $\begingroup$ Did you do an STL decomposition on the remainder that you obtained from STL decomposition? That should be avoided. The first decomposition separated the seasonal, trend and remainder components. You need not look for seasonality or trend in the remainder component by running STL on it. You could try modelling the remainder as an ARMA process, though. $\endgroup$ Jul 16, 2016 at 12:27
  • $\begingroup$ @RichardHardy Thanks. I was thinking about model the remainder with ARMA. Since the time series can be decomposed as Y=S+T+R, if Y is remainder here, do I need to make sure the remainder of the remainder is WN? $\endgroup$
    – Jeannie
    Jul 16, 2016 at 12:59
  • $\begingroup$ Seasonal decomposition didn't work. Too much noise in it. $\endgroup$
    – Aksakal
    Jul 16, 2016 at 15:48

1 Answer 1


You have a rather glaring Christmas effect. I'd recommend either running a regression with ARIMA errors or, if your are serious enough, regressing the Christmas effect out and running tbats() on the residuals. Then look again at the residuals.

If the residuals still exhibit similar structure as above, you may want to consider GARCH models to model the conditional heteroskedasticity. However, it seems to me like modeling the Christmas effect might already take care of a lot of the heteroskedasticity.

  • $\begingroup$ Thanks. Would you mind explaining more about how you tell the Christmas effect from the above decomposition plot and what do you mean by regressing it out? Add dummy variable? My aim is actually to forecast the whole series (use tbats() maybe), but I was thinking about do I need to make sure the remainder is WN before fitting the mode. If the remainder performs like other series, can I forecast the remainder separately, and simply add the trend and seasonal on. $\endgroup$
    – Jeannie
    Jul 16, 2016 at 13:15
  • $\begingroup$ There is a high probability that your residuals will have/exhibit seasonal structure as you are using an assumed model than a "crafted model" based upon the statistical fingerprint from your data. If the residuals don't exhibit "seasonality" this will be probably due to the masking effect ("Alice in Wonderland") caused by anomalies/level shifts/multiple trends/changing error variance/changing parameters that you have assumed away. Note that these features (untreated) increase the error variance thus providing an unwarranted downwards bias to tests of model augmentation. $\endgroup$
    – IrishStat
    Jul 16, 2016 at 13:56
  • $\begingroup$ The Christmas effect is visible in the sharp drop at the end of each year in the seasonal component. You could hope that the seasonality takes care of this effect - after all, it's periodic. However, I wouldn't hope on this for two reasons: (1) The effect is short and sharp - not the kind of thing that the TBATS Fourier terms can easily deal with. (2) If you look closely, you see "holes" near the end of each year in the residual component, so obviously the seasonal part did not remove all the Christmas effect. $\endgroup$ Jul 16, 2016 at 17:01
  • $\begingroup$ As for dealing with it, it would be best to use one or multiple dummy variables. You'd need to look deeper into your data around Christmas to see whether a ramp-up (or -down) makes sense, and of what length. However, tbats() does not take external regressors. So I'd regress your raw data on appropriate Christmas dummies or ramp-ups, then model the residuals from this regression using tbats() or whatever. $\endgroup$ Jul 16, 2016 at 17:03
  • $\begingroup$ @StephanKolassa Thanks a lot. So in this case, the model would be something like using tslm() to model $y= \beta_1 * trend + \beta_2 * season + \beta_3 * dummy +\beta_4 * other covariates + error$, where the error is then modelled using tbats(). I will give it a try. Thanks again. $\endgroup$
    – Jeannie
    Jul 16, 2016 at 18:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.