我有一个距离矩阵 1609*1609,距离范围在 0~1 之间。如何使用这个矩阵来获得自然簇数?
我知道spss有一个TwoStep集群函数,可以生成特定数量的集群,但输入应该是变量列表。我只有距离矩阵,所以我认为我不能在 SPSS 中使用 TwoStep 集群。
我尝试使用hclust
in R
,但它没有给我集群的数量。我尝试使用NbClust
,但我不知道我的“矩阵”是什么。我只有相异矩阵。
样本数据如下。
diss_matrix<-matrix(
c(0,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.25,0.75,0.916666667,0.75,
0.916666667,0,0.916666667,0.916666667,0.916666667,0.916666667,0.75,0.25,0.916666667,0.25,
0.916666667,0.916666667,0,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,
0.916666667,0.916666667,0.916666667,0,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,
0.916666667,0.916666667,0.916666667,0.916666667,0,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,
0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0,0.916666667,0.916666667,0.916666667,0.916666667,
0.25,0.75,0.916666667,0.916666667,0.916666667,0.916666667,0,0.5,0.916666667,0.75,
0.75,0.25,0.916666667,0.916666667,0.916666667,0.916666667,0.5,0,0.916666667,0.25,
0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0.916666667,0,0.916666667,
0.75,0.25,0.916666667,0.916666667,0.916666667,0.916666667,0.75,0.25,0.916666667,0),
nrow=10,
ncol=10,
byrow = TRUE)
dimnames(diss_matrix) = list(
paste0("A", 1:10),# row names
paste0("A", 1:10)) # column names
diss_matrix
我hclust
用来绘制情节,但这不是我想要的。
library(stats)#install.packages("hclust")
diss_matrix2<-as.dist(diss_matrix, diag = FALSE, upper = FALSE)
fit <- hclust(diss_matrix2, method="ward.D")
plot(fit)
我想自动生成组号,所以我尝试NbClust
.
library(NbClust)
NbClust(data = "NULL", diss = diss_matrix, distance ="NULL", min.nc = 2, max.nc = 15, method = "ward", index = "all", alphaBeale = 0.1)
但它显示
Error in t(jeu) %*% jeu :
requires numeric/complex matrix/vector arguments
提前致谢。