我试图在R中创建一个序数回归树rpart,其预测变量主要是序数数据,存储factor在R中.
当我使用创建树时rpart,我得到这样的东西:

其中值是因子值(例如A170,标签的范围从-5到10).
然而,当我使用caret来train使用数据rpart,当我解压的最终模型,树不再具有有序预测.请参阅下面的示例输出树

如上所示,似乎序数变量A170现在已经转换为多个虚拟分类值,即A17010在第二个树中是虚拟A170值10.
那么,在使用caret包装树时,是否可以保留序数变量而不是将因子变量转换为多个二元指示变量?
让我们从一个可重现的例子开始:
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
Run Code Online (Sandbox Code Playgroud)
正如您所注意到的,使用rpart功能训练将因子级别组合在一起:
library(rpart)
rpart(y~x, data=dat)
Run Code Online (Sandbox Code Playgroud)

我能够使用train函数的公式接口重现插入符号包,将因子分成各自的级别:
library(caret)
train(y~x, data=dat, method="rpart")$finalModel
Run Code Online (Sandbox Code Playgroud)

我发现避免按级别拆分因子的解决方案是将原始数据帧输入到train函数而不是使用公式接口:
train(x=data.frame(dat$x), y=dat$y, method="rpart")$finalModel
Run Code Online (Sandbox Code Playgroud)
