본문 바로가기
R

[R] 회귀분석(Regression Analysis) [회귀식 추정, 회귀모형 검정, 적합도 파악]

by JKyun 2017. 3. 9.


안녕하세요. 우주신입니다.



저번 상관분석 포스팅에 이어 이번에는 회귀분석(Regression Analysis)에 대해 정리해보겠습니다. 


상관분석은 변수들이 서로 얼마나 밀접하게 직선적인 관계를 가지고 있는지를 분석하는 통계적 기법이며 


회귀분석은 한 개 또는 그 이상의 변수들(독립변수)에 대하여 다른 한 변수(종속변수) 사이의 관계를 수학적인 모형을 이용하여 설명하고 예측하는 분석기법 입니다.


쉽게 말하자면, 상관분석에서는 산점도의 점들의 분포를 통해 일정한 패턴을 확인한 후, 상관계수를 구하여 두 변수 간의 선형관계를 알 수 있었습니다. 여기서 더 나아가, 이 일정한 패턴을 활용하여 무엇인가를 예측하는 분석을 회귀분석이라고 보시면 됩니다.


'회귀분석'하면 이름도 생소하고 낯설 수 있지만, R 코드와 함께 따라와보시면 쉽게 이해가실겁니다!!


상관분석의 연장선에서 회귀분석을 하기 위해 데이터도 같은 데이터를 사용하겠습니다.


df <- read.csv("http://goo.gl/HKnl74")



저번 포스팅의 상관분석을 통해 놀이기구에 대한 만족도(rides)와 전체만족도(overall) 간에 일정한 패턴을 확인하였고, 상관계수 또한 0.5859로써 양의 선형관계를 이뤘습니다. 여기서 더 나아가, 회귀분석을 통해 변수 간에 관계를 예측까지 해보겠습니다.


참고로, 회귀분석은 크게 독립변수 종속변수가 각각 한 개일 때의 관계를 분석하는 단순선형회귀분석(simple linear regression analysis)

종속변수는 한개 독립변수는 두개 이상일 때는 중선형회귀분석(multiple linear regression analysis)으로 구분됩니다.




<단순선형회귀분석>




1. 회귀식의 추정


두 변수 X와 Y의 관계(rides, overall)에 적합한 회귀식을 구하기 위해서는 관측된 값으로부터 회귀계수 B0와 B1의 값을 추정하여야 합니다. 

이 때 일반적으로 많이 사용되는 방법을 최소제곱법이라고 합니다.


R에서는 lm(Y~X) 함수를 이용하면 회귀식을 쉽게 추정할 수 있습니다.

b0 = -94.962, b1 = 1.703 으로부터 overall = -94.962 + 1.703*rides 라는 회귀식을 구할 수 있으며,

놀이기구에 대한 만족도(rides)가 1 증가할 때마다 전체만족도(overall)이 1.703만큼 증가한다고 볼 수 있습니다.


이렇게 구해진 회귀직선을 산점도(scatter plot)위에 그려보겠습니다.

-m1 <- lm(overall~rides): m1에 회귀식을 입력

-plot(overall~rides, ...): 산점도를 그림

-abline(m1, col='blue'): 산점도 위에 m1이라는 회귀직선을 blue 색으로 그림

산점도 위에 파란색의 회귀직선이 그려진 것을 확인할 수 있습니다 !!


그러나 회귀식이 도출 됐어도 아직 할 일이 많습니다.... 



2. 회귀모형의 검정 및 적합도 파악


이 회귀식이 통계적으로 유의한지, 변수가 유의하게 영향을 미치는 지, 그리고 얼만큼의 설명력을 가지는지 등의 여부를 확인해야 합니다.


1. F-statistic

도출된 회귀식이 회귀분석 모델 전체에 대해 통계적으로 의미가 있는지 파악


2. P-Value

각 변수가 종속변수에 미치는 영향이 유의한지 파악


3. 수정된 R제곱

회귀직선에 의하여 설명되는 변동이 총변동 중에서 차지하고 있는 상대적인 비율이 얼마인지 나타냄

즉, 회귀직선이 종속변수의 몇%를 설명할 수 있는지 확인


위에 나온 3가지는 모두  summary() 함수 하나를 통해 다 확인할 수 있습니다. summary()의 위대함은 여기서도 느끼네요.

결과를 보면 잔차에 대한 정보, 회귀계수에 대한 정보, R제곱, 검정통계량 F0 값과 P-Value 값 등이 출력된 것을 확인할 수 있습니다.


1. 제일 밑에 F-statistic의 p-value 값은 2.2e-16 로 0.05보다 작기에 이 회귀식은 회귀분석 모델 전체에 대해 통계적으로 의미가 있다고 볼 수 있습니다.


2. 중간의 Coefficients:에는 y절편 값(Intercept) 및 변수들의 p-value 값이 나와있습니다. rides 변수의 경우 2e-16으로 0.05보다 작기에 overall을 설명하는데 유의하다고 판단할 수 있습니다.

참고로 *는 통계적으로 유의하다는 것을 한 눈에 보여주는 표시이며 *가 많을수록 통계적으로 유의할 확률이 높다고 볼 수 있습니다.


3. 밑 부분의 Adjusted R-squared 값은 0.3421 로써 34%만큼의 설명력을 가진다고 판단할 수 있습니다.

