预测和新数据出错,取决于模型

时间:2015-08-07 21:40:20

标签: r lm predict

我正在尝试使用预测将我的模型应用于一个时间段的数据,以查看可能是另一个时间段的值。我这样做了 成功获取一个数据集,然后使用相同的代码尝试另一个数据集 并得到以下错误:

Error in eval(predvars, data, env) :
  numeric 'envir' arg not of length one

两个数据集之间的唯一区别是我的第一个数据集的预测变量模型有两个预测变量,第二个数据集的模型只有一个。为什么会有所作为?

我的dougfir.csv只包含两列,每列有30个数字, 标记为heightdryshoot

我的线性模型是:

fitdougfir <- lm(dryshoot~height,data=dougfir)

它有点复杂(而且很乱,对不起!我是R的新手),因为我 然后制作了第二个.csv - 我用来使我的模型包含值的那个 从六月开始。我的新.csv(称为alldatadougfir.csv)包含值 从10月开始,还包含一个标有date列的列 值为"june""october"

我按照日期分隔高度数据:

alldatadougfir[alldatadougfir$date=="june",c("height")]->junedatadougfir
alldatadougfir[alldatadougfir$date=="october",c("height")]->octoberdatadougfir

然后我想使用我的六月模型来预测我的十月dryshoots使用 高度作为我的变量,我做了以下几点:

predict(fitdougfir, newdata=junedatadougfir)
predict(fitdougfir, newdata=octoberdatadougfir)

同样,我使用相同的数据集成功完成了这项工作 - 唯一的 不同之处在于,我在成功数据集中的模型有两个预测因子 变量而不是我在此数据集中的一个变量(高度)。

1 个答案:

答案 0 :(得分:2)

这实际上是R: numeric 'envir' arg not of length one in predict()的变体,但可能并不明显。发生的事情是,通过选择数据框的单个列,您将触发将数据框折叠为数字向量的R(通常是令人讨厌/不需要的)默认行为。这会触发链接答案中的问题#2:

  

预测变量需要作为数据框中的命名列传递,以便predict()知道[它的]被传递的数字代表... [强调添加] < / p>

注意:

String

您可以指定dd <- data.frame(x=1:20,y=1:20) str(dd[dd$x<10,"y"]) ## select some rows and a single column ## int [1:9] 1 2 3 4 5 6 7 8 9 ,它会为您提供包含单个列的数据框,而不仅仅是列本身:

drop=FALSE

或者,您在选择新数据时不必省略预测变量--R将忽略它。

 str(dd[dd$x<10,"y",drop=FALSE])
 ## 'data.frame':   9 obs. of  1 variable:
 ## $ y: int  1 2 3 4 5 6 7 8 9