R 에서 다중회귀분석 결과 보는 법
데이터 탐색
tail(attitude)
R에서 내장데이터 attitude
를 불러와 tail()
함수를 통해 확인해보자. 우리는 이 데이터에서 다중회귀분석을 실시하려 한다.
우리는 rating
을 종속변수로 두고 다른 독립변수들이 rating
에 어떤 영향을 얼마나 미치는지에 관심이 있다. 데이터만 봐서는 rating
과 다른 변수들 사이에 선형관계가 있는지 확인하기 어려우므로 그림을 그려 확인해보자.
win.graph()
plot(attitude)
그냥 plot()
함수에 데이터를 넣고 실행시키면 각 변수별로 비교한 점 도표를 출력해준다.
일단 그림으로 보기에 rating
은 complaints
과는 확실히 선형관계가 있어보인다. 그 외에는 learning
, raises
와 선형관계를 이루는 것 같기는 한데 complaints
에 비해서는 흩어진 정도가 심한 것으로 나타난다. 단순회귀분석과 마찬가지로 lm()
함수에 선형모형을 입력하고 summary()
함수를 통해 결과를 볼 수 있다.
결과 해석
아래 코드에서 1~2열과 3열은 완전히 같은 표현으로, 선형모형을 입력할 때 찍힌 점(.) 은 ‘그 외의 모든 변수’를 의미한다. [ NOTE: 한편 여기서 rating~.-privileges
와 같이 입력해서 privileges
만을 제외하는 식으로도 쓸 수 있다. ]
out<-lm(rating~complaints+privileges+learning
+raises+critical+advance,data=attitude)
out<-lm(rating~.,data=attitude)
summary(out)
- 아래 설명에서 ‘몰라도 된다’는 것은 진짜 몰라도 된다는 게 아니라 급하게 공부하고 결과를 읽어내야하는 입장에서 당장 참고해야할 지표는 아니라는 의미다.
(1) 잔차residuals
median(중위수)을 가운데로 두고 다른 분위수가 대칭적으로 나타나는지 정도만 봐도 무방하다. 분위수만으로는 제대로 된 모형진단을 할 수 없기 때문에 보나 마나 큰 의미가 없다.
(2) 추정치estimate
각 변수에 따른 회귀계수로, (Intercept)는 회귀직선의 $y$ 절편, 나머지는 변수마다의 단위변화율을 나타낸다. 단순회귀분석과 달리 여러가지 독립변수가 있기 때문에 유의수준에 따라 결과가 달라진다. 유의수준 $5 \%$ 에서는 learning
의 회귀계수가 $0$ 이라는 귀무가설이 기각되지 못하므로
$$
\text{(rating)} = 0.61319 \cdot \text{(complaints)} + \varepsilon
$$
이고, 반면 유의수준 $10 %$ 에서는 다음과 같이 모델을 축소시킬 수도 있다.
$$
\text{(rating)} = 0.61319 \cdot \text{(complaints)} + 0.32033 \cdot \text{(learning)} + \varepsilon
$$
(3) 표준오차std. error
몰라도 된다. 추정치의 표준오차로써, 이를 사용해서 회귀계수의 신뢰구간을 구할 수 있다.
(4) t-value
몰라도 된다. 추정치를 표준오차로 나눈 값으로써, 자유도 $n-p-1$ 의 t-분포를 따르는 검정통계량이 된다. 이를 통해 회귀계수가 통계적으로 유의한지 가설검정을 할 수 있다.
(5) p값 pr(>|t|)
이게 작다는 것은 회귀계수가 유의하다는 뜻이고, 상관관계가 있다는 것을 보이고 싶다면 값이 작을수록 좋다. 이 값이 얼마나 작은지에 따라 바로 아래에 있는 Signif. codes대로 점이 찍히게 된다. 보통 유의수준은 5%로 잡으므로, 점 하나만 찍혀도 상관관계는 있다고 봐도 무방하다. 만약 이 값이 커서 회귀관계가 없는 것으로 밝혀진다면 회귀계수가 어떻게 구해지든 통계적으로는 의미가 없다. 이 p값은 t-분포에서 나온 것이므로 pr(>|t|) 라는 표현이 적절함을 알 수 있다.
(6) 수정설명력adjusted R-squared
이 분석이 변수의 갯수에 비해 데이터를 얼마나 잘 설명하는가를 나타내는 척도로써, 높을수록 좋다. 회귀분석에서 변수의 갯수가 늘어난다는 것은 그만큼 쓸수있는 데이터가 늘어난다는 것이고, 그 때 설명력 $R^{2}$ 는 무조건 증가한다. 수정설명력이 설명력과 다른 점은 $\displaystyle R^2 = 1 - {{ \text{ SSE } } \over { \text{ SST} }}$ 와 달리 $$ \displaystyle R^{2}_{a} = 1 - {{ \text{ SSE } / (n - p - 1) } \over { \text{ SST} / (n - 1) }} $$ 로 계산되어 변수의 갯수가 반영된다는 것이다. 실제로 쓰이는 응용수학에서 변수의 갯수를 늘린다는 것은 비용의 증대를 의미하고, 당연히 이를 줄이는 방법을 강구해야한다. 수정설명력 $R^{2}_{a}$ 는 변수의 갯수에 대해 페널티를 적용함으로써 설명력을 보정하고, 모형과 모형을 비교하는데 쓰이게 된다. 모형을 비교해 보았을 때 변수를 잔뜩 늘렸는데도 수정설명력이 별로 증가하지 않는다면 그만큼 쓸데없는 낭비를 한 것으로 본다.
(7) F-Statistic
이것의 p-value가 작다는 것은 유의한 회귀계수가 있다는 뜻이고, 상관관계가 있다는 것을 보이고 싶다면 값이 작을수록 좋다. 회귀계수의 t검정이 회귀계수 하나하나에 대한 검정이라면, F검정은 회귀분석 자체에 대한 검정이다. p-값을 논외로 놓고 F통계량만 이야기해보자면 모형을 비교하는데에 요긴하게 쓰이게 된다.
주의할 것은 이렇게 결과를 볼 수 있게 되었다고 끝난 게 아니라는 점이다. 다중회귀분석이 단순회귀분석보다 훨씬 어려운 것은 독립변수가 늘어나면서 단순회귀분석에는 없었던 문제가 생기기 때문이다. 수치적인 계산만으로는 설명하기 어려운 여러가지 확인 절차가 남아있으며, 사실 이것을 잘 하는 게 학부 수준의 회귀분석을 잘하는 것이다.
코드
아래는 R로 작성된 전체 예제코드다.
tail(attitude)
win.graph()
plot(attitude)
out<-lm(rating~complaints+privileges+learning
+raises+critical+advance,data=attitude)
out<-lm(rating~.,data=attitude)
summary(out)