♧ 통계

[R] 회귀 분석 변수 선택법 | step()

Grit_0913 2024. 7. 21. 19:23

[R] 회귀 분석에서의 변수 선택법 (step 함수 실습 포함)

하단의 목차에서 원하는 내용을 클릭하여 바로 이동하실 수 있습니다 :)

1. 변수 선택법의 종류
        1-1. 위계적 방법
        1-2. 강제 도입법
        1-3. 단계별 방법 
2. 억제인자 효과 (Suppressor effects)
3. AIC(Akaike information criterion)
4. step()을 통한 단계별 선택법 수행
        4-1. Arguments
        4-2. 실습 R studio
5. Reference

 

회귀분석을 수행할 때 어떤 예측변수를 포함하는가는 회귀 모형에 있어 중요한 과제가 된다. 이러한 변수 선택을 수행하는 방법에는 실험자(혹은 연구자)가 직접 수행할 수도 있으며 수학적(통계적) 기준으로 수행할 수도 있다.

 

1. 변수 선택법의 종류

1-1. 위계적 방법

  • 위계적 방법을 활용한 회귀를 위계적 회귀(hierarchical regression)이라 한다.
  • 과거 연구(혹은 도메인)를 근거로 하여 예측변수를 선택한다. 
    • 일반적으로 연구(혹은 도메인)적으로 중요한 변수를 먼저 도입힌다.
    • 남은 변수들을 도입한다.
      • 일제히 도입, 단계별 도입, 위계적(중요하다 생각되는 순으로) 도입을 할 수 있다.

1-2. 강제 도입법

  • 강제 도입법(forced entry method)이란 모든 예측변수를 한 번에 도입하는 방법이다. 즉, 순서를 고려하지 않는다.
  • 순서를 고려하지 않는다는 점에서 위계적 방법과 차이가 있다.
  • 순서를 고려하지 않기 때문에 방법론적으로 더 적합하다는 의견이 존재한다.
    • 만약 순서를 고려하여 위계적으로 도입을 할 경우 아래와 같이 최종적으로 출력되는 회귀 모형이 다를 수 있기 때문이다.

1-3. 단계별 방법

 

대부분의 통계학자들은 단계별 방법을 활용한 단계적 회귀(stepwise regression)을 꺼린다. 단계적 회귀는 회귀 모형에 예측변수들을 도입하는 순서를 순수히 수학적 기준에 기초하여 결정한다.

 

전진 선택법 (Forward selection)

  • 상수($b_0$)만 있는 회귀모형에서 시작하여 결과변수 예측에 중요한 예측변수를 찾는다.
  • '결과변수에 중요하다'라는 의미는 결과변수와의 단순상관이 높은 예측변수를 의미한다.
    • 예측에 가장 큰 영향을 주는 예측변수를 도입하는 것을 반복한다.
  • 두 번째 예측변수부터는 결과변수와의 '준편상관'이 가장 큰 변수를 선택한다.
    • 예를 들어 첫 번째 변수가 결과변수에 대해 설명하는 변동이 40% 이고, 설명되지 않는 변동이 60%라면 두 번째 변수는 설명되지 않는 변동 60%를 최대한 많이 설명하는 예측변수를 선택한다. 
  • 단, 무한히 예측변수를 추가할 수는 없다는 문제가 존재한다.
    • 예측변수의 수를 판단하는 기준으로는 AIC(Akaike information criterion)을 활용한다. 
    • 전진 선택법으로 예측변수를 추가하여도 AIC가 줄어들지 않는다면 작업을 중단한다.
  • AIC의 변화에 대해서는 이후 step() 함수의 실습과정에서 확인할 수 있다.

 

후진 제거법 (Backward elimination)

  • 후진 제거법은 모든 예측변수를 포함하여 회귀모형을 구축한 뒤 변수를 하나씩 제거하며 AIC가 감소하는 것을 확인한다.
    • AIC가 지속적으로 낮아진다면 해당하는 예측변수를 제거하고, 남은 예측변수들의 기여도를 재평가한 뒤 후진 제거법을 지속한다.
  • AIC가 증가하는 시점에 후진 제거법을 중단한다.

 

