我不理解如何在缺少因变量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))
函数来完成它。
提前感谢您的协助!
答案 0 :(得分:2)
R中有内置功能(但不一定显而易见):它是na.action
参数/ ?na.exclude
函数。设置此选项后,predict()
(以及类似的下游处理函数)将自动填写相关位置的NA
值。
设置数据:
df <- data.frame(x=1:10,y=100*(1:10))
df$y[5] <- NA
适合模型:默认na.action
为na.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)