我正在尝试使用R对气象站进行集群。气象站提供诸如温度、风速、湿度等每小时间隔的数据。我可以使用tsclust库轻松地对单变量时间序列进行聚类,但当我对多变量序列进行聚类时,我会得到错误。
我有一个列表形式的数据,所以每个列表元素都是一个矩阵,其中包含一个站点的时间序列数据(变量是列,行是不同的时间戳)。
如果我运行:
tsclust(data, k = 2,
distance = 'Euclidean', seed = 3247, trace = TRUE)I get error: Error in do.call(.External,c(list(CFUN,x,y,pairwise,if (!is.function(method)) get(method) else method),:不是标量返回值
如果我尝试只计算距离矩阵,我会得到相同的错误
dist(data, method="euclidean")也许这样的数据不能计算欧几里德距离?如果是,那么可以计算出什么距离?
发布于 2019-04-26 02:09:30
你应该仍然可以使用欧几里得。
您只需自己实现它,因为标准方法只适用于向量,而不适用于矩阵。但这对于您自己的实现来说应该是微不足道的。
但是,如果您的变量具有不同的单位和大小,则很可能会遇到缩放问题。
发布于 2019-04-27 06:21:33
如果你的序列有相同的长度,你可以将它们转换成一个向量,然后重新调整维度。然而,就像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)https://stackoverflow.com/questions/55841627
复制相似问题