Я пытаюсь использовать функцию рекурсивного регрессионного рельефа в R (quantregForest), которая построена на пакете Random Forest. Я получаю ошибку несоответствия типа, что я не могу понять, почему.
Я тренирую модель, используя
qrf <- quantregForest(x = xtrain, y = ytrain)
который работает без проблем, но когда я пытаюсь протестировать новые данные, например
quant.newdata <- predict(qrf, newdata= xtest)
он дает следующую ошибку:
Error in predict.quantregForest(qrf, newdata = xtest) :
Type of predictors in new data do not match types of the training data.
Мои данные для обучения и тестирования поступают из отдельных файлов (отсюда и отдельные кадры данных), но имеют одинаковый формат. Я проверил классы предикторов с помощью
sapply(xtrain, class)
sapply(xtest, class)
Вот результат:
> sapply(xtrain, class)
pred1 pred2 pred3 pred4 pred5 pred6 pred7 pred8
"factor" "integer" "integer" "integer" "factor" "factor" "integer" "factor"
pred9 pred10 pred11 pred12
"factor" "factor" "factor" "factor"
> sapply(xtest, class)
pred1 pred2 pred3 pred4 pred5 pred6 pred7 pred8
"factor" "integer" "integer" "integer" "factor" "factor" "integer" "factor"
pred9 pred10 pred11 pred12
"factor" "factor" "factor" "factor"
Они точно такие же. Я также проверил значения "NA". Ни xtrain, ни xtest не имеют значения NA в нем. Я пропустил что-то тривиальное здесь?
Обновление I: выполнение предсказания по данным обучения по-прежнему дает ту же ошибку
> quant.newdata <- predict(qrf, newdata = xtrain)
Error in predict.quantregForest(qrf, newdata = xtrain) :
names of predictor variables do not match
Обновление II: я объединил свои тренировочные и тестовые наборы, чтобы строки от 1 до 101 были данными обучения, а остальное - тестированием. Я изменил пример, приведенный в (quantregForest) следующим образом:
data <- read.table("toy.txt", header = T)
n <- nrow(data)
indextrain <- 1:101
xtrain <- data[indextrain, 3:14]
xtest <- data[-indextrain, 3:14]
ytrain <- data[indextrain, 15]
ytest <- data[-indextrain, 15]
qrf <- quantregForest(x=xtrain, y=ytrain)
quant.newdata <- predict(qrf, newdata= xtest)
И это работает! Я был бы признателен, если бы кто-нибудь мог объяснить, почему он работает таким образом, а не с другим путем?