1

假设我想使用 iris 数据示例,但正确分类 versicolor 对我来说要重要 5 倍。

library(party)
data(iris)
irisct <- ctree(Species ~ .,data = iris, weights=ifelse(iris$Species=='versicolor', 5, 1))
plot(irisct)

然后树形图会更改每个节点中的观察次数和条件概率(它将 versicolor 乘以 5)。有没有办法“禁用”它,即显示原始观察数(虹膜总数 = 150)?

非常感谢您的帮助!

4

1 回答 1

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
于 2014-12-03T00:54:32.550 回答