Error de "factor tiene nuevos niveles" para la variable que no estoy usando
(1)
Puede intentar actualizar mod2$xlevels[["y"]]
en el objeto modelo
mod2 <- glm(z~.-y, data=train, family="binomial")
mod2$xlevels[["y"]] <- union(mod2$xlevels[["y"]], levels(test$y))
predict(mod2, newdata=test, type="response")
# 5
#0.5546394
Otra opción sería excluir (pero no eliminar) "y" de los datos de entrenamiento
mod2 <- glm(z~., data=train[,!colnames(train) %in% c("y")], family="binomial")
predict(mod2, newdata=test, type="response")
# 5
#0.5546394
Considere un conjunto de datos simple, dividido en un conjunto de entrenamiento y pruebas:
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
Cuando entreno un modelo de regresión logística para predecir z
usando x
y obtener predicciones de conjuntos de prueba, todo está bien:
mod <- glm(z~x, data=train, family="binomial")
predict(mod, newdata=test, type="response")
# 5
# 0.5546394
Sin embargo, esto falla en un modelo de regresión logística de aspecto equivalente con un error "El factor tiene nuevos niveles":
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
Desde que eliminé y
de mi ecuación modelo, me sorprende ver este mensaje de error. En mi aplicación, dat
es muy amplio, por lo que z~.-y
es la especificación de modelo más conveniente. La solución más sencilla que se me ocurre es eliminar la variable y
de mi marco de datos y luego entrenar el modelo con el z~.
Sintaxis, pero esperaba una manera de usar el conjunto de datos original sin la necesidad de eliminar columnas.