Dua kasus di mana saya tidak keberatan melihat regresi langkah-bijaksana adalah
- Analisis data eksplorasi
- Model prediksi
Dalam kedua kasus penggunaan yang sangat penting ini, Anda tidak begitu peduli tentang inferensi statistik tradisional, sehingga fakta bahwa nilai-p, dll., Tidak lagi valid tidak menjadi masalah.
Sebagai contoh, jika sebuah makalah penelitian mengatakan "Dalam studi percontohan kami, kami menggunakan regresi bertahap untuk menemukan 3 variabel menarik dari 1000. Dalam penelitian lanjutan dengan data baru, kami menunjukkan 3 variabel menarik ini sangat berkorelasi dengan hasil yang menarik ", saya tidak akan memiliki masalah dengan penggunaan regresi bertahap. Demikian pula, "Kami menggunakan regresi langkah-bijaksana untuk membangun model prediktif. Model X out-preformed ini dalam set data hold-out kami mengenai MSE" juga benar-benar baik untuk saya.
Untuk lebih jelasnya, saya tidak mengatakan bahwa regresi bertahap adalah cara terbaik untuk mendekati masalah ini. Tapi itu mudah dan mungkin memberi Anda solusi yang memuaskan.
EDIT:
Dalam komentar, ada pertanyaan apakah AIC bertahap dapat benar-benar berguna untuk prediksi. Berikut ini adalah simulasi yang menunjukkan bahwa kinerjanya jauh lebih baik daripada regresi linier dengan semua kovariat, dan hampir juga jaring elastis dengan penalti yang dipilih melalui validasi silang.
Saya tidak akan mengambil simulasi ini sebagai akhir dari diskusi; tidak terlalu sulit untuk membuat skenario di mana AIC langkah-bijaksana akan terbentuk lebih buruk. Tapi itu benar-benar bukan skenario yang tidak masuk akal, dan persis jenis situasi yang dirancang untuk jaring elastis (korelasi tinggi kovariat dengan efek sangat sedikit)!
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!!
Catatan:
Saya benar-benar bukan penggemar regresi bertahap karena banyak alasan, jadi saya merasa agak canggung mengambil sikap ini untuk mempertahankannya. Tapi saya hanya berpikir penting untuk menjelaskan dengan tepat apa yang tidak saya sukai.