# How to check if a timeseries is stationary?

I'm using KPSS Method to check if the series is stationary, but I would also like to use another test to confirm if the series is stationary or not, what method coudl I use? • did you already do some operations on the time series?
– SRKX
Nov 13, 2011 at 16:45
• @SRKX what operations are you talking to?
– Dail
Nov 14, 2011 at 7:23
• detrending for example.
– SRKX
Nov 14, 2011 at 8:20
• @SRKX why do I have to detrend the series? I think unit root test already do that, no?
– Dail
Nov 14, 2011 at 15:45
• indeed, I was just wondering looking at your graph
– SRKX
Nov 14, 2011 at 15:56

There are many different methods for this. Most people rely on a unit root test. Rmetrics has collected the most common unit root tests into the fUnitRoots package, which primarily provides a wrapper for Bernhard Pfaff's urca package. These include:

• Elliott–Rothenberg–Stock test
• KPSS unit root test
• Phillips–Perron test
• Schmidt–Phillips test
• Zivot–Andrews

If you want to understand these functions in more detail, I recommend Pfaff's book on "Analysis of Integrated and Cointegrated Time Series with R". "Applied Econometrics with R" also provides a nice short introduction.

Chapter 4 of Eric Zivot's book on time series analysis covers unit root tests and is available on his website. He uses S-Plus, but the urca functions are almost identical.

• thank you for the answer, but as I mentioned The series above have passed the following unit root tests: ADF, PP, ERS, KPSS... So I think is not a unit root problem, maybe I have to use some test to check if the "volatility" is constant, what do you think about that?
– Dail
Nov 14, 2011 at 7:25

You can use the (Adjusted) Dickey Fuller Test: http://en.wikipedia.org/wiki/Dickey%E2%80%93Fuller_test

I'm pretty sure your software package has a library or routine you can use to do it.

• yes I found it on URCA package (ur.df) I need a level stationary, what parameters should I use? because I see "none" "drift" and "trend" on the type parameter.
– Dam
Nov 13, 2011 at 11:41
• It's hard to be sure without seeing the data but I would go for 'none'. I advise you read the documentation at cran.r-project.org/web/packages/urca/urca.pdf , page 43 for more information about the type parameter and the lag selection. Nov 13, 2011 at 12:06
• About the data you can image that I need to use this test in a timeseries like rnorm(800) (obviously the data is not so perfect) I need a test to understand if my data is similar to it or not
– Dam
Nov 13, 2011 at 12:08
• Can you give us a plot? Nov 13, 2011 at 12:41
• Have you looked at this: staff.bath.ac.uk/hssjrh/Phillips%20Perron.pdf Nov 13, 2011 at 17:29

Yet another alternative are wavelet based tests. With comparable size, they often have higher power, especially for very near unit root alternatives. An example is here (free pre-print versions of this paper are available, too).

• Should it be the R package to do the tests you told me? cran.r-project.org/web/packages/wavelets/index.html
– Dail
Nov 14, 2011 at 7:02
• You can use the DWT and MODWT functions in that package to construct the test. I doubt the test itself is implemented. Maybe you can find the code at the authors' webpages. Nov 14, 2011 at 16:45

The tseries package has GARCH models. Here is some simple code:

library(quantmod)
library(tseries)
getSymbols("MSFT")
ret <- diff.xts(log(MSFT$MSFT.Adjusted))[-1] arch_model <- garch(ret, order=c(0, 3)) garch_model <- garch(ret, order=c(3, 3)) plot(arch_model) plot(garch_model)  Also, Eric Zivot has good notes on time-series and R. • (I'm Dam, I registered an username on quant)... thank you for that example...but after plotting those example, how I solve my problem of different volatility? As far I have understand garch return an autoregressive model, so obviously there is not a kind of "pvalue" to test if the series "pass" or not. How could i do? thank you! – Dail Nov 14, 2011 at 7:00 • @ricardh: you imply fitting a GARCH, computing the local volatilities$\sigma_t$and checking whether they are the same$\forall t$right? – SRKX Nov 14, 2011 at 13:15 • @SKRX -- Yes, thanks. I should have included more commentary. He asked how to fit a GARCH model in R, so I gave some code. Once he determines the best-fitting GARCH model with ll, ic, and ssr, he can perform joint tests on the GARCH model coefficients. Nov 14, 2011 at 14:32 • @richardh what tests are you referring to? (about coefficients testing) – Dail Nov 14, 2011 at 15:46 • @Dail -- There are a variety of tests, but Wald tests that all coefficients are jointly zero is probably the easiest. I searched for how to do this in R, but wasn't too successful. You will likely have to grab a text book and code the tests yourself. (I switched to Stata for most analyses because hypothesis testing is so much easier). Nov 14, 2011 at 16:26 Divide the time series into two sections (e.g. 1st half and 2nd half) and construct the CDF for each part. The CDFs should be the same if the series is stationary. Since the CDFs will never be exactly the same you can apply Pearson's$\chi^{2}\$ test comparing the value of the CDFs through several waypoints. I believe this test was created by the late Cliff Sherry.

If your theory/common sense indicates that your series is stationary the KPSS test is appropriate. It is a test of your theory/common sense.

If your theory/common sense indicates that your series is I(1) then you should use one of the unit root tests already mentioned. I would prefer the Elliott–Rothenberg–Stock test.

I would not recommend doing both tests. If they both confirm your original ideas then you are OK. If you are assuming stationarity and your series passes the KPSS test but the unit root test indicates non stationarity I would still accept that my theory has been confirmed by the KPSS and proceed accordingly. If the KPSS indicates non-stationarity and this is confirmed by the unit root test then my theory/common sense is subject to query. In any of the three cases there is no benefit to be gained from doing both kinds of tests.

Without a knowledge of what you are testing it is not possible to give more specific advice.

If you are estimating an ARMA or GARCH process the estimated coefficients must satisfy certain conditions if the series is to be stationary

You can use ADF test as implemented in R in different packages However, accuracy and power of these implementations would differ, since, these tests refer different papers to generate the p-values. The table below contains the packages, name of the functions and the referenced papers. You can go through the papers to keep an eye on the differences in the implementations. To be a stationarity is when the roots of charateristic equation lies outside of the unit circle.