통계/회귀분석 - R 프로그래밍

변수 선택 방법(AIC)

BlueNoa 2021. 6. 30. 03:10
728x90
반응형

· 변수 선택

다중회귀에서 설명변수의 수 k가 클수록 더 정확한 회귀 결과를 얻을 것이라고 생각할 수 있지만 그런 경우는 없다.

오히려 모형과 해석이 더 복잡해지고, 설명력 등에서 개선되지 않는 경우가 매우 크다.

적절한 설명변수를 선택해야 하는 고민을 '변수 선택의 문제', 딜레마(Variable Selection Problem)라고 할 수 있다.

 

요약하면 다음과 같다.

(1) 설명변수가 많이 포함될수록 반응 변수를 정확히 예측할 수 있다는 가정(생각)이 있다.

(2) 하지만 설명변수의 수증가할수록 추정식 yhat의 분산은 점점 커지게 된다. 그러므로 분산이 커진다는 것은 분석의 정확도가 떨어지게 된다는 것이다. 따라서 변수 선택의 문제는 최적의 회귀식을 찾기 위한 방법과 기준을 마련하여 여러 모형을 비교하여 최종적으로 적합한 모형을 선택하여 결론을 내린다.

 

 

· 변수 선택의 판정 기준

변수 선택에서 P(<= k)는 모형에 포함된 설명변수의 수를 타나낸다. (k는 고려되는 설명변수 전체의 개수)

(1)과 (2)의 기준 대신에 회귀 제곱합(SSR or RSS)을 최대로 하는 모형을 찾기도 한다.

MSE는 최소, R**2_adj 최대, C를 P에 가깝게 하며 AIC의 값이 작게 나오는 모형을 권장한다.

 

위의 4개의 기준을 각각 적용한다고 할 때, 모든 기준에서 최적으로 일치하는 모형이 나오지 않을 수도 있다.

※ 설명변수의 개수가 k개를 2개라고 가정할 때, {x1, x2} 변수들에 대해 2 ** k 개의 모형이 나온다. 이를 계산하면 2 ** 2 = 4개의 모형이 나오게 된다. (단, 공집합이 포함된 개수이므로 공집합은 제외해야 한다.)

 

 


· AIC와 BIC

AIC(Akaike Information Criterion) 또는 BIC(Bayes Information Criterion)는 통계 모델 간의 적합성을 비교하는 모델 지표 중 하나이다.

 

수리 통계학에 의한 식은 다음과 같다.

AIC = -2 log(likeihood) + 2k

BIC = -2log(likeihood) + klog(n)

손실 가중치에 의한 계산법에 따라서 사용하는 식은 다를 수 있다.

여기서 우도란 임의 표본의 관측치 x1,...., xn이 주어졌을 때 관측치들의 결합 확률분포 함수이다.

즉, 있을 법한 가능한 확률들이다.

 

선형 회귀의 경우

AIC = n * ln(SSR / n) + 2P

BIC = n * ln(SSR / n) + p * log(n)


· 변수를 선택하는 방법

변수 선택 전 다(중)공선성을 먼저 고려해야 한다.

만약 의심되는 경우, 상관계수가 큰 설명변수 중 반응 변수에 적은 영향을 주는 변수를 제거하고 회귀를 실시한다.

또 이상점(이상치, 극단값)과 영향력이 있는 관찰 값에 대한 식별도 고려의 대상이다.

 

가능한 모든 회귀를 가정하면 설명변수의 수가 k인 회귀에서 가능한 모든 회귀식은 2 ** k개이다.

k가 적을 때는 가장 적용하기 쉬워 자주 이용한다. (k <= 10)

이 때, 각각의 P(사용된 설명변수의 수)에 대해 가장 최적을 골라 비교하는 것이 편리하다.

 

· 모든 가능한 회귀

설명변수의 수가 k인 회구에서 가능한 모든 회귀식은 2 ** k 개라는 것을 명심.

k가 작을 경우 자주 적용되는 방법이다 (10개 이하)

 

 


<예제>

