Sono due casi in cui non vorrei obiettare a vedere una regressione graduale
- Analisi dei dati esplorativi
- Modelli predittivi
In entrambi questi casi d'uso molto importanti, non sei così preoccupato per l'inferenza statistica tradizionale, quindi il fatto che i valori p, ecc., Non siano più validi è di scarsa preoccupazione.
Ad esempio, se un documento di ricerca dicesse "Nel nostro studio pilota, abbiamo usato la regressione graduale per trovare 3 variabili interessanti su 1000. In uno studio di follow-up con nuovi dati, abbiamo mostrato che queste 3 variabili interessanti erano fortemente correlate con il risultato di interesse ", non avrei alcun problema con l'uso della regressione graduale. Allo stesso modo, "Abbiamo usato la regressione graduale per costruire un modello predittivo. Questo modello alternativo X preformato nel nostro set di dati di controllo per quanto riguarda MSE" è del tutto perfetto anche per me.
Per essere chiari, non sto dicendo che la regressione graduale sia il modo migliore per affrontare questi problemi. Ma è facile e può darti soluzioni soddisfacenti.
MODIFICARE:
Nei commenti, c'è una domanda se l'AIC graduale può effettivamente essere utile per la previsione. Ecco una simulazione che mostra che sta facendo molto meglio della regressione lineare con tutte le covariate e reti quasi elastiche con la penalità scelta dalla validazione incrociata.
Non prenderei questa simulazione come fine della discussione; non è troppo difficile inventare uno scenario in cui l'AIC graduale preformerà peggio. Ma non è davvero uno scenario irragionevole, ed esattamente il tipo di situazione per cui sono progettate le reti elastiche (alta correlazione delle covariate con pochissimi effetti di grandi dimensioni)!
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 a margine:
Non sono davvero un fan della regressione graduale per molte, molte ragioni, quindi mi sento un po 'imbarazzante aver preso questa posizione in difesa di essa. Ma penso semplicemente che sia importante essere precisi su cosa non mi piace.