首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rpart.plot功能绘制ctree

使用rpart.plot功能绘制ctree
EN

Stack Overflow用户
提问于 2018-01-18 21:11:57
回答 1查看 4.8K关注 0票数 6

我一直在尝试使用rpart.plot包来绘制partykit库中的ctree。这样做的原因是,当树很深时,默认的绘图方法很糟糕。在我的例子中,是我的max_depth = 5

我真的很喜欢rpart.plot的输出,因为它允许在视觉上更好地显示深树。

rpart

代码语言:javascript
复制
library(partykit)
library(rpart)
library(rpart.plot)

df_test <- cu.summary[complete.cases(cu.summary),]

multi.class.model <- rpart(Reliability~., data = df_test)

rpart.plot(multi.class.model)

我希望使用ctree从partykit模型获得以下输出

ctree

代码语言:javascript
复制
multi.class.model <- ctree(Reliability~., data = df_test)

rpart.plot(multi.class.model)
>Error: the object passed to prp is not an rpart object

有没有什么办法可以强迫ctree对象变成rpart,这样它就可以运行了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-19 19:52:58

据我所知,所有其他用于可视化rpart树的包实际上都是rpart-specific,而不是基于用于表示树/递归分区的不可知的party类。此外,我们还没有尝试为party对象实现as.rpart()方法,因为rpart类实际上并不适合这样做。

但是您可以尝试调整partykit可视化,这些可视化可以通过面板函数对树的几乎所有方面进行自定义。可能有帮助的一件事是计算一个simpleparty对象,该对象在每个节点的$info中包含各种简单的摘要信息。然后,可以在node_terminal()面板功能中使用此功能,以便在树显示中打印信息。考虑以下简单的例子来预测德国社会经济小组中三种学校类型中的一种。为了达到所需的深度,我关闭了显著性测试的全部内容:

代码语言:javascript
复制
library("partykit")
data("GSOEP9402", package = "AER")
ct <- ctree(school ~ ., data = GSOEP9402, maxdepth = 5, alpha = 0.5)

足够大的设备上的默认plot(ct)为您提供:

将树转换为simpleparty时,默认情况下会得到文本摘要:

代码语言:javascript
复制
st <- as.simpleparty(ct)
plot(st)

这仍然有重叠的标签,所以我们可以设置一个小的方便函数,从每个节点的$info中提取感兴趣的比特,并将它们放入具有较小条目的较长字符向量中:

代码语言:javascript
复制
myfun <- function(i) c(
  as.character(i$prediction),
  paste("n =", i$n),
  format(round(i$distribution/i$n, digits = 3), nsmall = 3)
)
plot(st, tp_args = list(FUN = myfun), ep_args = list(justmin = 20))

除了终端面板函数(tp_args)的参数之外,我还调整了边缘面板函数(ep_args)的参数,以避免边缘中的一些重叠。

当然,您也可以更改整个面板函数并滚动您自己的...

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48322213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档