Y中缺失数据的回归后的predict.lm

Y中缺失数据的回归后的predict.lm,r,missing-data,lm,predict,R,Missing Data,Lm,Predict,我不明白当因变量Y的某些值缺失时,如何使用predict.lm命令从线性回归中生成预测值,即使没有独立的X观测值缺失。从代数上讲,这不是一个问题,但我不知道在R中有什么有效的方法可以做到这一点。我试图在源数据帧中分配预测,但由于缺少一个Y值而无法这样做:我得到一个错误 # 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 <

我不明白当因变量Y的某些值缺失时,如何使用
predict.lm
命令从线性回归中生成预测值,即使没有独立的X观测值缺失。从代数上讲,这不是一个问题,但我不知道在R中有什么有效的方法可以做到这一点。我试图在源数据帧中分配预测,但由于缺少一个Y值而无法这样做:我得到一个错误

# 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
#创建一个伪数据帧

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

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

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

设置数据:

df <- data.frame(x=1:10,y=100*(1:10))
df$y[5] <- NA
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 

mod2预测的第一个参数;lm是模型本身,而不是新数据尝试查找帮助文件
?predict.lm
,在那里您将看到运行函数所需的参数以及示例。您好@aron如果任何答案解决了您的问题,请将其标记为“已接受”所以其他人可以看到解决我自己问题的一种方法就是使用我的x值指定一个新的数据帧。继续上面的代码,我可以这样做:df$y_ip谢谢Ben!你的代码肯定比我的更节省
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 
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