獨斷論

선형회귀분석 linear regression analysis (통계 R 초급 - 11) 본문

과학과 기술/R 통계

선형회귀분석 linear regression analysis (통계 R 초급 - 11)

부르칸 2013. 11. 27. 01:42

R 통계패키지에서 제공하는 선형회귀분석 명령어는 매우 다양한데 여기서는 가장 많이 사용하는 한 가지에 대해서만 알아보기로 하겠다.

 

우선 데이터를 읽어들이고 lm()을 이용하여 선형회귀분석을 실행하면 된다.

이때 formula를 입력하여야 하는데 보통 아래와 같다.

(Dependent Variables) ~ (Independent Variables)

 

그러면 R 패키지에 들어있는 cats라는 데이터를 이용하여 선형회귀분석을 수행해 보기로 하자.

    > data(cats)
    > lm(cats$Hwt ~ cats$Bwt)


    Call:
    lm(formula = cats$Hwt ~ cats$Bwt)

    Coefficients:
    (Intercept)     cats$Bwt 
        -0.3567       4.0341

cats데이터에서 Hwt는 심장무게이고 Bwt는 몸무게이다.

즉 "(심장무게) = b + a*(몸무게)"와 같이 선형회귀를 실행한 것이다.

결과로부터 "(심장무게) = -0.3567 + 4.0341*(몸무개)"임을 알수 있다. 

또한 선형회귀분석 결과를 변수에 저장할수도 있다.

> lm.out = lm(cats$Hwt ~ cats$Bwt)
> summary(lm.out)

Call:
lm(formula = cats$Hwt ~ cats$Bwt)

Residuals:
    Min      1Q  Median      3Q     Max
-3.5694 -0.9634 -0.0921  1.0426  5.1238

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  -0.3567     0.6923  -0.515    0.607   
cats$Bwt      4.0341     0.2503  16.119   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.452 on 142 degrees of freedom
Multiple R-squared:  0.6466,    Adjusted R-squared:  0.6441
F-statistic: 259.8 on 1 and 142 DF,  p-value: < 2.2e-16

여러가지 결과가 나오는데 가장 중요한것은 R-sqaured와 F-statistics의 p-value이다.

R-squared가 0.6466이면 심리학에서는 어느정도 선형회귀분석의 예측값이 데이터를 잘 반영한다고 볼수있지만 공학쪽에서는 적어도 0.85는 넘어야 잘됐다고 본다. 즉, 이 값은 적용분야에 따라 다르므로 자신의 분야에서 R-squared의 값이 어느정도 클때 선형회귀가 잘됐다고 하는지 여러 논문을 읽어보고 알아야 한다.

p-value가 0.05보다 작으므로 위 선형회귀결과는 통계적으로 의미가 있다고 본다.

 

ANOVA table은 다음과 같이 구한다.

> anova(lm.out)
Analysis of Variance Table

Response: cats$Hwt
           Df Sum Sq Mean Sq F value    Pr(>F)   
cats$Bwt    1 548.09  548.09  259.83 < 2.2e-16 ***
Residuals 142 299.53    2.11                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

회귀분석결과와 원래 데이터를 그래프 상에 나타내기 위해서는 아래와 같이 실행하면 된다.

> plot(cats$Hwt ~ cats$Bwt, main="Cats plot")
> abline(lm.out, col="red")

 

 

이밖에도 선형회귀분석을 진단하게 하는 여러가지 그래프도 그릴수 있다. 이것을 어떻게 이용하는지는 고급과정에 해당되므로 여기서 자세한 설명은 생략한다.  

> par(mfrow=c(2,2))
> plot(lm.out)

 

 

첫번째 그림은 residual을 나타내는데 번호가 붙은것은 outlier를 나타낸다. 이 그래프에서 점들의 전체 형태가 가로로 평행하지 않고 삼각형이거나 고불고불하거나 하다면 선형회귀가 불가하다는 것을 나타낸다.

두번째 그림은 정규분포를 보이고 있다는 것을 나타낸다.

마지막 네번째 그림에서 144번째 데이터가 꾀 멀리 있으므로 이 데이터는 심각한 outlier임을 보이는데 이 데이터가 어떠한지 한번 알아보자.

> cats[144,]
    Sex Bwt  Hwt
144   M 3.9 20.5
> lm.out$fitted[144]
     144
15.37618
> lm.out$residuals[144]
     144
5.123818

144번째 고양이는 심장무게 3.9이고 몸무게 20.5이다. summary(cats)라고 R에서 입력해보면 가장 큰 고양이인것을 알수 있다. 그런데 선형회귀로 예측한 이 고양이의 몸무게는 15.4로 그 잔차값은 5.1로 매우 크다.

따라서 선형관계는 144번째 고양이의 몸무게보다 작은 고양이에 대해서만 적용가능하다고 볼수 있다.

그리고 이 144번째 고양이를 데이터에서 제외시키고 다시 선형회귀분석을 해야할 것이다.

 

Comments