Bonjour,

Quelqu'un connait-il / utilise-t-il la fonction dtw ?
En théorie, elle calcule la distance entre deux courbes en utilisant les dynamic time warping. Selon ce que j'en sais, elle doit donner soit la somme des longueurs des segments qui permettent de joindre les courbes, soit leur max. Mais je n'arrive pas à retrouver les résultats à la main...

Première constatation : l'argument dist.method ne semble pas marcher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
trajE <- sin((1:150)/10)+rnorm(150,,0.1)
trajF <- sin((1:150)/20)+rnorm(150,,0.1)
 
plot(trajE,type="o",col=2)
lines(trajF,type="o",col=4)
 
dtw(trajE,trajF)$dist
#[1] 44.10298
dtw(trajE,trajF,dist.method="max")$dist
#[1] 44.10298
dtw(trajE,trajF,dist.method="manhattan")$dist
#[1] 44.10298
Deuxième constatation : la distance donnée n'est ni la somme, ni le max des longueurs des segments :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
res <- dtw(trajE,trajF)
tab <- matrix(0,length(res$index1),5)
for(i in 1:length(res$index1)){
  lines(
     c(res$index1[i],res$index2[i]),
     c(trajE[res$index1[i]],trajF[res$index2[i]])
  )
  ecartX <- abs(res$index1[i]-res$index2[i])
  ecartY <- abs(trajE[res$index1[i]]-trajF[res$index2[i]])
  tab[i,] <- c(ecartX,ecartY,sqrt(ecartX^2+ecartY^2),max(ecartX,ecartY),ecartX+ecartY)
}
 
 
res$dist
# [1] 45.58186
summary(tab)
       V1              V2                  V3                 V4                 V5          
 Min.   : 0.00   Min.   :0.0000275   Min.   : 0.03737   Min.   : 0.03737   Min.   : 0.03737  
 1st Qu.: 6.00   1st Qu.:0.0301886   1st Qu.: 6.00001   1st Qu.: 6.00000   1st Qu.: 6.00932  
 Median :12.00   Median :0.0727731   Median :12.01507   Median :12.00000   Median :12.60169  
 Mean   :13.47   Mean   :0.1784525   Mean   :13.48360   Mean   :13.47852   Mean   :13.65170  
 3rd Qu.:22.00   3rd Qu.:0.1665101   3rd Qu.:22.00000   3rd Qu.:22.00000   3rd Qu.:22.00734  
 Max.   :32.00   Max.   :1.0417611   Max.   :32.00012   Max.   :32.00000   Max.   :32.08815  
 
apply(tab,2,sum)
#[1] 3274.00000   43.36395 3276.51560 3275.28156 3317.36395
 
apply(tab,2,mean)
#[1] 13.4732510  0.1784525 13.4836033 13.4785249 13.6517035
Quelqu'un a une idée ?

Christophe