안녕하세요. 우주신입니다.
저번 상관분석 포스팅에 이어 이번에는 회귀분석(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%만큼의 설명력을 가진다고 판단할 수 있습니다.
끝.
수고하셨습니다~
'R' 카테고리의 다른 글
[R] 정렬, 순위 함수 sort(), rank(), order() 비교 (2) | 2017.04.05 |
---|---|
[R] 누적(Cumulative)과 관련된 함수 (1) | 2017.03.23 |
[R] 상관분석(Correlation Analysis), [산점도, 공분산, 상관계수, 상관계수의 검정] (5) | 2017.03.01 |
[R] 비교연산자, 논리연산자 (0) | 2017.02.25 |
[R] NA, NULL, NaN, Inf, -Inf 구분 및 처리 (3) | 2017.02.20 |
댓글