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

DataFrame code:

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

Output:

     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行

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

Code for vector

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

Output:

    fit   lwr   upr
1 20.09 18.99 21.19

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

推荐答案

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

当你try 在predict模型上使用newdatapredict来匹配你的名字时.在你的第一个例子中,名字xmtcars$wt冲突,因此你得到警告.

下面是我所说的一个例子:

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

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进行预测.这样你就不会收到任何警告,而这正是你所期待的.

让我们看看当我把名字改成其他名字时,当我符合模型时会发生什么:

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,然后在newdata中使用名称x进行预测.正如你所看到的,我的错误和你的问题一样.

希望现在一切都清楚了!

R相关问答推荐

这两种创建S4对象的方法有何不同?

R -创建一列,指示另一列是否具有相同的值

插入指示行之间时间间隔的新行

R gtsummary tBL_summary,包含分层和两个独立分组变量

如何创建具有总计列和ggplot 2所有条线的百分比标签的堆叠条形图?

如何将y轴上的线定位得彼此更近

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

如何在格子中添加双曲曲线

bslib::card_header中的shine::downloadButton,图标而不是文本

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

如何在观测缺失的地方添加零

R—将各种CSV数字列转换为日期

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

比较理论阿尔法和经验阿尔法

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

用两种 colored颜色 填充方框图

以字符格式导入的ExcelElectron 表格日期列标题

如何计算每12行的平均数?

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

创建新列,其中S列的值取决于该行S值是否与其他行冗余