【问题标题】:R multiway split trees using ctree {partykit}使用 ctree {partykit} 的 R 多路分裂树
【发布时间】:2015-12-30 05:01:41
【问题描述】:

我想使用partykit 中的ctree 函数通过条件推理树分析我的数据。我特别选择了这个功能,因为 - 如果我理解正确的话 - 它是唯一允许多路拆分的功能之一。我需要这个选项,因为我的所有变量都是多级(无序)分类变量。

但是,尝试使用ctree_control 启用多路拆分会出现以下错误:

aufprallentree <- ctree(case ~., data = aufprallen,
  control = ctree_control(minsplit = 10, minbucket = 5, multiway = TRUE))
## Error in 1:levels(x) : NA/NaN argument
## In addition: Warning messages:
## 1: In 1:levels(x) :
##   numerical expression has 4 elements: only the first used
## 2: In partysplit(as.integer(isel), index = 1:levels(x)) :
##   NAs introduced by coercion

有人知道如何解决这个问题吗?或者如果我弄错了,ctree 不允许多路拆分?

为清楚起见,我的数据概述:(无 NA)

str(aufprallen)
## 'data.frame':    299 obs. of  10 variables:
##  $ prep          : Factor w/ 6 levels "an","auf","hinter",..: 2 2 2 2 2 2 1 2 2 2 ...
##  $ prep_main     : Factor w/ 2 levels "auf","other": 1 1 1 1 1 1 2 1 1 1 ...
##  $ case          : Factor w/ 2 levels "acc","dat": 1 1 2 1 1 1 2 1 1 1 ...
##  $ sense         : Factor w/ 3 levels "crashdown","crashinto",..: 2 2 1 3 2 2 1 2 1 2 ...
##  $ PO_type       : Factor w/ 4 levels "object","region",..: 4 4 3 1 4 4 3 4 3 4 ...
##  $ PO_type2      : Factor w/ 3 levels "object","region",..: 1 1 3 1 1 1 3 1 3 1 ...
##  $ perfectivity  : Factor w/ 2 levels "imperfective",..: 1 1 2 2 1 1 1 1 1 1 ...
##  $ mit_Körperteil: Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 1 ...
##  $ PP_place      : Factor w/ 4 levels "back","front",..: 4 1 1 1 1 1 1 1 1 1 ...
##  $ PP_place_main : Factor w/ 3 levels "marked","rel",..: 2 3 3 3 3 3 3 3 3 3 ...

提前致谢!

【问题讨论】:

    标签: r decision-tree


    【解决方案1】:

    几点说明:

    • 1:levels(x) 的错误是ctree 中的错误。代码应该是1:nlevels(x)。我刚刚在 R-Forge 上修复了这个问题——所以如果你想使用选项 now,你可以从那里检查 SVN 并手动安装包。 (如果您需要更多详细信息,请联系我。)Torsten 可能还会在接下来的几周内发布新的 CRAN 版本。

    • 另一个可以学习具有多路拆分的二叉分类树的函数是 partykit 包中的 glmtree。代码为glmtree(case ~ ., data = aufprallen, family = binomial, catsplit = "multiway", minsize = 5)。它使用参数不稳定性测试而不是关联的条件推理来确定分裂变量并采用形式似然。但在许多情况下,结果与ctree 非常相似。

    • 在这两种算法中,多路拆分都是非常基本的:如果选择分类变量进行拆分,则完全进行拆分选择。相反,所有类别都有自己的子节点。有些算法会尝试使用数据驱动的子节点数量(介于 2 和类别数量之间)来确定类别的最佳分组。

    • 即使您有超过两个级别的分类预测变量,您也不需要 多路拆分。许多算法只使用二进制拆分,因为任何多路拆分都可以由一系列二进制拆分来表示。然而,在许多数据集中,事实证明,不将全部分开,而仅将少数类别分开是有益的。

    总体而言,我的建议是从仅具有二元拆分的标准条件推理树开始。只有当事实证明这会导致同一因子中的许多二元分裂时,我才会继续探索多路分裂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 2017-08-13
      • 2017-06-24
      • 2015-08-19
      • 2018-02-23
      • 2020-10-21
      • 2015-12-26
      相关资源
      最近更新 更多