This plot indicates the autocorrelation for a monthly time series of household gas consumption. This plot clearly shows a seasonality, I was wondering if the repetitive positive and negative autocorrelation also shows a pattern? moreover, what is saying the 6 lags difference between peaks and troughs?

autocorrelation plot

  • 1
    $\begingroup$ I wouldn't try to interpret an ACF without looking at the raw data too, and (more importantly) I've never heard of a time series expert claiming that the ACF tells you everything you need to know. But if you think there is something there beyond seasonality, you need to remove the seasonality before looking at the ACF of what's left. Same applies to trend, a fortiori. $\endgroup$ – Nick Cox Feb 20 '15 at 18:38

The plot that you show seems very close to the typical ACF of the fundamental seasonal cycle in a monthly series. The periodicity of this cycle is annual, it is completed once every year. That could explain the 6-months between a peak and a trough in the ACF and the 12 months for the whole cycle peak-trough-peak. The following model generates such seasonal cycle:

$$ y_t = \sqrt{3} y_{t-1} - y_{t-2} + \epsilon_t \,, \quad \epsilon_t \sim NID(0, \sigma^2) \,. $$

In R, some data from this model can be generated as follows:

n <- 200
eps <- rnorm(n)
x <- rep(0, n)
x[1:2] <- eps[1:2]
for(i in seq.int(3, n))
  x[i] <- sqrt(3) * x[i-1] - x[i-2] - eps[i]
x <- ts(x, frequency = 12)
par(mfrow=c(2,1), mar = c(3,3,2,2))
mtext(side=3, adj=0, text="simulated data", cex = 1.2)
acf(x, lag.max = 36)
mtext(side=3, adj=0, text="ACF of the simulated data", cex = 1.2)

simulated data and ACF

Looking just at the ACF, the presence of an annual cycle seems compelling. However, as @NickCox mentioned, you should look at other plots and sources of information (original data, periodogram, partial autocorrelation,...) in order to choose a model for the data or describe the features of the time series.

There may other relevant cycles in the data. One of your next steps in the analysis could be to check if the filter $1-\sqrt{3}L+L^2$ ($L$ is the lag operator such that $L^iy_t = y_{t-i}$) renders the data white noise or if there is some remaining pattern to be identified:

y <- filter(x, filter = c(1,-sqrt(3),1), sides = 1)
y <- ts(y[-c(1,2)], frequency = 12)
acf(, lag.max = )
pacf(filter(x, filter = c(1,-sqrt(3),1)))

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.