rpart包中位数或几何平均值而不是平均值

时间:2015-07-23 14:27:56

标签: r median rpart

是否可以使用rpart中的R库更改某个地区的平均估算值与平均值不同,例如中位数或几何平均数? (或其他图书馆)

我相信我的树分区受极端值的影响很大,我想构建显示其他估算器的树。

谢谢!

1 个答案:

答案 0 :(得分:2)

右倾斜响应的常用技巧之一是采取日志。在许多应用程序中,这使响应分布更加对称,然后您无需从通常的平均预测切换。

更改树的学习的另一个解决方案是使用一些更健壮的分数,例如排名等。ctree()中的partykit函数为此提供非参数推理框架。

最后,partykit包还允许计算除了来自所有终端节点的均值之外的其他预测。您可以通过rpart轻松地将party树转换为as.party()树。一个非常简单的示例是学习rpart数据的cars

library("rpart")
data("cars", package = "datasets")
rp <- rpart(dist ~ speed, data = cars)

然后将其转换为party

library("partykit")
pr <- as.party(rp)

树形结构保持不变,但您可以获得增强的绘图和预测。默认的绘图方法产生:

rpart and party tree

此外,两个对象的默认预测都是相同的。

nd <- data.frame(speed = c(10, 15, 20))
predict(rp, nd)
##        1        2        3 
## 18.20000 39.75000 65.26316 
predict(pr, nd)
##        1        2        3 
## 18.20000 39.75000 65.26316 

但是,后者允许您指定应在每个节点中使用的FUN。其格式必须为function(y, w),其中y为响应,w为案例权重。由于我们在这里没有使用任何权重,我们可以简单地忽略该论点并执行:

predict(pr, nd, FUN = function(y, w) mean(y))
##        1        2        3 
## 18.20000 39.75000 65.26316 
predict(pr, nd, FUN = function(y, w) median(y))
##  1  2  3 
## 18 35 64 
predict(pr, nd, FUN = function(y, w) quantile(y, 0.9))
##    1    2    3 
## 28.0 57.0 92.2 

等等......有关详细信息,请参阅包装晕影。