本文介绍了得到警告:"'newdata' 有 1 行,但发现的变量有 32 行"在预测.lm的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 R 中使用 predict 和 lm 函数时发现了特殊性.对于相同数据,我得到了不同的数据框和向量结果.

I found peculiarity while using predict and lm function in R. I got different results for data frame and vector for same data.

数据帧代码:

data(mtcars)
fitCar<-lm(mtcars$mpg~mtcars$wt)
predict(fitCar,
        data.frame(x=mean(mtcars$wt)),
        interval="confidence")

输出:

     fit       lwr      upr
1  23.282611 21.988668 24.57655
2  21.919770 20.752751 23.08679
3  24.885952 23.383008 26.38890
4  20.102650 19.003004 21.20230
5  18.900144 17.771469 20.02882
6  18.793255 17.659216 19.92729
7  18.205363 17.034274 19.37645
8  20.236262 19.136179 21.33635
9  20.450041 19.347720 21.55236
10 18.900144 17.771469 20.02882
11 18.900144 17.771469 20.02882
12 15.533127 14.064349 17.00190
13 17.350247 16.104455 18.59604
14 17.083024 15.809403 18.35664
15  9.226650  6.658271 11.79503
16  8.296712  5.547468 11.04596
17  8.718926  6.052112 11.38574
18 25.527289 23.927797 27.12678
19 28.653805 26.519252 30.78836
20 27.478021 25.554415 29.40163
21 24.111004 22.715653 25.50635
22 18.472586 17.319886 19.62529
23 18.926866 17.799465 20.05427
24 16.762355 15.452833 18.07188
25 16.735633 15.423002 18.04826
26 26.943574 25.112491 28.77466
27 25.847957 24.198041 27.49787
28 29.198941 26.963760 31.43412
29 20.343151 19.242185 21.44412
30 22.480940 21.268498 23.69338
31 18.205363 17.034274 19.37645
32 22.427495 21.219818 23.63517

警告信息:

'newdata' 有 1 行,但发现的变量有 32 行

当我将两个数据分离成向量时,我得到了不同的答案

When I separate out both data into vector, i got different answer

矢量代码

predict(fit,data.frame(x=mean(x)), interval="confidence")

输出:

    fit   lwr   upr
1 20.09 18.99 21.19

造成这种差异的原因是什么?

What is the reason for this difference?

推荐答案

这是在 datanewdata 之间使用不同名称的问题,而不是两者之间的问题使用向量或数据框.

This is a problem of using different names between your data and your newdata and not a problem between using vectors or dataframes.

当您使用 lm 函数拟合模型,然后使用 predict 进行预测时,predict 会尝试在您的新数据.在您的第一种情况下,名称 xmtcars$wt 冲突,因此您会收到警告.

When you fit a model with the lm function and then use predict to make predictions, predict tries to find the same names on your newdata. In your first case name x conflicts with mtcars$wt and hence you get the warning.

请看这里我所说内容的说明:

See here an illustration of what I say:

这就是您所做的并且没有出现错误:

This is what you did and didn't get an error:

a <- mtcars$mpg
x <- mtcars$wt

#here you use x as a name
fitCar <- lm(a ~ x)
#here you use x again as a name in newdata.
predict(fitCar, data.frame(x = mean(x)), interval = "confidence")

       fit      lwr      upr
1 20.09062 18.99098 21.19027

看到在这种情况下,您使用名称 x 拟合模型,并在 newdata 中使用名称 x 进行预测.这样您就不会收到警告,这正是您所期望的.

See that in this case you fit your model using the name x and also predict using the name x in your newdata. This way you get no warnings and it is what you expect.

让我们看看当我拟合模型时将名称更改为其他名称时会发生什么:

Let's see what happens when I change the name to something else when I fit the model:

a <- mtcars$mpg
#name it b this time
b <- mtcars$wt

fitCar <- lm(a ~ b)
#here I am using name x as previously
predict(fitCar, data.frame(x = mean(x)), interval = "confidence")

         fit       lwr      upr
1  23.282611 21.988668 24.57655
2  21.919770 20.752751 23.08679
3  24.885952 23.383008 26.38890
4  20.102650 19.003004 21.20230
5  18.900144 17.771469 20.02882
Warning message:
'newdata' had 1 row but variables found have 32 rows

我现在唯一做的就是在将模型拟合到 b 时更改名称 x,然后使用名称 x 进行预测新数据.如您所见,我遇到了与您的问题相同的错误.

The only thing I did now was to change the name x when fitting the model to b and then predict using the name x in the newdata. As you can see I got the same error as in your question.

希望现在清楚了!

这篇关于得到警告:&quot;'newdata' 有 1 行,但发现的变量有 32 行"在预测.lm的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-01 09:24