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

Aro*_*ron 4 r predict missing-data lm

predict.lm当因变量 Y 的某些值丢失时,我不明白如何使用该命令从线性回归生成预测值,即使没有独立的 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
Run Code Online (Sandbox Code Playgroud)

我通过使用代数df$y<-B0+ B1*df$x生成预测或通过调用模型的系数生成预测来解决这个问题df$y<-((summary(model)$coefficients[1, 1]) + (summary(model)$coefficients[2, 1]*(df$x));但是,我现在正在使用具有数百个系数的大数据模型,这些方法不再实用。我想知道如何使用该predict功能来做到这一点。

预先感谢您的帮助!

Ben*_*ker 6

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

设置数据:

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

拟合模型:默认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 
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)