दो मामले जिनमें मुझे सौतेलेपन को देखकर कोई आपत्ति नहीं होगी
- अन्वेषणात्मक डेटा विश्लेषण
- भविष्य कहनेवाला मॉडल
इन दोनों ही महत्वपूर्ण उपयोग के मामलों में, आप पारंपरिक सांख्यिकीय अनुमान के बारे में इतने चिंतित नहीं हैं, इसलिए यह तथ्य कि पी-वैल्यू, आदि अब वैध नहीं हैं, थोड़ी चिंता का विषय है।
उदाहरण के लिए, यदि एक शोध पत्र में कहा गया है "हमारे पायलट अध्ययन में, हमने 1000 में से 3 दिलचस्प चर खोजने के लिए चरण-वार प्रतिगमन का उपयोग किया। नए डेटा के साथ एक अनुवर्ती अध्ययन में, हमने इन 3 दिलचस्प चर को दृढ़ता से सहसंबद्ध दिखाया। ब्याज के परिणाम ", मुझे चरण-वार प्रतिगमन के उपयोग से कोई समस्या नहीं है। इसी तरह, "हमने एक भविष्य कहनेवाला मॉडल बनाने के लिए चरण-वार प्रतिगमन का उपयोग किया। एमएसई के संबंध में हमारे होल्ड-आउट डेटा सेट में यह पूर्व-तैयार वैकल्पिक मॉडल एक्स मेरे साथ भी पूरी तरह से ठीक है।"
स्पष्ट होने के लिए, मैं यह नहीं कह रहा हूं कि इन समस्याओं से निपटने के लिए चरण-वार प्रतिगमन सबसे अच्छा तरीका है। लेकिन यह आसान है और आपको संतोषजनक समाधान दे सकता है।
संपादित करें:
टिप्पणियों में, एक सवाल है कि क्या स्टेप वाइज एआईसी वास्तव में भविष्यवाणी के लिए उपयोगी हो सकता है। यहां एक अनुकार है जो यह दिखाता है कि यह सभी कोवरिअट्स के साथ रैखिक प्रतिगमन से बहुत बेहतर कर रहा है, और लगभग क्रॉस-सत्यापन द्वारा चुने गए दंड के साथ लोचदार जाल भी है।
मैं इस अनुकार को चर्चा के अंत के रूप में नहीं लूंगा; ऐसे परिदृश्य के साथ आना बहुत मुश्किल नहीं है, जिसमें कदम-वार एआईसी खराब स्थिति का सामना करेगा। लेकिन यह वास्तव में एक अनुचित परिदृश्य नहीं है, और बिल्कुल ऐसी स्थिति है कि लोचदार जाल के लिए डिज़ाइन किया गया है (बहुत कम प्रभाव के साथ सहसंयोजकों के उच्च सहसंबंध)!
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!!
पक्षीय लेख:
मैं वास्तव में कई, कई कारणों से स्टेप वाइज रिग्रेशन का प्रशंसक नहीं हूं, इसलिए मुझे लगता है कि इसके बचाव में कुछ अजीब लग रहा है। लेकिन मुझे लगता है कि इसके बारे में जो मुझे पसंद नहीं है, उसके बारे में सटीक होना महत्वपूर्ण है।