R中的clusplot期间出错

时间:2013-12-27 06:47:07

标签: r cluster-analysis

使用R执行群集时遇到错误。我有一个数据集 d 这是一个距离矩阵。变量 fit 通过以下

获得
fit <- kmeans(d,k=2) # assume that number of cluster lie between 1 and nrow(x)
clusplot(d, fit$cluster, color=TRUE, shade = TRUE, lines=0)

正在显示的错误是

  

mkCheckX(x,diss)出错:x不是数据矩阵

矩阵d由

给出
structure(c(2, 4, 6, 2, 4, 2), Size = 4L, Diag = FALSE, Upper = FALSE,
          method = "euclidean", call = dist(x = DATA, method = "euclidean"),
          class = "dist")

1 个答案:

答案 0 :(得分:2)

clusplot函数接受其第一个参数为矩阵或数据帧,或不相似矩阵(或距离矩阵),具体取决于diss参数的值FALSE 1}}默认情况下。有关详细信息,请参阅?clusplot

所以,你需要使用:

d = dist(DATA) # for a distance matrix or d = daisy(DATA) for a dissimilarity matrix
clusplot(d, diss=TRUE, fit$cluster, color=TRUE, shade = TRUE, lines=0)

clusplot(DATA, fit$cluster, color=TRUE, shade = TRUE, lines=0)

您收到错误是因为函数d未将矩阵mkCheckX识别为矩阵,因为R是类dist的对象(不是矩阵!) 。如果您尝试is.matrix(d),则应获得FALSE

另外,不要期望使用这两种方法得到相同的结果,因为在提供数据矩阵时,聚类是以不同的方式产生的(基本的主成分分解,查看代码)。

如果您查看dist的帮助,可以看到您可以使用不同的方法(“euclidean”,“maximum”,“manhattan”,“canberra”,“binary”或“minkowski”)来计算距离,你应该通过改变计算距离的方式来预期不同的聚类。

总之,距离矩阵不是R的矩阵,所以你得到了你看到的错误。