如何在随机数据集上绘制条件推理树?

How to plot a conditional inference tree on random dataset?

我需要绘制条件推理树。我选择了 party::ctree() 函数。它适用于 iris 数据集。

library(party)
(irisct_party <- party::ctree(Species ~ .,data = iris))
plot(irisct_party)

但是当我使用随机数据时

library(wakefield)
set.seed(123)
n=200
studs <- data.frame(problem = factor(answer(n, x = c("No", "Yes"))),
                    age     = round(runif(n, 18, 25)),
                    gender  = factor(answer(n, x = c("M",   "F" ))),
                    smoker  = factor(answer(n, x = c("No",  "Yes" ))),
                    before  = round(runif(n, 60, 80)),
                    after   = before + round(runif(n, 10, 20))
)

(ct <-  party::ctree(problem ~ ., data = studs))
plot(ct)

我刚看到

Conditional inference tree with 1 terminal nodes

Response:  problem 
Inputs:  age, gender, smoker, before, after 
Number of observations:  200 

1)*  weights = 200 

问题。为什么条件推理树在随机数据上有1个终端节点?

在每个节点(包括根节点)中,ctree()对因变量(随机数据中的problem)和每个解释变量(age, gender, smoker, before, after)。它为每个测试计算 p-value,并选择具有最低 p-value 的解释变量进行拆分。但前提是 p-value 在某个显着性水平上显着(针对测试多个解释变量进行了调整)。在您的数据中,情况并非如此,因为实际上,因变量是独立于解释变量进行采样的。因此,算法停止,不分裂根节点。

备注:适配ctree()建议使用后继包partykit而非party。另请参阅随附的 vignette("ctree", package = "partykit") 了解更多详细信息。