Suppose I have a data set that represents circular data measured in degrees:
x <- c(rnorm(1000, 0, 10), rnorm(700, 110, 3), rnorm(1100, 230, 5)) %% 360
The R package
circular provides a very nice way to represent that data, and a basic tool for detecting change points in it:
library(circular) x <- circular(x, units='degrees') cp <- change.point(x)
However, this particular algorithm is limited, because it's (in my experience) relatively inefficient, and it's limited to finding one change point at a time, so if multiple change points are present, a recursive approach is needed. This causes some difficulty in deciding when to terminate.
If a linear change point algorithm is used, it will have difficulty with
x[1:1000] because some values will be close to
0 and some close to
For linear data, I like the 'PELT' algorithm of Killick, Fearnhead, and Eckley (2011) implemented by the R package
cpt.mean() function. It's fast and seems to be pretty reliable. Has anyone looked at adapting this method to circular data?
Or other recommendations?