R中的clusplot期间出错

omqzjyyz  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(109)

在使用R执行聚类时,我遇到了一个错误。我有一个数据集 d,它是一个距离矩阵。变量 * 拟合 * 通过以下方式获得

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")

jtoj6r0c

jtoj6r0c1#

clusplot函数接受其第一个参数为矩阵或 Dataframe ,或相异性矩阵(或距离矩阵),具体取决于diss参数的值,默认值为FALSE。有关详细信息,请参阅?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”,“曼哈顿”,“堪培拉”,“binary”或“minkowski”)来计算距离,你应该通过改变计算距离的方法来期待不同的聚类。
总之,你的距离矩阵不是R的矩阵,所以你得到了你看到的错误。

相关问题