聚类多元时间序列-有关距离矩阵的问题

时间:2019-04-25 04:01:29

标签: r time cluster-analysis distance series

我正在尝试使用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 method),错误,不是标量返回值

如果尝试使用

仅计算距离矩阵,则会遇到相同的错误
dist(data, method="euclidean")

也许无法为此类数据计算欧几里得距离?如果是,那么可以计算出什么距离?

2 个答案:

答案 0 :(得分:0)

您应该仍然可以使用欧几里得语。

您只需自己实现,因为标准方法仅适用于向量,不适用于矩阵。但这对于实现自己来说是微不足道的。

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

答案 1 :(得分:0)

如果您的系列长度相同, 您可以将它们转换为向量,然后重新调整尺寸。 但是,就像Anony-Mousse提到的那样, 将欧几里得距离与比例不同的变量一起使用可能会出现问题, 因此考虑使用private static void ShowValues() { Console.WriteLine($"Current values: A = {A}, B = {B}, C = {C}."); } private static int GetIntFromUser(string prompt) { int input; do { Console.Write(prompt); } while (!int.TryParse(Console.ReadLine(), out input)); return input; } private static void Main(string[] args) { while (true) { ShowValues(); ProcessInput(GetIntFromUser("Input a value: ")); } } 进行标准化:

zscore