为什么我们在 R 中预测线性模型时会收到警告“newdata”有 1 行,但找到的变量有 X 行?


我们收到newdata 有 1 行警告的原因是 newdata 没有正确定义。我们应该将解释变量或自变量的名称赋予 newdata,以便模型能够识别我们正在传递解释变量的均值,否则它会考虑解释变量的所有值,因此 predict 函数的结果会产生样本大小的预测值。

示例

 在线演示

考虑以下数据框 -

set.seed(123)
x<-rnorm(20,0.05)
y<-rpois(20,5)
df<-data.frame(x,y)
df   x        y
 1 -0.5104756 3
 2 -0.1801775 4
 3  1.6087083 4
 4  0.1205084 4
 5  0.1792877 3
 6  1.7650650 3
 7  0.5109162 3
 8 -1.2150612 5
 9 -0.6368529 4
10 -0.3956620 7
11  1.2740818 2
12  0.4098138 5
13  0.4507715 7
14  0.1606827 2
15 -0.5058411 5
16  1.8369131 3
17  0.5478505 3
18 -1.9166172 6
19  0.7513559 8
20 -0.4227914 4

创建线性模型 -

M<-lm(y~x,data=df)

现在让我们预测 x 的均值对应的 y 值 -

predict(M,newdata=data.frame(mean(df$x)),interval="confidence")
   fit      lwr       upr
 1 4.645695 3.690676 5.600715
 2 4.459543 3.635161 5.283925
 3 3.451347 2.071115 4.831579
 4 4.290080 3.520452 5.059707
 5 4.256952 3.489416 5.024489
 6 3.363226 1.876124 4.850329
 7 4.070050 3.260221 4.879880
 8 5.042792 3.669549 6.416034
 9 4.716920 3.697691 5.736149
10 4.580988 3.678189 5.483786
11 3.639939 2.475080 4.804798
12 4.127031 3.339496 4.914565
13 4.103947 3.308320 4.899575
14 4.267438 3.499558 5.035318
15 4.643083 3.690292 5.595875
16 3.322734 1.785518 4.859949
17 4.049235 3.229372 4.869097
18 5.438181 3.566862 7.309500
19 3.934541 3.043288 4.825795
20 4.596277 3.681723 5.510832

警告消息 -

'newdata' 有 1 行,但找到的变量有 20 行

要消除此警告,我们需要为 x 变量定义 newdata,如下所示 -

predict(M,newdata=data.frame(x=mean(df$x)),interval="confidence")
   fit   lwr     upr
1 4.25 3.482529 5.017471

当我们尝试预测固定值的 y 时也会发生同样的情况 -

predict(M,newdata=data.frame(1.2),interval="confidence")
    fit      lwr      upr
 1 4.645695 3.690676 5.600715
 2 4.459543 3.635161 5.283925
 3 3.451347 2.071115 4.831579
 4 4.290080 3.520452 5.059707
 5 4.256952 3.489416 5.024489
 6 3.363226 1.876124 4.850329
 7 4.070050 3.260221 4.879880
 8 5.042792 3.669549 6.416034
 9 4.716920 3.697691 5.736149
10 4.580988 3.678189 5.483786
11 3.639939 2.475080 4.804798
12 4.127031 3.339496 4.914565
13 4.103947 3.308320 4.899575
14 4.267438 3.499558 5.035318
15 4.643083 3.690292 5.595875
16 3.322734 1.785518 4.859949
17 4.049235 3.229372 4.869097
18 5.438181 3.566862 7.309500
19 3.934541 3.043288 4.825795
20 4.596277 3.681723 5.510832

警告消息 -

'newdata' 有 1 行,但找到的变量有 20 行

predict(M,newdata=data.frame(x=1.2),interval="confidence")
    fit     lwr     upr
1 3.681691 2.56125 4.802131

更新于: 2020-08-29

2K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告