当使用前向逐步方法选择变量时,是否保证最终模型具有尽可能高的?换句话说,逐步方法是保证全局最优还是仅保证局部最优?
例如,如果我有 10 个变量可供选择并想要构建一个 5 变量模型,那么通过逐步方法构建的最终结果 5 变量模型是否具有所有可能的 5 变量模型中已经建成?
请注意,这个问题纯粹是理论上的,即我们不争论高值是否是最优的,是否会导致过拟合等。
当使用前向逐步方法选择变量时,是否保证最终模型具有尽可能高的?换句话说,逐步方法是保证全局最优还是仅保证局部最优?
例如,如果我有 10 个变量可供选择并想要构建一个 5 变量模型,那么通过逐步方法构建的最终结果 5 变量模型是否具有所有可能的 5 变量模型中已经建成?
请注意,这个问题纯粹是理论上的,即我们不争论高值是否是最优的,是否会导致过拟合等。
这是一个使用随机生成的数据和 R 的反例:
library(MASS)
library(leaps)
v <- matrix(0.9,11,11)
diag(v) <- 1
set.seed(15)
mydat <- mvrnorm(100, rep(0,11), v)
mydf <- as.data.frame( mydat )
fit1 <- lm( V1 ~ 1, data=mydf )
fit2 <- lm( V1 ~ ., data=mydf )
fit <- step( fit1, formula(fit2), direction='forward' )
summary(fit)$r.squared
all <- leaps(mydat[,-1], mydat[,1], method='r2')
max(all$r2[ all$size==length(coef(fit)) ])
plot( all$size, all$r2 )
points( length(coef(fit)), summary(fit)$r.squared, col='red' )
whuber 想要思考过程:它主要是好奇心和懒惰之间的对比。原来的帖子谈到有 10 个预测变量,所以这就是我使用的。0.9 的相关性是一个很好的整数,具有相当高的相关性,但不会太高(如果太高,那么逐步很可能只会选择 1 或 2 个预测变量),我认为找到反例的最佳机会包括相当多的共线性。一个更现实的例子会有各种不同的相关性(但仍然存在相当多的共线性)以及预测变量(或它们的子集)与响应变量之间的定义关系。100 的样本量也是我尝试的第一个很好的整数(经验法则说每个预测变量应该至少有 10 个观察值)。我用种子 1 和 2 尝试了上面的代码,然后将整个东西包裹在一个循环中,让它依次尝试不同的种子。实际上它停在第 3 号种子,但不同的是在小数点后第 15 位,所以我认为这更有可能是舍入错误,并通过比较第一次舍入到 5 位重新开始。令我惊喜的是,它在 15 岁时就发现了差异。如果它在合理的时间内没有找到反例,我会开始调整一些东西(相关性、样本量等)。
您不一定会获得最高的 R,因为您只比较可能模型的子集,并且可能会错过包含所有变量的最高 R的模型。要获得该模型,您需要查看所有子集. 但最好的模型可能不是 R最高的模型,因为它可能是你过度拟合的,因为它包含了所有变量。
如果你真的想得到最高您必须查看(如@Michael 所说)所有子集。有很多变量,这有时是不可行的,并且有一些方法可以在不测试每个子集的情况下接近。一种方法称为(IIRC)“跳跃和界限”,并且在 R 包中跳跃。
然而,这将产生非常有偏见的结果。p 值太低,系数偏离 0,标准误差太小;以及所有无法正确估计的金额。
逐步选择也有这个问题。
我强烈建议不要使用任何自动变量选择方法,因为它们最糟糕的是它们会阻止您思考;或者,换句话说,使用自动化方法的数据分析师正在告诉他/她的老板少付他/她的工资。
如果您必须使用自动化方法,那么您应该将数据分成训练集和测试集,或者可能是训练集、验证集和最终集。