Learn R Programming

dtwclust (version 2.1.2)

DBA: DTW Barycenter Averaging

Description

A global averaging method for time series under DTW (Petitjean, Ketterlin and Gancarski, 2011).

Usage

DBA(X, center = NULL, max.iter = 20L, norm = "L1", window.size = NULL, delta = 0.001, error.check = TRUE, trace = FALSE, ...)

Arguments

X
A data matrix where each row is a time series, or a list where each element is a time series.
center
Optionally, a time series to use as reference. It must be a numeric vector. Defaults to a random series of X if NULL.
max.iter
Maximum number of iterations allowed.
norm
Norm for the local cost matrix of DTW. Either "L1" for Manhattan distance or "L2" for Euclidean distance.
window.size
Window constraint for the DTW calculations. NULL means no constraint.
delta
At iteration i, if all(abs(center_{i} - center_{i-1}) < delta), convergence is assumed.
error.check
Should inconsistencies in the data be checked?
trace
If TRUE, the current iteration is printed to screen.
...
Further arguments for dtw, e.g. step.pattern. Do not provide window.type here, just set window.size to the desired value.

Value

The average time series.

Parallel Computing

Please note that running tasks in parallel does not guarantee faster computations. The overhead introduced is sometimes too large, and it's better to run tasks sequentially. The user can register a parallel backend, e.g. with the doParallel package, in order to attempt to speed up the calculations (see the examples).

Details

This function tries to find the optimum average series between a group of time series in DTW space. Refer to the cited article for specific details on the algorithm.

If a given series reference is provided in center, the algorithm should always converge to the same result provided the elements of X keep the same values, although their order may change.

References

Petitjean F, Ketterlin A and Gancarski P (2011). ``A global averaging method for dynamic time warping, with applications to clustering.'' Pattern Recognition, 44(3), pp. 678 - 693. ISSN 0031-3203, http://dx.doi.org/10.1016/j.patcog.2010.09.013, http://www.sciencedirect.com/science/article/pii/S003132031000453X.

Examples

Run this code

# Sample data
data(uciCT)

# Obtain an average for the first 5 time series
dtw.avg <- DBA(CharTraj[1:5], CharTraj[[1]], trace = TRUE)
plot(dtw.avg, type="l")

# Change the provided order
dtw.avg2 <- DBA(CharTraj[5:1], CharTraj[[1]], trace = TRUE)

# Same result?
all(dtw.avg == dtw.avg2)

## Not run: 
# #### Running DBA with parallel support
# # For such a small dataset, this is probably slower in parallel
# require(doParallel)
# 
# # Create parallel workers
# cl <- makeCluster(detectCores())
# invisible(clusterEvalQ(cl, library(dtwclust)))
# registerDoParallel(cl)
# 
# # DTW Average
# cen <- DBA(CharTraj[1:5], CharTraj[[1]], trace = TRUE)
# 
# # Stop parallel workers
# stopCluster(cl)
# 
# # Return to sequential computations
# registerDoSEQ()
# ## End(Not run)

Run the code above in your browser using DataLab