当我训练模型,然后预测测试数据时,有时候训练数据中不存在的某些因子水平会出现在测试数据中,并且它会给我一个错误,因为当我没有提供因子水平时训练模型。
工作示例:
mtcars2<-mtcars
mtcars2$gear<-as.factor(mtcars2$gear)
mtcars_train<-mtcars2[1:10,]
mtcars_test<-mtcars2[11:nrow(mtcars2),]
model<-glm(formula = cyl ~ gear,data = mtcars_train,family=poisson(link="log"))
predict(object = model, newdata = mtcars_test)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = >object$xlevels) :
factor gear has new levels 5
我想得到GLM中因子I指定的所有因子水平的系数,如果某个水平不在数据中,我希望在GLM对象中将此因子设置为1。我怎么能这样做?
答案 0 :(得分:1)
警告:这不是处理看不见的关卡的好方法,结果将会关闭。我不推荐它。
话虽如此,你可以做到以下几点。即将缺失的级别添加到glm模型中的级别。
model$xlevels$gear
[1] "3" "4"
你可以看到缺少的是5级
# adding level 5
model$xlevels$gear[3] <- "5"
exp(predict(object = model, newdata = mtcars_test))
Merc 280C Merc 450SE Merc 450SL Merc 450SLC Cadillac Fleetwood Lincoln Continental Chrysler Imperial
5 7 7 7 7 7 7
Fiat 128 Honda Civic Toyota Corolla Toyota Corona Dodge Challenger AMC Javelin Camaro Z28
5 5 5 7 7 7 7
Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa Ford Pantera L Ferrari Dino Maserati Bora
7 5 7 7 7 7 7
Volvo 142E
5