Rcode for a test for stationarity
Currently, there exists several good tests for stationarity.
Probably, the first test for stationarity was proposed by
Priestley and Subba Rao (JRSSB, 1969). Since then, several other good
tests have come on the market. Examples, include
the test proposed in
Pararoditis (Bernoulli, 2009),
Dahlhaus (JoE, 2009, Handbook of Statistics, 2012),
Dette, Preuss and Vetter (2011) and
Nason (JRSSB, 2013) . Please note this is not an exhaustive list and
if I have omitted a test send me an email.
Here we describe the test for stationarity proposed in
Dwivedi and Subba Rao
(JTSA, 2011) and for multivariate time series in
Jentsch and Subba Rao (2013). This is the
very basic code for the Gaussian univariate case. Below I briefly
how it works.
These tests are based on the idea that for a second order stationary processes the correlation between
the DFTs is close to zero (this can be understood by considering the Spectral representation of a second order time series,
the DFTs can be treated as an approximation of the orthogonal
increment process). Whereas for nonstationary time series there does exist correlation
between the DFTs (if one could construct a spectral representation of a nonstationary time series, the increment process
would not be orthogonal).
Both the test statistic proposed in Dwivedi and
Subba Rao (2011) and Jentsch and Subba Rao are based on looking for correlations in DFTs. The test statistic proposed in
Dwivedi and Subba Rao test is for univariate time series and is really designed for Gaussian time series.
In the case of non-Gaussianity the test statistic contains an (fourth order cumulant) additional term, that needs to be estimated
to ensure that the test does not lead to too many false positives. This issue is addressed in the Jentsch and Subba Rao (2013),
where a bootstrap procedure is proposed to estimate this variance
(this means the test can be applied to nonlinear time series).
In addition, in
Jentsch and Subba Rao (2013) we show that the correlations in the DFTs characterise the nonstationarity, therefore we
propose a test statistic that can capture a wider class of alternatives (by inclusion of a lag parameter l).
is the basic code (assuming Gaussianity, but allowing for the lag parameter l) can be found at (it include both the
DFT covariance, the test, though this can be modified and some basic options for plotting).
Personally, rather than just doing a test I like to `see' the covariances. Therefore,
I would recommend plotting the DFT covariance for different l (see
Jentsch and Subba Rao (2013) for the precise definition)
over r (it's a bit like an ACF plot). Several large spikes (over the 1.96 lines) suggest nonstationarity in the time series.
As a rule of thumb, if the time series is locally stationary the DFT covariance should decrease with the lag r.
On the other hand, if the time series is periodically stationary one should see large spikes at evenly spaced
distances. The number of spikes over the length of the time series correspond to the number of periods in the
periodically stationary time series (in other words it it was periodically correlated with period 2, you should see two spikes
between one and T). To understand how correlations in the DFT are related to periodically stationary processes one should look
at the literature on harmonizable time series Goodman (1965) is a good reference.
Please note, that the above is really designed for Gaussian time series. In addition, a very
crude estimator of the spectral density is used (rectangle kernel based on an average of 13 frequencies).
For the general case, you should contact my collaborator,
Carsten Jentsch, for the code.