Adım adım gerilemeye itiraz etmeyeceğim iki vaka
- Keşifsel veri analizi
- Öngörülü modeller
Bu çok önemli kullanım durumlarının her ikisinde de, geleneksel istatistiksel çıkarımdan endişe duymuyorsunuz, bu yüzden p-değerlerinin vb. Artık geçerli olmaması çok az endişe vericidir.
Örneğin, bir araştırma makalesinde "Pilot çalışmamızda, 1000 üzerinden 3 ilginç değişken bulmak için adım adım regresyon kullandık. Yeni verilerle yapılan bir takip çalışmasında, bu 3 ilginç değişkenin, ilginin sonucu ", adım adım regresyon kullanımı ile hiçbir sorunum olmazdı. Benzer şekilde, "Öngörülü bir model oluşturmak için adım adım regresyon kullandık. MSE ile ilgili veri tutma setimizde önceden oluşturulmuş bu alternatif model X" de benimle gayet iyi.
Açık olmak gerekirse, adım adım regresyonun bu sorunlara yaklaşmanın en iyi yolu olduğunu söylemiyorum. Ancak bu kolaydır ve size tatmin edici çözümler verebilir.
DÜZENLE:
Yorumlarda, AIC'nin aşamalı olarak tahmin için gerçekten yararlı olup olamayacağı sorusu vardır. Burada, tüm ortak değişkenlerle doğrusal regresyondan çok daha iyi performans gösterdiğini ve çapraz doğrulama ile seçilen ceza ile neredeyse aynı zamanda elastik ağları gösterdiğini gösteren bir simülasyon.
Bu simülasyonu tartışmanın sonu olarak kabul etmem; adım adım AIC'nin daha kötü performans göstereceği bir senaryo bulmak çok zor değil. Ama bu gerçekten mantıksız bir senaryo değil ve tam olarak elastik ağların tasarlandığı durumun türü değil (ortak değişkenlerin çok az büyük etkisi ile yüksek korelasyonu)!
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!!
Kenar notu:
Pek çok nedenden ötürü gerçekten adım adım gerileme hayranı değilim, bu yüzden onu savunmak için bu duruşu almakta biraz garip hissediyorum. Ama sadece tam olarak neyi sevmediğim konusunda kesin olmanın önemli olduğunu düşünüyorum.