Dois casos em que eu não objetaria ver regressão passo a passo são
- Análise exploratória de dados
- Modelos preditivos
Nos dois casos de uso muito importantes, você não está tão preocupado com a inferência estatística tradicional; portanto, o fato de que valores-p, etc., não são mais válidos é pouco preocupante.
Por exemplo, se um trabalho de pesquisa dissesse "Em nosso estudo piloto, usamos regressão passo a passo para encontrar três variáveis interessantes em mil. Em um estudo de acompanhamento com novos dados, mostramos que essas três variáveis interessantes estavam fortemente correlacionadas com a resultado de interesse ", eu não teria nenhum problema com o uso de regressão passo a passo. Da mesma forma, "Usamos a regressão passo a passo para criar um modelo preditivo. Esse modelo alternativo pré-formado X em nosso conjunto de dados de espera em relação ao MSE" também é ótimo comigo.
Para deixar claro, não estou dizendo que a regressão passo a passo é a melhor maneira de abordar esses problemas. Mas é fácil e pode oferecer soluções satisfatórias.
EDITAR:
Nos comentários, há uma questão de saber se o AIC passo a passo pode realmente ser útil para previsão. Aqui está uma simulação que mostra que ele está se saindo muito melhor do que a regressão linear com todas as covariáveis e quase tão bem quanto as redes elásticas com a penalidade escolhida pela validação cruzada.
Eu não aceitaria essa simulação como o final da discussão; não é muito difícil criar um cenário em que a AIC passo a passo tenha um desempenho pior. Mas realmente não é um cenário irracional, e exatamente o tipo de situação para a qual as redes elásticas são projetadas (alta correlação de covariáveis com muito poucos efeitos grandes)!
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!!
Nota:
Eu realmente não sou fã de regressão gradual por muitas, muitas razões, então me sinto um pouco estranho por ter tomado essa posição em defesa dela. Mas apenas acho importante ser preciso exatamente sobre o que não gosto.