我必须对大量数据执行聚类分析。由于我有很多缺失值,我做了一个相关矩阵。
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个聚类,但结果太长了,我不知道如何处理它以及重要的事情。
答案 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)