본문 바로가기

코드이야기/R

[R프로그래밍] 한국인의 평균키와 몸무게로 회귀분석하기

키가 큰 부모를 둔 자녀들은 키가 클 확률이 높을 것입니다. 그렇다면 세대가 거듭될 수록 키는 무한히 커질까요? 그렇지는 않습니다. 19세기 영국의 화학자인 프랜스시 골턴(Francis Galton, 1822~1911)은 키가 큰 부모들이 낳은 자식들이 키가 점점 더 커지지 않고, 다시 평균으로 회귀한다는 경향을 보고 '회귀(regression)'라는 개념을 사용했습니다. 통계학에서는 '평균으로의 회귀(regression toward mean)'라고 부릅니다.


회귀분석의 개념과 유형

회귀분석은 하나 또는 그 이상의 독립변수(설명변수, 예측변수, 통제변수등으로 불리기도 함)가 한 단위 변할 때, 종속변수에 미치는 영향력을 예측할 때 주로 사용하는 통계분석 기법입니다. 독립변수는 입력 값이나 원인을 말하며, 종속변수는 결과물이나 효과를 나타냅니다. y=ax+b라는 함수가 있을 때 x가 독립변수, y가 종속변수라고 이해하면 편합니다.


특히 사회과학분야에서 많이 사용하는 데, 사회과학자의 주된 관심이 어떤 사회현상을 발생시키는 원인이 무엇인지 밝혀내는 것이기 때문입니다. 회귀분석은 독립변수의 개수에 따라 크게 단순 선형회귀분석과 다중 회귀분석으로 나뉩니다. 한국 표준과학연구원 산하 국가참조표준센터에서 공개한 한국인 인체치수 중 2009년도 한국인의 남자 평균키와 평균체중 자료로 R을 이용해서 회귀분석을 해보도록 하겠습니다.

R을 이용한 회귀분석

1. 데이터 로딩과 플로팅

데이터는 2009년기준 우리나라의 나이대별 평균키와 몸무게 자료입니다. 먼저 데이터를 불러오겠습니다. 원본데이터는 첨부파일을 참고하세요.

regression.csv

> regression <- read.csv("d:/data/analytics/regression.csv")
> regression
         age height weight
1    0~3개월   59.1    5.9
2    3~6개월   66.7    8.0
3    6~9개월   71.4    8.9
4   9~12개월   75.0   10.1
5  12~18개월   80.1   10.9
6        2세   87.8   13.2
7        3세   95.2   14.8
8        4세  102.3   16.7
9        5세  109.0   19.1
10       6세  115.5   21.5
...

데이터를 불러왔습니다. 불러온 데이터로 그래프를 그려봅니다.

> plot(regression$height ~ regression$weight, main="평균키와 몸무게", xlab="Height", ylab="Weight")


여기서 인수로 준 main, xlab, ylab은 생략해도 됩니다. 각각 제목, x축 이름, y축이름을 표시할 때 사용합니다. 우선 키와 몸무게는 매우 밀접한 관계를 나타낸다고 볼 수 있습니다. 통계학에서는 이를 상관계수로 수치화합니다.상관계수를 구하보겠습니다.

> cor(regression$height, regression$weight)
[1] 0.9672103

상관계수는 -1에서 1까지의 값을 가집니다. -1에 가까울 수록 역의 상관관계, 1에 가까울수록 정의 상관관계를 나타냅니다. 0에 가깝다면 두 변수는 관계가 없다고 할 수 있습니다. 여기에 대한 이야기는 별도로 포스팅 하겠습니다.

2. 단순선형 회귀분석

이제 회귀분석을 수행하고 그래프에 회귀선을 넣어보도록 하겠습니다.

> r <- lm(regression$height ~ regression$weight)
> abline(r)


회귀분석은 최소제곱법이라는 방법을 사용합니다. 즉, 그래프에 나타난 회귀선의 의미는 각 관측값들과 평균의 차의 제곱이 최소가 되는 직선이라는 말입니다. 회귀분석에 대한 상세한 내용은 위키피디아통계학 서적를 참고하시기 바랍니다.

3. 분석결과의 요약

이제 회귀분석의 결과를 살펴보겠습니다.

> summary(r)

Call:
lm(formula = regression$height ~ regression$weight)

Residuals:
     Min       1Q   Median       3Q      Max 
-20.8266  -7.9450  -0.6153   9.3139  13.4815 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)        70.9481     3.6366   19.51   <2e-16 ***
regression$weight   1.5218     0.0742   20.51   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.999 on 29 degrees of freedom
Multiple R-squared:  0.9355,	Adjusted R-squared:  0.9333 
F-statistic: 420.6 on 1 and 29 DF,  p-value: < 2.2e-16

각 내용을 이해하기 위해서는 통계학에 대한 사전 지식이 필요합니다. 간단히 결과의 의미를 설명해 보겠습니다.

  • Call : 회귀분석에 사용된 모델 식입니다.
  • Residuals: 잔차, 즉 회귀선의 값과 실제 관측 값의 차이를 각 분위수로 표시합니다.
  • Coefficients: 절편, 독립변수 등에 대한 회귀계수를 표시합니다.
  • Residual standard error: 잔차의 표준오차와 자유도를 나타냅니다.
  • Multiple R-squared: 결정계수, 즉 추정된 회귀선이 실제 관측값을 얼마나 잘 설명하는 가를 나타냅니다. 0에서 1사이의 값을 가지며 1은 실제관측 값들이 회귀선 상에 위치함을 의미합니다.
  • Adjusted R-squared: 수정결정계수, 주로 다중회귀분석에서 독립변수를 증가시키면 결정계수가 올라가는 것에 대한 대안으로 사용합니다.
  • F-statistic: F통계량은 해당 모형이 의미가 있는지 아닌지를 알려줍니다.계수 중 하나라도 0이 아닌 것이 있다면 그 모형은 유의미하다고 판단합니다.

이렇게 회귀분석을 이용하면 우리 일상에서 일어나는 일의 인과관계와 예측에 얼마든지 적용할 수 있습니다.