4
$\begingroup$

I'm completely new to forecasting so please correct me if I'm wrong.

I'm trying to forecast sales data using R. My main concern is that when I decompose the data using stl() from stats package, it shows a seasonal component whereas when I use ets() or auto.arima() commands, they do not take a seasonal component into account. Can anyone please suggest to me where I am going wrong? Which method should I prefer?

I would like to do forecast for Aug15-Dec15.

My data are as follows:

Month      Year Amount
January    2010 7632
February   2010 6686
March      2010 3442
April      2010 4556
May        2010 7796
June       2010 1534
July       2010 1466
August     2010 3535
September  2010 2503
October    2010 7534
November   2010 1197
December   2010 5861
January    2011 8846
February   2011 7219
March      2011 5066
April      2011 13177
May        2011 7833
June       2011 5585
July       2011 6392
August     2011 5787
September  2011 13488
October    2011 9413
November   2011 7610
December   2011 11301
January    2012 14912
February   2012 13578
March      2012 12091
April      2012 14628
May        2012 10703
June       2012 7373
July       2012 13638
August     2012 10794
September  2012 12186
October    2012 8137
November   2012 7874
December   2012 7707
January    2013 11569
February   2013 13446
March      2013 10339
April      2013 19086
May        2013 15201
June       2013 11741
July       2013 19368
August     2013 15755
September  2013 12214
October    2013 13859
November   2013 13096
December   2013 14548
January    2014 16191.1
February   2014 23122.3
March      2014 21421.6
April      2014 20904.5
May        2014 19711.5
June       2014 9481.9
July       2014 18699
August     2014 21271.9
September  2014 19515.5
October    2014 19890.6
November   2014 16789
December   2014 31409.3
January    2015 21917.2
February   2015 24911.4
March      2015 26072.4
April      2015 23919.3
May        2015 26980.8
June       2015 41661.2
July       2015 27065.4
August     2015 
September  2015 
October    2015 
November   2015 
December   2015 

My R code:

x.ts <- structure(c(7632, 6686, 3442, 4556, 7796, 1534, 1466, 3535,
    2503, 7534, 1197, 5861, 8846, 7219, 5066, 13177, 7833, 5585, 6392, 
    5787, 13488, 9413, 7610, 11301, 14912, 13578, 12091, 14628, 10703, 
    7373, 13638, 10794, 12186, 8137, 7874, 7707, 11569, 13446, 10339, 
    19086, 15201, 11741, 19368, 15755, 12214, 13859, 13096, 14548, 
    16191.1, 23122.3, 21421.6, 20904.5, 19711.5, 9481.9, 18699, 21271.9, 
    19515.5, 19890.6, 16789, 31409.3, 21917.2, 24911.4, 26072.4, 
    23919.3, 26980.8, 41661.2, 27065.4, NA, NA, NA, NA, NA),
  .Tsp = c(2010, 2015.91666666667, 12), class = "ts")

fit <- stl(x.ts,na.action = na.omit,s.window = "periodic",robust = T)
plot(fit)
summary(ets(x.ts)) 
fit2 <- auto.arima(x = x.ts, stepwise = F, approximation = F)
summary(fit2)  

EDIT:

ets(x.ts)$aicc
[1] 1404.23  


ETS       AICc     
AAN    1404.26631   
ANN    1404.23046   
MNN    1411.95791   
MAN    1404.40096   
MMN    1400.49486   
$\endgroup$
  • $\begingroup$ Could you please edit your question to give the output of dput(x.ts)? $\endgroup$ – Stephan Kolassa Jun 23 '16 at 12:18
  • $\begingroup$ I'm sorry for improper format of my data...output of x.ts is data I have posted. I'm trying to upload html file with R code and output to rpub but have some issues. $\endgroup$ – Mrugank Jun 23 '16 at 12:22
  • $\begingroup$ No. Please type dput(x.ts) into your R console and copy-paste the exact output into your question. The advantage is that we can then simply copy-paste it and work with the exact same data structure you have. $\endgroup$ – Stephan Kolassa Jun 23 '16 at 12:24
  • $\begingroup$ Sorry for the inconvenience caused. Edited my question $\endgroup$ – Mrugank Jun 23 '16 at 12:26
  • 1
    $\begingroup$ By default, multiplicative trends are excluded, because these will grow very quickly if you forecast out more than a few periods. Use ets(x.ts,allow.multiplicative.trend=TRUE) to enable them at your own risk, and then you will indeed get an ETS(MNN) model. The AICc of an AAN model is unfortunately a tiny little bit larger than of an ANN model (because the improvement in fit does not outweigh the additional degree of freedom), so ets() prefers the ANN over the AAN model. $\endgroup$ – Stephan Kolassa Jun 24 '16 at 12:14
7
$\begingroup$

Let's load your data (this is why dput is useful):

x.ts <- structure(c(7632, 6686, 3442, 4556, 7796, 1534, 1466, 3535,
    2503, 7534, 1197, 5861, 8846, 7219, 5066, 13177, 7833, 5585, 6392, 
    5787, 13488, 9413, 7610, 11301, 14912, 13578, 12091, 14628, 10703, 
    7373, 13638, 10794, 12186, 8137, 7874, 7707, 11569, 13446, 10339, 
    19086, 15201, 11741, 19368, 15755, 12214, 13859, 13096, 14548, 
    16191.1, 23122.3, 21421.6, 20904.5, 19711.5, 9481.9, 18699, 21271.9, 
    19515.5, 19890.6, 16789, 31409.3, 21917.2, 24911.4, 26072.4, 
    23919.3, 26980.8, 41661.2, 27065.4, NA, NA, NA, NA, NA),
  .Tsp = c(2010, 2015.91666666667, 12), class = "ts")

Here is a plot:

plot(x.ts)

time series

Now, a trend is rather obvious in your data. To look for seasonality, a seasonplot is useful:

library(forecast)
seasonplot(x.ts,year.labels=TRUE,col=rainbow(6))

seasonplot

We again see the increasing trend quite nicely. However, there is no obvious seasonality.

And this is why ets() and auto.arima() do not choose seasonal models.

stl() will do a season-trend-level decomposition whether or not seasonality or a trend are present. It does not do statistical tests for these, or compare seasonal vs. non-seasonal models on information criteria or anything like this.

This earlier question and answer may be helpful: Seasonality not taken account of in auto.arima(). In addition, I very much recommend this free online forecasting textbook.

$\endgroup$
  • $\begingroup$ Thank you for your quick response. I have read that book and im trying to implement the same in my data. So I should stick with ARIMA and ets model for my forecast? $\endgroup$ – Mrugank Jun 23 '16 at 12:37
  • $\begingroup$ To be honest, I don't see a reason why either one should be better than the other here. I assume relative quality will mostly be due to chance. Use whatever you prefer. I personally find an ETS model easier to interpret, in particular since auto.arima() chooses an ARIMA(0,1,1) model, and it's hard to come up with a real-life MA process. $\endgroup$ – Stephan Kolassa Jun 23 '16 at 12:45

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.