了解 'predict' 在 R 中的输出

Understanding output of 'predict' in R

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

我创建了一个交易规模 ($) 的简单线性回归模型,并将公司的销售额作为预测变量。数据是伪造的,交易规模是销量的倍数加上或减去一些噪音:

    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"))

当我在散点图上绘制 sales_volume 与 deal_size 并将回归线与预测区间叠加时,它看起来不错,除了几个跨越负值的区间,其中销售额为等于或接近零。

我理解 fit 是预测值,但是 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

当您将 predictlm 模型一起使用时,您可以指定 interval。您有三个选择:none 不会 return 间隔,confidenceprediction。这两个将 return 不同的值。第一列将是您所说的预测值(第 fit 列)。然后还有另外两列:lwrupper,它们是置信区间的下限和上限。

confidenceprediction 和有什么不一样?

confidence 是预测值平均值的置信区间(默认情况下为 95%,如果您想更改它,请使用 level)。这是您的地块上的绿色间隔。而 prediction 是所有值的(也是 95%)置信区间,这意味着如果您重复 experience/survey/... 很多次,您可以预期 95% 的值将落在黄色区间内,因此比绿色区间宽很多,因为绿色区间仅评估平均值。

正如您在图中看到的那样,几乎所有值都在黄色区间内。 R 不知道你的值只能是正数所以它解释了为什么黄色间隔 "begins" 在 0.

此外,当你说 "The intervals seem to be extremely wide, wider than would make sense if my model was a good fit" 时,你可以在你的图中看到间隔不是那么大,考虑到你可以预期 95% 的值都在其中,你可以清楚地看到数据中的趋势。正如调整后的 R 平方和全局 p 值告诉您的那样,您的模型显然非常适合。

只是对上面的@etienne 稍作改写,非常好而且准确。

置信区间是平均预测(或组响应)的(1-alpha;例如 95%)区间。 IE 如果您有 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")。单个新公司的 IE,销售额为 2e+08...

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

(抱歉,不支持 LaTeX)