# --
states = as.data.frame(state.x77)
reg = lm(Murder ~ ., data = states)
reg2 = lm(Murder ~ Population + `Life Exp`, data = states)


# AIC
AIC(reg, reg2) # reg   9 206.9071, reg2  4 220.1969 : reg가 더 작은 AIC값을 갖는다.

# AIC 자동 진행법 : Stepwise Regression
# Backward(후진 소거법) : 모든 변수들 중 기여도가 낮은 변수부터 제거하면서 만드는 모델
back_model = step(reg, direction = "backward")

# Forward(전진 소거법) : 변수를 하나씩 추가하며 모델을 만들어서 AIC 값을 확보한다.
reg3 = lm(Murder ~ 1, data = states)
for_model = step(reg3, direction = "forward",
                 scope = (Murder ~ Population + Illiteracy + Frost), trace = 1) # trace : 과정 보기

# 양쪽 선택법 : MASS 패키지가 필요하다.
install.packages("MASS")
library(MASS)
both_model = stepAIC(reg, direction = "both")



# 모든 부분 집합 회귀(all subset regression) : 모든 모형을 고려한다.
library(leaps)
m = regsubsets(Murder ~ ., data = states, nbest = 2) # 기본값은 1
m
summary(m)
summary(m)$bic # AIC의 값과 동일한 BIC가 출력된다.
summary(m)$adjr2 # 수정된 결정계수가 나온다.
plot(m, scale = "adjr2", main = "변수 선택 차트")



# Mallow's CP 통계량
library(leaps)
m2 = regsubsets(Murder ~ ., data = states) # 각 p에 따라 최적의 모형 제시
rs = summary(m2)
rs

cp = rs$cp # 선택된 모형의 cp
cp
adjr2 = rs$adjr2
adjr2

 

- backward

Start:  AIC=63.01
Murder ~ Population + Income + Illiteracy + `Life Exp` + `HS Grad` + 
    Frost + Area

             Df Sum of Sq    RSS    AIC
- Income      1     0.236 128.27 61.105
- `HS Grad`   1     0.973 129.01 61.392
<none>                    128.03 63.013
- Area        1     7.514 135.55 63.865
- Illiteracy  1     8.299 136.33 64.154
- Frost       1     9.260 137.29 64.505
- Population  1    25.719 153.75 70.166
- `Life Exp`  1   127.175 255.21 95.503

Step:  AIC=61.11
Murder ~ Population + Illiteracy + `Life Exp` + `HS Grad` + Frost + 
    Area

             Df Sum of Sq    RSS    AIC
- `HS Grad`   1     0.763 129.03 59.402
<none>                    128.27 61.105
- Area        1     7.310 135.58 61.877
- Illiteracy  1     8.715 136.98 62.392
- Frost       1     9.345 137.61 62.621
- Population  1    27.142 155.41 68.702
- `Life Exp`  1   127.500 255.77 93.613

Step:  AIC=59.4
Murder ~ Population + Illiteracy + `Life Exp` + Frost + Area

             Df Sum of Sq    RSS    AIC
<none>                    129.03 59.402
- Illiteracy  1     8.723 137.75 60.672
- Frost       1    11.030 140.06 61.503
- Area        1    15.937 144.97 63.225
- Population  1    26.415 155.45 66.714
- `Life Exp`  1   140.391 269.42 94.213

 

- forward

Start:  AIC=131.59
Murder ~ 1

             Df Sum of Sq    RSS     AIC
+ Illiteracy  1    329.98 337.76  99.516
+ Frost       1    193.91 473.84 116.442
+ Population  1     78.85 588.89 127.311
<none>                    667.75 131.594

Step:  AIC=99.52
Murder ~ Illiteracy

             Df Sum of Sq    RSS     AIC
+ Population  1    48.517 289.25  93.763
<none>                    337.76  99.516
+ Frost       1     5.387 332.38 100.712

Step:  AIC=93.76
Murder ~ Illiteracy + Population

        Df Sum of Sq    RSS    AIC
<none>               289.25 93.763
+ Frost  1  0.021447 289.22 95.759

 

- both

