# How to interpret TBATS model results and model diagnostics

I have got a half hourly demand data, which is a multi-seasonal time series. I used tbats in forecast package in R, and got results like this:

TBATS(1, {5,4}, 0.838, {<48,6>, <336,6>, <17520,5>})


Does it mean the series is not necessarily to use Box-Cox transformation, and error term is ARMA(5, 4), and 6, 6 and 5 terms are used to explain the seasonality? What does that damped parameter 0.8383 mean, is it also for transformation?

The following is decomposition plot of the model:

I am wondering what do level and slope tell about the model. The 'slope' tells the trend, but what about level? How to get a clearer plot for session 1 and session 2, which are daily and weekly seasonal respectively.

I also what to know how to do model diagnostics for tbats to assess the model, except for RMSE value. The normal way is to check whether the error is white noise, but here the error is supposed to be an ARMA series. I plot 'acf' and 'pacf' of the error, and I don't think it looks like ARMA(5,4). Does it mean my model is not good?

acf(resid(model1),lag.max = 1000)
pacf(resid(model1),lag.max=1000)


The final question, RMSE is calculated by using the fitted value and true value. What if I use predicted value fc1.week$mean and true value to assess the model, is it still called RMSE? Or, there is another name for this? fc1.week <-forecast(model1,h=48*7) fc1.week.demand<-fc1.week$mean


In the help page for ?tbats, we find that:

The fitted model is designated TBATS(omega, p,q, phi, ,...,) where omega is the Box-Cox parameter and phi is the damping parameter; the error is modelled as an ARMA(p,q) process and m1,...,mJ list the seasonal periods used in the model and k1,...,kJ are the corresponding number of Fourier terms used for each seasonality.

So:

• omega = 1, meaning that indeed, there was no Box-Cox transformation.
• phi = 0.838, meaning that the trend will be dampened. (To be honest, I don't know whether $\phi=0$ or $\phi=1$ corresponds to total dampening. Best to play around a little with simulated data.) See the use.damped.trend parameter for tbats().
• You have three different seasonal cycles, one of length 48 = 24*2 (daily), one of length 336 = 7*24*2 (weekly) and one of length 17520 = 365*24*2 (yearly). tbats fits the first one using six Fourier terms, the second again with six, the last with five.

The original TBATS paper by De Livera, Hyndman & Snyder (2011, JASA) is of course useful.

Next:

• The "level" is the local level of the time series.
• The "trend" is the local trend.

These are analogous to the more common season-trend decomposition using lowess (STL). Take a look at the stl() command.

To get a clearer plot for season1 and season2, you can look into the numerical values of the separate components of your TBATS model. Look at str(tbats.components(model1)) and summary(tbats.components(model1)). tbats.components() gives you a multiple time series (mts) object, which is essentially a matrix - one of the columns will give you each seasonal component.

residuals() should work like it works everywhere in R; that is, it should return the final residuals. These should indeed be white noise, because they are the residuals after applying an ARMA(5,4). The peaks in your ACF appear to be regular - it looks like there is some remaining seasonality. Can you deduce their periodicity? (It doesn't really help that the lags are counted in multiples of the longest seasonal cycle.)

Finally, yes, the root mean squared error, which is a common point forecast accuracy measure, has the same acronym out-of sample: RMSE.

• Thanks a lot! Yes, the peak of ACF is regular, one peak in 48 lags. The problem is that I have already included 48 as seasonal in my time series. How do you normally do to fix the seasonal residual? Anything else worth trying? Commented Jul 5, 2016 at 11:55
• Hum. Unfortunately, I don't see a way to force tbats() to include more Fourier terms for specific seasonalities. Sorry... Commented Jul 5, 2016 at 11:57