如何在 r 中创建预测区间
线性回归模型有两个用途:
(1)量化一个或多个预测变量与响应变量之间的关系。
(2)使用模型预测未来值。
关于(2) ,当我们使用回归模型来预测未来值时,我们通常希望预测精确值以及包含一系列可能值的区间。这个区间称为预测区间。
例如,假设我们使用学习时间作为预测变量、考试成绩作为响应变量来拟合一个简单的线性回归模型。使用这个模型,我们可以预测学习 6 小时的学生将在考试中获得91 分。
然而,由于此预测存在不确定性,我们可以创建一个预测区间,表明学习 6 小时的学生有 95% 的机会获得85到97之间的考试成绩。这个值范围被称为 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 的新车,我们预计它的mpg为21.35683 英里/加仑。
- 对于EPA为 250 的新车,我们预计其mpg为19.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.62968和30.20549之间。
- EPA为 200 的汽车的 95% mpg预测区间在14.60704和28.10662之间。
- EPA为 250 的汽车的 95% mpg预测区间在12.55021和26.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
何时使用置信区间与预测区间
预测区间捕获单个值的不确定性。置信区间捕获预测平均值的不确定性。因此,对于相同值,预测区间将始终比置信区间更宽。
当您对特定的个体预测感兴趣时,应该使用预测区间,因为置信区间会产生太窄的值范围,从而导致该区间不包含真实值的可能性更大。