使用rpart.plot功能绘制ctree

时间:2018-01-18 13:11:57

标签: r rpart party

尝试使用rpart.plot包从ctree库中绘制partykit。这是因为当树很深时,默认的绘图方法很糟糕。在我的情况下,我的max_depth = 5

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

rpart包

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)

enter image description here

我想使用ctree

从partykit模型中获取此输出

ctree

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,这样会运行?

1 个答案:

答案 0 :(得分:4)

据我所知,用于可视化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)

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

ctree-default

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

st <- as.simpleparty(ct)
plot(st)

simpleparty

这仍然重叠标签,所以我们可以设置一个小的便利函数,从每个节点的$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))

simpleparty2

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

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