【问题标题】:Error with predict and newdata, dependent on number of predictor variable in model预测和新数据的错误,取决于模型中预测变量的数量
【发布时间】:2015-10-31 10:45:27
【问题描述】:

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

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

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

我的dougfir.csv 只包含两列,每列有三十个数字, 标记为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

然后我想使用我的 6 月模型来预测我 10 月的旱芽,使用 高度作为我的变量,我做了以下事情:

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

再次,我成功地使用了相同的数据集 - 唯一的 不同之处在于我在成功数据集中的模型有两个预测器 变量而不是我在这个数据集中的一个变量(高度)。

【问题讨论】:

  • 你能提供一个reproducible example吗?
  • 另一个区别是,在第一个预测中,您使用构建模型的数据作为新数据。那是对的吗?您提到“...使用我的 6 月模型来预测我 10 月的旱芽...”。
  • 正如@BenBolker 所说,社区需要一个可重现的示例来帮助您。
  • @SamThomas,非常接近,但我认为值得解释为什么......

标签: r lm predict


【解决方案1】:

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

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

观看:

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,它会为您提供一个包含单列的数据框,而不仅仅是列本身:

 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

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

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

【讨论】:

  • 本,非常感谢,这很有帮助。谢谢你不仅给了我答案,还解释了它是如何工作的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 2015-02-15
  • 2014-09-09
相关资源
最近更新 更多