如标题所示,我想知道是否可以使用DTW(动态时间扭曲)来计算具有缺失值的两个时间序列之间的DTW距离。
假设两个时间序列是两个气象站的日常温度,并且长度相等(例如365天),并且缺失值是两个时间序列的不同日期。
如果可以,R中的dtw包是否能够处理缺失的值?我没有找到可以在na.rm = T
之类的dtw()中设置的参数。
非常感谢!
感谢thelatemail提供的建议。下面是两个时间序列的简化示例,其中每个时间序列仅包含52个元素,缺失值设置为NA
。
TS1 = c(-3.26433, -5.09096, NA, -8.4158, -5.85485, -3.49234, -7.64666, -4.90124, NA, -4.68836, -1.38114, 1.55527, 2.81872, 2.44261, 3.57963, 6.19983, 7.42515, 8.41524, 6.32686, 10.0144, 9.53251, 13.4781, 12.3585, 10.6706, 10.2647, 16.6848, 16.4855, 20.1482, NA, 21.5734, 20.3946, 20.8824, 18.0325, 18.5813, 17.5453, 16.3315, 14.3068, 11.3164, 9.96398, 5.53102, 9.55094, 9.05897, 6.81199, 5.20343, 1.63158, -0.661077, -4.33853, -6.53655, NA, -10.8646, 1.11843, 1.23786)
TS2 = c(-5.76852, -10.2207, -11.8465, NA, -1.70019, -3.60319, -5.7718, -3.81106, -5.62284, -3.57516, 0.314511, 0.64058, 0.476162, NA, 4.23757, 5.15417, 7.29422, NA, 1.57376, 9.28236, 8.05182, 13.7175, 9.5453, 10.2417, 9.32423, 18.214, 18.3726, 16.661, 20.6563, 22.2901, 22.1109, 19.129, 15.8615, 16.7817, 17.247, 15.9921, 14.5804, 11.3693, 10.9349, 10.1196, 3.7467, 9.09229, 6.91285, NA, 4.20934, -0.566403, -2.94184, -3.81432, -10.0212, -15.9876, -2.56286, -1.88976)
答案 0 :(得分:8)
可能不是,我查看了包装手册,没有关于缺失或NA值的信息。我还尝试将您的数据提供给dtw()
,但它失败了:
Error in dtw(TS1, TS2) :
No warping paths exists that is allowed by costraints
但是当我将所有NA值都更改为0时,它很容易工作。
因此,如果您的唯一解决方案是此软件包,您可以在DTW package forum上发帖,或者您可能需要自己处理丢失的数据。您可能会发现some hints here或使用 *。na()
function of the fSeries
package
*此套餐为no longer available。建议改为使用timeSeries
package。
答案 1 :(得分:2)
我也遇到过这种情况。使用包含NA值的时间序列的DTW时收到错误消息的原因是,当DTW路径中存在NA时,将不确定变形距离。我建议你使用一些ARIMA模型来估算NA值,然后使用DTW。查看this或this,了解错失的时间序列值。
答案 2 :(得分:1)
dtw函数的工作原理如下。
#this shows how to register a distance function with proxy
install.packages("proxy")
require("proxy")
DWT.DIST<-function (x,y)
{
a<-na.omit(x)
b<-na.omit(y)
return(dtw(a,b)$normalizedDistance)
}
## create a new entry in the registry with two aliases
pr_DB$set_entry(FUN = DWT.DIST, names = c("DWT.DIST"))
d<-dist(appliances_t, method = "DWT.DIST")
hc<-hclust(d,"ave")
plot(hc)
pr_DB$delete_entry("DWT.DIST")
来源: