使用 rpart.plot 功能绘制 ctree

Han*_*aal 6 r party rpart

一直在尝试使用该rpart.plotctreepartykit库中绘制 a 。这样做的原因是当树很深时,默认的绘图方法很糟糕。就我而言,我的max_depth = 5.

我真的很喜欢rpart.plot的输出,因为它允许深树在视觉上显示得更好。输出如何寻找一个简单的例子:

部分

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想使用 ctree 从 partykit 模型中获取此输出

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

rpart.plot(multi.class.model)
>Error: the object passed to prp is not an rpart object
Run Code Online (Sandbox Code Playgroud)

有什么方法可以强制 ctree 对象rpart运行它吗?

Ach*_*eis 6

据我所知,用于可视化rpart树的所有其他包都是真正rpart特定的,而不是基于party用于表示树/递归分区的不可知类。此外,我们还没有尝试as.rpart()party对象实现一个方法,因为rpart该类确实不太适合于此。

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

library("partykit")
data("GSOEP9402", package = "AER")
ct <- ctree(school ~ ., data = GSOEP9402, maxdepth = 5, alpha = 0.5)
Run Code Online (Sandbox Code Playgroud)

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

ctree-默认

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

st <- as.simpleparty(ct)
plot(st)
Run Code Online (Sandbox Code Playgroud)

简单派对

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

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))
Run Code Online (Sandbox Code Playgroud)

简单派对2

除了终端面板函数 ( tp_args) 的参数之外,我还调整了边缘面板函数 ( ep_args)的参数,以避免边缘出现一些过度绘制。

当然,您也可以更改整个面板功能并自行滚动......

  • 感谢@achim-zeileis,感谢您抽出时间提供帮助。我会玩这个功能。什么是项目的官方 git repo,那么如果我将一些配色方案集成到决策节点并留下 Ill pull request 功能 (2认同)