如何从相异性(diana,簇R包)输出中获得最佳簇数?

问题描述 投票:0回答:2

我正在尝试从使用 cluster 包和 diana 方法(使用欧几里德相异性)获得的树状图中获取最佳簇数,如下所示:

mydatad <- diana(mydata, stand = FALSE)
mydata_dend <- fviz_dend(mydatad, cex = 0.5, k = 2, palette = "jco") 
## use factoextra and ggplot2 for visualization

然后我尝试将相异矩阵与 NbClust 一起使用:

NC <- NbClust(data = NULL, diss = mydatadd, distance = NULL, min.nc = 2, max.nc = 50, method= "single", index = "silhouette")

我收到此错误消息”:

Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") : 
  missing value where TRUE/FALSE needed

但是我的数据没有缺失值,对于相同的元素,dissim 矩阵中的最低值应该为 0(我的数据约为 2000 个元素,11 个变量)。

然后我尝试估计 dissim 。使用原始数据并估计欧氏距离来计算距离,因此不使用相异矩阵

NC <- NbClust(T2141d, diss = NULL, distance = "euclidean", min.nc = 2, max.nc = 50, method= "single", index = "silhouette")

我收到以下错误消息:

Error in t(jeu) %*% jeu : 
  requires numeric/complex matrix/vector arguments

欢迎任何建议,甚至建议使用不同的方法来获得最佳簇数。谢谢。

r cluster-analysis
2个回答
0
投票

NbClust
函数需要相异矩阵。当您运行
diana
时,返回的对象不是相异矩阵,尽管它是经过计算的。您需要设置
keep.diss=TRUE
。在我展示如何使用示例数据集返回相异矩阵之前:

library(factoextra)
library(cluster)
mydata=data.frame(matrix(runif(2000*11),ncol=11))
mydatad <- diana(mydata, stand = FALSE,keep.diss=TRUE)
# check the dissimilarity matrix stored
class(mydatad$diss)
[1] "dissimilarity" "dist"

NC <- NbClust(data = NULL, diss = mydatad$diss, 
distance = NULL, min.nc = 2, max.nc = 50, 
method= "single", index = "silhouette")

0
投票

没有足够的声誉来发表评论;在stupidwolfs中答案

NbClust
是从NbClust包中导出的。

© www.soinside.com 2019 - 2024. All rights reserved.