Time series data, particularly in economics, may and does often contain seasonality and trend components. Data analysis and forecasts can be significantly improved if these components are taken into account. It is one of the reasons why many economic data you are presented with is most likely seasonally adjusted. For example, fresh food prices are a neat example of data subject to important seasonal patterns.
A few methods emerged over time to help statisticians adjust time series for seasonality, of which
X11 became the dominant one, notably due to its relative simplicity.
Here is a small dictionary:
X11: in short, seasonal adjustment is achieved through linear
ARMA-like filtering and outlier detection
TRAMO: time series regression with ARIMA noise, missing observations and outliers
SEATS: signal extraction in ARIMA time series
Currently, there are two main software packages implementing above described methods. Others also exist but are likely to be not free. X-13ARIMA-SEATS maintained by U.S. Census Bureau is based on
X11 method and its improvements but also implements
JDemetra+ maintained by National Bank of Belgium and Eurostat provides a
Java-based implementation for all the above methods.
JDemetra+ is well done, cross-platform and provides plenty of point and click options to work with your time series, although documentation is quite seriously lacking. On the other hand,
X-13ARIMA-SEATS does not come with a
GUI unless you are on
Windows but has an excellent reference manual. An advantage for the latter is also the possibility to remain within the
So just to reiterate and eliminate all confusion:
X11 is a seasonal adjustment method, its major implementation is found in the software called
x12 package for
R provides only an interface to this software.
X-13ARIMA-SEATS superseded its previous version known as
X-12-ARIMA (also supported by
x12 package), hence the variation in numbering.
R packages can be found to be useful in general.
SEATS method as default, while
x12 supports only
X11 method. Both packages also have the same workflow: first, rewrite the user-defined model in a
.spc file understood by
X13-ARIMA-SEATS binary, run the binary, read the
.out file and parse it back into
R. Both also aim to implement all or most of the options available in the true
For an occasional use,
seasonal is probably preferable as its more intuitive and will probably easier to use. In both cases,
X-13ARIMA-SEATS binary has to be downloaded manually and its path set up as explained in documentation of each of the packages.
Here is a small example of a basic modelling option with dummy variables for each month, i.e. fixed seasonal effects.
Note that the two snippets above will give different outputs due to differences in default settings. For identical results, add
regression.aictest=NULL, x11='' options within
Some advantages of
x12does not support
- Although it is a question of taste,
seasonalis probably better polished visually, e.g. graphical outlier selection is very neat and so is interactive
shiny-based model discovery.
- In case of external regressors,
seasonaldoes not require writing those to a file as
x12does. It’s a minor inconvenience though.
seasonalhas a function
genholfor easier generation of holiday-related seasonal effects. This simple function is really great if you need to use it.
x12only provides coefficient estimate table for external regressors, not
MAcoefficients contrary to
seasonal. Unless I am missing something,
ARMAcoefficients aren’t part of the final
x12estimated fit object.
Some advantages of
M-quality statistics for the model which is a nice guidance during modelling procedure. These statistics are however only available for
X11method. If you estimate an
seasonal, those statistics can only for now be read in the output file. It’s also quite nice that
x12provides a possibility for an extended summary output with
- plotting capabilities are quite similar, though
x12provides a nice plot with original series combined with forecasts and their confidence band.
OOPapproach to model estimation. While it’s not as intuitive as
seasonal, it gets quite useful if you have to deal with many series sharing similar parametrization.
x12would also allow easier parallelization via
x12Batchclass. It’s more a difference in approach rather than a (dis)advantage.
Feel free to test everything I have discussed to find what suits your workflow best.