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

时间:2017-12-12 15:25:01

标签: r statistics cluster-computing analysis dendrogram

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

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

现在我有问题怎么回事。我读了很多文章和例子,但没有什么对我有用。我怎样才能知道有多少簇对我有用?

我已经尝试过了:

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

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

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

enter image description here

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

我还想创建一个Screeplot。我读到会有一条曲线,你可以看到有多少簇是正确的。

我还进行了聚类分析并选择了2-20个聚类,但结果太长了,我不知道如何处理它以及重要的事情。

2 个答案:

答案 0 :(得分:3)

要确定“最佳群集数量”,可以采用几种方法,尽管这是一个备受争议的主题。

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

答案 1 :(得分:1)

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