f_
frhyme.code
•python-libs•โฑ ์•ฝ 16๋ถ„ ์†Œ์š”

Fitting Statistical Models to Data with Python - WEEK 2 - Part 1

WEEK 2 - FITTING MODELS TO INDEPENDENT DATA - PART 1

  • 2์ฃผ์ฐจ์—๋Š” linear regression๊ณผ logistic regression์„ ๋ฐฐ์šด๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ด ๋ชจ๋ธ์˜ ์ •ํ™•๋„๋ฅผ ์–ด๋–ป๊ฒŒ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ํ‰๊ฐ€ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Linear regression modelling: one ind var.

  • ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ชจํ˜•์ธ, linear regression์„ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • Y: BPXSY1 : ํ”ผ์‹คํ—˜์ž์— ๋Œ€ํ•ด์„œ 1๋ฒˆ์งธ๋กœ ์ธก์ •๋œ Bloods pressure
    • X: RIDAGEYR : ํ”ผ์‹คํ—˜์ž์˜ ๋‚˜์ด.
  • ์ฆ‰, ์—ฌ๊ธฐ์„œ๋Š”, โ€œํ”ผ์‹คํ—˜์ž์˜ ๋‚˜์ดโ€๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€, โ€œํ˜ˆ์••โ€์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ด๋‹ค, ๋ผ๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ•˜๊ณ  ๋ชจ๋ธ์„ ์„ธ์šด ๊ฒƒ์ด์ฃ . (๋˜ํ•œ, ์ง€๊ธˆ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ, BP๊ฐ€ โ€œ1๋ฒˆ์งธ ์ธก์ •๋œโ€ ์ด๋ผ๋Š” ๋ง์— ์œ ์˜ํ•˜์„ธ์š”).
  • ์•„๋ž˜์™€ ๊ฐ™์ด, ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ์„ ์„ธ์šฐ๊ณ  dataframe๊ณผ formula๋ฅผ ํ•จ๊ป˜ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.
# Read and Process data
# file link  
# https://github.com/kshedden/statswpy-nhanes/blob/master/merged/nhanes_2015_2016.csv
nhanes_df = pd.read_csv("nhanes_2015_2016.csv")
print(nhanes_df.columns)
# ํ•„์š”ํ•œ ์นผ๋Ÿผ๋งŒ ์„ ํƒํ•˜๊ณ , ํ•„์š”์—†๋Š” ๊ฒƒ๋“ค ์‚ญ์ œ 
vars = ["BPXSY1", "RIDAGEYR", "RIAGENDR", "RIDRETH1", "DMDEDUC2", "BMXBMI", "SMQ020"]
nhanes_df = nhanes_df[vars].dropna()
print("== csv file processed")

OLS = True
if OLS==True:
    print("== OLS summary")
    model = sm.OLS.from_formula("BPXSY1 ~ RIDAGEYR", data=nhanes_df)
    result = model.fit()
    print(result.summary())
    print("== OLS done")
  • ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
== csv file processed
== OLS summary
                            OLS Regression Results
==============================================================================
Dep. Variable:                 BPXSY1   R-squared:                       0.207
Model:                            OLS   Adj. R-squared:                  0.207
Method:                 Least Squares   F-statistic:                     1333.
Date:                Thu, 16 Jan 2020   Prob (F-statistic):          2.09e-259
Time:                        16:32:25   Log-Likelihood:                -21530.
No. Observations:                5102   AIC:                         4.306e+04
Df Residuals:                    5100   BIC:                         4.308e+04
Df Model:                           1
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept    102.0935      0.685    149.120      0.000     100.751     103.436
RIDAGEYR       0.4759      0.013     36.504      0.000       0.450       0.501
==============================================================================
Omnibus:                      690.261   Durbin-Watson:                   2.039
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             1505.999
Skew:                           0.810   Prob(JB):                         0.00
Kurtosis:                       5.112   Cond. No.                         156.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
== OLS done

coefficient

  • coef: X๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ Y๋ผ๋Š” ๋ณ€์ˆ˜์— ์–ผ๋งˆ๋‚˜ ๋ฏผ๊ฐํ•˜๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ๋Š”๊ฐ€?์— ๋Œ€ํ•œ ๊ฒƒ์„ ๋งํ•˜์ฃ . ์†Œ์œ„ ๊ธฐ์šธ๊ธฐ, ์™€ ๊ฐ™์€ ๊ฒƒ์ด๊ณ , ๋Œ€๋žต์ ์ธ ๊ตฌ๊ฐ„๋„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RIDAGEYR๋Š” 0.4759์˜ coef๋ฅผ ๊ฐ€์ง€์ฃ . ์ฆ‰, 1๋…„์€ BPXSY1์— 0.48๋งŒํผ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค, ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋ฆฌ๊ณ  p-value ๋˜ํ•œ, ์ถฉ๋ถ„ํžˆ ์ž‘๊ธฐ ๋•Œ๋ฌธ์—, ๋งค์šฐ ์œ ํšจํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

