질적변수를 포함한 회귀분석
개요
회귀분석을 하면서 독립변수로 언제나 양적변수가 들어온다는 보장은 없다. 성별이 무엇인지, 어떤 기업 소속인지, 무슨 색상인지, 금속인지 등등 범주형 자료 역시 분석에 반영시킬 필요가 있다.
빌드업 1
올해 취업자 전체의 수능 성적 $X_{1}$, 연령 $X_{2}$, 성별 $S$, 최종학력 $E$ 로 초봉 $Y$ 를 추측한다고 상상해보자. 다중회귀분석을 사용하면 $Y \gets X_{1} + X_{2}$ 와 같이 연봉 $Y$ 에 성적 $X_{1}$ 과 연령 $ X_{2}$ 가 미치는 영향이 어떤지 알 수 있을 것이다. 우리가 얻을 회귀식은 $$Y = \beta_{0} + \beta_{1} X_{1} + \beta_{2} X_{2} + \varepsilon $$ 이고, 가설검정을 통해 통계적으로 유의하지 않은 변수를 버려야한다. 여기에 성별 $S$ 가 추가된다면 $$Y = \beta_{0} + \beta_{1} X_{1} + \beta_{2} X_{2} + \beta_{3} S + \varepsilon $$ 와 같이 식이 수정될 것이다. 하지만 남성이나 여성은 수가 아니기 때문에 회귀계수를 곱할 수가 없다. 그래서 생각한 것이 바로 지시 함수indicator function을 사용하는 것이다.
통계학에서 지시 함수란 데이터가 해당 범주에 속하는지 속하지 않는지에 따라 $1$ 혹은 $0$ 의 값을 갖는 함수를 말한다. 지시 함수를 사용해 $S = \begin{cases} 1 & ,\text{여성} \\ 0 & ,\text{남성} \end{cases}$ 와 같은 변수를 정의하면 최종적으로 얻는 회귀식은
- 남성일 때$$Y = \beta_{0} + \beta_{1} X_{1} + \beta_{2} X_{2} + \beta_{3} + \varepsilon $$
- 여성일 때$$Y = \beta_{0} + \beta_{1} X_{1} + \beta_{2} X_{2} + \varepsilon $$
이 되는 것이다. 또 여기에 학력 $E$ 가 추가된다면 $$Y = \beta_{0} + \beta_{1} X_{1} + \beta_{2} X_{2} + \beta_{3} S + \beta_{4} E + \varepsilon $$ 와 같이 식이 수정될 것이다. 학력은 성별과 달리 여러 경우가 있을 수 있는데, 단순히 $E = \begin{cases} 3 & ,\text{박사} \\ 2 & ,\text{석사} \\ 1 & ,\text{대졸} \\ 0 & ,\text{고졸} \end{cases}$ 과 같이 네가지 경우가 있다고 생각해보자. 여러 경우가 있기 때문에 지시 함수를 사용하기가 곤란한데, 세가지 변수 $$E_{1} = \begin{cases} 1 & ,\text{대졸} \\ 0 & ,\text{고졸} \end{cases} \\ E_{2} = \begin{cases} 1 & ,\text{석사} \\ 0 & ,\text{고졸} \end{cases} \\ E_{3} = \begin{cases} 1 & ,\text{박사} \\ 0 & ,\text{고졸} \end{cases}$$ 로 나눔으로써 간단하게 해결할 수 있다. 최종적으로 회귀식은 $$Y = \beta_{0} + \beta_{1} X_{1} + \beta_{2} X_{2} + \beta_{3} S + \gamma_{1} E_{1} + \gamma_{2} E_{2} + \gamma_{3} E_{3} + \varepsilon $$ 와 같이 확장된다.
실습
실제로 R 에서 질적변수를 포함한 회귀분석을 할 땐 이렇게 복잡한 조작을 할 필요가 없다. 내장데이터 ToothGrowth
데이터를 불러와보자.
ToothGrowth
는 기니피그에게 비타민 C 혹은 오렌지 주스(supp)를 다른 양(dose)으로 먹이고 치아의 길이(len)를 기록한 데이터다. 범주형 변수를 넣으면 다중회귀분석과 마찬가지로 알아서 분석이 된다.
결과를 보면 투여량을 늘렸을 때 치아의 길이도 길어지며, 비타민 C 를 투여할 땐 오히려 길이가 줄어든다고 한다.
상식적으로 봐도 오렌지 주스를 꾸준히 먹고 있는 기니피그의 영양 밸런스가 더 좋을 것이고 특히 칼슘을 비롯한 무기질은 조절이 쉽고 실험에서 아주 과다한 양을 준 것도 아니기 때문에 많으면 많을수록 좋은 것도 납득이 간다. 설명력도 $R_{a} = 0.6934$ 로 나쁘지 않은 편이고, 전체적으로 큰 문제가 없어보인다.
그런데 잔차 그림을 보면 쌔한 구석이 있다.
데이터를 보면 30번째까지는 비타민을 투여했고, 31번째부터는 오렌지 주스를 먹였다. 척 봐도 소량의 비타민보다는 대량의 비타민, 대량의 오렌지 주스보다는 소량의 비타민이 이빨의 길이에 좋은 영향이 있어보인다. 물론 실제 세상엔 이러한 우연이 얼마든지 일어날 수도 있는데, 이런 걸 넘어갈거면 애초에 통계학을 공부할 이유가 없다. 노력한다고 이런 문제를 없앨수 있을진 모르겠지만, 학자들은 이런 현상를 교호작용이라 이름 붙이고 그 해결법을 연구했다.
코드
아래는 예제 코드다.
head(ToothGrowth); tail(ToothGrowth); str(ToothGrowth)
out1<-lm(len~.,data=ToothGrowth); summary(out1)
win.graph(5,5); plot(rstudent(out1), main="Standardized Residual Plot 1"); abline(h=0)
Hadi. (2006). Regression Analysis by Example(4th Edition): p121~125. ↩︎