問題
我有時間序列的不同車輛的速度。我的最終目標是隨着時間的推移,根據速度的相似性對不同的車輛進行聚類。所以,我基本上需要生成一個距離矩陣,其中每個單元格包含一對車輛速度時間序列之間的距離。我想使用動態時間規整(dtw)作爲距離度量。因此,我想在每對速度時間系列上應用dtw。如何在R中的多個時間序列上應用dtw算法?
數據
這裏是包含每輛車只有8觀察,只有3輛車一些樣本數據:
> dput(c)
structure(list(file.ID2 = c("Cars_03", "Cars_03", "Cars_03",
"Cars_03", "Cars_03", "Cars_03", "Cars_03", "Cars_03", "Cars_04",
"Cars_04", "Cars_04", "Cars_04", "Cars_04", "Cars_04", "Cars_04",
"Cars_04", "Cars_05", "Cars_05", "Cars_05", "Cars_05", "Cars_05",
"Cars_05", "Cars_05", "Cars_05"), speed.kph.ED = c(129.3802848,
129.4022304, 129.424176, 129.4461216, 129.4680672, 129.47904,
129.5009856, 129.5229312, 127.8770112, 127.8221472, 127.7672832,
127.7124192, 127.6575552, 127.6026912, 127.5478272, 127.4929632,
134.1095616, 134.1205344, 134.1315072, 134.1534528, 134.1644256,
134.1753984, 134.1863712, 134.197344)), row.names = c(NA, -24L
), class = c("tbl_df", "tbl", "data.frame"), .Names = c("file.ID2",
"speed.kph.ED"))
我試過
我可以找到dtw::dtw()
距離爲一對如下:
library(dplyr)
library(dtw)
c3 <- c %>% filter(file.ID2=="Cars_03")
c4 <- c %>% filter(file.ID2=="Cars_04")
query <- c4$speed.kph.ED
reference <- c3$speed.kph.ED
dtw_results <- dtw(x = query, y = reference)
dtw_results$distance
但我的問題是:有沒有辦法自動找到每對之間的dtw()$distance
並生成距離矩陣?在這個例子中,這意味着這些對:
Cars_03 - Cars_03
Cars_03 - Cars_04
Cars_03 - Cars_05
Cars_04 - Cars_03
Cars_04 - Cars_04
Cars_04 - Cars_05
等
我知道for loop
是做到這一點的一種方法。但由於dtw
本身需要大量RAM,因此for loop
可能會進一步減慢進程。任何替代品?我很抱歉,如果這是一個愚蠢的問題,但我很新,使用dtw
。
如果你想使用一個軟件包,優秀的'dtwclust'軟件包可以自動進行比較。 – lmo