R 从ctree中提取内部节点信息并拆分(partykit)

2023-12-31

您好,我目前正在尝试使用 partykit 中的 ctree 提取存储在 R 中常量派对对象中的一些内部节点信息,但我发现导航对象有点困难,我可以在绘图上显示信息,但是我不知道如何提取信息 - 我认为它需要 nodeapply 或 partykit 中的其他功能?

library(partykit)
irisct <- ctree(Species ~ .,data = iris)
plot(irisct, inner_panel = node_barplot(irisct))

包含内部节点详细信息的绘图 https://i.stack.imgur.com/RWwZc.png

所有信息都可以通过绘图函数访问,但我想要类似于以下内容的文本输出:输出示例 https://i.stack.imgur.com/wm9dA.gif


主要技巧(如@G5W之前指出的)是采取[id]的子集party对象,然后提取数据(通过$data或使用data_party()函数),其中包含响应。我建议首先构建一个包含绝对频率的表,然后从中计算相对频率和边际频率。使用irisct对象普通表可以通过以下方式获得

tab <- sapply(1:length(irisct), function(id) {
  y <- data_party(irisct[id])
  y <- y[["(response)"]]
  table(y)
})
tab
##            [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## setosa       50   50    0    0    0    0    0
## versicolor   50    0   50   49   45    4    1
## virginica    50    0   50    5    1    4   45

然后我们可以添加一点格式到一个漂亮的table object:

colnames(tab) <- 1:length(irisct)
tab <- as.table(tab)
names(dimnames(tab)) <- c("Species", "Node")

然后使用prop.table() and margin.table()来计算我们感兴趣的频率。as.data.frame()方法变换自table布局为“长”data.frame:

as.data.frame(prop.table(tab, 1))
##       Species Node        Freq
## 1      setosa    1 0.500000000
## 2  versicolor    1 0.251256281
## 3   virginica    1 0.322580645
## 4      setosa    2 0.500000000
## 5  versicolor    2 0.000000000
## 6   virginica    2 0.000000000
## 7      setosa    3 0.000000000
## 8  versicolor    3 0.251256281
## 9   virginica    3 0.322580645
## 10     setosa    4 0.000000000
## 11 versicolor    4 0.246231156
## 12  virginica    4 0.032258065
## 13     setosa    5 0.000000000
## 14 versicolor    5 0.226130653
## 15  virginica    5 0.006451613
## 16     setosa    6 0.000000000
## 17 versicolor    6 0.020100503
## 18  virginica    6 0.025806452
## 19     setosa    7 0.000000000
## 20 versicolor    7 0.005025126
## 21  virginica    7 0.290322581

as.data.frame(margin.table(tab, 2))
##   Node Freq
## 1    1  150
## 2    2   50
## 3    3  100
## 4    4   54
## 5    5   46
## 6    6    8
## 7    7   46

并且可以通过(仍未导出)获得分割信息.list.rules.party()功能。你只需要询问all节点 ID(默认情况下仅使用终端节点 ID):

