我在使用modelr
add_predictions
函数时遇到以下错误。
modelr add_predictions 错误:在 model.frame.default(条款,newdata,na.action = na.action,xlev = object$xlevels)中:fe.lead.surgeon has new levels ....
据我了解,当您使用训练数据集制作预测模型并将模型应用于测试数据集时,这是一个常见问题,因为存在于训练数据集中的因子水平可能不存在于测试数据集中。但是,我使用相同的样本来创建模型并获取预测值,但仍然出现此错误。
具体来说,这是我正在使用的代码,如果您能深入了解为什么会发生此错误以及如何解决此问题,我将不胜感激。
# indep is a vector of independent variable names
# dep is a vector of dependent variable names
# id.case is the id variable
# sample is my dataset.
eq <-
paste(indep, collapse = ' + ') %>%
paste(dep, ., sep = ' ~ ') %>%
as.formula
s <-
lm(eq, data = sample %>% select(-id.case))
pred <-
sample %>%
modelr::add_predictions(s) %>%
select(id.case, pred)
根据@SimoneBianchi 的要求,我在这里提供了可重现的示例。
可重现的例子
library(tidyverse)
library(tibble)
library(data.table)
rename <- dplyr::rename
select <- dplyr::select
set.seed(10002)
id <- sample(1:1000, 1000, replace=F)
set.seed(10003)
fe1 <- sample(c('A','B','C'), 1000, replace=T)
set.seed(10001)
fe2 <- sample(c('a','b','c'), 1000, replace=T)
set.seed(10001)
cont1 <- sample(1:300, 1000, replace=T)
set.seed(10004)
value <- sample(1:30, 1000, replace=T)
sample <-
data.frame(id, fe1, fe2, cont1, value)
dep <- 'value'
indep <-
c('fe1','fe2', 'cont1')
eq <-
paste(indep, collapse = ' + ') %>%
paste(dep, ., sep = ' ~ ') %>%
as.formula
s <-
lm(eq, data = sample %>% select(-id))
pred <-
sample %>%
modelr::add_predictions(s) %>%
select(id, pred)
更新和解决方法
我发现的一种解决方法是您不使用建模器功能,而是使用拟合功能。但是,我仍然想了解为什么回归会自动从因子变量中删除体因子水平。如果有人知道,请发表评论。
pred <-
sample %>%
cbind(pred = fitted(s))
结束:数据集发现问题
我发现一些观察结果new levels
在相应的因子变量中是不适用的——错误。在我修复了 NA 之后,原始代码运行良好。所以,这是数据集而不是代码的问题!
谢谢大家试图帮助我。