簡體   English   中英

可以在缺少值的時間序列上使用動態時間扭曲嗎?

[英]Can Dynamic Time Warping be used on time series with missing values?

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

可能不是,我查看了包裝手冊,沒有關於缺失或NA值的信息。 我還試圖將您的數據提供給dtw() ,但它失敗了:

Error in dtw(TS1, TS2) : 
  No warping paths exists that is allowed by costraints

但是當我將所有NA值更改為0時,它很容易工作。

因此,如果您的唯一解決方案是此軟件包,您可以在DTW軟件包論壇上發帖 ,或者您可能必須自己處理丟失的數據。 您可以在這里找到一些提示 使用 fSeries * na()函數

*此套餐已不再提供 建議使用timeSeries

我也遇到過這種情況。 使用包含NA值的時間序列的DTW時收到錯誤消息的原因是,當DTW路徑中存在NA時,將不確定變形距離。 我建議你使用一些ARIMA模型來估算NA值,然后使用DTW。 檢查這個這個以輸入缺失的時間序列值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM