首页 文章

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

提问于
浏览
2

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

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 回答

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

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

相关问题