R聚类分析和具有相关矩阵的树状图

Posted

技术标签:

【中文标题】R聚类分析和具有相关矩阵的树状图【英文标题】:R cluster analysis and dendrogram with correlation matrix 【发布时间】:2018-05-26 08:11:23 【问题描述】:

我必须对大量数据进行聚类分析。由于我有很多缺失值,我制作了一个相关矩阵。

corloads = cor(df1[,2:185], use = "pairwise.complete.obs")

现在我有问题如何继续。我阅读了很多文章和示例,但没有什么对我真正有用。我怎样才能知道有多少集群对我有好处?

我已经试过了:

dissimilarity = 1 - corloads
distance = as.dist(dissimilarity) 

plot(hclust(distance), main="Dissimilarity = 1 - Correlation", xlab="") 

我有一个情节,但它非常混乱,我不知道如何阅读它以及如何继续。它看起来像这样:

知道如何改进它吗?我实际上能从中得到什么?

我还想创建一个 Screeplot。我读到会有一条曲线,您可以在其中看到有多少集群是正确的。

我也进行了聚类分析,选择了 2-20 个聚类,但结果太长了,我不知道如何处理,不知道看什么重要。

【问题讨论】:

您可以任意确定簇的数量。如何确定聚类的数量是非常有争议的,但一些分析可以帮助你。看看maptree 包中的kgs 函数。 我查了一下并读到它应该可以帮助您找到大量的集群。但我对这个主题完全陌生。作为集群和diss我必须输入什么?我的 corloads = cluster 和 diss = distance 吗? kgs (cluster, diss, alpha=1, maxclust=NULL) 【参考方案1】:

要确定“最佳聚类数”,有几种方法可供使用,尽管这是一个有争议的主题。

kgs 有助于获得最佳集群数。

按照您的代码可以:

clus <- hclust(distance)
op_k <- kgs(clus, distance, maxclus = 20)
plot (names (op_k), op_k, xlab="# clusters", ylab="penalty")

所以根据kgs 函数的最佳聚类数是op_k 的最小值,如图所示。 你可以得到它

min(op_k)

请注意,我将允许的最大集群数设置为 20。您可以将此参数设置为 NULL

查看this页面了解更多方法。

希望对你有帮助。

编辑

要找到最佳的聚类数,您可以这样做

op_k[which(op_k == min(op_k))]

加号

另请参阅 post 以从 @Ben 找到完美的图形答案

编辑

op_k[which(op_k == min(op_k))]

仍然会受到惩罚。要找到最佳聚类数,请使用

as.integer(names(op_k[which(op_k == min(op_k))]))

【讨论】:

嗨,非常感谢!我现在有一个情节,但我想我不能在这里发布它?不知道如何。 min(op_k) 是 7.628466。这是否意味着 7 或 8 个集群?情节看起来有5个……前4个很高,第5个在底部很远,然后所有其他的都在逐步上升。 @Essi min(op_k) 的值只是kgs 计算的惩罚。簇的最佳数量是由该值指示的。我编辑了我的答案,以便您获得最佳数量的集群。【参考方案2】:

我很高兴了解 kgs 函数。另一种选择是使用 dendextend 包中的 find_k 函数(它使用平均轮廓宽度)。但是考虑到 kgs 功能,我可能只是将它作为另一个选项添加到包中。 还要注意 dendextend::color_branches 函数,用您最终选择的集群数量为您的树状图着色(您可以在此处查看更多信息:https://cran.r-project.org/web/packages/dendextend/vignettes/introduction.html#setting-a-dendrograms-branches)

【讨论】:

非常感谢!我会试试的!

以上是关于R聚类分析和具有相关矩阵的树状图的主要内容,如果未能解决你的问题,请参考以下文章

晚辈向大佬请教spss如何制作相关性聚类分析树状图?

R语言ggtree画圆形的树状图展示聚类分析的结果

SPSS聚类树状图 怎么分析

基于边权重的图聚类

spss软件聚类分析怎么用,从输入数据到结果,树状图结果。整个操作怎么进行。需要基本思路。

spss软件聚类分析怎么用,从输入数据到结果,树状图结果。整个操作怎么进行。需要基本思路。