detect.ic {ccid}R Documentation

Multiple change-point detection in the cross-covariance structure of multivariate high-dimensional time series using a model selection criterion optimisation

Description

This function detects multiple change-points in the cross-covariance structure of a multivariate time series using a model selection criterion optimisation.

Usage

detect.ic(
  X,
  approach = c("euclidean", "infinity"),
  th_max = 2.1,
  th_sum = 0.5,
  pointsgen = 10,
  scales = -1,
  alpha_gen = 0.1,
  preaverage_gen = FALSE,
  scal_gen = 3,
  min_dist = 1
)

Arguments

X

A numerical matrix representing the multivariate time series, with the columns representing its components.

approach

A character string, which defines the metric to be used in order to detect the change-points. If approach = “euclidean”, which is also the default value, then the L_2 metric will be followed for the detection. If approach = “infinity”, then the L_{\infty} metric will be used for the detection.

th_max

A positive real number with default value equal to 2.1. It is used to define the threshold for the change-point overestimation step if the L_{\infty} metric is chosen in approach .

th_sum

A positive real number with default value equal to 0.5. It is used to define the threshold for the change-point overestimation step if the L_2 metric is chosen in approach.

pointsgen

A positive integer with default value equal to 10. It defines the distance between two consecutive end- or start-points of the right- or left-expanding intervals, respectively; see Details for more information.

scales

Negative integers for wavelet scales, with a small negative integer representing a fine scale. The default value is equal to -1.

alpha_gen

A positive real number with default value equal to 0.1. It is used to define how strict the user wants to be with the penalty used.

preaverage_gen

A logical variable with default value equal to FALSE. If FALSE, then pre-averaging the data is not required. If TRUE, then we need to pre-average the data before proceeding with the detection of the change-points.

scal_gen

A positive integer number with default value equal to 3. It is used to define the way we pre-average the given data sequence only if preaverage_gen = TRUE. See the Details in preaverage for more information on how we pre-average.

min_dist

A positive integer number with default value equal to 1. It is used in order to provide the minimum distance acceptable between detected change-points if such restrictions apply.

Details

The time series X_t is of dimensionality p and we are looking for changes in the cross-covariance structure between the different time series components X_{t}^{(1)}, X_{t}^{(2)}, ..., X_{t}^{(p)}. We first use a wavelet-based approach for the various given scales in scales in order to transform the given time series X_t to a multiplicative model Y_{t}^{(k)} = \sigma^{(k)}_t (Z_t^{(k)})^2; t=1,2,\ldots,T; k = 1,2,\ldots,d, where Z_t^{(k)} is a sequence of standard normal random variables, E(Y_t^{(k)}) = \sigma_t^{(k)}, and d is the new dimensionality, which depends on the value given in scales. The function has been extensively tested on fMRI data, hence, its parameters have been tuned for this data type. The function might not work well in other structures, such as time series that are negatively serially correlated.

Value

A list with the following components:

changepoints The locations of the detected change-points.
no.of.cpts The number of the detected change-points.
sol_path A vector containing the solution path.
ic_curve A vector with values of the information criterion for different number of change-points.

If the minimum distance between the detected change-points is less than the value given in min_dist, then only the number and the locations of the “pruned” change-points are returned.

Author(s)

Andreas Anastasiou, anastasiou.andreas@ucy.ac.cy

References

“Cross-covariance isolate detect: a new change-point method for estimating dynamic functional connectivity”, Anastasiou et al (2020), preprint <doi:10.1101/2020.12.20.423696>.

See Also

detect.th.

Examples

  set.seed(11)
  A <- matrix(rnorm(10*200), nrow = 200) ## No change-point
  M1 <- detect.ic(A, approach = 'euclidean', scales = -1)
  M2 <- detect.ic(A, approach = 'infinity', scales = -1)
  M1$changepoints
  M2$changepoints

  set.seed(1)
  num.nodes <- 30 # number of nodes
  etaA.1    <- 0.95
  etaA.2    <- 0.05
  pcor1     <- GeneNet::ggm.simulate.pcor(num.nodes, etaA = etaA.1)
  pcor2     <- GeneNet::ggm.simulate.pcor(num.nodes, etaA = etaA.2)

  n <- 50
  data1 <- GeneNet::ggm.simulate.data(n, pcor1)
  data2 <- GeneNet::ggm.simulate.data(n, pcor2)
  X1 <- rbind(data1, data2, data1, data2) ## change-points at 50, 100, 150
  N1 <- detect.ic(X1, approach = 'euclidean', scales = -1)
  N2 <- detect.ic(X1, approach = 'infinity', scales = -1)
  N1$changepoints
  N2$changepoints
  N1$no.of.cpts
  N2$no.of.cpts
  N1$sol_path
  N2$sol_path

[Package ccid version 1.2.0 Index]