使用ctree{partykit}的R多路拆分树

使用ctree{partykit}的R多路拆分树,r,decision-tree,R,Decision Tree,我想使用partykit的ctree函数使用条件推理树分析数据。我特别选择这个函数,因为——如果我理解正确的话——它是唯一允许多路拆分的函数之一。我需要这个选项,因为我的所有变量都是多级(无序)分类变量 但是,尝试使用ctree\u control启用多路拆分会出现以下错误: aufprallentree <- ctree(case ~., data = aufprallen, control = ctree_control(minsplit = 10, minbucket = 5,

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

但是,尝试使用
ctree\u 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
提前谢谢

几句话:

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

  • 另一个可以通过多路拆分学习二叉分类树的函数是
    partykit
    包中的
    glmtree
    。代码将是
    glmtree(case~,data=aufprallen,family=binomial,catsplit=“multiway”,minsize=5)
    。它采用参数不稳定性检验代替关联条件推理来确定分裂变量,并采用形式似然法。但在许多情况下,结果与ctree相当相似

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

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

总的来说,我的建议是从只包含二进制拆分的标准条件推理树开始。只有当结果表明,这导致了在同一因子中的许多二进制拆分,那么我将继续探索多路拆分

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 ...