Python 기초 통계

Python으로 하는 기초 통계 분석법


수강중

11. 회귀분석 실시하기

동영상이 없는 텍스트 강의 자료입니다.

예제 데이터 준비

판다스를 불러들인다.

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).