과거에 많은 생물 의학 논문에서 단계적 회귀가 과도하게 사용되었지만 많은 문제에 대한 더 나은 교육으로 개선되고있는 것으로 보입니다. 그러나 많은 오래된 검토 자들은 여전히 그것을 요구합니다. 단계적 회귀는 역할을하고 상황은 무엇입니까 해야합니다 (있는 경우)를 사용할 수는?
과거에 많은 생물 의학 논문에서 단계적 회귀가 과도하게 사용되었지만 많은 문제에 대한 더 나은 교육으로 개선되고있는 것으로 보입니다. 그러나 많은 오래된 검토 자들은 여전히 그것을 요구합니다. 단계적 회귀는 역할을하고 상황은 무엇입니까 해야합니다 (있는 경우)를 사용할 수는?
답변:
나는 단계적 회귀가 선호되는 접근법 인 상황을 알지 못한다. 매우 큰 데이터 세트에서 전체 단계별 프로세스를 부트 스트랩하면 (특히 전체 모델에서 시작하는 스텝 다운 버전에서) 괜찮을 수 있습니다 . 여기서 은 연속 결과의 관측치 수 (또는 생존 분석에서 이벤트가있는 레코드 수)입니다. 는 모든 고려 된 상호 작용을 포함하는 후보 예측기의 수입니다. 모델 구축 방법을 설명합니다 (즉, 은 때때로 인용되는 20의 요인 보다 보다 훨씬 큽니다 ).N P는 N 개의 피
물론 대부분의 사람들이 단계적 회귀와 같은 일을하고 싶은 이유는
즉, 단계적 회귀와 같은 방법은 (작동 특성이 좋은 경우) 작동 특성이 좋지 않은 상황에서 특히 매력적입니다.
단계별 회귀를 보는 데 반대하지 않는 두 가지 경우는 다음과 같습니다.
이 두 가지 중요한 사용 사례 모두 전통적인 통계적 추론에 대해 걱정하지 않으므로 p- 값 등이 더 이상 유효하지 않다는 사실은 거의 관심이 없습니다.
예를 들어, 한 연구 논문에서 "파일럿 연구에서 단계적 회귀 분석을 사용하여 1000 개 중 3 개의 흥미로운 변수를 찾았습니다. 새로운 데이터에 대한 후속 연구에서는이 3 가지 흥미로운 변수가 관심있는 결과 ", 나는 단계적인 회귀 사용에 문제가 없을 것입니다. 마찬가지로, "단계별 회귀 분석을 사용하여 예측 모델을 작성했습니다. MSE와 관련하여 보류 데이터 세트에서이 성능이 우수한 대체 모델 X"도 제게 좋습니다.
분명히, 나는 단계적 회귀가 이러한 문제에 접근하는 가장 좋은 방법이라고 말하지 않습니다. 그러나 쉽지만 만족스러운 솔루션을 제공 할 수 있습니다.
의견에서, 단계별 AIC가 실제로 예측에 유용 할 수 있는지에 대한 의문이 있습니다. 다음은 모든 공변량에서 교차 회귀에 의해 선택된 페널티가있는 탄성 그물뿐만 아니라 거의 모든 공변량에서 선형 회귀보다 훨씬 우수한 성능을 보이는 시뮬레이션입니다.
나는이 시뮬레이션을 토론의 끝으로 보지 않을 것이다. 단계별 AIC가 더 나빠질 시나리오를 만드는 것은 그리 어렵지 않습니다. 그러나 실제로는 불합리한 시나리오가 아니며 탄성 그물이 설계된 상황의 유형 (정규 효과가 거의없는 공변량의 높은 상관 관계)입니다!
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!!
나는 여러 가지 이유로 단계적 회귀의 팬이 아니기 때문에 그것을 방어하는 데이 자세를 취한 것은 다소 어색합니다. 그러나 나는 단지 내가 싫어하는 것에 대해 정확하게하는 것이 중요하다고 생각합니다.