how to identify whether seasonality is additive or multiplicative in a time series? Using Plots or any statistical tests?


2 Answers 2


A possible approach is to follow the same ideas used to choose the parameter of the Box-Cox transformation. If a Box-Cox parameter, $\lambda$, equal to 1 is chosen by the method, an additive relationship between the trend and the seasonal component. The function BoxCox.lambda in the R package forecast implements a couple of methods to choose this parameter.

Graphically, you can display a range-mean plot. To do so, you split the data in subsets of $n$ consecutive observations and compute the range and the mean in each subset. Then the range of each subsample is plot against the means. The size of each subsample, $n$, can be, for example, the periodicity of the data or the the square root of the total number of observations. If the range increases as the mean increases, then a multiplicative relationship is suggested by this plot; if the trend and seasonal are added additively, then the points in the range-mean plot will be located along a horizontal line. I think Guerrero's method in the function BoxCox.lambda is built upon this idea. At the bottom of this post I give you an example in R.

You can also compare an additive and multiplicative model fitted to the data by means of the AIC or BIC criteria. Typically, this will mean fitting a model for the original data and for the logarithms of the data. In general, you should choose the model with the minimum value of the criteria. If you follow this option, remember adjusting the value of the likelihood for the so-called Jacobian term (otherwise the AIC from both models are not comparable since they are fitted to different data). For more details see my comment in this post.

Range-mean plot for the AirPassengers data. A fitted linear trend is added in order to assess the significance of the relationship between both measures. In this case, a positive relationship between both measures suggests a multiplicative relationship between the trend and the seasonal components.

x <- AirPassengers
lx <- split(x, gl(length(x)/12, 12))
m <- unlist(lapply(lx, mean))
r <- unlist(lapply(lx, function(x) diff(range(x))))
plot(m, r, xlab = "mean", ylab = "range")
abline(lm(r ~ m))

range-mean plot

  • $\begingroup$ Thanks for your reply. I've used the range-mean plot for the co2 data. The plot shows a positive relationship between range and mean. The slope of the linear regression model is significantly different from zero with a p-value lower than 0.001. Based on these results I'd conclude that the times series follows a multiplicative model. But seasonality is without doubt additive for the co2 data. Am I missing something? $\endgroup$
    – John M
    Oct 16, 2018 at 17:45
  • $\begingroup$ Without seeing the data I don't know. There may be some outlier, leverage effect,... having an effect on the significance of the trend. You may try different values of $n$ when obtaining the plot and compare. $\endgroup$
    – javlacalle
    Oct 16, 2018 at 20:42
  • $\begingroup$ Thanks for your reply. I've used the times series about the co2 concentration at Mauna Loa (stat.ethz.ch/R-manual/R-devel/library/datasets/html/co2.html). You can import the dataset in R just by typing its name as you did with the AirPassegengers data. There are neither outliers nor leverage effects. $\endgroup$
    – John M
    Oct 17, 2018 at 10:02

Usually it is easy to differentiate between additive and multiplicative seasonality by using the plots. A time series with multiplicative seasonality will generate a plot with increasing amplitude.

The following link will provide a few extra details.


In my opinion, it is better to transform the data (e.g. Box-Cox transformation). This way you do not have to worry about multiplicative seasonality and fitting can be performed using an additive model.

  • $\begingroup$ The link goes to a Chinese website $\endgroup$
    – John M
    Oct 18, 2018 at 17:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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