how to identify whether seasonality is additive or multiplicative in a time series? Using Plots or any statistical tests?
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))
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.