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 360
.
For linear data, I like the 'PELT' algorithm of Killick, Fearnhead, and Eckley (2011) implemented by the R package changepoint
's 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?