If an ARMA process (or just a AR(p) process) has real unit roots (i.e. 1 or -1), then differencing it repeatedly will make the differenced process weakly stationary.

An ARMA process (or just a AR(p) process) may have complex unit roots. If that happens, can repeatedly differencing make the differenced process weakly stationary?


1 Answer 1


Yes, it is possible to render the process stationary regardless of whether the non-stationary cycles are related to real or complex roots.

For example, the following seasonal random walk:

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

contains four unit roots: $\pm 1, \pm i$ (i.e., 2 real and 2 complex roots). Applying the filter $(1 - L^4)$ (where $L$ is the lag operator such that $L^i y_t = y_{t-i}$) the non-stationary cycles are removed from the series $y_t$, which is not surprising since all we did is moving $y_{t-4}$ to the left-hand-side of the equation so that we get that the filtered series is $y_t - y_{t-4} = \epsilon_t$.

The seasonal differencing filter is commonly used when working with ARIMA models. It is illuminating to write the seasonal differencing filter factorized as follows (for a quarterly series in this example):

$$ (1 - L^4)y_t = (1-L)(1+L)(1+L^2)y_t = \epsilon_t \,. $$

The factor $(1-L)$ contains the root $1$, $(1+L)$ the root $-1$ and $(1+L^2)$ the complex roots $\pm i$. Thus, applying the filter $(1+L^2)$ we
remove only those cycles related to the complex roots.

The first graphic in the plot below shows the sample spectrum of a simulated random walk. It contains a spike at cycles of frequencies $0$ (related to the root $1$), $\pi/2$ and $3\pi/2$ (related to roots $\pm i$) and $\pi$ (related to the root $-1$). In the second graphic, the cycles related to the complex roots have been removed by the filter $(1+L^2)$; the spike at the middle of the periodogram is not present, confirming that the contribution of those cycles to the whole series is negligible.

The plot can be reproduced with the following R code:

x <- diffinv(rnorm(100), 4)[-seq(4)]
par(mfrow = c(2,1))
spectrum(x, span = c(3,3), main = paste("Periodogram of a seasonal random walk", dQuote("x")))
spectrum(na.omit(filter(x, filter = c(1,0,1), method = "conv", sides = 1)), 
  span = c(3,3), main = expression(paste("Periodogram of ", (1+L^2), "x")))



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.