পদক্ষেপের ভিত্তিতে রিগ্রেশন দেখার ক্ষেত্রে আমি দুটি আপত্তি জানব না
- অনুসন্ধানের তথ্য বিশ্লেষণ
- ভবিষ্যদ্বাণীপূর্ণ মডেল
এই উভয় অত্যন্ত গুরুত্বপূর্ণ ব্যবহারের ক্ষেত্রে, আপনি traditionalতিহ্যগত পরিসংখ্যানগত অনুক্রম সম্পর্কে এতটা উদ্বিগ্ন নন, সুতরাং পি-মান ইত্যাদির পক্ষে আর বৈধ হওয়ার বিষয়টি খুব চিন্তার বিষয় নয়।
উদাহরণস্বরূপ, যদি কোনও গবেষণা পত্র বলেছিল "আমাদের পরীক্ষামূলক গবেষণায় আমরা 1000 টির মধ্যে 3 টি আকর্ষণীয় ভেরিয়েবল সন্ধানের জন্য পদক্ষেপ অনুসারে রিগ্রেশন ব্যবহার করেছি। নতুন ডেটা সহ একটি ফলো-আপ সমীক্ষায় আমরা দেখিয়েছি যে এই 3 টি আকর্ষণীয় ভেরিয়েবলগুলি দৃ with়তার সাথে সম্পর্কযুক্ত ছিল আগ্রহের ফলাফল ", পদক্ষেপ অনুসারে রিগ্রেশন ব্যবহারে আমার কোনও সমস্যা হবে না। একইভাবে, "আমরা ভবিষ্যদ্বাণীমূলক মডেল তৈরি করতে পদক্ষেপ অনুসারে রিগ্রেশন ব্যবহার করেছি। এমএসই সম্পর্কিত আমাদের হোল্ড-আউট ডেটাতে এই আউট-প্রিফর্মড বিকল্প মডেল এক্স" আমার কাছেও পুরোপুরি ঠিক আছে।
স্পষ্টতই, আমি বলছি না যে এই সমস্যাগুলির কাছে যাওয়ার জন্য ধাপে ধাপে রিগ্রেশনই সেরা উপায়। তবে এটি সহজ এবং আপনাকে সন্তোষজনক সমাধান দিতে পারে।
সম্পাদনা করুন:
মন্তব্যে, পদক্ষেপের এআইসি আসলে ভবিষ্যদ্বাণী করার জন্য কার্যকর হতে পারে কিনা তা নিয়ে একটি প্রশ্ন রয়েছে। এখানে এমন একটি সিমুলেশন রয়েছে যা দেখায় যে এটি সমস্ত কোভারিয়েটগুলির সাথে লিনিয়ার রিগ্রেশন, এবং ক্রস-বৈধকরণের দ্বারা নির্বাচিত জরিমানার সাথে প্রায় স্থিতিস্থাপক জালের তুলনায় অনেক ভাল করছে।
আমি এই সিমুলেশনটিকে আলোচনার শেষ হিসাবে গ্রহণ করব না; ধাপে ধাপে ধাপে ধাপে এআইসি আরও খারাপ হতে পারে এমন একটি দৃশ্য নিয়ে আসা খুব কঠিন নয়। তবে এটি সত্যিই অযৌক্তিক পরিস্থিতি নয়, এবং ঠিক সেই ধরণের পরিস্থিতি যেমন ইলাস্টিক নেটগুলি তৈরি করা হয়েছে (খুব কম বড় প্রভাব সহ কোভারিয়েটের উচ্চ সম্পর্কের)!
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!!
সাইড নোট:
আমি অনেক, বহু কারণে ধাপে ধাপে ধাপে ধাপের ভক্ত নই, সুতরাং এর প্রতিরক্ষায় এই অবস্থান নিয়ে আমি কিছুটা বিশ্রী বোধ করি। তবে আমি কেবল এটি সম্পর্কে আমার ঠিক কী পছন্দ নয় তা সম্পর্কে সুনির্দিষ্ট হওয়া গুরুত্বপূর্ণ বলে মনে করি।