考虑一个简单的数据集,分为训练集和测试集:
当我训练一个逻辑回归模型来预测使用x的z,并获得测试集的预测结果时,一切都很顺利。
然而,对于一个外观相似的逻辑回归模型,却出现了“因子具有新水平”错误。
自从我从模型方程中删除了
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
当我训练一个逻辑回归模型来预测使用x的z,并获得测试集的预测结果时,一切都很顺利。
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~.
语法训练模型,但我希望能够在不删除列的情况下使用原始数据集的方法。
test$y
显示为一个具有5个水平的因子,但predict
在某种程度上并不考虑这一点。 - undefined