我正在寻找使用 R 绘制一个看起来像层次聚类树(树状图)的图,除了在我的例子中,我已经知道哪些集群与哪些集群合并。
示例: 假设我们有对象
、'a'
、'b'
、'c'
和'd'
。它们以 5 个集群 1、2、3、4 和 5 开始。现在我希望 1 和 2 合并到一个新集群(集群 6),然后合并集群 3 和 5(集群 7),然后将集群 6 与集群合并4(第 8 组) 到此为止。然后这棵树将由列表指定'e'
.[ (1,2), (3,5), (6,4) ]
希望描述足够清楚。这里基本上有两个子问题需要解决:
如果后者对于一个问题来说太多了,你可以在答案中省略它。
这里尝试手动构建类“hclust”的对象。
首先-检查这个对象应该有什么属性:
fit <- hclust(dist(USArrests))
names(fit)
[1] "merge" "height" "order" "labels" "method" "call" "dist.method"
第二 - 检查所有这些信息中必须存在的信息:
help(hclust)
# read the section called "Values"
第三——创建对象并添加合并信息:
obj <- list()
obj$merge <- rbind(c(-1, -2), c(-3, -5), c(-4, 1), c(2, 3))
注意:根据
hclust()
合并的帮助页面,应该是一个两列矩阵,指定在每个步骤中合并哪些对象。似乎它必须包括将所有组合并为一棵最终树的所有步骤,因此您可能无法中途停止(因为那将是 3 棵独立的树)。负值表示叶子(即 c(-1, -2) 表示在第一步观察值 1 和 2 被合并)。正值是指在前面的步骤中获得的集群(即 c(-4, 1) 表示在这一步观察 4 与在步骤 1 中获得的集群合并)。
第四-添加高度:
obj$height <- 1:4
注意:这包含每个合并的合并高度。
第五 - 提供观察顺序:
obj$order <- c(1,2,4,3,5)
注意:这是观察结果在 x 轴上的显示顺序。必需的,以便分支不重叠。您可以提供重叠的订单,但最终的树状图图片看起来不会很漂亮。
第六-添加标签:
obj$labels <- 1:5
注意:这些是最终树中叶子的名称。
第七-用类祝福我们的对象:
class(obj) <- "hclust"
注意:
plot()
功能需要选择合适的方法。
第八-绘制结果:
plot(obj, hang=-1)
rect(1, 2.5, 99, 99, col="white", border="white")
注意:hang 参数使所有叶子都在相同的 y 轴水平上,并且 rect 绘制一个白色矩形,视觉上隐藏了上面的树,它模仿了您不完全连接所有对象的要求。
可能有更简单/更好的方法,但我不知道。