본문 바로가기
R

[회귀]단순 선형 회귀분석 R코드 정리 / Simple linear regression in R

by jangpiano 2021. 1. 23.
반응형

<R - 단순 선형 회귀>

하나의 설명변수(X)와 반응변수(Y)의 관계성을 표현하는 회귀식은, 설명변수 값 만으로 반응변수의 값을 예측하게 해줍니다.

관측값들을 바탕으로 X와 Y의 분포를 가장 잘 설명할 수 있는 선을 찾는 방법으로는 주로 '최소 제곱법(Method of least squares)' 이 사용됩니다. 최소제곱법은 잔차의 제곱합을 가장 작게 만드는 회귀식(회귀계수)을 찾는 방법입니다. 최소 제곱법에 관한 자세한 설명은 밑의 링크를 참고해 주시기 바랍니다. https://jangpiano-science.tistory.com/103

 

R 에서는 단순 선형 회귀에 적합한 함수(lm)를 제공해, lm 함수를 이용하면,  빠르게 적합 회귀식(Y = B0 + B1*X)과 회귀계수들(B0, B1)을 찾을 수 있습니다. 즉, R에서 lm 코드를 이용하면, 최적의 회귀식(잔차의 제곱합을 최소로 만드는 회귀식)을 쉽게 찾을 수 있습니다. 

이번 포스팅에서는 단순 선형 회귀를 위해 제공되는 몇가지 R 코드들을 설명하고, 이를 해석하는 방법을 제시하겠습니다:) 

 

단순 선형 회귀 모형은 다음과 같습니다. B0과 B1은 회귀계수(regression coefficient) 이고 εi 는 통계적 오차를 나타냅니다. 단순 선형 회귀 모형에 최소 제곱법이 적용되기 위해서는 오차의 등분산성과 독립성을 가정합니다. 또한, 단순회귀 분석에서의 구간 추정을 위해 Y의 분포가 보장 되기 위해서는, 오차의 정규성(N(0,1))을 가정합니다. 

적합 회귀식은 다음과 같습니다. 밑의 식이 바로 최소 제곱법에 의해 구해진 회귀계수들로 이루어진 적합 회귀식이 되는것입니다. 

최소 제곱법으로 위 회귀식을 구하고 나면, 우리는 Xi 값만을 가지고 Y의 값을 예측할 수 있게 됩니다. 

여기까지 단순 회귀에 대한 기본적인 개념을 설명하였습니다. 이제, 단순 선형 회귀 모형에 유용하게 쓰이는 몇가지 R 코드를 소개하겠습니다. 

 

<추정 회귀식 찾아주는 R 내장 함수 - lm(Y~X)>

 

linear model 의 약자인 lm 함수는 관측값들을 통해 반응변수와 설명변수의 관계를 가장 잘 설명하여 주는 적합 회귀식을 찾아줍니다. 

 

>X <- c(1, 2, 2, 3, 5, 5, 7, 6, 10, 11, 11, 12)
>Y<- c(1, 0, 1, 4, 3, 2, 6, 5, 9, 13, 15, 16)

>lm(Y~X)       

      Call: lm(formula = Y ~ X)               

       Coefficients: (Intercept)            X        

                                 -2.313        1.370  

 

lm 함수를 통해, X와 Y의 관계를 가장 잘 설명하는 회귀식이 Y = -2.313 + 1.370*X 라는 것을 알 수 있습니다. 

lm 함수에는 반응변수~설명변수의 형태로 지정된 formula 이외에도 data라는 argument 를 받을 수 있는데, 단순 회귀에서는 하나의 설명변수만이 사용되므로, lm(Y~X)로도 간편히 추정회귀식을 구할 수 있지만, 다중회귀를 고려할때는, 설명변수가 많은경우 일일이 lm(Y~X1+X2+X3...+Xn)으로 써주기 보다, lm(Y~., data = data_frame) 과 같은 형태로 써주면, 더 편리하게 각각의 설명변수의 회귀계수를 구할 수 있습니다. 

 

이 외에도, coef 함수를 사용하면, 회귀계수(regression coefficient)로 사용되는 B0, B1의 값을 직접적으로 추출 할 수 있습니다.

회귀계수 추출 

 

> coef(lm(Y~X))

           (Intercept)           X    

          -2.312775    1.370044

 

#B0추출 

> coef(lm(Y~X))[1]     

     (Intercept)    

    -2.312775 

 

 #B1 추출 

> coef(lm(Y~X))[2]   

          X 

        1.370044 

 

 

< 추정 회귀식의 시각화 >

 

