predict.lm 在 Y 中缺少数据的回归之后

predict.lm after regression with missing data in Y

我不明白当因变量 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

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

预先感谢您的协助!

实际上,您没有正确使用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)

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