Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:GLM:数据集中不存在因子级别,但我仍然需要系数_R_Glm_R Factor - Fatal编程技术网

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

R:GLM:数据集中不存在因子级别,但我仍然需要系数,r,glm,r-factor,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,da

当我训练一个模型,然后对测试数据进行预测时,有时训练数据中不存在的某个因子水平出现在测试数据中,这给了我一个错误,因为训练模型时因子水平不可用

工作示例:

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

mtcars2警告:这不是处理看不见的级别的好方法,结果将被关闭。我不推荐。

话虽如此,您可以做以下操作。即将缺少的级别添加到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 
#添加第5级

模型$xlevels$gear[3]这到底是为什么被否决?这会给我一个预测因子1吗?这个解决方案给出了一个错误:警告消息:在predict.lm(object,newdata,se.fit,scale=1,type=ifelse)中(type==:从秩缺陷拟合进行的预测可能会产生误导,这不是一个错误,而是一个警告。之所以会出现这种情况,是因为没有足够的训练记录供glm使用。我忽略了对系数的调整。级别5将被视为0,因此您将只返回截距。如果您希望包含此项系数需要调整。但这是非常危险的,尤其是在日志链接等情况下。好的,非常感谢!但我不明白为什么这是危险的,为什么你不推荐它?1你调整一个训练模型以获得看不见的因子水平。如果这些在训练数据中,你的系数将不同。p值也是如此es和所有其他估计。这样做与200年的回归建模背道而驰。2如果你想处理看不见的因素,最好从预测中删除它们,而不要预测任何东西。如果你知道存在看不见的因素水平,请确保你可以在训练数据或使用模型中获得它们的样本它可以处理看不见的因素水平,主要是通过预处理训练和测试。