plot 함수를 사용해, 관측값들을 나타내는 산점도를 그려, 대략적인 X와 Y사이의 선형관계를 생각해본 후, lm함수를 통해 회귀적합 직선을 추가하면, 관측값들 위에, X와 Y의 관계를 가장 잘 나타내어주는 직선을 확인 할 수 있습니다. 

 

>plot(X,Y)

>abline(lm(Y~X), col="red")

< 회귀계수의 신뢰구간 >

 

회귀계수(regression coefficients) B0과 B1에 대한 신뢰구간은 lm 함수를 통해 구한 B0, B1의 추정값을 활용해 다음과 같이 구할 수 있습니다. 

B0에 대한 신뢰수준이 95%인 신뢰구간이란,

모집단에서 관측값을 무작위로 추출하여 구한 B0의 추정값으로 다음과 같은 신뢰구간을 형성했을때, 실제 B0이 다음과 같은 구간에 들어갈 확률을 95%로 만드는 구간이다. 

 

confint()함수를 이용하여, 회귀계수에 대한 신뢰구간을 구할 수 있습니다. 신뢰수준(level)로는 95%가 기본값으로 저장되어 있으며, level 파라미터를 지정하여, 신뢰수준을 바꿔줄 수 있습니다. 

> confint(lm(Y~X),  level = 0.95)                 

                                     2.5 %                   97.5 %

            (Intercept)   -4.633605        0.008054371

               X            1.052003              1.688085315

 

회귀계수의 신뢰구간에 대한 R 코드와 통계적 해석에 대한 자세한 해석은 아래 포스팅에서 확인하실 수 있습니다:)

https://jangpiano-science.tistory.com/107?category=875432

 

< 적합값 >

 

적합값(fitted value) 이란, 회귀식에 의해 예측된 반응변수(Y)의 값을 말합니다. 

> fitted(lm(Y~X))         

             1                2               3               4                  5                 6                7                 8                   9             10  -0.9427313  0.4273128  0.4273128  1.7973568  4.5374449  4.5374449  7.2775330  5.9074890 11.3876652 12.7577093          

         11           12 

12.7577093 14.1277533 

 

주어진 X 관측값들에 대한 적합값 뿐만 아니라, predict()함수를 통해서,새로운 X 값에 대한 반응변수의 관측값을 예측 할 수 있습니다. 

예를들어, 10이라는 새로운 설명변수에 대한 반응변수의 예측값은 predict() 함수를 통해 11.38767 라고 구해질 수 있습니다. 

> predict(lm(Y~X), newdata = data.frame(X = 10))

       1 

11.38767 

 

<반응변수의 새로운 관측값에 대한 예측구간>

 

위에서 설명한 predict 함수에 interval 파라미터를 추가해줌으로써, 반응변수의 새로운 관측값에 대한 예측구간을 구할 수 있다. 

 

> predict(lm(Y~X), newdata = data.frame(X = 10), interval = "prediction")

       fit           lwr               upr

1 11.38767     6.906781    15.86855

 

신뢰구간과 예측구간의 정확한 개념에 대해 쉽게 헷갈리실 수 있는데, 신뢰구간과 예측구간에 대한 설명은 https://towardsdatascience.com/how-confidence-and-prediction-intervals-work-4592019576d8#:~:text=The%20prediction%20interval%20predicts%20in,such%20as%20the%20population%20mean. 이 포스팅을 참고하시면 좋을거 같아요:)

 

<잔차> 

 

잔차(residuals)란, 실제 관측값과 회귀적합값의 차이 입니다. 잔차는 회귀진단에서 기본적이고 핵심적으로 사용되는 매우 중요한 통계량입니다. 잔차는 resid() 함수를 통해 구할 수 있습니다. 

> resid(lm(Y~X)) 

         1          2          3          4          5          6          7          8          9         10 

 1.9427313 -0.4273128  0.5726872  2.2026432 -1.5374449 -2.5374449 -1.2775330 -0.9074890 -2.3876652  0.2422907 

        11         12 

 2.2422907  1.8722467 

 

<잔차제곱합 SSE>

 

잔차제곱합은, 잔차들을 제곱한뒤 더해준 값이다. 잔차제곱합은 회귀적합이 적절한지를 나타내어주는 대표적인 지표입니다. 

> anova(lm(Y~X))

Analysis of Variance Table

 

Response: Y

                Df   Sum Sq Mean Sq F value      Pr(>F)    

X               1    319.56  319.56  92.127 0.000002312 ***

Residuals 10   34.69    3.47                        

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> anova(lm(Y~X))[2,2]

