4

我正在使用partyR 中的包。

我想从结果树的各个节点获取各种统计数据(平均值、中位数等),但我看不到如何做到这一点。例如

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq, 
                   controls = ctree_control(maxsurrogate = 3))
airct
plot(airct)

生成具有 4 个终端节点的树。我如何获得每个节点的平均空气质量?

4

4 回答 4

7

我无法得到节点的哪个变量是空气质量。但我在这里向您展示如何自定义您的树状图:

innerWeights <- function(node){
  grid.circle(gp = gpar(fill = "White", col = 1))
  mainlab <- node$psplit$variableName
  label   <- paste(mainlab,paste('prediction=',round(node$prediction,2) ,sep= ''),sep= '\n')
  grid.text( label= label,gp = gpar(col='red'))
}

plot(airct, inner_panel = innerWeights)

在此处输入图像描述

编辑以按节点获取统计信息

图书馆(gridExtra)

innerWeights <- function(node){
  dat <- round_any(node$criterion$statistic,0.01)
  grid.table(t(dat))
}
plot(airct, inner_panel = innerWeights)

在此处输入图像描述

于 2013-01-09T16:50:37.260 回答
2

这比我想象的要难得多。尝试这样的事情:

a <- by(airq,where(airct),colMeans) #or whatever function you desire for colMeans
a
a$"3" #access at node three
a[["3"]] #same thing

您可能会发现一些其他有用的示例?`BinaryTree-class`

于 2013-01-09T16:49:23.580 回答
2

如果您迷失在 R 空间中,如何到达那里(文档并不能立即帮助您)

首先,尝试str(airct):输出有点长,因为结果很复杂,但对于更简单的情况,例如 t-test,这就是您所需要的。

既然print(airct)或只是airct提供了非常有用的信息,那么打印是如何工作的?尝试class(airct)或检查文档: if of class 的结果BinaryTree

好的,我们可以从文档中看到这一点,在这种情况下,BinaryTree 页面上的信息已经足够好了(请参阅该页面上的示例。)

但是假设作者很懒惰: try getAnywhere(print.BinaryTree)。在顶部你会发现y<-x@responses:所以尝试 airct@responses下一个

于 2013-01-09T16:52:06.483 回答
1

您也可以使用dplyr包来执行此操作。

首先获取每个观察值属于哪个节点并将其存储在数据框中。

airq$node <- where(airct)

然后用于group_by按节点对观测值进行分组,并用于summarise计算臭氧测量的平均值。您可以换成mean您喜欢的任何汇总统计功能。

airq %>% group_by(node) %>% summarise(avg=mean(Ozone))

这给出了以下结果。

    node     avg
   (int)    (dbl)
1     3 55.60000
2     5 18.47917
3     6 31.14286
4     8 81.63333
5     9 48.71429
于 2016-07-12T22:17:20.153 回答