了解 '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
当您将 predict
与 lm
模型一起使用时,您可以指定 interval
。您有三个选择:none
不会 return 间隔,confidence
和 prediction
。这两个将 return 不同的值。第一列将是您所说的预测值(第 fit
列)。然后还有另外两列:lwr
和 upper
,它们是置信区间的下限和上限。
confidence
和 prediction
和有什么不一样?
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)
我正在尝试了解 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
不会 return 间隔,confidence
和 prediction
。这两个将 return 不同的值。第一列将是您所说的预测值(第 fit
列)。然后还有另外两列:lwr
和 upper
,它们是置信区间的下限和上限。
confidence
和 prediction
和有什么不一样?
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)