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

R cluster analysis and dendrogram with correlation matrix

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

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

现在我不知道如何继续。我读了很多文章和例子,但没有什么对我有用。我怎样才能知道有多少集群适合我?

我已经试过了:

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

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

我得到了一个情节,但是它很乱,我不知道如何阅读它以及如何继续下去。它看起来像这样:

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

我也想创建一个屏幕截图。我读到会有一条曲线,你可以看到有多少簇是正确的。

我也做了聚类分析,选了2-20个Clusters,但是结果太长了,不知道怎么处理,有什么要注意的。

要确定 "optimal number of clusters" 有几种方法可用,尽管这是一个有争议的主题。

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))]))

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