我在选定变量集上的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.omit
和na.rpart
之间找到折衷方案?