如何将 ctree 节点变成向量?

Posted

技术标签:

【中文标题】如何将 ctree 节点变成向量?【英文标题】:How to turn ctree nodes into a vector? 【发布时间】:2019-05-16 14:02:38 【问题描述】:

我将使用 iris 表的示例来解释我的问题。假设我想在萼片宽度和物种之间创建一棵树。为此,我将使用以下代码:

ctree(Species~Sepal.Width,data=iris)->a
plot(a,type="simple")

问题是,如果我想做一个数据框,例如计算每个节点中的案例数量(从 0 到 2.9;2.9 到 3.3 等),我发现这样做的唯一方法是通过手动创建一个新向量,然后使用dcasttable 函数。

这个解决方案的问题是,如果我有一个更大的树结果,它可能会非常困难。你知道任何其他解决方案吗?非常感谢。

【问题讨论】:

【参考方案1】:

实际上,ctree 创建的派对结构中存储了该信息。使用您的示例,a[1]$fitted[,1] 具有每个点最终位于哪个叶子。因此您可以通过以下方式获得每个叶子的点数:

table(a[1]$fitted[,1])
 3  4  5 
57 56 37 

如果您想查看与叶子编号相关的规则,您可以使用:

partykit:::.list.rules.party(a)
                                        3 
"Sepal.Width <= 3.3 & Sepal.Width <= 2.9" 
                                        4 
 "Sepal.Width <= 3.3 & Sepal.Width > 2.9" 
                                        5 
                      "Sepal.Width > 3.3"

【讨论】:

您好,如果我执行 a[1]$fitted[,1],我会收到此错误:a[1] 中的错误:'S4' 类型的对象不是子集。你知道我该如何解决吗? 当我执行上面的代码,然后执行我的代码时,我没有收到任何错误。当我运行class(a) 我得到[1] "constparty" "party" 你得到什么? 我得到 [1] "BinaryTree" attr(,"package") [1] "party

以上是关于如何将 ctree 节点变成向量?的主要内容,如果未能解决你的问题,请参考以下文章

ctree() - 如何获取每个终端节点的拆分条件列表?

如何打印带有范围的数值变量的 ctree 终端节点

如何绘制一个大的 ctree() 以避免重叠节点

如何获取所有终端节点 - r 中的权重和响应预测“ctree”

如何为 ctree(打包方)的终端节点添加标签?

ctree 图的终端节点中的缩放图