선형 회귀 분석을 위해 가상 예제를 만들어 보겠습니다. 결과 변수 Y가 원인이 되는 독립 변수 X의 3배에 비례하는 간단한 모델을 만들기 위해 다음의 코드를 사용합니다.
set.seed(1234)
x<-rnorm span="">-rnorm>
set.seed(4567)
b<-rnorm span="">-rnorm>
y=3*x+b
y
앞서 Y = β0 + β1X + ε의 공식에서 b가 오차항이라고 보면 될 것 같습니다. 회귀 계수는 이 경우 3인데, 아직 우리가 이 값을 모른다고 생각하고 선형 회귀 분석을 통해서 이를 찾아가 보겠습니다. 먼저 할 일은 자료의 특성을 파악하는 일입니다. 기본적인 자료의 분포를 확인하는 것은 앞서 소개한 여러 가지 방법을 사용하면 될 것입니다. 단 X와 Y 두 개의 변수가 서로 연관성이 있다고 생각한다면 둘 사이의 관계를 분석하기 위해 거기에 맞게 그래프를 그려야 합니다.
plot(x,y, pch=16, col="red")
그래프를 그려 보면 X,Y 두 변수가 비례 관계에 있을 것이라는 합리적인 추론이 가능합니다.
자료의 분포를 보면 확실히 두 변수 사이에 선형 관계가 있어 보입니다. 따라서 선형 회귀 분석을 시도해볼 만 합니다. 물론 실제로 선형 회귀 분석을 하기 위해서는 몇 가지 전제 조건이 있지만, 일단 나중에 이야기하기로 하고 지금은 간단히 R을 이용한 단순 선형 회귀 모델에 대해서 먼저 설명합니다. R에서 선형 회귀 분석에 사용되는 명령어는 lm이며 lm(y~x, data=)의 형식으로 이뤄집니다. 예제는 별도의 데이터 프레임을 사용하지 않기 때문에 lm(y~x)만 해도 충분합니다.
> model=lm(y~x)
> summary(model)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-9.4838 -2.9000 -0.0445 2.4240 7.9616
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 26.6162 13.3737 1.99 0.0523 .
x 2.9436 0.1367 21.53 <2e-16 span="">2e-16>
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.234 on 48 degrees of freedom
Multiple R-squared: 0.9062, Adjusted R-squared: 0.9042
F-statistic: 463.7 on 1 and 48 DF, p-value: < 2.2e-16
lm(y~x)의 단순 선형회귀 모델의 값을 얻기 위해 summary ()를 사용했습니다. 여러 가지 결과물이 나오는데, 이를 하나씩 살펴보겠습니다. 잔차 (residuals)은 다음 시간에 이야기 하고 여기서 회귀계수 (Coefficients)와 F 통계량 (F-statistic) R^2, P 값(p-value)를 구하는 법에 대해서 설명하겠습니다.
사실 회귀계수를 구하는 방법은 여러 가지입니다. 이 가운데 가장 널리 사용되는 기본적인 방법은 최소 제곱법(자승법)이라고 흔히 알려진 OLS (ordinary least squares) 입니다. 이 방법은 프랑스의 수학자 르장드르에 의해 1805년에 제시되었다고 합니다. 기본적인 아이디어는 잔차의 제곱을 최소화 하는 것입니다.
(위키피디아에서 캡처)
이 공식을 다시 풀면 ((X*Y의 합)-n(x의 평균)(y의평균))/(x제곱의 합 - n(x의 평균의 제곱) (n은 표본의 숫자)으로 나타낼 수 있습니다. 왜 그렇게 되는지는 네이버에서 수식 입력이 복잡해서 설명하기 어렵지만, 전문 통계학 서적을 보면 잘 나와있습니다. 이렇게 회귀 계수 (베타 1)을 구하면 그 값으로 부터 (y의 평균) - 베타값 x (x의 평균)으로 구할 수 있습니다. 이 값들을 구하기 위해 다섯 가지 기본 값을 구하는데, x의 평균, y의 평균, x제곱의 합, y제곱의 합, xy곱의 합을 구합니다.
> xmean<-mean span="" x="">-mean>
> ymean<-mean span="" y="">-mean>
> sxx<-sum span="" x="">-sum>
> syy<-sum span="" y="">-sum>
> sxy<-sum span="" x="" y="">-sum>
>
> xmean;ymean;sxx;syy;sxy
[1] 97.73473
[1] 314.3077
[1] 478563.5
[1] 4948640
[1] 1538763
이제 이 값을 이용해서 베타 값을 구해보겠습니다. 여기서 샘플 수는 50이므로 n=50으로 대입합니다.
beta=(sxy-50*xmean*ymean)/(sxx-50*(xmean^2))
beta
> beta=(sxy-50*xmean*ymean)/(sxx-50*(xmean^2))
> beta
[1] 2.943595
회귀계수 2.9436이 어떻게 계산되었는지를 알 수 있습니다. 물론 보통은 lm에 넣으면 구해주니까 이렇게 복잡하게 구할 필요는 없지만, 어떻게 나온다는 것을 알고 있으면 결과 해석에 도움이 될 것입니다. 그리고 통계학 책에서 본 복잡한 공식이 실제 R에서 어떻게 계산되는지도 알 수 있습니다. 그 다음은 알파값 혹은 베타 0 값을 구해보겠습니다.
> beta0=ymean-beta*xmean
> beta0
[1] 26.61617
이 결과는 위에서 본 (Intercept) 26.6162와 동일합니다. 단지 lm 함수에서는 반올림을 해줄 뿐이죠. 이를 통해서 본 회귀 공식은 Y= 2.943595X + 26.61617의 관계로 이해할 수 있습니다. 정확히 3은 아니지만, 3에 근접한 수치로 추정해냈으니 어느 정도 신뢰할 수 있는 결과라고 할 수 있습니다.
이 부분은 통계학 책을 읽지 않으면 이해하기 어려울 수 있습니다. 제가 본 책 가운데는 현대통계학 (제5판)이나 앞서 소개한 R을 활용한 선형회귀분석을 추천합니다. 아마도 이 내용까지 보시는 독자라면 어느 정도는 통계학 지식이 있는 독자일 것으로 생각합니다. 계속해서 다음 시간에 SSE/SSR/SST 및 F 통계량, P값 등 다른 값에 대해서 설명해 보겠습니다.
댓글
댓글 쓰기