Рассмотрим простой набор данных, разбитый на набор для обучения и тестирования:
dat <- data.frame(x=1:5, y=c("a", "b", "c", "d", "e"), z=c(0, 0, 1, 0, 1))
train <- dat[1:4,]
train
# x y z
# 1 1 a 0
# 2 2 b 0
# 3 3 c 1
# 4 4 d 0
test <- dat[5,]
test
# x y z
# 5 5 e 1
Когда я тренирую модель логистической регрессии для прогнозирования z
с использованием x
и получаю предсказания тестового набора, все хорошо:
mod <- glm(z~x, data=train, family="binomial")
predict(mod, newdata=test, type="response")
# 5
# 0.5546394
Однако это не соответствует эквивалентной модели логистической регрессии с ошибкой "Фактор имеет новые уровни":
mod2 <- glm(z~.-y, data=train, family="binomial")
predict(mod2, newdata=test, type="response")
# Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
# factor y has new level e
Так как я удалил y
из моего модельного уравнения, я с удивлением вижу это сообщение об ошибке. В моем приложении dat
очень широк, поэтому z~.-y
является наиболее удобной спецификацией модели. Простейшее обходное решение, о котором я могу думать, это удалить переменную y
из моего фрейма данных, а затем обучить модель синтаксису z~.
, но я надеялся на способ использования исходного набора данных без необходимости удаления столбцов.