R-squared and correlation

  • ํ”ํžˆ, ๋…๋ฆฝ๋ณ€์ˆ˜(independent var)๊ฐ€ ์ข…์†๋ณ€์ˆ˜(dependent var)์˜ ๋ถ„์‚ฐ์„ ์–ผ๋งˆ๋‚˜ ์ž˜ ์„ค๋ช…ํ•˜๋Š”์ง€, ์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์œผ๋กœ, R-squared๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก , ํ˜„์žฌ ๋ฐฉ์ •์‹์—์„œ๋Š” 1๊ฐœ์˜ ๋…๋ฆฝ๋ณ€์ˆ˜์™€ 1๊ฐœ์˜ ์ข…์† ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜์–ด, correlation๊ณผ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค๋งŒ)
  • ์œ„ ํ‘œ์—์„œ ๋ณด๋Š” ๊ฐ’์€ 0.207์ด๋ฉฐ, ์ด๋Š”, ์ข…์† ๋ณ€์ˆ˜์˜ ๋ณ€ํ™”์˜ 21%๊ฐ€ ๋…๋ฆฝ๋ณ€์ˆ˜์— ์˜ํ•ด์„œ ๊ฒฐ์ •๋œ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ฃ .

Linear regression modelling: two ind var.

  • ์‚ฌ์‹ค, 1๊ฐœ์˜ ๋…๋ฆฝ๋ณ€์ˆ˜๋กœ ์ข…์† ๋ณ€์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ž˜ ์—†์ฃ . ๊ทธ๋ž˜์„œ, ์—ฌ๊ธฐ์„œ๋Š” ํ•˜๋‚˜์˜ ์ข…์† ๋ณ€์ˆ˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•ด๋ด…๋‹ˆ๋‹ค. ์•„๋งˆ๋„, 2๊ฐœ์˜ ์ข…์† ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์ธกํ•œ๋‹ค๋ฉด, ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ๋‚˜์˜ค์ง€ ์•Š์„๊นŒ(์ฆ‰ R-Square ๊ฐ’์ด ์ปค์ง€์ง€ ์•Š์„๊นŒ?)๋ผ๊ณ  ์ƒ์ƒํ•ด๋ด…๋‹ˆ๋‹ค.
  • ๋ณธ ์ฝ”์Šค์—์„œ๋Š” RIAGENDR๋ผ๋Š”, ์„ฑ๋ณ„์„ ์˜๋ฏธํ•˜๋Š” categorical value๋ฅผ ์ง‘์–ด๋„ฃ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต, ๋‹ค๋ฅธ ๋จธ์‹ ๋Ÿฌ๋‹ ํŒจํ‚ค์ง€์—์„œ๋Š” ์ด ๊ฐ’์„, numerical value๋กœ ๋ฐ”๊พธ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” ๊ทธ๋ƒฅ โ€œMaleโ€, โ€œFemaleโ€์ธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด ์ง‘์–ด๋„ฃ์Šต๋‹ˆ๋‹ค. ์•Œ์•„์„œ ์ž˜ ํ•ด์„ํ•˜๋‚˜๋ด…๋‹ˆ๋‹ค.
nhanes_df = pd.read_csv("nhanes_2015_2016.csv")
#print(nhanes_df.columns)
# ํ•„์š”ํ•œ ์นผ๋Ÿผ๋งŒ ์„ ํƒํ•˜๊ณ , ํ•„์š”์—†๋Š” ๊ฒƒ๋“ค ์‚ญ์ œ 
vars = ["BPXSY1", "RIDAGEYR", "RIAGENDR", "RIDRETH1", "DMDEDUC2", "BMXBMI", "SMQ020"]
nhanes_df = nhanes_df[vars].dropna()
nhanes_df["RIAGENDRx"] = nhanes_df.RIAGENDR.replace({1: "Male", 2: "Female"})
print("== csv file processed")

