我正在尝试使用rpart
在R中创建序数回归树,其中预测变量主要是序数数据,在R中存储为factor
。
当我使用rpart
创建树时,我得到这样的结果:
其中值是因子值(例如A170
的标签范围为-5到10)。
但是,当我使用caret
使用train
rpart
数据时,当我提取最终模型时,树不再具有序数预测变量。请参阅下面的示例输出树
如上所示,似乎序数变量A170
现已转换为多个虚拟分类值,即第二个树中的A17010
是值A170
的虚拟变量{ {1}}。
那么,在使用10
包装树时,是否可以保留序数变量而不是将因子变量转换为多个二元指示变量?
答案 0 :(得分:6)
让我们从一个可重复的例子开始:
set.seed(144)
dat <- data.frame(x=factor(sample(1:6, 10000, replace=TRUE)))
dat$y <- ifelse(dat$x %in% 1:2, runif(10000) < 0.1, ifelse(dat$x %in% 3:4, runif(10000) < 0.4, runif(10000) < 0.7))*1
正如您所注意到的,使用rpart
功能的训练将因子水平组合在一起:
library(rpart)
rpart(y~x, data=dat)
我能够使用train
函数的公式接口重现插入符号包,将因子分成各自的级别:
library(caret)
train(y~x, data=dat, method="rpart")$finalModel
我发现避免按级别拆分因子的解决方案是将原始数据帧输入到train
函数而不是使用公式接口:
train(x=data.frame(dat$x), y=dat$y, method="rpart")$finalModel