2

我在聚类分析(分层聚类)中遇到了关于组的问题。例如,这是Iris 数据集的完整链接的树状图。

在此处输入图像描述

我使用后

> table(cutree(hc, 3), iris$Species)

这是输出

  setosa versicolor virginica
1     50          0         0
2      0         23        49
3      0         27         1

我在一个统计网站上读到,数据中的对象 1 始终属于组/集群 1。从上面的输出中,我们知道setosa组 1中。然后,我将如何了解其他两个物种。他们如何属于第 2 组或第 3 组。它是如何发生的。也许我需要知道一个计算?

4

1 回答 1

3

我猜您正在使用它来创建目前似乎不存在的图像。

> lmbjck <- cutree(hclust(dist(iris[1:4], "euclidean")), 3)
> table(lmbjck, iris$Species)

lmbjck setosa versicolor virginica
     1     50          0         0
     2      0         23        49
     3      0         27         1

Dist 是根据对具有相同列名和行名的三种不同物种的植物的测量结果创建的。

> iris.dist <- dist(iris[1:4], "euclidean")
> identical(rownames(iris.dist), colnames(iris.dist))
[1] TRUE

该对象被传递给 hclust,它构造一棵树并将其切成三块。对象iris.order保存绘制树状图的顺序。保留原始顺序,根据此顺序绘制树。

> iris.hclust <- hclust(iris.dist)
> iris.cutree <- cutree(iris.hclust, 3)
> iris.order <- iris.hclust$order

这是证据。我已经将原始Species名称、有序物种名称放在一起,因为它们可以在树状图中看到,订单号和来自 cutree 函数的组。

> data.frame(original = iris$Species, ordered = iris$Species[iris.order],
             order.num = iris.order, cutree = iris.cutree)

      original    ordered order.num cutree
1       setosa  virginica       108      1
2       setosa  virginica       131      1
3       setosa  virginica       103      1
4       setosa  virginica       126      1
5       setosa  virginica       130      1
6       setosa  virginica       119      1
    ...
103  virginica     setosa        31      2
104  virginica     setosa        26      2
105  virginica     setosa        10      2
106  virginica     setosa        35      2
107  virginica     setosa        13      3
108  virginica     setosa         2      2
    ...

让我们看看输出。如果你看第一行,下面order.num是数字 108。这意味着这个项目(树状图左侧的第一个项目)来自第 108 行。向下浏览到第 108 行,你可以看到原来Species的确实是virginica. Cutree 将此分配给 group 1。让我们看看第 3 行。在下面order.num你可以看到这个项目来自第 103 行。再次,如果你向下查看第 103 行中的原始物种,它是 (still) virginica。我将让您检查其他(随机)行并说服自己保留开始构建表的顺序。因此,表格应该是正确的。

于 2012-07-15T10:54:04.963 回答