Instrumental Variable Regression(도구변수를 활용한 회귀분석)2

2020. 11. 10. 23:20계량경제학

반응형

앞선 포스팅(direction-f.tistory.com/57)에서 간단히 도구변수와 2SLS(Two-Stage Least Squares)의 추정방법에 대해서 정리하였습니다. 이번에는 일반화된 도구변수를 활용한 회귀 분석에 대해서 살펴보겠습니다.

Yi=β0+β1X1i++βkXki+βk+1W1i++βk+rWri+μi

위와 같은 모형이 있다고 가정해보겠습니다.

Yi는 종속변수이며, Xki는 내생변수, Wri는 외생변수(μi와 uncorrelated)를 나타냅니다. 이 때 도구변수는 Zmi 이며 m>k라면 overidentified이고 m=k라면 exactly identified이고 m<k라면 underidentified입니다. 따라서 도구변수 개수 m은 내생변수의 수 k보다 크거나 같아야 합니다.

일반화된 도구변수를 활용한 회귀 분석에서 2SLS 단계는 다음과 같이 구성됩니다.

(1) First-Stage 회귀분석

모든 내생변수에 대해 모든 도구변수/외생변수/Intercept를 활용하여 OLS를 추정하고 예측값(Fitted value)를 구합니다.

(2) Second-Stage 회귀분석

모든 내생변수 예측값/외생변수/Intercept를 활용하여 종속변수에 관한 OLS를 추정하여 Parmeter값을 도출합니다.

이제 Python을 활용하여 아래와 같은 식을 추정해보겠습니다. 내생변수인 담배가격(Pi)을 도구변수를 활용하여 추정하겠습니다.

cigaret["rincome"]=cigaret["income"]/cigaret["population"]/cigaret["cpi"]
c1995 = cigaret.loc[cigaret["year"]==1995]

dependent = np.log(c1995["packs"])
exog = sm.add_constant(np.log(c1995["rincome"]))
endog = np.log(c1995["rprice"])
instruments = c1995["salestax"]
mod2 = IV2SLS(dependent, exog, endog, instruments).fit()
mod2

'''
==============================================================================
            Parameter  Std. Err.     T-stat    P-value    Lower CI    Upper CI
------------------------------------------------------------------------------
const          9.4307     1.2194     7.7338     0.0000      7.0407      11.821
rincome        0.2145     0.3018     0.7107     0.4773     -0.3771      0.8061
rprice        -1.1434     0.3605    -3.1718     0.0015     -1.8499     -0.4368
==============================================================================
'''


##
cigaret["cigtax"]=cigaret["tax"]/cigaret["cpi"]
c1995 = cigaret.loc[cigaret["year"]==1995]

dependent = np.log(c1995["packs"])
exog = sm.add_constant(np.log(c1995["rincome"]))
endog = np.log(c1995["rprice"])
instruments = c1995[["salestax","cigtax"]]
mod3 = IV2SLS(dependent, exog, endog, instruments).fit()
mod3

'''
==============================================================================
            Parameter  Std. Err.     T-stat    P-value    Lower CI    Upper CI
------------------------------------------------------------------------------
const          9.8950     0.9288     10.654     0.0000      8.0746      11.715
rincome        0.2804     0.2458     1.1407     0.2540     -0.2014      0.7622
rprice        -1.2774     0.2417    -5.2855     0.0000     -1.7511     -0.8037
==============================================================================
'''

위 코드는 도구변수를 하나만 썼을 때와, 두개를 썼을 때를 비교한 것입니다. 우리는 어떠한 것을 활용해야 할까요? 이제 도구변수의 타당성을 확보/검증할 수 있는 방안에 대해서 정리해보도록 하겠습니다.

먼저 도구변수는 내생변수와 관련성이 있어야 합니다. 따라서 도구변수를 활용하여 내생변수에 대한 OLS를 추정하고 F-test를 통해서 도구변수 중 하나라도 내생변수와 관련성이 있는지를 체크합니다.

추가적으로 J-statistic을 활용하여 도구변수의 타당성을 검증하는데 이는 종속변수에 관한 모형의 오차항과 도구변수가 관련없음을 증명하기 위함입니다.(아래 모형)

우리가 검증해야할 가설은 아래와 같습니다. 만약 모든 δ가 0이라면 Error term과 correlation이 없는 것이므로 도구변수의 타당성을 확보했다고 판단할 수 있습니다.

이와 같은 가설을 검증하기 위해 J-statistic을 활용하며, J-statistic은 아래와 같이 계산됩니다.

Python에서는 anova_lm을 활용하여 계산을 수행하면 됩니다. 이 때 J-statistic은 χmk를 따릅니다. m은 도구변수의 수, k는 내생변수의 수를 뜻합니다.

반응형