I'm exploring the use of changepoint detection or other methods (am slowly becoming aware of wavelet transformation, etc. but have tons to learn in this area) to identify key shifts in health care performance patterns over time. However, many of the metrics I'm seeking to analyze (e.g., health care quality metrics) are both generally calculated and more reasonably interpreted as rolling-12 month aggregates. For example, it's important to me to track on a monthly basis the proportion of patients who are up-to-date on a certain lab test within the 12-month period ending that month, but I'm not particularly concerned with how many of these tests occurred specifically in August. So it's something sort of like having a moving average to work with as a raw starting point.

That said, there are also reasons why this rolling-12 aggregation does not result in a stationary process either.

My thought was to account for the data structure and seasonality by modeling it as a function of a 1-month and 12-month lag. Is this the proper way to think about this data? Is there anything else or a better approach I should be doing/considering? Again, my general goal is surveillance of the general trend as well as breaks -- so if it affects the answer, I'm looking at this in the context of using the R strucchange package, CUSUM statistics, or some other approach to identify good and bad anomalies.




1 Answer 1


The 12-month rolling aggregation will remove seasonality which makes the task easier. For non-seasonal time series, the methods in the strucchange package for R are excellent.

For seasonal time series, you might look at the BFAST (Breaks For Additive Seasonal and Trend) method which is implemented in the bfast package for R. This method involves applying strucchange to the trend and seasonal components obtained from a decomposition of the data (applied iteratively to allow for the breaks discovered). You could apply bfast on the original data (without the 12-month aggregation).

Neither of these methods requires stationarity.

I would think that a direct modelling approach such as the one you propose would be less capable of finding general breaks due to the additional assumptions being made.

  • $\begingroup$ Hi Rob, Thanks for the tip on BFAST - it looks very promising for my purpose! As I briefly mentioned, in my case the rolling aggregation doesn't actually remove the seasonality (there are slacks and surges in effort on a more-or-less predictable schedule, coupled with turnover in the measure denominator), and I have noticed that even with a lag(12) in my breakpoints() model specification, strucchange is a little more sensitive to these seasonal spikes than I'd prefer. $\endgroup$
    – Shelby
    Commented Aug 9, 2010 at 17:46
  • $\begingroup$ Follow up q: Given this, is it fair to say that the pre-aggregation of the data may somewhat dilute (but not completely eliminate) the sensitivity of the BFAST approach to detect breaks in the seasonal component? $\endgroup$
    – Shelby
    Commented Aug 9, 2010 at 17:47
  • $\begingroup$ Pre-aggregation will remove or greatly reduce the seasonality. But I don't think that would reduce the ability of BFAST to detect breaks in the seasonal component. It is rare to have breaks in seasonality (at least in all the data I've looked at). Slow changes in seasonality are more common. $\endgroup$ Commented Aug 9, 2010 at 22:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.