" 안녕하세요 virtuonweb 입니다 "
이번 글에서는 파이썬에서 OLS (ordinary least square) 결과를 테이블로 바로 만드는 법에 대해 알아볼까 한다.
OLS (Ordinary Least Square란?)
OLS는 Python의 statsmodel 패키지로 할 수 있는 1차 회귀분석 기법이다.
1차 회귀분석에 포함되는 것으로, data point와 regression된 model과의 수직거리 제곱의 합이 최소가 되도록 계산하는 기법이다.
아래 사진을 참고하기 바란다.
OLS 결과를 HTML 테이블로 만드는 법
import pandas as pd
from sklearn import datasets
import statsmodels.api as sm
from stargazer.stargazer import Stargazer
from IPython.core.display import HTML
1. pd 는 데이터프레임 조작 용도
2. statsmodels에서 sm을 불러서 OLS를 가능하게 한다
3. sklearn에서 예시 데이터셋을 불러온다
4. stargazer를 통해 테이블을 만들 수 있고
5. 이를 IPython HTML 함수를 통해 브라우저 화면 상으로 띄울 수 있다.
-> alternative로 LaTex로 내보낼 수도 있다.
diabetes = datasets.load_diabetes()
df = pd.DataFrame(diabetes.data)
df.columns = ['Age', 'Sex', 'BMI', 'ABP', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6']
df['target'] = diabetes.target
dataset column에 대한 정보는 다음에서 확인할 수 있다.
https://github.com/scikit-learn/scikit-learn/blob/7e1e6d09b/sklearn/datasets/_base.py#L915
이제 OLS를 회귀분석하고 stargazer로 테이블형태 만든뒤 HTML 함수로 present하면 된다.
OLS를 돌리고 싶은 변수들을 원하는대로 골라준 뒤 2개의 모델을 합칠 수도 있다.
X_1 = df[['Age', 'Sex', 'BMI', 'ABP', 'S5', 'S6']]
X_2 = df[['Age', 'Sex', 'BMI', 'ABP', 'S1', 'S2']]
y = df['target']
est_1 = sm.OLS(y, sm.add_constant(X_1))
OLS_model_1 = est_1.fit()
est_2 = sm.OLS(y, sm.add_constant(X_2))
OLS_model_2 = est_2.fit()
stargazer = Stargazer([OLS_model_1,OLS_model_2])
HTML(stargazer.render_html())
결과는 다음과 같다.
Dependent variable:target | ||
(1) | (2) | |
ABP | 292.048*** | 397.583*** |
(66.417) | (70.870) | |
Age | -45.201 | 24.704 |
(60.581) | (65.411) | |
BMI | 586.705*** | 789.742*** |
(65.453) | (66.887) | |
S1 | 197.852 | |
(143.812) | ||
S2 | -169.251 | |
(142.744) | ||
S5 | 540.784*** | |
(67.806) | ||
S6 | 68.628 | |
(66.989) | ||
Sex | -139.901** | -82.862 |
(57.931) | (64.851) | |
const | 152.133*** | 152.133*** |
(2.641) | (2.853) | |
Observations | 442 | 442 |
R2 | 0.488 | 0.403 |
Adjusted R2 | 0.481 | 0.395 |
Residual Std. Error | 55.519 (df=435) | 59.982 (df=435) |
F Statistic | 69.223*** (df=6; 435) | 48.915*** (df=6; 435) |
Note: | *p<0.1; **p<0.05; ***p<0.01 |
Jupyter Notebook 상에 나타난 표를 그대로 drag 해서 복사하면 HTML 형식이 그대로 복사되기 때문에 위 테이블과 같이 티스토리에 붙여넣기 해도 깔끔한 형태가 보존된다.
함께 읽으면 좋은 글