我有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()?
答案 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
命令生成以下图表:
该软件包有两个相当不错的小插曲,可以帮助你入门。
答案 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)
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)
每个节点都可以存储任何信息,因此解析也很简单,因为您可以在解析时将树用作路由器。