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