[1] 34.68722

 

회귀 분산 분석을 통해서도 SSE값을 추출할 수 있지만, deviance()함수를 사용하면, 더 편리하게 SSE에 접근 할 수 있습니다. 

> deviance(lm(Y~X))

[1] 34.68722

 

<평균 제곱 오차 MSE>

 

분산의 추정량으로도 쓰이는 평균 제곱 오차(Mean squared error)는, 회귀식의 타당성을 결정하는 매우 중요한 지표이다. 

평균제곱오차는 잔차 제곱합(SSE)을 자유도(n-2)로 나눈값이다. 

SSE, SSR, SST, MSE 와 이들의 분포를 나타내는, 또 이 분포로 회귀식의 타당성이 결정되는 과정에 대한 자세한 설명은 https://jangpiano-science.tistory.com/105?category=875432  를 참고하여 주시기 바랍니다:) 

 

SSE를 n-2라는 자유도로 나누어 줌으로써, 직접적으로 MSE 값을 구할 수 있다. 

> deviance(lm(Y~X))/(length(X)-2)

[1] 3.468722

분산 분석(anova) 표를 이용해서 역시, MSE 값을 추출할 수 있다. 

> anova(lm(Y~X))[2,3]

[1] 3.468722

 

 

<회귀 모형 평가> 

 

> summary(lm(Y~X))

 

Call:

lm(formula = Y ~ X)

 

Residuals:

     Min       1Q   Median       3Q      Max 

-2.53744 -1.34251 -0.09251  1.88987  2.24229 

 

Coefficients:

            Estimate Std. Error        t value            Pr(>|t|)    

(Intercept)  -2.3128     1.0416  -2.220          0.0507    

X             1.3700     0.1427        9.598          0.00000231 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 1.862 on 10 degrees of freedom

Multiple R-squared:  0.9021, Adjusted R-squared:  0.8923 

F-statistic: 92.13 on 1 and 10 DF,  p-value: 0.000002312

 

<해석>

Pr(>|t|)  : 각각의 회귀계수가 회귀모형에 포함되는게 적합한지 확인하는데 결정적인 역할을 하는 p-value. 

-->B0에 대한 p-value 가 0.0507 으로 (0.05보다) 충분히 작지 않으므로, 귀무가설( H0 : B0 = 0)을 기각하지 않는다. 

-->B1에 대한 p-value 가 0.00000231 (0.05보다) 충분히 작으므로 귀무가설(H0 : B1 = 0) 을 기각한다. --> X와 Y 사이에 선형관계가 존재한다. 

 

Multiple R-squared:  0.9021  : 결정계수 (Coefficient of determinnation) 이란 SSR의 SST에 대한 비율입니다. 즉, 총 변동 중 회귀모형(기울기 모수를 포함한 모형)에 의하여 설명되어지는 변동의 크기를 의미하는데 즉, 결정계수가 1에 가까울 수록 두 변수 사이의 선형관계가 강함을 나타내고, 0에 가까울수록 두 변수간의 선형관계가 약하다고 정의할 수 있습니다. 

 

Adjusted R-squared:  0.8923 : 수정 결정계수( Adjusted coefficient of determination)은 설명변수를 추가할수록 결정계수가 1에 가까워진다는 단점을 보완한 결정계수입니다. 즉, 적절하지 않은 설명변수를 추가한 모형은, 그것을 포함하지 않은 모형보다 작은 수정계쑤를 가집니다. 따라서, 수정결정계수는 결정계수보다 항상 작습니다. 

하지만, 설명변수가 하나인 단순선형회귀모형에서는 설명변수가 추가될수록, 그 설명변수의 설명력과 관계없이 결정계수가 1에 가까워지는 상황을 고려하지 않아도 되므로, 결정계수와 수정결정계수의 차이에 집중하지 않아도 되겠죠?

 

 F-statistic: 92.13 on 1 and 10 DF,  p-value: 0.000002312 : 회귀 모형에 대한 F-test의 p-value가 0.000002312로 (0.05 보다) 충분히 작음으로, 귀무가설(H0 : Y = B0 + ε) 을 기각하고, 대립가설(H1 : Y = B0 + B1*X1 + ε)을 수용한다. 따라서 반응변수와 설명변수의 상관관계가 증명된다. 이 p-value 는 anova(lm(Y~X))를 통해서도 추출 할 수 있습니다.

 

이들에 대한 통계적 해석에 대한 증명은 https://jangpiano-science.tistory.com/105?category=875432 에서 확인하실 수 있습니다:) 

 

 

반응형