一直试图使用rpart.plot包从ctree库中绘制一个partykit。原因是当树很深时,默认的绘图方法很糟糕。就我而言,是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)
r - 使用rpart.plot功能绘制ctree-LMLPHP
我想使用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
有什么办法可以将ctree对象强制转换为rpart从而使之运行?

最佳答案

据我所知,所有其他用于可视化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)可为您提供:

r - 使用rpart.plot功能绘制ctree-LMLPHP

将树变成simpleparty时,默认情况下会显示文本摘要:
st <- as.simpleparty(ct)
plot(st)

r - 使用rpart.plot功能绘制ctree-LMLPHP

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

r - 使用rpart.plot功能绘制ctree-LMLPHP

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

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

关于r - 使用rpart.plot功能绘制ctree,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48322213/

10-12 20:12