在具有不同列的新数据集上使用预测功能

Used Predict function on New Dataset with different Columns

使用 R 中的 "stackloss" 数据,我创建了一个回归模型,如下所示:

    stackloss.lm = lm(stack.loss ~  Air.Flow + Water.Temp + Acid.Conc.,data=stackloss)

stackloss.lm 
newdata = data.frame(Air.Flow=stackloss$Air.Flow, Water.Temp= stackloss$Water.Temp, Acid.Conc.=stackloss$Acid.Conc.)

假设我得到一个新的数据集,需要根据之前的模型预测它的 "stack.loss",如下所示:

#suppose I need to used my model on a new set of data
stackloss$predict1[-1] <- predict(stackloss.lm, newdata)

我收到这个错误:

Error in `$<-.data.frame`(`*tmp*`, "predict1", value = numeric(0)) : 
  replacement has 0 rows, data has 21

他们是在具有相同列但不同行的不同数据集上使用预测函数的方法吗?

提前致谢。

您可以预测任意长度的新数据集,只需确保将结果分配给适当大小的现有向量即可。

这一行会导致问题,因为

stackloss$predict1[-1] <- predict(stackloss.lm, newdata)

因为您不能同时对不存在的向量进行赋值和子集化。这也不行

dd <- data.frame(a=1:3)
dd$b[-1]<-1:2

用于拟合模型的 stackloss 的长度将始终相同,因此为 data.frame 重新分配新值没有意义。如果您想使用较小的数据集进行预测,那很好

stackloss.lm = lm(stack.loss ~  Air.Flow + Water.Temp + Acid.Conc.,data=stackloss)

newdata = head(data.frame(Air.Flow=stackloss$Air.Flow, Water.Temp= stackloss$Water.Temp, Acid.Conc.=stackloss$Acid.Conc.),5)

predict(stackloss.lm, newdata)
       1        2        3        4        5 
38.76536 38.91749 32.44447 22.30223 19.71165 

由于结果的值数量与 newdata 的行 (n=5) 相同,因此将这些附加到 newdata 是有意义的。附加到 stackloss 没有意义,因为它有不同的行数 (n=21)

newdata$predcit1 <- predict(stackloss.lm, newdata)