단계적 회귀를 사용해야하는 상황이 있습니까?


13

과거에 많은 생물 의학 논문에서 단계적 회귀가 과도하게 사용되었지만 많은 문제에 대한 더 나은 교육으로 개선되고있는 것으로 보입니다. 그러나 많은 오래된 검토 자들은 여전히 ​​그것을 요구합니다. 단계적 회귀는 역할을하고 상황은 무엇입니까 해야합니다 (있는 경우)를 사용할 수는?


6
수업을 가르 칠 때 사용해서는 안된다는 생각을 설명하기 위해 자주 사용합니다.
gung-복직 모니카

1
(+1) 감사합니다. @gung 저는 통계학자가 아니며 이것이 정확하다는 것을 알지만이를 방어하기가 어렵다는 것을 알게되었습니다. 나는 1) 이 매우 좋고 자주 인용되는 글많이 인용 할 수있는 세부 사항으로 들어 가지 않기 때문에 특히 어렵다는 것을 발견했다 .... (ctd)
bobmcpop

2
(ctd)와 2) stepwise에 대한 비평가들은 종종 많은 변수 나 데이터 마이닝에서 선택하기 위해 그렇게하는 것 같습니다. 생의학 세계에서 표본 크기 계산에는 종종 예상되는 공변량의 수를 고려하므로 전체 모형이 처음에는 그렇게 크지 않으며 각 var는 이미 일부 "생물학적"이유를 포함해야합니다. 이러한 상황에서 단계적으로 동일하게 사용해서는 안된다고 생각하십니까?
bobmcpop

3
생체 의학 연구를위한 통계 컨설팅을합니다. 나는 단계별로 사용하지 않습니다. 나는 많은 사람들에게 묻지 않았다. (그들은 그들이 프로젝트에 도움이된다면 그것을 사용한다고 가정 할 수도 있지만) 사람들이 요청할 때 나는 그것이 유효하지 않다고 말하고 이유에 대해 이야기한다.
gung-모니 티 복원

답변:


11

나는 단계적 회귀가 선호되는 접근법 인 상황을 알지 못한다. 매우 큰 데이터 세트에서 전체 단계별 프로세스를 부트 스트랩하면 (특히 전체 모델에서 시작하는 스텝 다운 버전에서) 괜찮을 수 있습니다 . 여기서 은 연속 결과의 관측치 수 (또는 생존 분석에서 이벤트가있는 레코드 수)입니다. 는 모든 고려 된 상호 작용을 포함하는 후보 예측기의 수입니다. 모델 구축 방법을 설명합니다 (즉, 은 때때로 인용되는 20의 요인 보다 보다 훨씬 큽니다 ).N P는 N 개의 n>>pnpnp

물론 대부분의 사람들이 단계적 회귀와 같은 일을하고 싶은 이유는

  1. 그것은 계산 집약적이지 않기 때문에 (적절한 부트 스트랩을하지 않으면 결과가 신뢰할 수 없습니다),
  2. "모델에 있음"과 "모델에 있지 않음"문 (표준 단계적 회귀에서는 매우 신뢰할 수 없음, 적절한 부트 스트랩은 일반적으로 이러한 문이 일반적으로 명확하지 않도록 명확하게 함)을 제공하기 때문에
  3. 종종 은 보다 작거나 가깝거나 조금 더 크기 때문 입니다.pnp

즉, 단계적 회귀와 같은 방법은 (작동 특성이 좋은 경우) 작동 특성이 좋지 않은 상황에서 특히 매력적입니다.


3
(+1) 또한 단계별 계수 및 관련 방법은 많은 계수가 무시할 수 있고 오차 분산에 비해 약간 큰 경우에 건초 더미 상황에서 예측 모델에 적합 할 수 있습니다. Tibshirani (1996)의 실시 예 3 , Lasso를 통한 회귀 수축 및 선택 , JRSS B , 58 , 1을 참조하십시오. 여기서도 음이 아닌 가로 트가 이깁니다.
Scortchi-Monica Monica 복원

