R partykit::ctree() 如何在选择相同 p 值的分裂变量时打破平局

R partykit::ctree() how to break tie in selecting splitting variable of identical p-value

对于 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) returns三个变量中的第一个为names(k$p.value),但plot选择了第三个。我想知道这种差异是否是由两个原因造成的:

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

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

如有任何见解,我们将不胜感激!

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

这是一个例子。谢谢!

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