# Seasonal adjustment for a series that has already been adjusted

A dataset I am working with (from the OECD), for harmonised unemployment seems to be seasonally adjusted:

The unemployment rates shown here are calculated as the number of unemployed persons as a percentage of the labour force (i.e., the unemployed plus those in employment) and are seasonally adjusted.

This is taken from their methodology notes. Yet, while working with it, R (the software that I am using) shows a seasonal component in the decomposition of the series.

Working backwards (with auto.arima) for the series, this is the result I get for the series:

 Series: std
ARIMA(2,1,1)(0,0,2)[12]

Coefficients:
ar1     ar2      ma1     sma1    sma2
0.5194  0.3131  -0.7888  -0.1570  0.0918
s.e.  0.1031  0.0552   0.0957   0.0569  0.0569

sigma^2 estimated as 0.06156:  log likelihood=-8.39
AIC=28.77   AICc=29.04   BIC=51.44

Training set error measures:
ME      RMSE       MAE       MPE     MAPE      MASE
Training set 0.0006069076 0.2477273 0.1866529 -0.210822 5.128619 0.2163681


Whose criterions and error measurements seem to be unequivocally lower than any other model I have come up with without any seasonal component.

R suggests two Seasonal Moving Average components for this series, but I am unsure of the validity of this, given the fact that the series was already adjusted according to the OECD. A minor problem is that the MPE is negative.

I am worried about over estimation of the relevant parameters.

Here is the structure of the data:

 > dput(std)
structure(c(4.5, 4.7, 4.2, 4.4, 3.9, 3.9, 3.7, 3.7, 3.4, 3.6,
3.5, 3.1, 3.5, 3.3, 3.7, 3.7, 3.7, 3.8, 3.6, 3.5, 3.5, 3.3, 3.5,
3.5, 3.4, 3.1, 3, 2.9, 3.1, 2.9, 2.8, 3.1, 2.8, 2.5, 2.7, 2.7,
2.5, 2.5, 2.5, 2.7, 2.8, 3, 3.2, 3.1, 2.4, 3, 2.6, 2.6, 2.7,
2.6, 2.9, 2.6, 2.3, 2.2, 2.4, 3.3, 2.8, 2.9, 2.9, 2.8, 2.8, 3.1,
2.7, 2.7, 2.9, 2.8, 2.8, 2.6, 2.4, 2.6, 3.3, 2.8, 3, 3.5, 3.5,
3, 3.3, 3.2, 3.3, 4, 3.7, 3.4, 3.5, 3.6, 3.7, 3.6, 3.5, 3.6,
3.3, 3.4, 3.5, 3.6, 3.6, 3.9, 4.1, 4, 4.4, 5.1, 5.6, 6.1, 6.5,
6.7, 6.8, 7.6, 6.7, 6.6, 6.4, 6.6, 6.2, 6.1, 5.8, 5.8, 5.4, 5.6,
5.4, 5.3, 5.4, 5, 5.1, 4.4, 4.3, 3.8, 4.1, 4, 4, 3.6, 4, 3.6,
3.4, 3.3, 3.4, 3.1, 3.5, 3.4, 3.3, 3.1, 3.3, 3.3, 3.3, 3.1, 3.2,
3.1, 3, 3.1, 2.6, 3.1, 2.7, 2.8, 2.6, 2.7, 2.3, 2.5, 2.3, 2.4,
2.3, 2.4, 2.3, 2.1, 2.2, 2.8, 2.7, 2.7, 2.5, 2.7, 2.6, 2.5, 2.4,
2.5, 2.5, 3.2, 2.7, 2.7, 2.8, 2.7, 2.8, 2.3, 2.5, 2.9, 3, 3.1,
3.4, 3, 3, 3.1, 3.1, 3, 2.9, 2.8, 2.9, 2.8, 3, 2.7, 2.9, 3, 3.1,
3.1, 3.2, 3.3, 3.6, 3.7, 3.8, 3.8, 4, 3.4, 3.8, 4, 3.9, 4, 3.9,
4, 3.8, 4, 3.8, 3.9, 3.9, 4, 3.9, 3.6, 3.7, 3.8, 3.7, 3.9, 3.7,
3.5, 3.6, 3.4, 3.1, 3.2, 3.3, 3.6, 3.5, 3.4, 3.3, 3.6, 3.6, 3.8,
3.8, 3.7, 3.7, 3.8, 3.7, 3.9, 4.1, 3.7, 3.6, 3.5, 3.6, 3.7, 3.7,
3.8, 3.6, 3.8, 3.8, 3.8, 4, 3.7, 3.6, 3.7, 3.8, 4, 4, 4, 4.6,
4.8, 4.7, 5.2, 5.1, 5.4, 5.7, 5.4, 5.7, 5.9, 6, 5.8, 5.4, 5.3,
5.6, 5.4, 5.2, 5.5, 5.4, 5.2, 5.3, 5.1, 5.3, 5.6, 5.5, 5.5, 5.2,
5.4, 5, 5.2, 5.4, 5.5, 5.3, 5.4, 5.3, 4.9, 5.1, 5, 4.7, 5.3,
5, 4.9, 5, 4.9, 4.7, 5.1, 4.7, 4.9, 5.3, 5, 5.2, 4.9, 4.9, 5.1,
5.1, 5, 4.8, 4.9, 5, 4.9, 4.6, 4.8), .Tsp = c(1987, 2013.91666666667,
12), class = "ts")