partykit:::.list.rules.party(irisct, i = nodeids(irisct))
##                                                               1 
##                                                              "" 
##                                                               2 
##                                           "Petal.Length <= 1.9" 
##                                                               3 
##                                            "Petal.Length > 1.9" 
##                                                               4 
##                       "Petal.Length > 1.9 & Petal.Width <= 1.7" 
##                                                               5 
## "Petal.Length > 1.9 & Petal.Width <= 1.7 & Petal.Length <= 4.8" 
##                                                               6 
##  "Petal.Length > 1.9 & Petal.Width <= 1.7 & Petal.Length > 4.8" 
##                                                               7 
##                        "Petal.Length > 1.9 & Petal.Width > 1.7" 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 从ctree中提取内部节点信息并拆分(partykit) 的相关文章

  • 是否可以忽略 Matplotlib 绘图的第一个默认颜色?

    Matplotlib plots each column of my matrix a with 4 columns by blue yellow green red Then I plot only the second third fo
  • 关于子组的新列和另一列中的百分比范围

    我有一个如下所示的示例 df df test lt data frame Group Name c Group1 Group2 Group1 Group2 Group2 Group2 Group1 Sub group name c A A
  • 距数据帧中最近的非 NA 值的距离

    我有以下数据帧 df 我想添加一列 其中包含与每行最接近的非 NA 值的距离 df lt data frame x 1 20 df c 1 3 4 5 11 14 15 16 x lt NA 换句话说 我正在寻找以下值 df distanc
  • 更新两组单选按钮 - 闪亮

    我问了这个问题 反应式更新两组单选按钮 闪亮 https stackoverflow com questions 35040579 update two sets of radiobuttons reactively shiny 昨天 但也
  • Powershell 命令未发现异常

    我有以下 powershell 脚本 它使用一个函数并且可以在 ISE 中正常运行 Get ComputerSessions Computer localhost Functions Function Get ComputerSession
  • 在防风草模型上使用 VIP 包计算重要性度量

    我正在尝试使用 vi firm 在防风草中制作的逻辑回归模型上计算特征重要性 对于正则表达式 我将使用 iris 数据集并尝试预测观察结果是否为 setosa iris1 lt iris gt mutate class case when
  • R:(中缀)运算符的两个定义之间的冲突:如何指定包?

    在 R 中 每当两个包定义相同的函数时 很容易指定要使用哪个包pkg foo 但是 当冲突的功能是一个时 你该怎么办 infix运算符 即使用定义 举个例子 两者ggplot2 and crayon define 有没有一种方法可以让我默认
  • 如何通过组度量的平均值在 df 内排列 dplyr:: 组?

    借鉴吴卡拉的设计https stackoverflow com a 26555424 9350837 https stackoverflow com a 26555424 9350837答案 我希望根据各个组汇总测量的平均值对分组 df 进
  • 将模式的所有元素与向量以相同的顺序匹配

    我创建了一个函数yes seq需要两个参数 一个模式pat和数据dat 该函数以相同的顺序查找数据中是否存在模式 例如 dat lt letters 1 10 dat 1 a b c d e f g h i j pat lt c a c g
  • R,igraph,是否可以用图案填充顶点

    使用 R 和 igraph 绘制图形 我使用颜色来标记顶点类型 请参阅下面的代码 是否可以用图案而不是颜色填充顶点 以便在以彩色和黑白查看时可以区分节点类型 我需要 4 种独特的颜色 图案 colorbrewer 中唯一适合的调色板是这个
  • 在 Windows / Linux 中创建 Mac 包

    我自己努力制作一个 r 包 我按照 stackoverflow 中上一个问题的说明进行操作如何为外行开发软件包 http cran r project org bin windows Rtools 以下是我根据上一个问题采取的步骤 在新的
  • 如何将数据从长格式重塑为宽格式

    我在重新排列以下数据框时遇到问题 set seed 45 dat1 lt data frame name rep c firstName secondName each 4 numbers rep 1 4 2 value rnorm 8 d
  • R 中具有 p 值的相关矩阵

    假设我想要传导相关矩阵 library dplyr data iris iris gt select if is numeric gt cor y iris Petal Width method spearman gt round 2 现在
  • R 3.5 - read.csv 无法读取 UTF-16 csv 文件

    我的代码如下 read csv http asic gov au Reports YTD 2018 RR20180420 001 SSDailyYTD csv skip 1 fileEncoding UTF 16 sep t header
  • 如何对范围内的行进行分组并考虑第三列?

    我有一个遗传数据集 我想对基因组中物理上靠近的遗传变异 行进行分组 我想对每条染色体基因组中某些点范围内的基因进行分组 chrom 我的 点 数据集包含变体 行需要在一定范围内的位置 如下所示 chrom low high 1 500 17
  • ggplot2 + 使用比例 X 的日期结构

    我真的需要帮助 因为我已经迷路了 我正在尝试创建一个折线图 显示几个团队一年来的表现 我将一年分为几个季度 2012 年 1 月 1 日 2012 年 4 月 1 日 2012 年 8 月 1 日 12 1 12 并将 csv 数据帧加载到
  • 在 matplotlib 中使用一组标量值对球体表面着色

    我对 matplotlib 相当陌生 这也是我的第一个问题 我试图代表脑电图记录的头皮表面电位 到目前为止 我已经有了一个球体投影的二维图形 它是使用轮廓生成的 并且几乎可以归结为普通的热图 有什么方法可以在半个球体上完成此操作吗 即生成一
  • ggplot 按因子和梯度颜色

    我正在尝试绘制一个对两个变量 一个因子和一个强度 进行着色的图 我希望每个因素都是不同的颜色 并且我希望强度是白色和该颜色之间的渐变 到目前为止 我已经使用了诸如对因子进行分面等技术 将颜色设置为两个变量之间的相互作用 并将颜色设置为因子并
  • 如何在闪亮的observeEvent中监听多个事件表达式

    我想要两个不同的事件触发观察者 有人建议here https stackoverflow com questions 34731975 how to listen for more than one event expression wit
  • 解压 R 数据框中的列表

    我有一个dataframe其中一个字段包含不同长度的列表 我想将该字段中列表的每个元素提取到其自己的字段中 以便我可以将结果收集到一个很长的字段中dataframe每个列表元素都有一个 id 这是一个例子dataframe dat lt s

随机推荐