【问题标题】:R partykit::ctree() how to break tie in selecting splitting variable of identical p-valueR partykit::ctree() 如何在选择相同 p 值的拆分变量时打破平局
【发布时间】:2020-10-21 07:23:26
【问题描述】:

对于partykit::ctree对象中的节点x,我使用以下几行来获取节点上的拆分变量:

k=info_node(x)
names(k$p.value)

但是,此代码返回的节点的拆分变量与plot 创建的树上的不同。事实证明,k$criterion 中的三列具有最小 p 值;即

inds=which(k$criterion['p.value',]==k$p.value)
length(inds) #3

似乎info_node(x) 将三个变量中的第一个返回为names(k$p.value),但plot 选择了第三个。我想知道这种差异是否是由两个原因造成的:

  1. 多个变量具有最小 p 值,并且有一种内部方法可以打破这种束缚,只选择一个分裂变量。

  2. 也许这三个变量的 p-value 略有不同,但由于 k$criterion 中的 p-value 精度固定,它们看起来具有相同的 p-value。

感谢任何见解!

【问题讨论】:

    标签: r party ctree


    【解决方案1】:

    比较是在内部以对数 p 值规模进行的,即在 p 值很小的情况下更可靠。如果 p 值仍然存在关联(在机器精度范围内),则根据相应检验统计量的大小打破关联。

    【讨论】:

    • 谢谢! names(k$p.value) 是如何选择的?
    • 是的。这是与最小 p 值相关的变量的名称 - 在必要时打破平局之后。
    • 那为什么names(k$p.value)plot树上的不一样呢?
    • 请发布一个最小的自包含可重现示例,然后我们可以看看。
    • 嗨@AchimZeileis,我发布了一个例子!你能看一下吗?
    【解决方案2】:

    这是一个例子。谢谢!

    library(partykit)
    a=rep('N',87)
    a[77]='Y'
    b=rep(F,87)
    b[c(7,10,11,33,56,77)]=T
    d=rep(1,87)
    d[c(29,38,40,42,65,77)]=0
    dfb=data.frame(a=as.factor(a),b=as.factor(b),d=as.factor(d))
    tFit=ctree(a ~ ., data=dfb, control = ctree_control(minsplit= 10,minbucket = 5,
                                                        maxsurrogate=2, alpha = 0.05))
    plot(tFit) #displayed splitting variable is d
    tNodes=node_party(tFit)
    nodeInfo=info_node(tNodes)
    names(nodeInfo$p.value) #b, not d
    

    【讨论】:

    • 嗨@AchimZeileis,这是示例!
    猜你喜欢
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多