Start:  AIC=63.01
Murder ~ Population + Income + Illiteracy + `Life Exp` + `HS Grad` + 
    Frost + Area

             Df Sum of Sq    RSS    AIC
- Income      1     0.236 128.27 61.105
- `HS Grad`   1     0.973 129.01 61.392
<none>                    128.03 63.013
- Area        1     7.514 135.55 63.865
- Illiteracy  1     8.299 136.33 64.154
- Frost       1     9.260 137.29 64.505
- Population  1    25.719 153.75 70.166
- `Life Exp`  1   127.175 255.21 95.503

Step:  AIC=61.11
Murder ~ Population + Illiteracy + `Life Exp` + `HS Grad` + Frost + 
    Area

             Df Sum of Sq    RSS    AIC
- `HS Grad`   1     0.763 129.03 59.402
<none>                    128.27 61.105
- Area        1     7.310 135.58 61.877
- Illiteracy  1     8.715 136.98 62.392
- Frost       1     9.345 137.61 62.621
+ Income      1     0.236 128.03 63.013
- Population  1    27.142 155.41 68.702
- `Life Exp`  1   127.500 255.77 93.613

Step:  AIC=59.4
Murder ~ Population + Illiteracy + `Life Exp` + Frost + Area

             Df Sum of Sq    RSS    AIC
<none>                    129.03 59.402
- Illiteracy  1     8.723 137.75 60.672
+ `HS Grad`   1     0.763 128.27 61.105
+ Income      1     0.026 129.01 61.392
- Frost       1    11.030 140.06 61.503
- Area        1    15.937 144.97 63.225
- Population  1    26.415 155.45 66.714
- `Life Exp`  1   140.391 269.42 94.213

 

- regsubsets의 그래프

 

- Mallow's CP

- rs 출력 결과

Subset selection object
Call: regsubsets.formula(Murder ~ ., data = states)
7 Variables  (and intercept)
           Forced in Forced out
Population     FALSE      FALSE
Income         FALSE      FALSE
Illiteracy     FALSE      FALSE
`Life Exp`     FALSE      FALSE
`HS Grad`      FALSE      FALSE
Frost          FALSE      FALSE
Area           FALSE      FALSE
1 subsets of each size up to 7
Selection Algorithm: exhaustive
         Population Income Illiteracy `Life Exp` `HS Grad` Frost Area
1  ( 1 ) " "        " "    " "        "*"        " "       " "   " " 
2  ( 1 ) " "        " "    " "        "*"        " "       "*"   " " 
3  ( 1 ) "*"        " "    "*"        "*"        " "       " "   " " 
4  ( 1 ) "*"        " "    " "        "*"        " "       "*"   "*" 
5  ( 1 ) "*"        " "    "*"        "*"        " "       "*"   "*" 
6  ( 1 ) "*"        " "    "*"        "*"        "*"       "*"   "*" 
7  ( 1 ) "*"        "*"    "*"        "*"        "*"       "*"   "*" 


- cp값들
39.489822 15.212646  8.024264  5.188954  4.327552  6.077326  8.000000
해석 : 위 표에서 6 (1) 번째에 "*"로 된 변수들이 가장 잘 맞는 최적의 모형이다. 왜냐하면 cp의 값들은 변수의 개수와 똑같을 때 가장 최적의 모형이기 때문이다. 6번째 cp값은 6.077326 이므로 0.077326 밖에 차이가 안난다.


- adjr2값들
0.6015893 0.7181783 0.7567344 0.7753649 0.7848069 0.7811041 0.7763042

 

이 외에도 여러 지표들이 존재한다. 참고 사이트 - https://rk1993.tistory.com/entry/AIC-BIC-Mallows-Cp-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

AIC, BIC, Mallow's Cp 쉽게 이해하기

개요 회귀모델에서 설명변수가 많을 경우에는 설명변수를 줄일 필요가 있습니다. 설명변수가 많으면 예측 성능이 좋지 않기 때문이죠. 많은 설명변수를 가지는 회귀분석의 경우 설명변수들사

rk1993.tistory.com

 

728x90
반응형