R로 데이터 분석하기 - 모델링 (1) : 회귀분석

3 minute read

1. 회귀분석

회귀분석은 변수들의 관련성을 규명하기 위하여 어떤 수리적 모형을 가정하고, 이 모형을 측정된 변수들의 데이터로부터 추정하는 통계적 기법이다. 독립변수의 값에 의해 종속변수의 값을 예측하는 데에 사용된다.

예측에 사용되는 독립변수의 값이 1개면 단순 회귀분석(Simple Linear Regression), 2개 이상이면 다중 회귀분석(Multiple Linear Regression)이 된다.

2. 단순 회귀분석 (Simple Linear Regression)

우선 R의 내장 데이터셋인 cars 데이터를 이용해 단순회귀분석을 진행해보자. cars 데이터는 2개의 변수, 50개의 관측값을 가진 데이터이며 모든 변수가 숫자형이다. 회귀분석을 진행하기에 앞서 독립변수와 종속변수 간의 상관관계를 확인해 보는 것이 좋다.

plot(cars)
cor(cars$dist, cars$speed) # 0.8068949

image

독립변수인 speed와 종속변수인 dist로 만들어진 산점도에서도 어느 정도의 직선 경향이 확인되었고, 실제 상관계수도 약 0.8로 상당히 강한 상관관계를 가지고 있는 것으로 보인다. 이제 회귀분석을 적용해보자.

lm_model <- lm(dist~speed,data=cars)
summary(lm_model)
Call:
lm(formula = dist ~ speed, data = cars)

Residuals:
    Min      1Q  Median      3Q     Max 
-29.069  -9.525  -2.272   9.215  43.201 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -17.5791     6.7584  -2.601   0.0123 *  
speed         3.9324     0.4155   9.464 1.49e-12 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared:  0.6511,	Adjusted R-squared:  0.6438 
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12

이 모델은 종속변수의 65.11%를 설명해주고 있으며, p-value가 0.001보다 작으므로 유의하다고 볼 수 있다. 추정된 회귀식은 다음과 같다.

y = -17.5791 + 3.9324x + 𝜖

y : dist
x : speed
𝜖 : 오차(y를 x의 선형관계식으로 나타낼 수 없는 부분)

회귀식을 나타내주는 회귀선을 이전에 그렸던 산점도에 추가해보자.

plot(cars)
abline(lm_model,col="red")

image

3. 다중 회귀분석 (Multiple Linear Regression)

이번에는 R 내장 데이터셋인 swiss 데이터를 이용해 다중회귀분석을 시행해볼 것이다.

str(swiss)
'data.frame':	47 obs. of  6 variables:
 $ Fertility       : num  80.2 83.1 92.5 85.8 76.9 76.1 83.8 92.4 82.4 82.9 ...
 $ Agriculture     : num  17 45.1 39.7 36.5 43.5 35.3 70.2 67.8 53.3 45.2 ...
 $ Examination     : int  15 6 5 12 17 9 16 14 12 16 ...
 $ Education       : int  12 9 5 7 15 7 7 8 7 13 ...
 $ Catholic        : num  9.96 84.84 93.4 33.77 5.16 ...
 $ Infant.Mortality: num  22.2 22.2 20.2 20.3 20.6 26.6 23.6 24.9 21 24.4 ...

출생률(Fertility)을 종속변수로 두고 예측해보자. 우선 출생률과 나머지 변수들 간의 상관관계를 확인해보자.

plot(swiss)

image

Examination, Education 변수가 출생률과 선형관계를 가지는 것으로 보인다. 실제 상관계수도 확인해보자.

sort(abs(cor(swiss)[1,2:length(swiss)]), decreasing=T)

cor(swiss)를 실행하면 n개의 변수가 있을 때 n x n의 상관계수 행렬이 만들어진다. 이 중 우리가 필요한 Fertility 변수와 나머지 변수와의 상관계수를 보기 위해 [1,2:length(swiss)]를 추가해주었다.

1은 Fertility 변수가 첫번째 행에 있었기 때문이며, 2:length(swiss)를 한 것은 자기자신과의 상관계수는 어차피 1일 것이므로 이를 제외하고 나머지 변수에 대한 상관계수만을 확인하려고 한 것이다.

그리고 양의 상관관계, 음의 상관관계에 관계 없이 절대적인 양을 보기위해 절댓값을 씌운 후 가장 상관관계가 강한 변수를 보기 위해 내림차순으로 정렬했다. 그 결과는 다음과 같다.

Education      Examination         Catholic         Infant.Mortality      Agriculture 
0.6637889        0.6458827        0.4636847        0.4165560              0.3530792 

Education, Examination과 Fertility가 어느 정도 상관관계가 있는 것으로 나타났다. 이 두 변수를 독립변수로 하여 다중회귀분석을 진행해보자.

lm_model1 <- lm(Fertility~Education+Examination,data=swiss)
summary(lm_model1)
Call:
lm(formula = Fertility ~ Education + Examination, data = swiss)

Residuals:
     Min       1Q   Median       3Q      Max 
-15.9935  -6.8894  -0.3621   7.1640  19.2634 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  85.2533     3.0855  27.630   <2e-16 ***
Education    -0.5395     0.1924  -2.803   0.0075 ** 
Examination  -0.5572     0.2319  -2.402   0.0206 *  
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.982 on 44 degrees of freedom
Multiple R-squared:  0.5055,	Adjusted R-squared:  0.483 
F-statistic: 22.49 on 2 and 44 DF,  p-value: 1.87e-07

이 모델은 종속변수의 48.3%를 설명해주고 있다. 다중 회귀분석에서는 변수의 개수가 늘어나는 만큼 R-squared는 늘어나기 때문에, 정확한 설명력을 확인하기 위해서는 Adjusted R-squared를 확인해 주어야 한다. Education과 Examination에 대한 회귀계수는 0.05 수준에서 모두 유의하다. 추정된 회귀식은 다음과 같다.

y = 85.2533 - 0.5395x1 - 0.5572x2  + 𝜖

y : Fertility
x1 : Education
x2 : Examination
𝜖 : 오차(y를 x의 선형관계식으로 나타낼 수 없는 부분)

Leave a comment