我有一个基于数据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)。你能指点我所需的代码方向吗?
答案 0 :(得分: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 }