R中的逐步回归 - 它是如何工作的?

机器算法验证 r 回归
2022-01-16 20:09:46

我正在尝试使用 step 函数了解 R 中逐步回归和后向回归之间的基本区别。对于逐步回归,我使用了以下命令

  step(lm(mpg~wt+drat+disp+qsec,data=mtcars),direction="both")

我得到了上述代码的以下输出。

向前

对于后向变量选择,我使用了以下命令

 step(lm(mpg~wt+drat+disp+qsec,data=mtcars),direction="backward")

我得到了下面的向后输出

落后

据我所知,当没有指定参数时,除非在 R 中指定了参数“upper”和“lower”,否则逐步选择将作为向后选择。然而,在逐步选择的输出中,添加了一个 +disp第二步。通过在逐步选择中再次添加 +disp 来尝试实现什么功能?为什么 R 在第二步中添加 +disp 而结果与后向选择相同(AIC 值和模型选择值)。R 在逐步选择中究竟是如何工作的?

我真的很想了解此功能在 R 中是如何工作的。提前感谢您的帮助!

2个回答

通过查看所有 15 个可能的 lm 模型,也许更容易理解逐步回归是如何完成的。

这是为所有 15 种组合生成公式的快速方法。

library(leaps)
tmp<-regsubsets(mpg ~ wt + drat + disp + qsec, data=mtcars, nbest=1000, really.big=T, intercept=F)
all.mods <- summary(tmp)[[1]]
all.mods <- lapply(1:nrow(all.mods), function(x) as.formula(paste("mpg~", paste(names(which(all.mods[x,])), collapse="+"))))

head(all.mods)
[[1]]
mpg ~ drat
<environment: 0x0000000013a678d8>

[[2]]
mpg ~ qsec
<environment: 0x0000000013a6b3b0>

[[3]]
mpg ~ wt
<environment: 0x0000000013a6df28>

[[4]]
mpg ~ disp
<environment: 0x0000000013a70aa0>

[[5]]
mpg ~ wt + qsec
<environment: 0x0000000013a74540>

[[6]]
mpg ~ drat + disp
<environment: 0x0000000013a76f68>

每个模型的 AIC 值通过以下方式提取:

all.lm<-lapply(all.mods, lm, mtcars)

sapply(all.lm, extractAIC)[2,]
 [1]  97.98786 111.77605  73.21736  77.39732  63.90843  77.92493  74.15591  79.02978  91.24052  71.35572
[11]  63.89108  65.90826  78.68074  72.97352  65.62733

让我们回到你的逐步回归。lm(mpg ~ wt + drat + disp + qsec) 的 extractAIC 值为 65.63(相当于上面列表中的模型 15)。

如果模型删除 disp (-disp),则 lm(mpg ~ wt + drat + qsec) 为 63.891(或列表中的模型 11)。

如果模型不删除任何东西(无),那么 AIC 仍然是 65.63

如果模型移除 qsec (-qsec),则 lm(mpg ~ wt + drat + disp) 为 65.908(模型 12)。

等等

基本上,摘要揭示了从完整模型中逐步删除一项的所有可能步骤,并通过按升序列出它们来比较 extractAIC 值。由于较小的 AIC 值更可能类似于 TRUTH 模型,因此在第一步中保留 (-disp) 模型。

再次重复该过程,但以保留的 (-disp) 模型为起点。术语被减去(“向后”)或减去/添加(“两者”)以允许模型的比较。由于相比之下的最低 AIC 值仍然是 (-disp) 模型,因此给出了进程停止和结果模型。

关于您的查询:“通过在逐步选择中再次添加 +disp 来尝试实现什么功能?”,在这种情况下,它实际上并没有做任何事情,因为所有 15 个模型中最好的模型是模型 11 , 即 lm(mpg ~ wt + drat + qsec)。

但是,在具有大量预测变量且需要许多步骤来解决的复杂模型中,添加最初删除的项对于提供最详尽的比较项的方式至关重要。

希望这在某种程度上有所帮助。

这里是一个简化的响应。首先,这两个过程都试图降低给定模型的 AIC,但它们以不同的方式进行。然后,基本区别在于,在后向选择过程中,您只能在任何步骤从模型中丢弃变量,而在逐步选择中,您也可以向模型中添加变量。

关于逐步选择中的输出,通常输出会显示您订购的替代方案以减少 AIC,因此任何步骤的第一行都是您的最佳选择。然后,第三行有一个+disp,因为将该变量添加到您的模型将是您降低 AIC 的第三个最佳选择。但显然,由于您的最佳选择是<none>,这意味着不做任何事情,该过程将停止并为您提供与向后选择相同的结果。