如何使用距离矩阵生成自然簇数?

时间:2016-05-21 00:18:59

标签: r matrix cluster-computing distance-matrix

我有一个距离矩阵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

提前致谢。

1 个答案:

答案 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)

我相信您希望将分类与您的数据一起提供,以上代码应该提供这些数据。

祝你好运