(0에 가까울 수록 예측값 믿을 수 없고 1에 가까울 수록 믿을 수 있다)



<중선형회귀분석>

이번에는 중선형회귀분석(multiple linear regression analysis)을 해보겠습니다. 

위 단순선형회귀분석과 비교했을 때 종속변수를 설명하는 독립변수가 두개 이상으로 증가했다고 생각하시면 됩니다.


overall을 설명하는 독립변수를 기존에 있었던 rides에 더해 games와 clean 변수를 추가해봤습니다.

lm(Y~X1+X2+ ... Xn)과 같은 형식으로 입력해주면 회귀식이 나옵니다.

이번에는 summary() 함수를 통해 한번에 회귀식과 회귀모형을 검정해보겠습니다.


회귀식: overall = -131.67877 + 0.57798*rides + 0.26028*games + 1.28381*clean 


1. 제일 밑에 F-statistic의 p-value 값이 2.2e-16 로 0.05보다 작기에 이 회귀식은 회귀분석 모델 전체에 대해 통계적으로 의미가 있다고 볼 수 있습니다.


2. 중간의 Coefficients에 나온 변수들의 p-value 값이 모두 0.05보다 작기에 overall을 설명하는데 유의하다고 판단할 수 있습니다.


3. 밑 부분의 Adjusted R-squared 값은 0.4358 로써 43.5%만큼의 설명력을 가진다고 판단할 수 있습니다. 앞선 결과와 비교했을 때 더 높은 설명력을 가지는 것을 알 수 있습니다. 


이번에는 weekend 변수(범주형)를 넣어서 회귀분석을 해봤습니다.


1. 여전히 제일 밑에 F-statistic의 p-value 값이 2.2e-16 로 0.05보다 작기에 이 회귀식은 회귀분석 모델 전체에 대해 통계적으로 의미가 있다고 볼 수 있습니다.


2. 중간의 Coefficients에 나온 weekendyes를 제외한 변수들의 p-value 값이  0.05보다 작기에 overall을 설명하는데 유의하다고 판단할 수 있습니다. weekend 변수와 같이 yes, no 데이터로 구성되어 있는 범주형 변수의 경우 하나의 값을 기준으로 나머지 값을 비교합니다.

즉, weekendyes(주말에 온 사람들)가 weekendno(주중에 온 사람들)와 비교했을 때 -0.85183만큼 overall(전체만족도)를 평가했다고 생각하면 쉬울 것 같습니다.


3. 밑 부분의 Adjusted R-squared 값은 0.4358 로써 43.5%만큼의 설명력을 가진다고 판단할 수 있습니다. 





끝.


수고하셨습니다~









댓글14

  • 2017.06.10 14:52

    비밀댓글입니다
    답글

  • 권태용 2017.06.15 10:34

    각각의 값들이 어떤의미를 가지고 있는지에 대해서 이해가 됬습니다.
    하지만 제가 헷갈리는게 p-value인데 다른 인터넷에서는 p<0.05이면 대립가설을 채택한다고 하는데 위에선 0.05보다 작은데 선형회귀분석에 의미가 있다고 하는데 제가 잘못 이해 하고 있는 건가요?
    답글

    • JKyun 2017.06.15 22:47 신고

      '대립가설을 채택하다 = 통계적으로 유의하다' 의 뜻으로 적었습니다. 대립가설을 채택한다는 의미로 받아들이면 될 것 같아요~

    • 권태용 2017.06.16 17:07

      아 그렇군요 ㅎㅎ 친절한 설명 감사드립니다.

    • 권태용 2017.06.16 17:27

      이해가 된줄 알았는데 ㅜㅜ 다시 생각해보니 헷갈리네요

      lm()선형회귀의 가설이 두 변수는 선형관계를 가진다라는 가설로부터 시작하지 않나요? ㅜㅜ 그래서 제가 생각하는 대립가설을 채택한다는 뜻은 두 변수는 선형관계를 띄지 않는다로 생각됩니다. ㅜㅜ

  • si 2017.11.08 14:37

    범주형인 weeked를 그냥 넣으셨는데 저는 as.factor(weeked) 이렇게 넣으라고 배웠는데
    안해도 상관 없는 건가요???
    답글

    • JKyun 2017.11.08 19:05 신고

      weekend가 이미 범주형으로 입력이 되어 있기 때문에 상관 없어요. 실제로 넣고 해봤는데도 결과값 똑같이 나옵니다~

  • 2018.11.21 00:45

    안녕하세요! 회귀분석 공부중인 학생입니다 혹시 저 데이터를 어디서 찾으셨는지 알수있을까요??
    답글

  • 2019.04.18 16:59

    비밀댓글입니다
    답글

  • 분석 2020.06.18 02:06

    안녕하세요! 제가 현재 회귀분석과 t-test 결과 분석을 하고 있는데 헷갈리는게 있어서요...! 혹시 조금 도움을 주실 수 있을까요??
    답글

  • 고진_감래 2021.05.27 00:44 신고

    진짜 최고의 설명입니다.!!!!!!!!!
    답글

  • 은또디 2021.10.09 10:55 신고

    여태 봤던 모든 회귀분석, 상관분석 글 중에 가장 이해가 잘 되는 글이었습니다! 감사해요 ㅎ
    답글