# Assess Stationarity of a Time Series

This example shows how to check whether a linear time series is a unit root process in several ways. You can assess unit root nonstationarity statistically, visually, and algebraically.

### Simulate Data

Suppose that the true model for a linear time series is

where the innovation series is iid with mean 0 and variance 1.5. Simulate data from this model. This model is a unit root process because the lag polynomial of the right side has characteristic root 1.

Mdl = arima('AR',0.2,'MA',-0.5,'D',1,'Constant',0,... 'Variance',1.5); T = 30; rng(5); Y = simulate(Mdl,T);

### Assess Stationarity Statistically

Econometrics Toolbox™ has four formal tests to choose from to check if a time series is nonstationary: `adftest`

, `kpsstest`

, `pptest`

, and `vratiotest`

. Use `adftest`

to perform the Dickey-Fuller test on the data that you simulated in the previous steps.

adftest(Y)

ans = logical 0

The test result indicates that you should not reject the null hypothesis that the series is a unit root process.

### Assess Stationarity Visually

Suppose you don't have the time series model, but you have the data. Inspect a plot of the data. Also, inspect the plots of the sample autocorrelation function (ACF) and sample partial autocorrelation function (PACF).

plot(Y); title('Simulated Time Series') xlabel('t') ylabel('Y') subplot(2,1,1) autocorr(Y) subplot(2,1,2) parcorr(Y)

The downward sloping of the plot indicates a unit root process. The lengths of the line segments on the ACF plot gradually decay, and continue this pattern for increasing lags. This behavior indicates a nonstationary series.

### Assess Stationarity Algebraically

Suppose you have the model in standard form:

Write the equation in lag operator notation and solve for to get

Use `LagOp`

to convert the rational polynomial to a polynomial. Also, use `isStable`

to inspect the characteristic roots of the denominator.

num = LagOp([1 -0.5]); denom = LagOp([1 -1.2 0.2]); quot = mrdivide(num,denom); [r1,r2] = isStable(denom)

Warning: Termination window not currently open and coefficients are not below tolerance. r1 = logical 0 r2 = 1.0000 0.2000

This warning indicates that the resulting quotient has a degree larger than 1001, e.g., there might not be a terminating degree. This indicates instability. `r1 = 0`

indicates that the denominator is unstable. `r2`

is a vector of characteristics roots, one of the roots is 1. Therefore, this is a unit root process.

`isStable`

is a *numerical* routine that calculates the characteristic values of a polynomial. If you use `quot`

as an argument to `isStable`

, then the output might indicate that the polynomial is stable (i.e., all characteristic values are slightly less than 1). You might need to adjust the tolerance options of `isStable`

to get more accurate results.