양방향 제거 (Bidirectional elimination)

  • 전진 선택법과 후진 제거법을 모두 수행하는 방법이다.
  • 시작은 전진 선택법으로 예측변수가 두 개 이상이될 때까지 전진 선택법을 수행한다.
  • 예측변수가 두 개 이상이 된 후부터는 전진 선택법으로 예측변수를 추가할 때마다 유의하지 않은 예측변수가 있는지 확인한 뒤 만약 그러한 변수가 있다면 제거한다(후진 제거법).
  • 마찬가지로 AIC를 기준으로 판단한다.

2. 억제인자 효과 (Suppressor effects)

 

결론적으로 억제인자 효과로인하여 전진 선택법 보다는 후진 제거법을 활용하는 것이 좋다. 억제인자 효과란 다음과 같다.

  • 하나의 예측변수(A)가 고정되었을 때에만 다른 예측변수(B)가 효과를 갖는다.
  • 1) 예측변수들끼리의 상관관계, 그리고 2) 예측변수들과 결과변수의 상관관계 중 이들의 부호가 다른 경우 억제인자 효과가 존재한다.
  • 1) 예측변수들끼리의 상관관계, 그리고 2) 예측변수드로가 결과변수의 상관관계의 부호가 동일하더라도 그 차이가 크다면 억제인자 효과가 존재한다.

쉽게 이야기하면 새로운 예측변수가 추가되는 경우 다른 예측변수들이 결과변수와 갖는 coefficients가 변동할 수 있다. 전진 제거법의 경우 예측변수가 없는 상태에서 하나씩 선택을 하기에 모든 변수를 포함한 상태로 시작을 하는 후진 제거법에 비하여 억제인자 효과를 배제할 가능성이 커진다.

 

 

후진 제거법은 모든 예측변수를 포함한 상태로 시작하기에 일차적으로 모든 억제인자 효과 또한 내포되어 있다. 그러나 전진 선택법은 단계별로 변수를 도입하기에 무시되는 억제인자 효과가 존재할 수 있다.

 


3. AIC (Akaike information criterion, AIC)

 

AIC는 모형의 적합도를 평가하는 하나의 지표이다. 회귀 모형은 예측변수가 증가하면 기존의 평가 지표인 $R^2$가 증가한다. 즉, 모델의 설명력이 증가한다. 그러나 무한히 예측변수를 추가할 수는 없다. 따라서 AIC를 통해 이를 평가한다. AIC의 식은 다음과 같다.

 

$$AIC=2K-2ln(L)$$

  • K : 예측변수의 수이다. (Default는 2이다. 예를들어 예측변수가 1개라면 K=1(the number of predict variable)+2(default value)=3이 된다).
  • ln : 자연로그이다. (밑이 자연상수 $e$).
  • L : log-likelihood estimate로 현재 회귀 모형이 우리가 관측한 y-value로 부터 나왔을 likelihood의 추정치를 의미한다.

 

AIC가 감소한다는 말은 예측변수가 증가하는 정도(2K)보다 log-likelihood estimate(L)이 더 큼을 의미한다. 즉, 예측변수가 증가하지만 회귀 모형이 우리가 관측한 y-value에서 추정되었을 가능성은 더 커진다는 것이다. 그렇기에 예측변수의 수가 증가해도 회귀 모형적으로는 문제가 되지 않는다.

 

다시 단계별 변수 선택법으로 돌아가 설명을 한다. 단계별 변수 선택법을 활용하여 변수를 추가 혹은 제거할 때 AIC가 증가한다는 것은 예측변수가 증가하면서 얻게되는 이득보다 회귀 모형이 나올 추정도(likelihood)가 더 낮다는 것이므로 득보다 실이 크다는 것을 의미하기에 단계적 선택법을 중단한다.


4. step()을 통한 단계별 선택법 수행

4-1. Arguments

 

