在Y中缺失数据的回归后预测.lm

时间:2017-07-03 20:40:08

标签: r missing-data lm predict

我不理解如何在缺少因变量Y的某个值时使用checked命令从线性回归生成预测值,即使没有缺少独立的X观察值。在代数上,这不是一个问题,但我不知道在R中这样做的有效方法。例如,假的数据帧和回归模型。我尝试在源数据帧中分配预测但由于缺少一个Y值而无法执行此操作:我收到错误。

predict.lm

通过使用代数# Create a fake dataframe x <- c(1,2,3,4,5,6,7,8,9,10) y <- c(100,200,300,400,NA,600,700,800,900,100) df <- as.data.frame(cbind(x,y)) # Regress X and Y model<-lm(y~x+1) summary(model) # Attempt to generate predictions in source dataframe but am unable to. df$y_ip<-predict.lm(testy) Error in `$<-.data.frame`(`*tmp*`, y_ip, value = c(221............. replacement has 9 rows, data has 10 生成预测或通过调用模型df$y<-B0+ B1*df$x的系数生成预测,我解决了这个问题;但是,我现在正在使用具有数百个系数的大数据模型,这些方法已不再实用。我想知道如何使用df$y<-((summary(model)$coefficients[1, 1]) + (summary(model)$coefficients[2, 1]*(df$x))函数来完成它。

提前感谢您的协助!

2 个答案:

答案 0 :(得分:2)

R中有内置功能(但不一定显而易见):它是na.action参数/ ?na.exclude函数。设置此选项后,predict()(以及类似的下游处理函数)将自动填写相关位置的NA值。

设置数据:

df <- data.frame(x=1:10,y=100*(1:10))
df$y[5] <- NA

适合模型:默认na.actionna.omit,只会移除非完整案例。

mod1 <- lm(y~x+1,data=df)
predict(mod1)
##    1    2    3    4    6    7    8    9   10 
##  100  200  300  400  600  700  800  900 1000 

na.exclude在拟合之前移除非完整的案例,但随后在预测的向量中恢复它们(用NA填充):

mod2 <- update(mod1,na.action=na.exclude)
predict(mod2)
##    1    2    3    4    5    6    7    8    9   10 
##  100  200  300  400   NA  600  700  800  900 1000 

答案 1 :(得分:1)

实际上,您没有正确使用predict.lm功能。 无论哪种方式,您都必须输入模型本身作为其第一个参数,特此model,无论是否有新数据。如果没有新数据,它只会预测培训数据,从而排除NA行,您需要使用此解决方法来适应初始data.frame:

df$y_ip[!is.na(df$y)] <- predict.lm(model)

或明确指定一些新数据。由于新x的行数比训练x还多一行,因此会使用新预测填充缺失的行:

df$y_ip <- predict.lm(model, newdata = df)