对rpart.object的预测返回带有NA的变量的错误值

时间:2018-06-19 09:26:53

标签: r missing-data rpart

我在选定变量集上的cars数据集上运行回归树,并通过设置maxsurrogate = 0

禁用构建代理分割
    cars = car90[, -match(c("Rim", "Tires", "Model2"), names(car90))]
    carfit = rpart(Price/1000 ~ Country + Disp + Mileage + Eng.Rev, 
             data = cars, na.action = na.rpart, 
             control=rpart.control(maxcompete=0, maxsurrogate = 0))

当我在predict上应用carfit并尝试使用NA值预测变量时,R会给我一个答案,即使它不应该这样做。所以,我只需要预测具有实际值的变量:

  yhat = predict(carfit,cars, na.action = na.rpart)
  idx.yhat= attr(yhat, "names")
  cars$est.Price[row.names(cars) %in% idx.yhat] = yhat
  sub.cars = subset(cars, select = c(Country, Disp, Mileage, Eng.Rev, Price, 
  est.Price))
  head(sub.cars,10)

                            Country Disp Mileage Eng.Rev Price    est.Price
  Acura Integra               Japan  112      NA    2935 11950 11.445076923
  Acura Legend                Japan  163      20    2505 24760 27.912857143
  Audi 100                  Germany  141      NA    2775 26900 19.286666667
  Audi 80                   Germany  121      27    2835 18900 19.286666667
  BMW 325i                  Germany  152      NA    2625 24650 19.286666667
  BMW 535i                  Germany  209      NA    2285 33200 27.912857143
  Buick Century                 USA  151      21      NA 13150 11.445076923    

例如,R将提供Acura Integra的价格估算值,虽然基于树,它不应该,因为Mileage的值缺失且此观察不能分类正确。

我知道可以通过na.action的规范进行调整。但是,通过设置na.action=na.omit,该函数会根据rpart的结果删除过多的观察结果,其中预测实际上是可能的。是否可以在na.omitna.rpart之间找到折衷方案? enter image description here

0 个答案:

没有答案