Revision 9fbfbef539cfc60884f6828c62f0aa328335a0b1 authored by Toni Giorgino on 08 January 2008, 00:00:00 UTC, committed by Gabor Csardi on 08 January 2008, 00:00:00 UTC
1 parent da02fed
warpArea.R
``````###############################################################
#                                                             #
#   (c) Toni Giorgino <toni.giorgino@gmail.com>           #
#       Laboratory for Biomedical Informatics                 #
#       University of Pavia - Italy                           #
#       www.labmedinfo.org                                    #
#                                                             #
#   \$Id: plot.dtw.R 55 2007-12-13 12:25:49Z tonig \$
#                                                             #
###############################################################

## Compute the (approximate) area between the warping function and the
## diagonal (in unit steps).

warpArea <- function(d) {

if(!is.dtw(d))
stop("dtw object required");

## rebuild query->templ map, interpolating holes
ii<-approx(x=d\$index1,y=d\$index2,1:d\$N);

dg<-seq(from=1,to=d\$M,len=d\$N);

}

## Exmp:
##   t <- localWarpingStretch(alignment)
##
##   # local warping amount, based on the warping function
##   plot(t)
##
##   # lwa, based on the input position
##   plot(t~alignment\$index1)
##
##   # or its pointwise approximation
##   plot(approx(alignment\$index1,t,1:alignemnt\$N)\$y)

##
##   diff(localWarpingStretch) contains +1 for each "insertion" and -1
##    for each "deletion". Since we have max N deletions + M
##    insertions, a reasonable normalization would be to divide
##    sum(abs(diff())) by 2N
##
##   localWarpingCost is the amount of mismatch
##    at each point ("local substitution cost")

## Return how far from the diagonal is each point on the warping
## function. A good normalization factor can be 2 * N, so that maximum
## stretch is 1.

.localWarpingStretch <- function(d) {
## The diagonal line
# dg <- seq(from = 1, to = d\$M, len = d\$N)

## get local copies
id1 <- d\$index1;
id2 <- d\$index2;

## remap template indices to a square alignment
id2 <- id2*d\$N/d\$M;

## return the local distance from the diagonal
id1-id2;
}

## Return the local costs along the warping path i.e. d[i[t],j[t]] . A
## reasonable normalization could be to d\$distance, so that each
## element would be the fraction of cost accumulated at that step.

.localWarpingCost <- function(d) {
if(is.null(d\$localCostMatrix))
stop("A dtw object with keep.internals=TRUE is required");

diag(d\$localCostMatrix[d\$index1,d\$index2]);
}
``````

Computing file changes ...