我正在尝试使用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")
也许无法计算这些数据的欧几里德距离?如果是,那么可以计算出什么距离?
你应该仍然可以使用欧几里德。
您只需自己实现它,因为标准方法仅适用于矢量,而不适用于矩阵。但是,实现自己应该是微不足道的。
如果您的变量具有不同的单位和大小,您可能会遇到缩放问题。
如果您的系列具有相同的长度,您可以将它们转换为矢量,然后重新调整尺寸。然而,正如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)