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

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

반응형

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

$$ Y_i =\beta_0 + \beta_1X_{1i} + \cdots + \beta_kX_{ki}+\beta_{k+1}W_{1i}+\cdots+\beta_{k+r}W_{ri}+\mu_i $$

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

$Y_i$는 종속변수이며, $X_{ki}$는 내생변수, $W_{ri}$는 외생변수($\mu_i$와 uncorrelated)를 나타냅니다. 이 때 도구변수는 $Z_{mi}$ 이며 $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을 활용하여 아래와 같은 식을 추정해보겠습니다. 내생변수인 담배가격($P_i$)을 도구변수를 활용하여 추정하겠습니다.

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을 활용하여 도구변수의 타당성을 검증하는데 이는 종속변수에 관한 모형의 오차항과 도구변수가 관련없음을 증명하기 위함입니다.(아래 모형)

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

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

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

반응형