3
나는 마지막 단락을 이해할 수 없습니다. 아마도 그것을 다시 말할 수 있을까요? 또한, 3은 어떻습니까 : 직접 논증을 보지 못했을 것입니다. 어쩌면 뭔가 추측하기 쉬운 것일까 요?
Richard Hardy

1
마지막 단락과 (3)을 명확히하기 위해 : 사람들은 (3) 때문에 단계적으로 사용합니다 (즉, 전체 모델을 맞추기가 어렵거나 이되는 상황을 피하기 위해 ). 그러나 그것이 끔찍한 방법이 될 때입니다. . 그들은 계산 집약적이지 않기 때문에 그것을 사용하지만 유용한 것을 얻으려면 광범위한 부트 스트랩을 수행해야합니다 (따라서 실제로 이점도 아닙니다). 그리고 그들은 그것을 명확하게 해석하는 것처럼 보이기 때문에 그것을 사용하지만, 제대로 수행되면 그렇게 명확하지 않으며 모델 불확실성이 얼마나 많은지 알 수 있습니다 (명확한 해석 = 환상). pn
Björn

11

단계별 회귀를 보는 데 반대하지 않는 두 가지 경우는 다음과 같습니다.

  1. 탐색 적 데이터 분석
  2. 예측 모델

이 두 가지 중요한 사용 사례 모두 전통적인 통계적 추론에 대해 걱정하지 않으므로 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!!

사이드 노트 :

나는 여러 가지 이유로 단계적 회귀의 팬이 아니기 때문에 그것을 방어하는 데이 자세를 취한 것은 다소 어색합니다. 그러나 나는 단지 내가 싫어하는 것에 대해 정확하게하는 것이 중요하다고 생각합니다.


2
이 두 가지 징후를 제외하고 (생물학적 문헌에서) 일반적으로 사용되는 다른 시나리오는 무엇입니까? 나는 예측 모델에 대해서만 사용했지만, 예를 들어 권장하지는 않습니다 .
bobmcpop

5
@bobmcpop : 큰 문제는 인용 한 논문에서 언급 한 것처럼 단계적 회귀 후 p- 값, 신뢰 구간을 사용하는 것입니다. 예측에만 사용되는 모델 (예측 변수가있는 모델이 아니라)은 일반적으로 p- 값에 신경 쓰지 않고 표본 외 오차가 얼마나 많이 감소하는지에 대해 신경 쓰지 않습니다.
Cliff AB

1
@ Björn : 글쎄, 마지막에 말했듯이, 그것이 일반적으로 어떤 방법 으로든 그렇게하는 가장 좋은 방법이라고 생각하지 않습니다. 그러나 그것은 유효하지 않으며, 당신 합리적인 결과로 끝날 수 있습니다 . 따라서 강점은 실제로 사용하기가 얼마나 쉬운 지입니다. 공변량을 사용하고 가능성을 반환하는 모델이있는 경우 단계적으로 AIC를 수행 할 수 있습니다. LASSO와 같은 기능으로 더 잘 할 수는 있지만 멋진 새 모델이거나 Excel을 사용하는 경우에는 그렇지 않을 수 있습니다.
Cliff AB

4
(+1) 나는 glmnet이 그와 같은 상황 (그것의 보폭)에서 이런 종류의 상황을 취하도록 설계되었다고 말했다. 수축이없는 예측 변수 선택 방법이 특히 적합합니다. 몇 개의 크고 작은 것보다는 "테이퍼 효과"가있을 때 접근 방식을 비교하는 것이 흥미로울 수 있습니다.
Scortchi-Monica Monica 복원

2
코드 파일이나 콘솔에 더 쉽게 읽고 복사하고 붙여 넣을 수 있도록 코드를 편집했습니다. 나는 그것을 좋아하면 좋겠. 그렇지 않으면 사과와 함께 롤백하십시오.
gung-복직 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.