如何在 r 中创建预测区间


线性回归模型有两个用途:

(1)量化一个或多个预测变量与响应变量之间的关系。

(2)使用模型预测未来值。

关于(2) ,当我们使用回归模型来预测未来值时,我们通常希望预测精确值以及包含一系列可能值的区间。这个区间称为预测区间

例如,假设我们使用学习时间作为预测变量、考试成绩作为响应变量来拟合一个简单的线性回归模型。使用这个模型,我们可以预测学习 6 小时的学生将在考试中获得91 分

然而,由于此预测存在不确定性,我们可以创建一个预测区间,表明学习 6 小时的学生有 95% 的机会获得8597之间的考试成绩。这个值范围被称为 95% 预测区间,对我们来说通常比仅仅知道确切的预测值更有用。

如何在 R 中创建预测区间

为了说明如何在 R 中创建预测区间,我们将使用内置的mtcars数据集,其中包含有关几种不同汽车的特征的信息:

 #view first six rows of mtcars
head(mtcars)

# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1

首先,我们将使用disp作为预测变量、 mpg作为响应变量来拟合一个简单的线性回归模型。

 #fit simple linear regression model
model <- lm(mpg ~ disp, data = mtcars)

#view summary of fitted model
summary(model)

#Call:
#lm(formula = mpg ~ availability, data = mtcars)
#
#Residuals:
# Min 1Q Median 3Q Max 
#-4.8922 -2.2022 -0.9631 1.6272 7.2305 
#
#Coefficients:
#Estimate Std. Error t value Pr(>|t|)    
#(Intercept) 29.599855 1.229720 24.070 < 2e-16 ***
#disp -0.041215 0.004712 -8.747 9.38e-10 ***
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
#Residual standard error: 3.251 on 30 degrees of freedom
#Multiple R-squared: 0.7183, Adjusted R-squared: 0.709 
#F-statistic: 76.51 on 1 and 30 DF, p-value: 9.38e-10

接下来,我们将使用拟合回归模型根据disp的三个新值来预测mpg的值。

 #create data frame with three new values for avail
new_disp <- data.frame(disp= c(150, 200, 250))

#use the fitted model to predict the value for mpg based on the three new values
#for avail
predict(model, newdata = new_disp)

#1 2 3 
#23.41759 21.35683 19.29607 

这些值的解释方式如下:

  • 对于EPA为 150 的新车,我们预计其 mpg 为23.41759 mpg
  • 对于EPA为 200 的新车,我们预计它的mpg21.35683 英里/加仑
  • 对于EPA为 250 的新车,我们预计其mpg19.29607 英里

接下来,我们将使用拟合回归模型围绕这些预测值创建预测区间:

 #create prediction intervals around the predicted values
predict(model, newdata = new_disp, interval = " predict ")

# fit lwr upr
#1 23.41759 16.62968 30.20549
#2 21.35683 14.60704 28.10662
#3 19.29607 12.55021 26.04194

这些值的解释方式如下:

  • EPA为 150 的汽车的 95% mpg预测区间在16.6296830.20549之间。
  • EPA为 200 的汽车的 95% mpg预测区间在14.6070428.10662之间。
  • EPA为 250 的汽车的 95% mpg预测区间在12.5502126.04194之间。

默认情况下,R 使用 95% 的预测区间。但是,我们可以使用level命令根据需要更改此设置。例如,以下代码演示了如何创建 99% 预测区间:

 #create 99% prediction intervals around the predicted values
predict(model, newdata = new_disp, interval = " predict ", level = 0.99 )

# fit lwr upr
#1 23.41759 14.27742 32.55775
#2 21.35683 12.26799 30.44567
#3 19.29607 10.21252 28.37963

请注意,99% 预测区间比 95% 预测区间更宽。这是有道理的,因为间隔越宽,包含预测值的可能性就越大。

如何在 R 中可视化预测区间

以下代码演示了如何创建具有以下功能的图表:

  • 可用性英里/加仑数据点的散点图
  • 蓝线表示拟合回归线
  • 灰色置信带
  • 红色预测带
 #define dataset
data <- mtcars[, c("mpg", "disp")]

#create simple linear regression model
model <- lm(mpg ~ disp, data = mtcars)

#use model to create prediction intervals
predictions <- predict(model, interval = " predict ")

#create dataset that contains original data along with prediction intervals
all_data <- cbind(data, predictions)

#load ggplot2 library
library(ggplot2)

#createplot
ggplot(all_data, aes(x = disp, y = mpg)) + #define x and y axis variables
  geom_point() + #add scatterplot points
  stat_smooth(method = lm) + #confidence bands
  geom_line(aes(y = lwr), col = "coral2", linetype = "dashed") + #lwr pred interval
  geom_line(aes(y = upr), col = "coral2", linetype = "dashed") #upr pred interval

何时使用置信区间与预测区间

预测区间捕获单个值的不确定性。置信区间捕获预测平均值的不确定性。因此,对于相同值,预测区间将始终比置信区间更宽。

当您对特定的个体预测感兴趣时,应该使用预测区间,因为置信区间会产生太窄的值范围,从而导致该区间不包含真实值的可能性更大。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注