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
我们将使用mpg (英里/加仑)作为响应变量,并使用数据集中的其他 10 个变量作为潜在的预测变量来拟合多元线性回归模型。
对于每个示例,我们将使用 stats 包的内置step()函数来执行逐步选择,该函数使用以下语法:
阶段(仅限拦截模型、方向、范围)
金子:
- 仅原始模型:仅原始模型的公式
- 方向:步进搜索模式可以是“双向”、“向后”或“向前”。
- 范围:指定我们想要尝试输入模型的预测变量的公式
示例1:逐步前向选择
以下代码演示了如何逐步执行选择:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform forward stepwise regression forward <- step(intercept_only, direction=' forward ', scope= formula (all), trace=0) #view results of forward stepwise regression forward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model forward$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
注意: trace=0 参数告诉 R 不要显示逐步选择的完整结果。如果存在大量预测变量,这可能会占用大量空间。
以下是如何解释结果:
- 首先,我们拟合仅截距模型。该模型的 AIC 为115.94345 。
- 然后我们将所有可能的模型拟合到预测器。与使用wt预测器的仅基线模型相比,产生最低 AIC 且 AIC 具有统计显着性降低的模型。该模型的 AIC 为73.21736 。
- 接下来,我们用两个预测变量拟合所有可能的模型。与添加了cyl预测器的单预测器模型相比,产生最低 AIC 且 AIC 具有统计显着性降低的模型。该模型的 AIC 为63.19800 。
- 接下来,我们将所有可能的模型拟合到三个预测变量。与添加了hp预测器的双预测器模型相比,产生最低 AIC 且 AIC 具有统计显着性降低的模型。该模型的 AIC 为62.66456 。
- 接下来,我们将所有可能的模型拟合到四个预测变量。事实证明,这些模型都没有显着降低 AIC,因此我们停止了该过程。
最终模型如下:
mpg ~ 38.75 – 3.17*重量 – 0.94*汽缸 – 0.02*hyp
示例2:逐步向后选择
下面的代码展示了如何后退:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression backward <- step(all, direction=' backward ', scope= formula (all), trace=0) #view results of backward stepwise regression backward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 21 147.4944 70.89774 2 - cyl 1 0.07987121 22 147.5743 68.91507 3 - vs 1 0.26852280 23 147.8428 66.97324 4 - carb 1 0.68546077 24 148.5283 65.12126 5 - gear 1 1.56497053 25 150.0933 63.45667 6 - drat 1 3.34455117 26 153.4378 62.16190 7 - available 1 6.62865369 27 160.0665 61.51530 8 - hp 1 9.21946935 28 169.2859 61.30730 #view final model backward$coefficients (Intercept) wt qsec am 9.617781 -3.916504 1.225886 2.935837
以下是如何解释结果:
- 首先,我们使用所有p 个预测变量拟合模型。将其定义为 M p 。
- 然后,对于 k = p, p-1,…1,我们拟合包含 M k中除一个预测变量之外的所有预测变量的所有 k 个模型,总共 k-1 个预测变量。然后从这 k 个模型中选择最好的一个,并将其称为 M k-1 。
- 最后,我们使用 AIC 从 M 0 … M p中选择最佳模型。
最终模型如下:
英里/加仑 ~ 9.62 – 3.92*体重 + 1.23*qsec + 2.94*上午
示例 3:双向逐步选择
以下代码显示了如何在两个方向上执行逐步选择:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression both <- step(intercept_only, direction=' both ', scope= formula (all), trace=0) #view results of backward stepwise regression both$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model both$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
以下是如何解释结果:
- 首先,我们拟合仅截距模型。
- 接下来,我们按顺序向模型添加预测变量,就像我们对逐步选择所做的那样。然而,在添加每个预测变量后,我们还删除了不再提供模型拟合改进的任何预测变量。
- 我们重复这个过程,直到得到最终模型。
最终模型如下:
英里/加仑 ~ 9.62 – 3.92*体重 + 1.23*qsec + 2.94*上午
请注意,前向步骤选择和两个方向的步骤选择产生相同的最终模式,而后向步骤选择产生不同的模式。