logo

R 에서 다중회귀분석 결과 보는 법 📂통계적분석

R 에서 다중회귀분석 결과 보는 법

데이터 탐색

tail(attitude)

R에서 내장데이터 attitude를 불러와 tail() 함수를 통해 확인해보자. 우리는 이 데이터에서 다중회귀분석을 실시하려 한다.

20180825\_144319.png

우리는 rating을 종속변수로 두고 다른 독립변수들이 rating에 어떤 영향을 얼마나 미치는지에 관심이 있다. 데이터만 봐서는 rating과 다른 변수들 사이에 선형관계가 있는지 확인하기 어려우므로 그림을 그려 확인해보자.

win.graph()
plot(attitude)

그냥 plot() 함수에 데이터를 넣고 실행시키면 각 변수별로 비교한 점 도표를 출력해준다.

20181226\_134511.png

일단 그림으로 보기에 ratingcomplaints과는 확실히 선형관계가 있어보인다. 그 외에는 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)

20180825\_150719.png

  • 아래 설명에서 ‘몰라도 된다’는 것은 진짜 몰라도 된다는 게 아니라 급하게 공부하고 결과를 읽어내야하는 입장에서 당장 참고해야할 지표는 아니라는 의미다.

(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)

같이보기