动态时间规整法可以用于具有缺失值的时间序列吗?

10
正如标题所指示的那样,我想知道动态时间规整(DTW)是否可以用于计算具有缺失值的两个时间序列之间的DTW距离。假设这两个时间序列是两个天气站的日平均温度,长度相等(例如365天),并且缺失值在两个时间序列的不同日期。如果可能的话,R中的dtw包能够处理缺失值吗?我没有发现可以在dtw()中设置的参数,例如na.rm = T。非常感谢!感谢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)

1
这听起来很有趣 - 你能否发布一个简化的数据示例,以便那些可能能够回答你的问题的人有具体的东西可以使用? - thelatemail
根据Ali的回答,你可以先输入缺失值,然后再运行“dtw”程序吗?我知道有许多插补方法,但即使是像TS2[is.na(TS2)] <- sapply(which(is.na(TS2)),function(x) mean(c(TS2[x-1],TS2[x+1])))这样简单的方法也可以正常工作。 - thelatemail
谢谢!我其实考虑过填补数据空缺的方法。但实际上,数据缺失的情况比示例中展示的要严重得多。对于一些需要分析的时间序列数据,可能会有三分之一的数据点缺失... - user1795375
3个回答

8
也许不行,我查看了包手册,没有关于缺失或NA值的内容。我还尝试将您的数据输入到dtw()中,但失败了:
Error in dtw(TS1, TS2) : 
  No warping paths exists that is allowed by costraints

但是当我将所有NA值更改为0时,它很容易地解决了。
因此,如果您的唯一解决方案是这个包,您可以在DTW包论坛上发布帖子,或者您可能需要自己处理缺失的数据。 您可以在这里找到一些提示或使用fSeries包的na()函数*。
*该包已不再可用。建议改用timeSeries

3

我也遇到过这种情况。如果时间序列中包含NA值,使用DTW时出现错误提示的原因是当DTW路径中存在NA时,无法确定变形距离。我建议您使用一些ARIMA模型来填补NA值,然后再使用DTW。查看这个这个以填补缺失的时间序列值。


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")

来源:

链接 01; 链接 02


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接