2020. 10. 4. 21:04ㆍ계량경제학
회귀모형은 주로 종속변수와 독립변수 간에 선형적 관계를 추론하는데 많이 활용합니다. 하지만 실제 종속변수와 독립변수 간의 관계가 선형적이지 않은 경우도 많습니다. 이럴 때, 활용하는 방안이 비선형 회귀모형을 적합해보는 것입니다. 이번 포스팅에서는 대표적인 비선형 회귀모형으로써 다항 모형(Polynomials)과 Log 모형(Logarithms)에 대해서 정리해 보도록 하겠습니다.
[다항 모형(Polynomial)]
회귀모형에 활용할 독립변수

Python을 활용해서 1차항 부터, 3차항 까지 Fitting을 해보겠습니다. (데이터는 이전 포스팅에서 말씀드린 것처럼 R 패키지에서 다운로드 받았습니다.)
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
## Data Load
CASchools = pd.read_csv("CASchools.csv")
CASchools.info()
CASchools["size"]=CASchools["students"]/CASchools["teachers"]
CASchools["score"]=(CASchools["read"]+CASchools["math"])/2
CASchools[["income", "score"]].corr()
## simple regression
linear_model = smf.ols("score~income", data=CASchools).fit()
linear_model.summary()
## quandratic
quadratic_model = smf.ols("score~income+I(income**2)", data=CASchools).fit()
quadratic_model.summary()
## poly- degree:3
from sklearn.preprocessing import PolynomialFeatures
X = CASchools["income"]
Y = CASchools["score"]
polynomial_features= PolynomialFeatures(degree=3)
XP = polynomial_features.fit_transform(X.values.reshape(-1,1))
poly_model = sm.OLS(Y, XP).fit()
poly_model.summary()
##시각화
sns.regplot(x="income", y="score", data=CASchools)
sns.regplot(x="income", y="score", data=CASchools, order=2, color="r", scatter= False)
sns.regplot(x="income", y="score", data=CASchools, order=3, color="g", scatter= False)

고차항을 활용하여 Fitting 모델 중 어떤 것을 활용할지에 대해 결정하기 위해서 몇가지 기준을 수립할 수 있습니다.
[로그 모형(Logarithms)]
비선형 회귀모형에서 다항 모형과 함께 대표적으로 많이 활용되는 모델은 로그모형입니다. 이는 종속변수
유형 | 모형 | 계수 해석 |
1 | ||
2 | ||
3 |
Python을 활용해서 3가지 유형에 대해서 Fitting을 해보겠습니다.
#####linear-log model
Linearlog_model = smf.ols("score~np.log(income)", data=CASchools).fit()
Linearlog_model.summary()
##시각화
y_fitted = Linearlog_model.fittedvalues
xs = CASchools["income"]
ys = y_fitted
xs, ys = zip(*sorted(zip(xs, ys)))
plt.scatter(CASchools["income"],CASchools["score"])
plt.plot(xs, ys, 'r-')
plt.show()
#####log-linear model
LogLinear_model = smf.ols("np.log(score)~income", data=CASchools).fit()
LogLinear_model.summary()
##시각화
y_fitted = LogLinear_model.fittedvalues
xs2 = CASchools["income"]
ys2 = y_fitted
xs2, ys2 = zip(*sorted(zip(xs2, ys2)))
plt.scatter(CASchools["income"],np.log(CASchools["score"]))
plt.plot(xs2, ys2, 'r-')
plt.show()
#####log-log model
LogLog_model = smf.ols("np.log(score)~np.log(income)", data=CASchools).fit()
LogLog_model.summary()
##시각화
y_fitted = LogLog_model.fittedvalues
xs3 = CASchools["income"]
ys3 = y_fitted
xs3, ys3 = zip(*sorted(zip(xs3, ys3)))
plt.scatter(CASchools["income"],np.log(CASchools["score"]))
plt.plot(xs3, ys3, 'r-')
plt.show()
## log-linear vs log-log 시각화
plt.scatter(CASchools["income"],np.log(CASchools["score"]), color="cyan")
plt.plot(xs2, ys2, 'r-', label = "log-linear")
plt.plot(xs3, ys3, 'g-' , label = "log-log")
plt.legend()
plt.show()

'계량경제학' 카테고리의 다른 글
회귀분석의 해석 (0) | 2020.10.18 |
---|---|
회귀분석 with interaction term (0) | 2020.10.12 |
회귀분석 가설검정 > F-test (1) | 2020.10.03 |
회귀분석 가설검정 (0) | 2020.09.17 |
VIF(분산팽창요인), 결정계수 (0) | 2020.09.13 |