R:GLM:数据集中不存在因子水平,但我仍然想要系数
R: GLM: factor level not present in data set, but I still want coefficient
当我训练一个模型,然后对测试数据进行预测时,有时训练数据中不存在的一些因子水平会出现在测试数据中,这会给我一个错误,因为因子水平不是训练模型时可用。
工作示例:
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 中指定的因子的所有因子水平的系数,如果某个水平不在数据中,我希望在我的 GLM 对象中将该因子设置为 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
当我训练一个模型,然后对测试数据进行预测时,有时训练数据中不存在的一些因子水平会出现在测试数据中,这会给我一个错误,因为因子水平不是训练模型时可用。
工作示例:
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 中指定的因子的所有因子水平的系数,如果某个水平不在数据中,我希望在我的 GLM 对象中将该因子设置为 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