聚类多变量时间序列 - 关于距离矩阵的问题

问题描述 投票:0回答:2

我正在尝试使用R集群气象站。站点提供温度,风速,湿度等数据,每小时一次。我可以使用tsclust库轻松地聚合单变量时间序列,但是当我聚类多变量序列时,我会收到错误。

我将数据作为列表,因此每个列表元素是一个矩阵,其中包含一个站的时间序列数据(变量是列,行是不同的时间戳)。

如果我跑:

tsclust(data, k = 2,
                   distance = 'Euclidean',   seed = 3247, trace = TRUE)

我得到错误:do.call中出错(.External,c(list(CFUN,x,y,pairwise,if(!is.function(method))get(method)else方法),:不是标量返回值

如果我尝试仅计算距离矩阵,我得到的错误相同

dist(data, method="euclidean")

也许无法计算这些数据的欧几里德距离?如果是,那么可以计算出什么距离?

r time cluster-analysis distance series
2个回答
0
投票

你应该仍然可以使用欧几里德。

您只需自己实现它,因为标准方法仅适用于矢量,而不适用于矩阵。但是,实现自己应该是​​微不足道的。

如果您的变量具有不同的单位和大小,您可能会遇到缩放问题。


0
投票

如果您的系列具有相同的长度,您可以将它们转换为矢量,然后重新调整尺寸。然而,正如Anony-Mousse所提到的,使用具有不同尺度的变量的欧几里德距离可能会有问题,因此考虑使用zscore进行标准化:

series <- zscore(data)
pc <- tsclust(lapply(series, as.vector), distance="Euclidean", seed=3247L, trace=TRUE)

pc@datalist <- series
# replace ncol with the actual number of columns from your data
pc@centroids <- lapply(pc@centroids, matrix, ncol=3L)
© www.soinside.com 2019 - 2024. All rights reserved.