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*上午

请注意,前向步骤选择和两个方向的步骤选择产生相同的最终模式,而后向步骤选择产生不同的模式。

其他资源

如何测试回归斜率的显着性
如何阅读和解释回归表
回归中的多重共线性指南

添加评论

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