본문 바로가기
Data Analysis/Python

Python : 다중 회귀 분석

by 불탄오징어 2015. 12. 2.
반응형

 

 

심심해서 해보는 틈틈이 Python으로 하는 통계 분석을 정리해볼까 한다.

첫번째는 다중회귀분석을 아래와 같이 수행했다.

데이터는 아래의 주소를 참조했다.

http://college.cengage.com/mathematics/brase/understandable_statistics/7e/students/datasets/mlr/frames/frame.html

 

Data for multiple linear regression

 

college.cengage.com

import pandas as pd
import statsmodels.formula.api as sm
from statsmodels.sandbox.regression.predstd import wls_prediction_std

# csv 파일을 가져옴
df = pd.read_csv("c:/Temp/baseball.csv")

# 데이터의 칼럼명을 변경
df.columns = ["battingAvg", "score_atBat", "double_atBat", "triples_atBat", "homerun_atBat", "strike_atBat"]
print df.head()

# 회귀분석 수행
result = sm.ols(formula = 'score_atBat ~ battingAvg + strike_atBat + triples_atBat', data = df).fit()

# 요약결과 출력
print result.summary()

# 회귀계수 출력
print('Parameters : ', result.params)

# R squared 출력
print('Rsquaured : ', result.rsquared)

# 회귀계수에 대한 P-value 출력
print('Pvalue :', result.pvalues)

# 모형의 적합값 출력
print('Predicted values',  result.predict())

 

result.summary()의 결과는 다음과 같이 출력된다.

 

                           OLS Regression Results                            
==============================================================================
Dep. Variable:            score_atBat   R-squared:                       0.725
Model:                            OLS   Adj. R-squared:                  0.705
Method:                 Least Squares   F-statistic:                     35.97
Date:                Wed, 02 Dec 2015   Prob (F-statistic):           1.47e-11
Time:                        15:07:51   Log-Likelihood:                 108.32
No. Observations:                  45   AIC:                            -208.6
Df Residuals:                      41   BIC:                            -201.4
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
=================================================================================
                    coef    std err          t      P>|t|      [95.0% Conf. Int.]
---------------------------------------------------------------------------------
Intercept        -0.1161      0.034     -3.380      0.002        -0.185    -0.047
battingAvg        0.8576      0.117      7.311      0.000         0.621     1.094
strike_atBat      0.1696      0.070      2.414      0.020         0.028     0.312
triples_atBat     0.7748      0.665      1.165      0.251        -0.569     2.118
==============================================================================
Omnibus:                        1.239   Durbin-Watson:                   2.046
Prob(Omnibus):                  0.538   Jarque-Bera (JB):                1.138
Skew:                           0.227   Prob(JB):                        0.566
Kurtosis:                       2.367   Cond. No.                         205.
==============================================================================

위 결과에서 R-squared 값은 72.5%로 설명력이 높으며 모형에 대한 p-value 또한 0.05보다 낮으므로 통계적으로 유의하다.

단, triples_atBat의 p-value가 0.05보다 높으므로 유의하지 않다. 이 경우 해당 독립변수를 제외하고 모형을 재 수행하는 것이 바람직하다.

다음과 같이 모형에서 triple_atBat을 제외하고 다시 실행한다.

# 회귀분석 수행
result = sm.ols(formula = 'score_atBat ~ battingAvg + strike_atBat ', data = df).fit()

# 요약결과 출력
print result.summary()

수정한 모형에 대한 result.summary()의 결과는 다음과 같이 출력된다.

                            OLS Regression Results                            
==============================================================================
Dep. Variable:            score_atBat   R-squared:                       0.716
Model:                            OLS   Adj. R-squared:                  0.702
Method:                 Least Squares   F-statistic:                     52.83
Date:                Sun, 14 Apr 2019   Prob (F-statistic):           3.42e-12
Time:                        22:53:51   Log-Likelihood:                 107.59
No. Observations:                  45   AIC:                            -209.2
Df Residuals:                      42   BIC:                            -203.8
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
================================================================================
                   coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------
Intercept       -0.1263      0.033     -3.790      0.000      -0.194      -0.059
battingAvg       0.9292      0.100      9.267      0.000       0.727       1.132
strike_atBat     0.1591      0.070      2.274      0.028       0.018       0.300
==============================================================================
Omnibus:                        1.253   Durbin-Watson:                   2.008
Prob(Omnibus):                  0.535   Jarque-Bera (JB):                1.221
Skew:                           0.284   Prob(JB):                        0.543
Kurtosis:                       2.427   Cond. No.                         35.7
==============================================================================

첫번쨰 결과와 비교했을 때 R-squared 값과 p-value가 여전히 유의미한 결과인데 각 독립변수도 p-value가 0.05보다 낮은 통계적으로 유의미한 결과가 나왔다.

두 독립변수 battingAvg와 strike_atBat은 score_atBat에 선형적인 관계를 가지고 있으며 각각 1씩증가 할때 score_atBat에 0.9292, 0.1591만큼의 영향력을 가진다고 볼 수 있다.

댓글