I am working with a short time series consisting of 21 annual data points. I wish to analyze the time series for structural changes, and I have been exploring the strucchange package in R (Zeileis et al. 2002).

If I am going to perform formal statistical tests of breakpoints, is it appropriate to use the serial F-statistic test (strucchange::Fstats), which tests for the existence of a single breakpoint against the null hypothesis of no breakpoints, on my highly non-stationary raw time series data, or must I first difference my data to stabilize the mean? To rephrase in R syntax, is the serial F-stat test valid on the model lm(y ~ x), or must I instead difference y and run the test on lm(diff(y) ~ 1)? I get much higher F-stats (hence lower p-values) for the former test than for the latter, but I want to make sure I am using it correctly. Given the shortness of my time series, I am reluctant to sacrifice the first data point for differencing.


This depends on what a plausible data-generating process for your time series is:

  • If it could be stationary around a piecewise constant mean, then y ~ 1 should be used for the testing and dating "in levels".
  • However, if the time series is integrated and you are looking for changes "in the growth rates or returns", then r <- diff(y) or r <- diff(log(y)) should be used with r ~ 1 in testing and dating.

I assume you are talking about the data you showed in in: Time series structural analysis with R's strucchange package: Interpreting breakpoint dating with respect to breakpoint testing To me, this looks neither like a shift in levels nor returns. But possibly taking logs would yield a piecewise linear pattern...

  • $\begingroup$ Thanks for the feedback! Yes, this is the same data set that I illustrated in my related post. The data refer to pesticide application rates, and the changes in the shape correspond to documented shifts in agricultural practices. For example, the sharp declining trend beginning around t = 5 corresponds to a regulatory push to phase out two widely used chemical classes, and the weaker decline around t = 10 corresponds to a novel chemistry being widely adopted. If I may ask for clarification on some of your terms, $\endgroup$ – Doug Sponsler Apr 30 '18 at 1:23
  • $\begingroup$ ...for these data, the hypothesis of stationarity with level shifts is not definitely plausible. I'm assuming that my generating process is a pattern of shifting deterministic trends. I suppose that would mean modeling "returns" as diff(y) ~ 1? $\endgroup$ – Doug Sponsler Apr 30 '18 at 1:34
  • $\begingroup$ I would guess that r <- diff(log(y)) is the most intuitive transformation here, corresponding to returns or relative changes. And then bp <- breakpoints(r ~ 1) might pick up the two changes your are after. And then coef(bp) might show a first segment with positive growth, a second segment with negative growth, and a fairly stable third segment. Alternatively, you could try bp <- breakpoints(log(y) ~ seq_along(y), h = 4) where the segment-specific slopes in the deterministic trends should be similar to the segment-specific intercepts from the model in returns. $\endgroup$ – Achim Zeileis May 1 '18 at 0:02

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.