假设我想使用虹膜数据示例,但正确分类杂色对我来说要重要5倍。
library(party)
data(iris)
irisct <- ctree(Species ~ .,data = iris, weights=ifelse(iris$Species=='versicolor', 5, 1))
plot(irisct)
然后树形图改变每个节点中的观察数和条件概率(它将versicolor乘以5)。有没有办法“禁用”这个,即显示原始观察数量(虹膜总数= 150)?
非常感谢你的帮助!
答案 0 :(得分:2)
ctree()
包中partykit
的增强重新实现也具有更灵活的绘图功能。具体来说,node_barplot()
面板函数获得了一个mainlab
参数,可用于自定义主标签。例如,对于虹膜数据:
library("partykit")
ct <- ctree(Species ~ ., data = iris)
您可以设置标签向量,然后提供访问这些标签的函数:
lab <- paste("Foo", 1:7)
ml <- function(id, nobs) lab[as.numeric(id)]
plot(ct, tp_args = list(mainlab = ml))
当然,上面的示例并不是很有意义,但可以通过一些编码进行修改以达到您想要的效果。
但是,请注意使用weights
参数对某些观测值进行上采样。 ctree()
函数确实将weights
视为案例权重,因此用于拆分的重要性测试会发生变化。随着观察数量的增加,所有p值变小,因此树选择更多分裂(除非同时增加mincriterion
)。将上面的ct
树与4个终端节点进行比较
ct2 <- ctree(Species ~ ., data = iris, weights = rep(2, 150))
ct3 <- ctree(Species ~ ., data = iris, weights = rep(2, 150), mincriterion = 0.999)
结果终端节点的数量是
c(width(ct), width(ct2), width(ct3))
[1] 4 6 4