根据规则构建/可视化树

时间:2012-09-18 15:05:44

标签: r

我有if / then语句描述树。例如:

node1: if VAR1 < X node = 2 else node = 3
node2: if VAR2 < Y node = 4 else node = 5
node3: terminal value = Z
...

不等式总是表示为小于&#34;&lt;&#34;。规则不一定按树深度顺序排列。

忽略解析语句的工作,在R中构建/可视化树的最简单方法是什么?是否有一个对象/函数/包我可以按规则调用一次来迭代地构建树然后调用plot()?

3 个答案:

答案 0 :(得分:0)

从我之前提供的评论中进行了扩展,这是party包中plot.BinaryTree示例的顶部:

   set.seed(290875)

   airq <- subset(airquality, !is.na(Ozone))
   airct <- ctree(Ozone ~ ., data = airq)

   ### regression: boxplots in each node
   plot(airct, terminal_panel = node_boxplot, drop_terminal = TRUE)

并根据上面的ctree命令生成以下图表:

enter image description here

该软件包有两个相当不错的小插曲,可以帮助你入门。

答案 1 :(得分:0)

我尝试深入研究pkg:party方法的代码,但无法非常有效地遵循依赖关系。我认为查看rpart包代码可能会更容易。 (编辑:进一步考虑是看igraph包。)

require(rpart)
fit <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)
print(fit)
#------------
n= 81 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 81 17 absent (0.79012346 0.20987654)  
   2) Start>=8.5 62  6 absent (0.90322581 0.09677419)  
     4) Start>=14.5 29  0 absent (1.00000000 0.00000000) *
     5) Start< 14.5 33  6 absent (0.81818182 0.18181818)  
      10) Age< 55 12  0 absent (1.00000000 0.00000000) *
      11) Age>=55 21  6 absent (0.71428571 0.28571429)  
        22) Age>=111 14  2 absent (0.85714286 0.14285714) *
        23) Age< 111 7  3 present (0.42857143 0.57142857) *
   3) Start< 8.5 19  8 present (0.42105263 0.57894737) *
#---code resumes ------
plot(fit)

enter image description here

rpart:::plot.rpart   # will show the code  ... depends on rpart::rpconvert
rpart::rpconvert

答案 2 :(得分:0)

另一个选项是data.tree包。例如,您可以这样做:

tree <- Node$new("node1")
tree$AddChild("node2", edgeLabel = "VAR1 < X")
tree$AddChild("node3", edgeLabel = "VAR1 >= X")

print(tree, "edgeLabel")

这将显示为:

  levelName  edgeLabel
1 node1              
2  ¦--node2   VAR1 < X
3  °--node3  VAR1 >= X

或绘图:

SetEdgeStyle(tree, label = function(node) node$edgeLabel)
plot(tree)

Nodes

每个节点都可以存储任何信息,因此解析也很简单,因为您可以在解析时将树用作路由器。