Online Changepoint Detection

Description

Performs the oCPD algorithm in a truely on-line fashion; each iteration, you provide it with one more data point in the series, and the function will update the run length probabilities.

Usage

1
onlineCPD(oCPD = NULL, datapt, timept = NULL, hazard_func = const_hazard)

Arguments

oCPD

an object of type "oCPD", datapt will be added to the end of this series

datapt

the next data point in the series. This must have the same number of variables as oCPD

timept

optional, the corresponding time for datapt

hazard_func

hazard function used in the model. Defaults to a constant hazard, suitable for exponential family models.

Details

This function performs the oCPD algorithm, one point at a time. To use, start with either the result to a call to offlineCPD or just a single data point. In the case of a single data point, leave argument oCPD as NULL. See Examples section.

See offlineCPD for more information on how the algorithm works.

Value

An object of class "oCPD", which is a list containing the following:

R

n by n matrix of run-length probabilities. The value at R[i,j] is the probability that at data point j, the current run length is i.

data

same as the input parameter, included for plotting.

time

same as the input parameter, included for plotting.

alpha

the vector of values of alpha after the final data point.

beta

the vector (or matrix) of values of beta (the variance) after the final data point.

kappa

the vector of values of kappa after the final data point.

mu

the vector (or matrix) of values of mu (the mean) after the final data point

max

vector of values; max[i] is the runlength with the highest probability. Used to plot the red diagonal line in plot.oCPD

changes

locations of detected changepoints. When the algorithm can not detect the exact location of a change, multiple possible values are reported.

Note

For a version of this same algorithm that functions offline (i.e. you give it the whole time series at once), see offlineCPD

This version runs a little slower because it needs to copy the "oCPD" object with every iteration. Use offlineCPD unless you don't have the whole time series available at the start.

Author(s)

Zachary Zanussi

References

Adams, R. P. and Mackay, D. J. C. (2007), Bayesian Online Changepoint Detection

####OUR PAPER, WHEN IT EXISTS

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
##### Univariate Data #####
set.seed(6)
x <- c(rnorm(50,mean=0.3,sd=0.15),rnorm(40,mean=0.7,sd=0.1),rnorm(60,mean=0.5,sd=0.15))
res <- onlineCPD(datapt=x[1])
for(k in x)
  res <- onlineCPD(res,k)
plot(res)

##### Real Multivariate Data #####
data(WalBelSentiment)
data(WalBelTimes)
res <- onlineCPD(datapt=WalBelSentiment[1400,],timept=WalBelTimes[1400])
for(k in 1401:1600)
  res <- onlineCPD(res,WalBelSentiment[k,],WalBelTimes[k])
plot(res)

## You can use onlineCPD to add points to an existing "oCPD" object
y <- c(rnorm(50,0.5,0.1),rnorm(20,0.48,0.02),rnorm(50,0.5,0.1))
res <- offlineCPD(y)
plot(res)
x <- rnorm(75,0.7,0.4)
for(k in x)
  res <- onlineCPD(res,k)
plot(res)