我正在尝试理解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,并将回归线与预测间隔叠加时,它看起来不错,除了一些跨越负值的区间,其中销售额为零或接近零。
我理解拟合是预测值,但是什么是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
答案 0 :(得分:5)
将predict
与lm
模型一起使用时,您可以指定interval
。您有三种选择:none
不会返回时间间隔,confidence
和prediction
。这两个都会返回不同的值。第一列将按照您所说的预测值(列fit
)。然后,您还有另外两列:lwr
和upper
,它们是置信区间的较低和较高级别。
confidence
和prediction
之间有什么区别?
confidence
是一个(默认情况下为95%,如果您希望更改那个,请使用level
)预测值均值的置信区间。这是你的情节上的绿色间隔。而prediction
是所有价值的(也是95%)置信区间,这意味着如果你重复经验/调查/ ......很多次,你可以预期95%的价值会下降在黄色区间内,因此比绿色区域宽得多,因为绿色只评估平均值。
正如你在你的情节中看到的那样,几乎所有的值都在黄色区间内。 R不知道你的价值只能是正数,所以它解释了为什么黄色区间开始&#34;在0下。
另外,当你说&#34;间隔似乎非常宽,如果我的模型非常合适则更宽,你可以在你的情节中看到间隔不是那么大,考虑到您可以预期95%的值都在其中,并且您可以清楚地看到数据中的趋势。而且你的模型显然非常适合调整后的R平方和全局p值告诉你。
答案 1 :(得分:4)
上面对@etienne进行了轻微的改写,这非常好,准确。
置信区间是平均预测(或组响应)的(1-α;例如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")
。对于销售量为2e+08
...
使用Var(\ hat y | X = x *)= \ sigma ^ 2(1 + 1 / n +(x * - \ bar x)^ 2 / SXX)
(很抱歉不支持LaTeX)