Description
Bayesian Methods for Change Point Analysis.
Description
Performs change point detection on univariate and multivariate time series (Martínez & Mena, 2014, <doi:10.1214/14-BA878> ; Corradin, Danese & Ongaro, 2022, <doi:10.1016/j.ijar.2021.12.019>) and clusters time-dependent data with common change points (Corradin, Danese, KhudaBukhsh & Ongaro, 2026, <doi:10.1007/s11222-025-10756-x>).
README.md
BayesChange provides C++ functions to perform Bayesian change points analysis.
Installation
To install BayesChange the package devtools is needed.
install.packages("devtools")
Now BayesChange can be installed through the GitHub repository of the package:
devtools::install_github("lucadanese/BayesChange")
Package contents
The package contains two main functions:
detect_cpchange points detection on time series and epidemic diffusions.clust_cpclustering of time series or epidemic diffusions with common change points.
Additional methods and functions are included:
print()andsummary()return information about the algorithm.posterior_estimate()estimates the change points or the final partition of the data.plot()provides a graphical representation of the results.plot_psm()provides the posterior similarity matrix for the output ofclust_cp.sim_epi_data()generates an arbitrary number of simulated survival functions.
Detect change points
library(BayesChange)
## Univariate time series
data("stock_uni")
params_uni <- list(a = 1,
b = 1,
c = 1,
phi = 0.1)
out <- clust_cp(data = stock_uni[1:5,], n_iterations = 7500, n_burnin = 2500,
L = 1, q = 0.5, B = 10000, params = params_uni, kernel = "ts")
print(out)
summary(out)
posterior_estimate(out)
plot(out)
## Multivariate time series
data("stock_multi")
params_multi <- list(m_0 = rep(0,2),
k_0 = 1,
nu_0 = 10,
S_0 = diag(1,2,2),
phi = 0.1)
out <- clust_cp(data = stock_multi[,,1:5], n_iterations = 7500, n_burnin = 2500,
L = 1, B = 10000, params = params_multi, kernel = "ts")
print(out)
summary(out)
posterior_estimate(out)
plot(out)
## Epidemic diffusions
data("epi_synthetic_multi")
params_epi <- list(M = 250, xi = 1/8,
alpha_SM = 1,
a0 = 4,
b0 = 10,
I0_var = 0.1,
avg_blk = 2)
out <- clust_cp(epi_synthetic_multi, n_iterations = 5000, n_burnin = 2000,
L = 1, B = 1000, params = params_epi, kernel = "epi")
print(out)
summary(out)
posterior_estimate(out)
plot(out)
Cluster time dependent data with common change points
## Univariate time series
data("stock_uni")
params_uni <- list(a = 1,
b = 1,
c = 1,
phi = 0.1)
out <- clust_cp(data = stock_uni[1:5,], n_iterations = 7500, n_burnin = 2500,
L = 1, q = 0.5, B = 10000, params = params_uni, kernel = "ts")
print(out)
summary(out)
posterior_estimate(out)
plot(out)
## Multivariate time series
data("stock_multi")
params_multi <- list(m_0 = rep(0,2),
k_0 = 1,
nu_0 = 10,
S_0 = diag(1,2,2),
phi = 0.1)
out <- clust_cp(data = stock_multi[,,1:5], n_iterations = 7500, n_burnin = 2500,
L = 1, B = 10000, params = params_multi, kernel = "ts")
print(out)
summary(out)
posterior_estimate(out)
plot(out)
## Epidemic diffusions
data("epi_synthetic_multi")
params_epi <- list(M = 250, xi = 1/8,
alpha_SM = 1,
a0 = 4,
b0 = 10,
I0_var = 0.1,
avg_blk = 2)
out <- clust_cp(epi_synthetic_multi, n_iterations = 5000, n_burnin = 2000,
L = 1, B = 1000, params = params_epi, kernel = "epi")
print(out)
summary(out)
posterior_estimate(out)
plot(out)