首页 文章

预测和新数据出错,取决于模型中预测变量的数量

提问于
浏览
-1

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

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 - 我用来让我的模型包含6月份的值 . 我的新.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 回答

  • 2

    这本质上是R: numeric 'envir' arg not of length one in predict()的一个变种,但它可能并不明显 . 什么's happening is that by selecting a single column of your data frame, you are triggering 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
    

相关问题