我试图了解 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
最佳答案
当您使用 predict
与 lm
型号,您可以指定一个 interval
.您有三个选择:none
不会返回区间,confidence
和 prediction
.这两者都会返回不同的值。第一列将是您所说的预测值(列 fit
)。然后您还有另外两列:lwr
和 upper
它们是置信区间的下限和上限。confidence
有什么区别和 prediction
?confidence
是(默认为 95%,如果你想改变它,请使用 level
)预测值均值的置信区间。它是您情节上的绿色区间。而prediction
是您所有值的(也是 95%)置信区间,这意味着如果您重复您的经验/调查/...大量次数,您可以预期 95% 的值将落在黄色区间内,因此使它比绿色的宽很多,因为绿色的只评估平均值。
正如您在绘图中看到的,几乎所有值都在黄色区间内。 R 不知道您的值只能为正值,因此它解释了为什么黄色间隔“开始”在 0 以下。
此外,当您说“间隔似乎非常宽,比我的模型适合时更宽”时,您可以在图中看到间隔不是那么大,考虑到您可以预期 95%要包含在其中的值,您可以清楚地看到数据中的趋势。您的模型显然非常适合,因为调整后的 R 平方和全局 p 值告诉您。
关于r - 理解 R 中 'predict' 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33527497/