1

我有一个距离矩阵 1609*1609,距离范围在 0~1 之间。如何使用这个矩阵来获得自然簇数?

我知道spss有一个TwoStep集群函数,可以生成特定数量的集群,但输入应该是变量列表。我只有距离矩阵,所以我认为我不能在 SPSS 中使用 TwoStep 集群。

我尝试使用hclustin 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

提前致谢。

4

1 回答 1

0

从统计学家的角度来看,我建议你远离你正在尝试做的事情。您应该尝试使用较少启发式的方法。

在包中查找mclust基于模型的聚类的一个很好的例子。

以下链接提供了 R 中聚类方法的一些一般示例:

http://www.statmethods.net/advstats/cluster.html

埃弗里特等人。( http://www.wiley.com/WileyCDA/WileyTitle/productCd-EHEP002266.html ),讨论mclustR 包使用的一些方法。试试下面的例子。

library(mclust)

data("iris")

fit1 <- Mclust(iris)

plot(fit1)

summary(fit1)

fit1$classification

df <- cbind(iris, fit1$classification)

head(df)

我相信你想要分类以及你的数据,上面的代码应该提供。

祝你好运

于 2016-05-21T01:58:18.663 回答