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

时间:2015-05-14 05:32:23

标签: r regression predict

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

    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

他们是否可以在具有相同列但不同行的不同数据集上使用预测函数?

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

此行导致问题,因为

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

因为您无法同时为不存在的向量分配和子集。这也不起作用

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

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

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)