我有一个距离矩阵1609 * 1609,距离范围在0~1之间。如何使用此矩阵获取自然簇数?
我知道spss有一个TwoStep集群函数,可以生成特定数量的集群,但输入应该是变量列表。我只有距离矩阵,所以我想我不能在SPSS中使用TwoStep集群。
我尝试在hclust
中使用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
提前致谢。
答案 0 :(得分:0)
从统计学家的角度来看,我建议你放弃你想要做的事情。您应该尝试使用较少的启发式方法。
查找包mclust
以获得基于模型的群集的一个很好的示例。
R中的聚类方法的一些一般示例在以下链接中提供:
http://www.statmethods.net/advstats/cluster.html
Everitt等人。 (http://www.wiley.com/WileyCDA/WileyTitle/productCd-EHEP002266.html),讨论mclust
R包使用的一些方法。试试下面的例子。
library(mclust)
data("iris")
fit1 <- Mclust(iris)
plot(fit1)
summary(fit1)
fit1$classification
df <- cbind(iris, fit1$classification)
head(df)
我相信您希望将分类与您的数据一起提供,以上代码应该提供这些数据。
祝你好运