我正在尝试从使用 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
欢迎任何建议,甚至建议使用不同的方法来获得最佳簇数。谢谢。
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")
没有足够的声誉来发表评论;在stupidwolfs中答案
NbClust
是从NbClust包中导出的。