print("== OLS summary")
model = sm.OLS.from_formula("BPXSY1 ~ RIDAGEYR + RIAGENDRx", data=nhanes_df)

result = model.fit()
print(result.summary())
print("== OLS done")
== csv file processed
== OLS summary
                            OLS Regression Results
==============================================================================
Dep. Variable:                 BPXSY1   R-squared:                       0.215
Model:                            OLS   Adj. R-squared:                  0.214
Method:                 Least Squares   F-statistic:                     697.4
Date:                Thu, 16 Jan 2020   Prob (F-statistic):          1.87e-268
Time:                        16:48:59   Log-Likelihood:                -21505.
No. Observations:                5102   AIC:                         4.302e+04
Df Residuals:                    5099   BIC:                         4.304e+04
Df Model:                           2
Covariance Type:            nonrobust
=====================================================================================
                        coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------------
Intercept           100.6305      0.712    141.257      0.000      99.234     102.027
RIAGENDRx[T.Male]     3.2322      0.459      7.040      0.000       2.332       4.132
RIDAGEYR              0.4739      0.013     36.518      0.000       0.448       0.499
==============================================================================
Omnibus:                      706.732   Durbin-Watson:                   2.036
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             1582.730
Skew:                           0.818   Prob(JB):                         0.00
Kurtosis:                       5.184   Cond. No.                         168.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
== OLS done
  • ์ด์ œ ์ด ๋ชจ๋ธ์€ โ€œ๋‚˜์ดโ€์™€ โ€œ์„ฑ๋ณ„โ€์„ ์‚ฌ์šฉํ•˜์—ฌ BP์˜ ๋ณ€ํ™” ์ •๋„๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • coef์— ๋”ฐ๋ฅด๋ฉด, 1๋…„์ด ์ถ”๊ฐ€๋ ์ˆ˜๋ก 0.47์˜ ํ˜ˆ์••์ด ๋†’์•„์ง€๊ณ , ์„ฑ๋ณ„์€ Male์˜ ๊ฒฝ์šฐ 3.23์ด ๋” ๋†’๋‹ค๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‚˜์ด์˜ ๊ฒฝ์šฐ๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์ธ โ€œ์„ฑ๋ณ„โ€์ด ์ถ”๊ฐ€๋˜๊ธฐ ์ „๊ณผ ์ดํ›„์˜ coef์˜ ๋ณ€ํ™”๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณดํ†ต, ์ด ๋‘˜๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•˜์ฃ .
  • categorical variable์€ ๋ฆฌ๊ทธ๋ ˆ์…˜ ๋ชจ๋ธ์—์„œ covariate(๊ณต๋ณ€๋Ÿ‰)์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ,

reference level์€ ๊ทธ category๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ •ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ๋งˆ์น˜, ์ด์ „์— โ€œMale์˜ ๊ฒฝ์šฐ 3.23์ด ๋” ๋†’์•„์ง€๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์€ Female์ด reference level์ด๊ธฐ ๋•Œ๋ฌธโ€์ด๋‹ค. ๋‹น์—ฐํ•˜์ง€๋งŒ, ๋งŒ์•ฝ โ€œmale์„ reference level๋กœ ์žก๋Š”๋‹ค๋ฉด, ํ•ด๋‹น coefficient๋Š” -3.23์ด ๋ ๊ฒƒ์ด๋‹คโ€.

  • categorical variable์€ ๋ณดํ†ต dummy variable๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ์ฆ‰, category๊ฐ€ 3๊ฐœ๋ผ๋ฉด, 3๊ฐœ์˜ ์นผ๋Ÿผ์„ ๋งŒ๋“ค์–ด์„œ ๊ฐ ์นผ๋Ÿผ์˜ True/Fale๋ฅผ ๋งํ•ด์ฃผ๋Š” ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, statsmodels์—์„œ๋„ ๋™์ผํ•˜๋ฉฐ, ์—ฌ์„ฑ์„ reference level๋กœ ์žก๊ณ , ๋‚จ์„ฑ์ด๋ผ๋Š” ์นผ๋Ÿผ์„ ๋งŒ๋“ค์–ด์„œ, 0 or 1๋กœ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

Linear regression modelling: Three ind var.

  • ์ด๋ฒˆ์—๋Š” BMXBMI, BMI๋ผ๋Š” ์นผ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜์˜€์œผ๋ฉฐ, ๋‹น์—ฐํžˆ๋„ R_square ๊ฐ’์ด ์†Œํญ ์ƒํ–ฅ๋˜์—ˆ๊ณ , coef ๋„ ์œ ํšจํ•˜๋‹ค.
