R:GLM:数据集中不存在因子水平,但我仍然需要系数

时间:2018-05-18 13:41:30

标签: r glm r-factor

当我训练模型,然后预测测试数据时,有时候训练数据中不存在的某些因子水平会出现在测试数据中,并且它会给我一个错误,因为当我没有提供因子水平时训练模型。

工作示例:

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。我怎么能这样做?

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