2

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

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

不等式总是表示为小于“<”。这些规则不一定按照树深度的顺序。

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

4

3 回答 3

0

扩展我之前给出的评论,这是派对包中示例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命令生成下图:

在此处输入图像描述

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

于 2012-09-18T19:08:05.703 回答
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)

在此处输入图像描述

rpart:::plot.rpart   # will show the code  ... depends on rpart::rpconvert
rpart::rpconvert
于 2012-09-18T20:03:29.173 回答
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)

节点

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

于 2016-05-14T12:45:44.360 回答