0

我有一个基于数据 A 的 glm,我想对数据 B 进行评分以进行验证,但是 B 中的一些记录缺少数据。

而不是这些最终没有分数(na.omit)或被删除(na.exclude),我希望它们最终得到一个输出预测,该预测使用模型来确定一个仅基于具有值的数据的值。

一个可重复的例子......

data(mtcars)
model<-glm(mpg~.,data=mtcars)
mtcarsNA<-mtcars
NAins <-  NAinsert <- function(df, prop = .1){
  n <- nrow(df)
  m <- ncol(df)
  num.to.na <- ceiling(prop*n*m)
  id <- sample(0:(m*n-1), num.to.na, replace = FALSE)
  rows <- id %/% m + 1
  cols <- id %% m + 1
  sapply(seq(num.to.na), function(x){
    df[rows[x], cols[x]] <<- NA
  }
  )
  return(df)
}
mtcarsNA<-NAins(mtcarsNA,.4)
mtcarsNA$mpg<-mtcars$mpg
predict(model,newdata=mtcarsNA,type="response")

我需要最后一行来为所有记录返回结果(非 NA)。你能指出我需要的代码的方向吗?

4

1 回答 1

2

根据评论中的对话,您希望NA在预测之前将值替换为零。这对我来说似乎很危险/可疑——使用风险自负。

naZero <- function(x) { x[is.na(x)] <- 0; x }
mtcarszero <- lapply(mtcarsNA,naZero)
predict(model,newdata=mtcarszero,type="response")

应该是你想要的。

对于分类变量,如果您使用默认处理对比,那么我认为一致的做法是这样的:

naZero <- function(x) { if (is.numeric(x)) {
                            repVal <- 0
                        } else {
                           if (is.factor(x)) {
                               repVal <- levels(x)[1]
                           } else stop("uh-oh")
                        }
                        x[is.na(x)] <- repVal
                        x }
于 2013-06-05T15:23:47.197 回答