I have below 4 years of weekly data which has complex seasonality of varying seasonal length. I have assigned the first 160 data points as training and the rest as test with frequency=52. It seems tbats() ignores the seasonality and comes up with below results while running on train data . why is it ignoring the seasonality? enter image description here

when I fit Arima-Fourier with k=3 Fourier terms (selected based on the lowest AIC), the results would be much better enter image description here

STL() decomposition of seasonality is more supportive of Arima-fourier results enter image description here

DATA: c(2336,186,1563,987,1339,2542,978,1445,367,2836,890,3434,5389,9175,4469,11045,9473,11303,9372,5668,7576,7799,4282,4995,2457,3610,5725,320,3151,6690,7795,4310,3348,5415,5106,3742,4975,5165,2866,3990,2528,3721,1054,4717,4463,903,2035,4387,1751,2682,4889,3355,3796,5223,3129,2038,1760,2591,4372,2692,6354,6836,1983,4285,4446,1507,7089,694,247,10429,6873,16891,11285,10849,6914,7917,7318,6380,7800,6125,4557,5440,4243,11141,6698,3971,852,4485,3803,3896,1717,3062,6556,2301,2859,4140,6359,3069,2268,2612,6708,5308,5233,4578,6644,6310,5211,5058,3466,7697,6223,3952,4531,7809,7999,8066,19295,23812,20138,13374,20584,15934,14939,16724,14652,11569,10164,6911,9714,13141,12362,8075,7275,5622,3817,4933,6743,5437,8102,7927,5466,9497,7343,1762,5626,5508,4230,3316,4528,3215,7884,4577,3256,6681,6499,5016,2601,2384,3404,3640,3834,2922,6199,8887,8062,5899,801,9774,7897,10485,9792,15708,14301,12490,17142,15197,17464,19602,15500,12963,16513,12490,13902,10939,11892,9058,6946,9053,5011,11090,5124,7782,6162,4921,4460,4215,9498,6833,10164,9371,7632,5866,2405,1403,8716,3521,13422,5241,7201)

  1. (T)BATS assumes seasonalities of constant length. If you have seasonality of varying length (often called "cycles" in the forecasting community), (T)BATS is probably not appropriate. Try using dummies of appropriate lengths. Of course, this presupposes that you can already forecast the length of the current (and later) cycles. If you are good at forecasting the lengths of cycles, central banks may be interested in you.

  2. Per the original TBATS publication (see section 3.3), the model is selected based on information criteria. In your particular case, you may simply have too much noise. Or you may have a bug in your code, because if I encode your data as a ts with frequency=52, I indeed get a seasonal forecast out of tbats:


  • 1
    $\begingroup$ Thank you Stephan for your response. Regarding your second point, I was fitting tbats on training set of 160 first data points and I am getting the same results as you on the whole data. I am interested to know where in the tbats code seasonal.periods turns to null, as far as I could follow it is passing 52 through the code. $\endgroup$ – Arsa Nikzad Feb 3 '18 at 3:04

Your Answer

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

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