회귀분석 실시하기 :: Python 기초 통계 - mindscale
Skip to content

회귀분석 실시하기

예제 데이터 준비

판다스를 불러들인다.

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()
OLS Regression Results
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    
Coef는 데이터로부터 얻은 계수의 추정치를 말한다.

절편(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).