• Can you post a link to the data? – Hong Ooi Oct 1 '14 at 23:40
• @HongOoi added the structure of the data – erasmortg Oct 2 '14 at 6:03

## 2 Answers

This post raises essentially the same issue.

auto.arima selects a model by comparison of the AIC, AICc or BIC across different tentative models. The model with the minimum value for the selected criterion is chosen. By default, with monthly series auto.arima considers the possibility of seasonal terms in the ARIMA model. In this case, it turns out that the chosen model contains a moving-average (MA) of seasonal order.

The Canova-Hansen (1995) test for the null hypothesis of deterministic seasonality and the Osborn-Chui-Smith-Birchenhall (1988) test for the null that a seasonal unit root exists can be selected in auto.arima (by default the latter is applied). No seasonal seasonal differencing filter is chosen in the model chosen in your example. Thus, basically no major seasonal pattern has been detected.

Now, looking at the output of your fitted model. The moving average of the model that is shown in your output does not contain seasonal cycles.

These are, by definition, the seasonal frequencies in a monthly series:

round(Arg(c(0.5*(sqrt(3) + 1i), 0.5*(sqrt(3) - 1i),
0.5*(1 + sqrt(3)*1i), 0.5*(1 - sqrt(3)*1i), 1i, -1i,
-0.5*(1 + sqrt(1i)*1i), -0.5*(1 - sqrt(1i)*1i),
-0.5*(sqrt(3) + 1i), -0.5*(sqrt(3) - 1i), -1)), 6)
# [1]  0.523599 -0.523599  1.047198 -1.047198  1.570796 -1.570796 -1.963495
# [8]  2.748894 -2.617994  2.617994  3.141593


And these are the frequencies of the cycles that are generated by the moving average of the chosen model:

require("polynom")
pma <- polynomial(c(1,-0.7888)) * polynomial(c(1,rep(0,11),-0.157,rep(0,11), 0.0918))
round(Arg(polyroot(pma)), 6)
#  [1]  0.938138  2.508934 -2.203455 -0.414539  1.156257  2.727054 -1.985335
#  [8]  0.109060  1.461737 -2.508934 -1.461737  0.414539  1.679856 -2.727054
# [15] -1.156257  0.632659  1.985335 -3.032533 -0.938138 -0.109060  2.203455
# [22] -1.679856 -0.632659  0.000000  3.032533


The are two cycles of frequencies close to those of the seasonal cycles but we can say that the moving average of the selected model does not generate cycles at the seasonal frequencies. This is in agreement with the fact that the data were previously seasonally adjusted.

Interestingly, if we omitted the second seasonal moving average (which is not significant) then we would end up with a model that contains seasonal cycles (frequencies 1.047198 and 3.141593):

pma2 <- polynomial(c(1,-0.7888)) * polynomial(c(1,rep(0,11),-0.157))
round(Arg(polyroot(pma2)), 6)
# [1]  1.047198  2.617994 -2.094395 -0.523599  1.570796  3.141593 -1.570796
# [8]  0.000000  2.094395 -2.617994 -1.047198  0.523599  0.000000


This explains the role of the second MA parameter. It is not explicitly intentional that the searching procedure adds this parameter in order to get a model without seasonal cycles, but it is nice to see how the rule of minimum AIC (or AICc, BIC) yields a model that agrees with the somewhat more elaborated reasoning that we made knowing the nature of the data.

When working with seasonally adjusted data it is judicious to do some general checks (e.g. look at the autocorrelation or the periodogram) to confirm the lack of seasonal cycles, but I would say that you could safely stick to non-seasonal ARIMA models (to do so you can set in the function auto.arima the argument seasonal=FALSE).

• +1 As usual. According to this published article auto.arima uses Canova-Hansen test and describes in detail auto.arima algorithm. – forecaster Oct 2 '14 at 0:17
• Thank you. Regarding the test for seasonal root, is HEGY test better than OCSB test ? The only implementation in R was in uroot package but not available at cran now. Is it applicable here ? – Anusha Oct 2 '14 at 20:38
• Could you please give a little more explanation for calculation of seasonal frequencies in a monthly time series ? Thanks. – Anusha Oct 2 '14 at 20:51
• I don't have experience with the OCSB test so I cannot compare it with the HEGY test. The uroot package is no longer maintained but you can find the sources of old versions on the CRAN Archive here. You can try installing the last version of the package on the current version of R. – javlacalle Oct 2 '14 at 21:11
• It would be better if you asked the calculation of seasonal frequencies in a new post specific for that question. – javlacalle Oct 2 '14 at 21:17

Your model with auto.arima() looks good and it does not contradict in any way the fact that the original data is seasonally adjusted. The sma and the period term [12] means that R knows that this data was seasonally adjusted and auto.arima tries to find the best model which fit the data. If there were no seasonal terms in the model, then we would have a problem. And the sma2 is not significant. :)