내가 하는 통계 분석/R

[내가 하는 통계 분석] 회귀분석(2). 변수 선택법, 로그 변환 in R

산격동 너구리 2021. 4. 5. 12:09

안녕하세요, 산격동 너구리입니다.

 

저번에 이어 이번 포스팅도 "회귀분석"입니다.

 

lunch-box.tistory.com/114

 

[내가 하는 통계 분석] 회귀분석(Regression) in R

안녕하세요, 산격동 너구리입니다. 이번 포스팅은, R을 이용한 "회귀분석"입니다. 회귀분석은 너무 유명해서 이미 참고할만한 도서, 블로그 등 좋은 자료가 충분하다고 생각합니다. 이론은 충분

lunch-box.tistory.com

 

 

이전 포스팅에서는 그냥 변수 3개를 모두 넣은 모형을 만드는 것으로 마무리를 했었는데요.

 

이번에는 변수 선택과 변환에 대해서 간략하게 진행해보겠습니다.


개요

 

변수 선택이란??

 

회귀분석을 이용해 독립 변수와 종속 변수에 관한 함수를 만들었을 때,

 

종속 변수를 설명하는데 도움이 안 되는 독립 변수가 있을 수 있습니다.

 

이 때, 필요없는 변수들은 제외하여야 효율적인 모형이 될 수 있습니다.

 

 

변수 선택은 보통 AIC나 BIC를 기준으로 선택합니다.

 

AIC, BIC는 내용이 조오금 복잡할 수 있기 때문에...

 

간단하게 작을수록 좋다고 알고 계시면 됩니다.

 

독립 변수를 제외하거나 추가하면서 AIC, BIC를 계산하고

 

값이 적어지는 방향으로 변수를 선택한다고 보시면 됩니다.

 

추가, 제외를 어떤 기준으로 할건지에 따라 결과가 조금씩 달라질 수 있는데요,

 

제외하거나 추가하는 방법에 3가지가 있습니다.

 

  1) 전진선택법 : 제일 좋은 변수를 하나씩 추가함.

 

  2) 후진제거법 : 제일 안 좋은 변수를 하나씩 제외함.

 

  3) 단계적 선택법 : 추가, 제외를 반복하면서 최적 변수를 찾아감.

 

 

변수 변환??

 

분석이라는게 여러 분야에서 사용되고 있어서 서로서로 용어가 다릅니다...

 

제가 말하는 변수 변환은, 말 그대로 변수를 변환하는 것을 의미합니다.

 

종속 변수를 log 변환한다던가, 독립 변수를 제곱한 값을 추가한다던가...

 

이런 작업을 통해서 모형이 더 좋아질 수 있습니다.

 

하지만, 모형의 성능과 해석가능성은 서로 상충되는 경향이 있기 때문에

 

성능을 올리기 위해 변수 변환을 한다면 해석이 어려워질 수 있습니다.

 

 


예제

 

저번 포스팅에서 이어서 진행합니다.

 

따라해보실 분은 이전 포스팅 참고바랍니다.

 

 

변수 선택(단계적 선택법)
## 변수 선택
model1_selection = step(model1, direction = 'both',
                        scope = list(lower = ~ 1))
                        
summary(model1_selection)

변수 선택 결과,

 

newspapaer 변수가 제외되었습니다.

 

산점도에서도 관계가 없어보였고, 회귀분석 결과에서도 유의하지 않았으니

 

변수선택의 결과로 제외되는 것이 합리적인 것 같네요.

 

설명력을 의미하는 $R^2$는 0.8972, 수정된 $R^2$는 0.8962입니다.

 

가정도 다시 확인해보겠습니다.

 

뭐...큰 차이는 없는 것 같습니다.

 

이대로라면 가정은 여전히 문제가 있어보입니다.

 

종속 변수 log 변환

 

model2 = lm(log(sales) ~ ., data = data)
plot(model2)

 

다시 처음으로 돌아와서,

 

종속변수를 log 변환한 뒤, 회귀분석을 해보겠습니다.

 

선형성, 등분산성이 좀 괜찮아져보이기는 하는데...

 

131번 관측치가 눈에 띄게 튀고있습니다 ㅠ

 

131번 때문에 여전히 완벽하게 가정을 만족시킨다고 볼 순 없겠네요.

summary(model2)

여전히 newspaper는 유의하지 않은 변수입니다.

 

$R^2$는 기존보다 감소한 것으로 보입니다.

 

원래보다 가정은 조금 더 괜찮아보이지만, 성능이 감소했네요.

 

여기에서 다시 변수 선택 과정을 거친다면??

 

model2_selection = step(model2, direction = 'both',
                        scope = list(lower = ~ 1))

summary(model2_selection)

또 다시 newspaper 변수는 제외됩니다.

 

plot(model2_selection)

 

 

newspaper변수가 제외되었지만, 잔차 그래프는 거의 변화가 없습니다.

 

 

로그 변환을 하고 나니, 가정을 더 만족시키는 것 같긴한데...

 

그렇다고 만족스러운 결과는 아닌 것 같습니다.


이것으로 이번 포스팅을 마무리하도록 하고,

 

다음 포스팅에서도 계속해서 모형 성능을 올려보겠습니다.

 

이상, 산격동 너구리였습니다.

 

감사합니다.

 

 

 

* 잘못된 정보 및 오타가 포함되어 있을 수 있습니다.

  그대로 받아들이시기보다는 다른 사람의 의견도 참고하셔서 분석하시길 바랍니다.

 

* 포스팅 내용 및 통계 분석 관련 질문은 언제나 환영입니다.

  가능한 선에서 최대한 답변하도록 하겠습니다.