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个在底部很远,然后所有其他的都在逐步上升。 @Essimin(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聚类分析和具有相关矩阵的树状图的主要内容,如果未能解决你的问题,请参考以下文章