使用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")
答案 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的矩阵,所以你得到了你看到的错误。