R 最佳聚类公式:使用NbClust寻找等价物
我有两个变量,我根据矩阵B计算得出: 1) 相关矩阵R 最佳聚类公式:使用NbClust寻找等价物,r,matrix,cluster-analysis,correlation,hierarchical-clustering,R,Matrix,Cluster Analysis,Correlation,Hierarchical Clustering,我有两个变量,我根据矩阵B计算得出: 1) 相关矩阵cor(B) 2) 相关矩阵与相异矩阵的层次聚类 然后,我使用clustConfigurations函数来计算“肘形图”,以确定最佳的集群数量 见下面的代码: library(NetCluster) B = matrix( c(2, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 2, 1, 0, 0, 0, 3, 1, 0, 0, 2, 1, 0, 1, 4, 0,
cor(B)
2) 相关矩阵与相异矩阵的层次聚类
然后,我使用clustConfigurations
函数来计算“肘形图”,以确定最佳的集群数量
见下面的代码:
library(NetCluster)
B = matrix(
c(2, 0, 0, 1, 0, 0, 1,
0, 1, 0, 0, 2, 1, 0,
0, 0, 3, 1, 0, 0, 2,
1, 0, 1, 4, 0, 0, 2,
0, 0, 0, 0, 4, 0, 2,
0, 1, 0, 0, 0, 2, 1,
1, 0, 2, 2, 2, 1, 8),
nrow=7,
ncol=7)
colnames(B) = c("A", "B", "C", "D", "E", "F", "G")
rownames(B) = c("A", "B", "C", "D", "E", "F", "G")
B
A B C D E F G
A 2 0 0 1 0 0 1
B 0 1 0 0 0 1 0
C 0 0 3 1 0 0 2
D 1 0 1 4 0 0 2
E 0 2 0 0 4 0 2
F 0 1 0 0 0 2 1
G 1 0 2 2 2 1 8
Correlation_Matrix <- cor(B)
dissimilarity <- 1 - Correlation_Matrix
Correlation_Matrix_dist <- as.dist(dissimilarity)
Correlation_Matrix_dist
HClust_Correlation_Matrix <- hclust(Correlation_Matrix_dist)
clustered_observed_cors = vector()
num_vertices <- ncol(B)
clustered_observed_cors1 <-clustConfigurations(num_vertices,HClust_Correlation_Matrix,Correlation_Matrix)
以上代码是否等同于我的原始代码?如果不是,我需要做什么更改
谢谢
NbClust
是比hclust
更广泛的功能,更关注评估最终集群数量的指标
hclust
的默认方法是
这与NbClust使用的方法相同,选项为:method=“complete”
因此,使用Nbclust的结果来定义通过函数
hclust
获得的聚类的最终聚类数是正确的,您最终想要实现什么?是对变量进行聚类吗?你的问题可能不是你想要答案的问题。我想找到最佳数量的集群,然后返回到分层集群密度图,并根据我的发现进行截断。我不会用密度分布图,我只会用结果@YCRI使用斯坦福R实验室作为参考,他们提到使用相关矩阵。这最终是用于社交网络分析的。链接在这里:代码从第124行开始。当我试着测试他们的代码时,我的矩阵太大了,所以我试图为第196行找到一个替代方案。同样,收回这一点,你也可以通过执行nbclustering$Best.partition找到哪些变量属于哪些集群。所以我基本上只需要知道如何使nbclust公式等效于原始代码@YCRWhat关于索引,有4个选项:弗雷、麦克莱恩、辛迪斯、西豪特和邓恩。哪一个会给出与原始代码相同的结果?函数clustConfigurations
未在NbClust中实现。但是你可以使用其他指标以非图形方式评估你的问题的最佳集群数量。好的,谢谢,也许我可以在5个指标中看到最流行的一个,然后选择它。你认为这是最好的方法还是你有不同的建议@Y根据您想回答的问题加权指数,并选择最适合您的问题的指数(通常,大多数指数都在一个小叉中,使选择更容易)
library(NbClust)
nbclustering<-NbClust(diss = Correlation_Matrix_dist,
distance = NULL,
min.nc=2,
max.nc=20,
method = "complete",
index = "dunn")
This would give you the optimal amount of clusters:
nbclustering$Best.nc