为什么在预测R中的线性模型时会收到警告'newdata'有1行,但发现的变量却有X行?

我们得到newdata的原因有1行警告是因为newdata没有正确定义。我们应该给新数据指定解释变量或自变量的名称,以便模型可以识别出我们正在传递解释变量的均值,否则它将考虑所有解释值,因此预测函数的结果将得出样本量的预测值。

示例

请看以下数据帧-

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
猜你喜欢