【问题标题】:Can Dynamic Time Warping be used on time series with missing values?动态时间扭曲可以用于缺失值的时间序列吗?
【发布时间】:2012-11-10 10:33:41
【问题描述】:

如标题所示,我想知道是否可以使用 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)

【问题讨论】:

  • 这听起来很有趣 - 您能否发布一个用于分析的数据类型的简化示例,以便那些可能回答您查询的人有具体的工作可以使用?
  • 根据阿里的回答,您是否可以先估算缺失值,然后运行dtw 程序?我知道有许多插补方法,但即使是像TS2[is.na(TS2)] <- sapply(which(is.na(TS2)),function(x) mean(c(TS2[x-1],TS2[x+1]))) 这样简单的方法也可以正常工作。
  • 谢谢!我实际上考虑了归责。但实际数据差距比示例中显示的要糟糕得多。对于某些要分析的时间序列,可能有 1/3 的数据点缺失...

标签: r time-series


【解决方案1】:

可能不是,我查看了包装手册,没有关于缺失值或 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

【讨论】:

    【解决方案2】:

    我也遇到过这种情况。将 DTW 与包含 NA 值的时间序列一起使用时收到错误消息的原因是,当 DTW 路径中存在 NA 时,翘曲距离将不确定。我建议您使用一些 ARIMA 模型估算 NA 值,然后使用 DTW。查看 thisthis 以估算缺失的时间序列值。

    【讨论】:

      【解决方案3】:

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

      来源:

      Link 01; Link 02

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-28
        • 2021-01-22
        • 1970-01-01
        • 2021-04-13
        • 2011-01-11
        • 2016-11-21
        相关资源
        最近更新 更多