step( model, direction=" ", scope=list(lower="최종 모델이 포함할 최소 예측변수의 수", upper="최종 모델이 포함할 최대 예측변수의 수" )

 

  • 자주 사용하는 arguments
    • model : 적합한 회귀 모형을 입력한다.
    • direction : 전진 선택법 (forward), 후진 제거법 (backward), 양방향 제거 (both)를 선택한다.
    • scope : 전진 선택법을 수행할 때 설정한다.
      • lower : 전진 선택법을 완료한 후 모델이 갖을 수 있는 최소 변수의 수를 갖는 모델. 
        • e.g. 최소 상수항만 포함하는 모델을 원하는 경우 '결과변수 ~1'로 상수항만 포함된 모델을 입력한다.
      • upper : 전진 선택법을 완료한 후 모델이 갖을 수 있는 최대 변수의 수를 갖는 모델. 
        • e.g. 최대 모든 변수를 포함하는 모델을 원하는 경우 '결과변수~.'로 모든 변수를 포함하는 변수를 입력한다.
  • 전체 arguments는 R 문서에서 확인.
    https://search.r-project.org/CRAN/refmans/emdi/html/step.html

 

4-2. 실습 R studio

 

  • step() 함수를 사용할 때 다른 패키지와의 충돌로 오류가 생길 수 있다. 이 경우에는 stats::step()으로 직접 명시를 해주면 된다.

https://stackoverflow.com/questions/55342788/error-in-lengthobj-class-name-too-long-in-length

 

Error in length(obj) : class name too long in 'length'

#2개년(use: df_3 , MSE: 0.02313121) #선형회귀모델 lm2 <- lm(data = df_3, formula = OPS_y1 ~ (OPS_y2+OPS_y3 + AVG_y2+AVG_y3 + G_y2+G_y3 + GW.RBI_y2+GW.RBI_y3 + H_y2+H_y3 + SAC_y2+SAC_y3)^2) %>% step(

stackoverflow.com

 

전진 선택법

# 사용할 데이터를 불러온다.
data("BostonHousing")
Boston_d <- BostonHousing
summary(Boston_d)

# 전진 선택법에 적용할 모델을 생성한다 (상수항만 포함하는 회귀 모형).
model_forward <- lm(medv ~ 1, data=Boston_d)
summary(model_forward)

# 전진 선택법의 upper 인자에 적용할 모델을 생성한다. (모든 변수를 포함한 회귀 모형).
# 해당 회귀 모형은 후진 제거법에도 사용할 것이기에 모델명은 "model_backward"로 한다.
model_backward <- lm(medv ~., data=Boston_d)
summary(model_backward)

# 전진 선택법을 적용하여 회귀 모형을 생성한다.
step(model_forward, direction="forward", scope=list(lower=model_forward, upper=model_backward))

후진 제거법

# 사용할 데이터를 불러온다.
data("BostonHousing")
Boston_d <- BostonHousing
summary(Boston_d)

# 후진 제거법을 적용할 모델을 생성한다.
# 후진 제거법을 시작할 때에 모든 변수를 포함한다.
# 따라서 굳이 scope 인자를 적용할 필욘는 없다.
model_backward <- lm(medv ~., data=Boston_d)
summary(model_backward)

# 후진 제거법을 적용하여 회귀 모형을 생성한다.
step(model_forward, direction="backward")

 

양방향 제거법

# 사용할 데이터를 불러온다.
data("BostonHousing")
Boston_d <- BostonHousing
summary(Boston_d)

# 전진 선택법에 적용할 모델을 생성한다 (상수항만 포함하는 회귀 모형).
model_forward <- lm(medv ~ 1, data=Boston_d)
summary(model_forward)

# 전진 선택법의 upper 인자에 적용할 모델을 생성한다. (모든 변수를 포함한 회귀 모형).
# 해당 회귀 모형은 후진 제거법에도 사용할 것이기에 모델명은 "model_backward"로 한다.
model_backward <- lm(medv ~., data=Boston_d)
summary(model_backward)

# 양방향 제거법을 적용하여 회귀 모형을 생성한다.
step(model_forward, direction="both", scope=list(lower=model_forward, upper=model_backward))

 

현재 데이터 기준으로는 전진 선택법과 양방향 제거법의 최종 모델이 동일하다.


5. Reference