如何计算病房层次聚类的平方和内和平方和之间的总数?

How to calculate total within sum of squares and between sum of squares for ward hierarchical clustering?

对于下面的病房聚类,我将如何计算平方和内和平方和之间的总数?我在网上看了几个资源,但都没有成功。我遇到了 css 包,但它与我的 R 版本不兼容,即 4.1.2

   hier_ward <- hclust(distance_matrix, method='ward')
    cut_ward <- cutree(hier_ward, k=6)

这里是使用R中包含的iris数据集的示例。加载数据然后计算聚类分析,不包括包含字符数据的第5列。

data(iris)
iris.dist <- dist(iris[, -5])
iris.hclust <- hclust(iris.dist, method="ward.D")
iris.6 <- cutree(iris.hclust, k=6)

可以使用 scale() 函数计算总平方和,使值以平均值为中心:

TSS <- sum(colSums(scale(iris[, -5], scale=FALSE)^2))
TSS
# [1] 681.3706

然后我们将数据分成 iris.6 定义的集群,并计算每组的平方和:

groups <- split(iris[, -5], iris.6)
WSS <- sapply(groups, function(x) sum(colSums(scale(x, scale=FALSE)^2)))
WSS
#         1         2         3         4         5         6 
#  5.814375  2.331667 12.708947  8.942308  5.567500  4.655000 
# sum(WSS)
# [1] 40.0198