У меня есть список временных рядов:
ex <- list(ts1 = structure(c(15.33, 46.83, 69.93, 79.59, 85.785, 78.132,
61.812, 189.108, 188.904, 159.936, 35.175, 62.37, 77.49, 85.785,
87.36, 17.952, 198.696, 198.084, 159.936, 157.692), .Dim = 5:4, .Dimnames = list(
NULL, c("var1", "var2", "var3", "var4")), .Tsp = c(1, 5,
1), class = c("mts", "ts", "matrix")), ts2 = structure(c(34.65,
43.47, 34.125, 62.424, 10.2, 45.084, 43.575, 34.125, 27.72, 10.812,
48.756, 92.616), .Dim = 3:4, .Dimnames = list(NULL, c("var1",
"var2", "var3", "var4")), .Tsp = c(1, 3, 1), class = c("mts",
"ts", "matrix")), ts3 = structure(c(33.915, 59.325, 47.736, 8.772,
54.18, 80.115, 4.08, 61.2), .Dim = c(2L, 4L), .Dimnames = list(
NULL, c("var1", "var2", "var3", "var4")), .Tsp = c(1, 2,
1), class = c("mts", "ts", "matrix")))
Я хотел бы рассчитать расстояние между двумя парами в списке. Как чтение в dtw
регистр пакета dtw
расстояние в качестве функции расстояния в базе данных proxy
расстояния pr_DB
, я могу просто использовать proxy::dist
, чтобы быстро рассчитать все расстояния. Проблема в том, что proxy::dist
, кажется, возвращает необработанные расстояния, в то время как мои временные ряды имеют различную длину, мне нужно, чтобы он возвращал нормализованное расстояние. Функция dtw::dtw
возвращает список с normalizedDistance
в качестве одного элемента. Так как я могу изменить то, что возвращается на proxy::dist
, и заставить его вернуться normalizedDistance
? Или, может быть, есть другой способ расчета каждой пары нормированных расстояний? (Конечно, поскольку мой набор данных большой, мне нужно избегать зацикливания всех пар).
Вот краткий код, помогающий увидеть проблему:
> proxy::dist(ex, method = 'dtw')
ts1 ts2
ts2 822.2551
ts3 909.3705 195.2110
> dtw::dtw(ex[[1]], ex[[2]])$distance
[1] 822.2551
> dtw::dtw(ex[[1]], ex[[2]])$normalizedDistance
[1] 102.7819