我希望使用R来绘制一个图,看起来像一个层次聚类树(树状图),除了在我的情况下,我已经知道哪些集群与哪些合并。
**示例:*假设我们有对象'a'
,'b'
,'c'
,'d'
和'e'
。它们开始时是5个集群1,2,3,4和5。现在我想将1和2合并到一个新的集群(集群6),然后合并集群3和5(集群7),然后合并集群6和集群4(集群8) 并停止。然后这个树将由列表[ (1,2), (3,5), (6,4) ]
指定。
希望描述足够清楚。这里基本上有两个子问题需要解决:
- 从一个完全有监督的过程中生成一个聚类对象;
- 在到达顶端之前将树状图剪掉;
如果后者对于一个问题来说太多了,你可以在回答中省略它。
1条答案
按热度按时间7kqas0il1#
下面是一个手动构造类“hclust”对象的尝试。
首先-检查此对象应该具有哪些属性:
其次-检查所有这些中必须存在哪些信息:
第三步-创建一个对象并添加合并信息:
注意事项:根据
hclust()
的帮助页面,merge应该是一个两列的矩阵,指定在每一步合并哪些对象。看起来它必须包括将所有组合并到一个最终树中的所有步骤,所以你可能无法中途停止(因为这将是3个独立的树)。负值表示叶子(即,c(-1,-2)指示在第一步骤合并观察1和2)。正值是指在先前步骤中获得的聚类(即,c(-4,1)指示在该步骤处,观察4与在步骤1处获得的聚类合并)。第四-增加高度:
注意:这保存了每个合并的合并高度。
第五-提供观察顺序:
注意:这是观察值在x轴上显示的顺序。需要这样才能使分支不重叠。您可以提供重叠的顺序,但最终的树状图图片看起来不会很漂亮。
第六-添加标签:
注意:这些是最后一棵树中叶子的名字。
第七-为我们的对象祝福一个类:
注意:
plot()
函数需要选择合适的方法。第八-绘制结果:
注意:hang参数使所有的叶子都在相同的y轴水平上,rect绘制了一个白色矩形,在视觉上隐藏了上面的树,这模仿了您的要求,即不要完全连接所有对象。
可能有更简单/更好的方法,但我不知道。