회귀분석 실시하기
예제 데이터 준비
판다스를 불러들인다.
import pandas as pd
실습을 위해 cars.csv를 다운로드 받아 연다.
df = pd.read_csv('cars.csv')
회귀분석 실시
statsmodels
를 불러들인다.
from statsmodels.formula.api import ols
ols
함수로 회귀분석을 실시한다. 종속변수 ~ 독립변수
의 형태로 모형식을 쓴다. (수학에서는 $y = f(x)$처럼 종속변수를 왼쪽에, 독립변수를 오른쪽에 쓰는 것이 관습)
res = ols('dist ~ speed', data=df).fit()
결과는 .summary()
메소드로 확인할 수 있다.
res.summary()
Dep. Variable: | dist | R-squared: | 0.651 |
---|---|---|---|
Model: | OLS | Adj. R-squared: | 0.644 |
Method: | Least Squares | F-statistic: | 89.57 |
Date: | Thu, 23 Jan 2020 | Prob (F-statistic): | 1.49e-12 |
Time: | 13:58:33 | Log-Likelihood: | -206.58 |
No. Observations: | 50 | AIC: | 417.2 |
Df Residuals: | 48 | BIC: | 421.0 |
Df Model: | 1 | ||
Covariance Type: | nonrobust |
coef | std err | t | P>|t| | [0.025 | 0.975] | |
---|---|---|---|---|---|---|
Intercept | -17.5791 | 6.758 | -2.601 | 0.012 | -31.168 | -3.990 |
speed | 3.9324 | 0.416 | 9.464 | 0.000 | 3.097 | 4.768 |
Omnibus: | 8.975 | Durbin-Watson: | 1.676 |
---|---|---|---|
Prob(Omnibus): | 0.011 | Jarque-Bera (JB): | 8.189 |
Skew: | 0.885 | Prob(JB): | 0.0167 |
Kurtosis: | 3.893 | Cond. No. | 50.7 |
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
모형적합도
R-squared: 0.651
Adj. R-squared: 0.644
F-statistic: 89.57
Prob(F-statistic): 1.49e-12
Log-Likelihood: -206.58
AIC: 417.2
BIC: 421.0
모형이 데이터에 잘 맞는 정도를 보여주는 지표들이다.
- R-squared: 0.6511
- R제곱
- 모형 적합도(혹은 설명력)
dist
의 분산을speed
가 약 65%를 설명한다-
각 사례마다
dist
에 차이가 있다. -
Adj. R-squared: 0.6438
- 독립변수가 여러 개인 다중회귀분석에서 사용
- 독립변수의 개수와 표본의 크기를 고려하여 R-squared를 보정
-
서로 다른 모형을 비교할 때는 이 지표가 높은 쪽은 선택한다
-
F-statistic: 89.57, Prob(F-statistic): 1.49e-12
- 회귀모형에 대한 (통계적) 유의미성 검증 결과, 유의미함 (p < 0.05)
-
즉, 이 모형은 주어진 표본 뿐 아니라 모집단에서도 의미있는 모형이라 할 수 있음
-
로그 우도: 종속변수가 정규분포라 가정했을 때 그 우도
- 로그우도도 R제곱과 마찬가지로 독립변수가 많아지면 증가한다
- AIC, BIC: 로그우도를 독립변수의 수로 보정한 값 (작을 수록 좋다)
회귀계수(Coefficients)
Coefficients:
Estimate P(>|t|)
(Intercept) -17.5791 0.012
speed 3.9324 0.000
절편(Intercept)의 추정치는 -17.5791로, speed
가 0일 때 dist
의 값이다.
speed
의 계수 추정치는 3.9324로 speed
가 1 증가할 때마다 dist
가 3.9324 증가한다는 것을 의미한다.
이를 수식으로 정리하면 아래와 같다.
$$ dist = -17.5791 + 3.9324 \times speed $$
추정치의 표 중간의 P(>|t|)
는 모집단에서 계수가 0일 때, 현재와 같은 크기의 표본에서 이러한 계수가 추정될 확률인 p값을 나타낸다. 이 확률이 매우 작다는 것은, 모집단에서 speed
의 계수가 정확히 3.9324는 아니더라도 현재의 표본과 비슷하게 0보다 큰 어떤 범위에 있을 가능성이 높다는 것을 의미한다. 보통 5%와 같은 유의수준을 정하여 p값이 그보다 작으면(p < 0.05), "통계적으로 유의미하다"라고 한다.
즉, speed
가 증가할 때 기대되는 dist
의 변화는 유의수준 5%에서 통계적으로 유의미하다.
결과 보고
논문 등에서 회귀분석의 결과는 다음 순서대로 보고한다.
먼저 모형적합도를 보고한다. F 분포의 파라미터 2개와 그 때의 F 값, p-value와 유의수준의 비교를 적시한다.
dist에 대하여 speed로 예측하는 회귀분석을 실시한 결과, 이 회귀모형은 통계적으로 유의미하였다(F(1,48) = 89.57, p < 0.05).
다음으로 독립변수에 대해 보고한다.
speed의 회귀계수는 3.9324로, dist에 대하여 유의미한 예측변인인 것으로 나타났다(t(48) = 9.464, p < 0.05).