3

我需要绘制一个条件推理树。我选择了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 个终端节点?

4

1 回答 1

2

在每个节点(包括根节点)中,对因变量(在您的随机数据中)和每个解释变量(、、、、 )ctree()进行独立性检验。它计算每个测试的 p 值,并选择具有最低 p 值的解释变量进行拆分。但前提是该 p 值在某个显着性水平上显着(为测试多个解释变量而调整)。在您的数据中,情况并非如此,因为事实上,因变量已独立于解释变量进行抽样。因此,算法停止并且不分裂根节点。problemagegendersmokerbeforeafter

备注:建议使用后继包partykit,不party适合装修ctree()。另请参阅随附vignette("ctree", package = "partykit")的详细信息。

于 2022-02-17T22:40:12.800 回答