Description Usage Arguments Details Value Note Author(s) See Also Examples

Compute the dissimilarity matrix between a set of single-variate timeseries.

1 2 |

`mx` |
numeric matrix, containing timeseries as rows |

`my` |
numeric matrix, containing timeseries as rows (for cross-distance) |

`...` |
arguments passed to the |

`dtwDist`

computes a dissimilarity matrix, akin to
`dist`

, based on the Dynamic Time Warping definition of a
distance between single-variate timeseries.

The `dtwDist`

command is a synonym for the
`dist`

function of package proxy; the DTW
distance is registered as `method="DTW"`

(see examples below).

The timeseries are stored as rows in the matrix argument `m`

. In
other words, if `m`

is an N * T matrix, `dtwDist`

will build
N*N ordered pairs of timeseries, perform the corresponding N*N
`dtw`

alignments, and return all of the results in a matrix. Each
of the timeseries is T elements long.

`dtwDist`

returns a square matrix, whereas the `dist`

object
is lower-triangular. This makes sense because in general the DTW
"distance" is not symmetric (see e.g. asymmetric step patterns). To
make a square matrix with the `dist`

function
sematics, use the two-arguments call as `dist(m,m)`

. This will
return a square `crossdist`

object.

A square matrix whose element `[i,j]`

holds the Dynamic Time Warp
distance between row `i`

(query) and `j`

(reference) of
`mx`

and `my`

, i.e. `dtw(mx[i,],my[j,])$distance`

.

To convert a square cross-distance matrix (`crossdist`

object) to
a symmetric `dist`

object, use a suitable conversion
strategy (see examples).

Toni Giorgino

Other "distance" functions are: `dist`

,
`vegdist`

in package `vegan`

,
`distance`

in package `analogue`

, etc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ```
## Symmetric step pattern => symmetric dissimilarity matrix;
## no problem coercing it to a dist object:
m <- matrix(0,ncol=3,nrow=4)
m <- row(m)
dist(m,method="DTW");
# Old-fashioned call style would be:
# dtwDist(m)
# as.dist(dtwDist(m))
## Find the optimal warping _and_ scale factor at the same time.
## (There may be a better, analytic way)
# Prepare a query and a reference
query<-sin(seq(0,4*pi,len=100))
reference<-cos(seq(0,4*pi,len=100))
# Make a set of several references, scaled from 0 to 3 in .1 increments.
# Put them in a matrix, in rows
scaleSet <- seq(0.1,3,by=.1)
referenceSet<-outer(1/scaleSet,reference)
# The query has to be made into a 1-row matrix.
# Perform all of the alignments at once, and normalize the result.
dist(t(query),referenceSet,meth="DTW")->distanceSet
# The optimal scale for the reference is 1.0
plot(scaleSet,scaleSet*distanceSet,
xlab="Reference scale factor (denominator)",
ylab="DTW distance",type="o",
main="Sine vs scaled cosine alignment, 0 to 4 pi")
## Asymmetric step pattern: we can either disregard part of the pairs
## (as.dist), or average with the transpose
mm <- matrix(runif(12),ncol=3)
dm <- dist(mm,mm,method="DTW",step=asymmetric); # a crossdist object
# Old-fashioned call style would be:
# dm <- dtwDist(mm,step=asymmetric)
# as.dist(dm)
## Symmetrize by averaging:
(dm+t(dm))/2
## check definition
stopifnot(dm[2,1]==dtw(mm[2,],mm[1,],step=asymmetric)$distance)
``` |

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.