Два случая, в которых я не стал бы возражать против поэтапной регрессии:
- Исследовательский анализ данных
- Прогнозные модели
В обоих этих очень важных случаях использования вас не слишком беспокоит традиционный статистический вывод, поэтому тот факт, что значения p и т. Д. Больше не действительны, не представляет большой проблемы.
Например, если в исследовательской работе говорилось: «В нашем пилотном исследовании мы использовали пошаговую регрессию, чтобы найти 3 интересные переменные из 1000. В последующем исследовании с новыми данными мы показали, что эти 3 интересные переменные были тесно связаны с Интересный результат », у меня не было бы проблем с использованием пошаговой регрессии. Точно так же «Мы использовали пошаговую регрессию для построения прогностической модели. Эта альтернативная модель X с предварительным преобразованием в нашем наборе данных о удержании в отношении MSE» также полностью устраивает меня.
Чтобы было ясно, я не говорю, что поэтапная регрессия - лучший способ решения этих проблем. Но это легко и может дать вам удовлетворительные решения.
РЕДАКТИРОВАТЬ:
В комментариях возникает вопрос о том, может ли ступенчатая AIC быть полезной для прогнозирования. Вот симуляция, которая показывает, что она работает намного лучше, чем линейная регрессия со всеми ковариатами, и почти так же, как и эластичные сети со штрафом, выбранным путем перекрестной проверки.
Я бы не стал воспринимать эту симуляцию как конец дискуссии; несложно придумать сценарий, в котором пошаговая АПК будет хуже преформироваться. Но на самом деле это не необоснованный сценарий, а именно тот тип ситуации, для которого предназначены эластичные сети (высокая корреляция ковариат с очень небольшим большим эффектом)!
library(leaps)
library(glmnet)
nRows <- 1000
nCols <- 500
# Seed set For reproducibility.
# Try changing for investigation of reliability of results
set.seed(1)
# Creating heavily correlated covariates
x_firstHalf <- matrix(rnorm(nRows * nCols / 2), nrow = nRows)
x_secondHalf <- x_firstHalf + 0.5 *
matrix(rnorm(nRows * nCols / 2), nrow = nRows)
x_mat <- cbind(x_firstHalf, x_secondHalf) + rnorm(nRows)
# Creating beta's. Most will be of very small magnitude
p_large = 0.01
betas <- rnorm(nCols, sd = 0.01) +
rnorm(nCols, sd = 4) * rbinom(nCols, size = 1, prob = p_large)
y <- x_mat %*% betas + rnorm(nRows, sd = 4)
all_data <- data.frame(y, x_mat)
colnames(all_data) <- c('y', paste('x', 1:nCols, sep = '_'))
# Holding out 25% of data for validation
holdout_index <- 1:(nRows * .25)
train_data <- all_data[-holdout_index, ]
validate_data <- all_data[holdout_index, ]
mean_fit <- lm(y ~ 0, data = train_data)
full_fit <- lm(y ~ ., data = train_data)
step_fit <- step(mean_fit,
scope = list(lower = mean_fit, upper = full_fit),
direction = "forward", steps = 20, trace = 0)
glmnet_cvRes <- cv.glmnet(x = as.matrix(train_data[,-1]),
y = as.numeric(train_data$y) )
full_pred <- predict(full_fit, validate_data)
step_pred <- predict(step_fit, validate_data)
glmnet_pred <- predict(glmnet_cvRes, as.matrix(validate_data[,-1]), s='lambda.min')
sd(full_pred - validate_data$y) # [1] 6.426117
sd(step_pred - validate_data$y) # [1] 4.233672
sd(glmnet_pred - validate_data$y) # [1] 4.127171
# Note that stepwise AIC does considerably better than using all covariates
# in linear regression, and not that much worse than penalized methods
# with cross validation!!
Примечание:
Я действительно не фанат ступенчатой регрессии по многим, многим причинам, поэтому я чувствую себя несколько неловко, заняв эту позицию в защиту этого. Но я просто думаю, что важно быть точным в том, что мне не нравится в этом.