理解R中'predict'函数的输出结果

4

我正在尝试理解predict()的输出,以及了解这种方法是否适用于我要解决的问题。预测区间对我来说没有意义,但当我在散点图上绘制时,它看起来是一个好模型:

enter image description here

我创建了一个简单的线性回归模型,以公司的销售额作为预测变量来预测交易金额($)。数据是虚构的,交易金额是销售额加上或减去一些噪声的倍数:
    Call:
lm(formula = deal_size ~ sales_volume, data = accounts)

Residuals:
      Min        1Q    Median        3Q       Max 
-19123502  -3794671  -3426616   4838578  17328948 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.709e+06  1.727e+05   21.48   <2e-16 ***
sales_volume 1.898e-01  2.210e-03   85.88   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6452000 on 1586 degrees of freedom
Multiple R-squared:  0.823, Adjusted R-squared:  0.8229 
F-statistic:  7376 on 1 and 1586 DF,  p-value: < 2.2e-16

预测是这样生成的:
d = data.frame(accounts, predict(fit, interval="prediction"))

当我在散点图上绘制销售量与交易规模,并叠加回归线和预测区间时,看起来很好,除了一些跨越零附近的负值区间。
我知道拟合是预测值,但是lwr和upr是什么?它们是否以绝对值(y坐标)定义区间?这些区间似乎非常宽,比起我的模型是否良好适合而言更加宽广。
sales_volume    deal_size    fit            lwr          upr
0               0            3709276.494    -8950776.04  16369329.03
0               8586337.22   3709276.494    -8950776.04  16369329.03      
110000          549458.6512  3730150.811    -8929897.298 16390198.92

也许可以看一下 ?predict.lm - J.R.
请发布完整的代码。仅凭输出,我们无法帮助您识别问题。 - IRTFM
3
我已经准备好了一个简短的文件,展示了两个时间间隔的工作原理。http://rpubs.com/RomanL/7024 - Roman Luštrik
我应该使用哪个函数在R中绘制这样的图表? - Abhi
2个回答

6
当你使用带有lm模型的predict时,你可以指定一个interval。你有三个选择:none将不返回间隔,confidence和prediction。两者都会返回不同的值。第一列将是预测值(fit列)。然后你有两个其他的列:lwr和upper,它们是置信区间的下限和上限。
confidence和prediction之间有什么区别?
confidence默认为均值的置信区间(95%),如果你想更改,可以使用level参数。这是你绘图中的绿色区间。而prediction是所有值的置信区间(也是95%),这意味着如果你重复你的实验/调查/...大量次数,你可以期望95%的值将落在黄色区间内,因此黄色区间比绿色区间要宽很多,因为绿色区间只评估了平均值。
正如你在你的图表上看到的,几乎所有的值都在黄色区间内。R不知道你的值只能是正数,所以它解释了为什么黄色区间“开始”在0以下。
另外,当你说“间隔似乎非常宽,比起我的模型来说并没有太多意义”,你可以在你的图表中看到间隔并不是那么大,考虑到你可以期望95%的值在其中,你可以清楚地看到你的数据趋势。而且你的模型很明显是适合的,因为调整后的R平方和全局p值告诉你这一点。

4

稍微修改@etienne之前的内容,非常好而准确。

置信区间是均值预测(或群组响应)的(1-alpha;例如95%)区间。即,如果您有10家新公司的销售额为 2e + 08 ,则 predict(...,interval =“confidence”)间隔将为您的群组平均数提供长期平均间隔。

其中Var(\ hat y | X = x *)= \ sigma ^ 2(1 / n +(x * - \ bar x)^ 2 / SXX)

预测区间是单个响应的(1-alpha;例如95%)区间,例如predict(...,interval =“predict”)。即,对于销售额为 2e + 08 的单个新公司...

其中Var(\ hat y | X = x *)= \ sigma ^ 2(1 + 1 / n +(x * - \ bar x)^ 2 / SXX)

(抱歉,LaTeX不受支持)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接