# Read and Process data
# file link  
# https://github.com/kshedden/statswpy-nhanes/blob/master/merged/nhanes_2015_2016.csv
nhanes_df = pd.read_csv("nhanes_2015_2016.csv")
#print(nhanes_df.columns)
# ํ•„์š”ํ•œ ์นผ๋Ÿผ๋งŒ ์„ ํƒํ•˜๊ณ , ํ•„์š”์—†๋Š” ๊ฒƒ๋“ค ์‚ญ์ œ 
vars = ["BPXSY1", "RIDAGEYR", "RIAGENDR", "RIDRETH1", "DMDEDUC2", "BMXBMI", "SMQ020"]
nhanes_df = nhanes_df[vars].dropna()
nhanes_df["RIAGENDRx"] = nhanes_df.RIAGENDR.replace({1: "Male", 2: "Female"})
print("== csv file processed")

print("== OLS summary")
model = sm.OLS.from_formula("BPXSY1 ~ RIDAGEYR + BMXBMI + RIAGENDRx", data=nhanes_df)
result = model.fit()
print(result.summary())
print("== OLS done")
== csv file processed
== OLS summary
                            OLS Regression Results
==============================================================================
Dep. Variable:                 BPXSY1   R-squared:                       0.228
Model:                            OLS   Adj. R-squared:                  0.228
Method:                 Least Squares   F-statistic:                     502.0
Date:                Thu, 16 Jan 2020   Prob (F-statistic):          8.54e-286
Time:                        17:03:52   Log-Likelihood:                -21461.
No. Observations:                5102   AIC:                         4.293e+04
Df Residuals:                    5098   BIC:                         4.296e+04
Df Model:                           3
Covariance Type:            nonrobust
=====================================================================================
                        coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------------
Intercept            91.5840      1.198     76.456      0.000      89.236      93.932
RIAGENDRx[T.Male]     3.5783      0.457      7.833      0.000       2.683       4.474
RIDAGEYR              0.4709      0.013     36.582      0.000       0.446       0.496
BMXBMI                0.3060      0.033      9.351      0.000       0.242       0.370
==============================================================================
Omnibus:                      752.325   Durbin-Watson:                   2.040
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             1776.087
Skew:                           0.847   Prob(JB):                         0.00
Kurtosis:                       5.343   Cond. No.                         316.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
== OLS done

wrap-up

  • statsmodels์—์„œ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ linear regression model์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๊ธฐ๋ณธ์ ์ธ Ordinary Least Square method๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์˜ˆ์ธก์น˜์™€ ์‹ค์ œ์น˜์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” parameter๋ฅผ ์ถ”์ •ํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๋‹ค.
  • ํŠนํžˆ, ๋…๋ฆฝ๋ณ€์ˆ˜๊ฐ€ 1๊ฐœ์ผ ๋•Œ์™€, 2๊ฐœ, 3๊ฐœ ์ผ๋•Œ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ํ†ตํ•ด, R-squared ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์ง€๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  coef๊ฐ’์ด ๋ฌด์Šจ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ coef๊ฐ€ ์ค„์–ด๋“ค๊ฑฐ๋‚˜ ํ• ๊ฒฝ์šฐ, ๊ฐ ์นผ๋Ÿผ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„(correlation)์„ ํ†ตํ•ด ์„œ๋กœ ์–ด๋–ค ๊ด€๋ จ์„ฑ์ด ์žˆ๋Š”์ง€ ๋“ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ. ๊ทธ๋ฆฌ๊ณ , coef ๋˜ํ•œ, p-value๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋„ˆ๋ฌด ์ž‘์€ ๊ฐ’์— ๋Œ€ํ•ด์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ ์ •๋„๋ฅผ ๋ฐฐ์› ๋‹ค.
  • ๊ทธ ์™ธ๋กœ, ํ•ด๋‹น ๋ชจ๋ธ์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•ด์„œ๋„ ๋ฐฐ์› ์œผ๋‚˜, ์ด ๋ถ€๋ถ„์€ ๊ทธ์ € ์ œ์™ธํ•˜์˜€๋‹ค.

๐Ÿ’กRELATED ARTICLES ยท ํ•จ๊ป˜ ์ฝ์œผ๋ฉด ์ข‹์€ ์—ฐ๊ด€ ํฌ์ŠคํŠธ

๊ธ€ ์ฃผ์†Œ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.