인과추론(Causal Inference)

불연속회귀설계(RDD) 예제

호재 P.B 2021. 10. 24. 17:55

본 포스팅은 불연속회귀설계를 이용한 인과 효과 추정에 관한 예제입니다 :)

아래의 포스팅을 참고하시면 좋습니다.

 

 

불연속회귀설계(RDD)

본 포스팅은 불연속회귀설계에 관해 정리한 내용입니다 :) 참고 서적 : Joshua D. Angrist, Jorn-Steffen Pischke. (2018). 고수들의 계량경제학. 시그마프레스. p.146 ~ p.175 참고 사이트 : https://mixtape.scu..

everyday-tech.tistory.com

 

본 포스팅에서는 불연속회귀설계 모델 중 임계값 전 후로 처치가 고정적으로 정해지는 Sharp RD 대해 다루겠습니다

 

예제 데이터 생성

먼저 필요한 패키지를 import합니다

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.formula.api as sms

예제 데이터를 생성합니다여기서 변수는 아래와 같습니다

  • 배정변수(running_var; $X$)
  • 임계값(cutoff_value; $C_0$)
  • 처치($D$)
    • 1 : 배정변수 값이 임계값보다 높거나 같은 경우
    • 0 : 배정변수 값이 임계값보다 낮은 경우
  • 인과 효과(treated_effect; $\rho$) : 이 값을 추정해야 합니다.
  • 결과 변수(outcome; $Y$)
np.random.seed(777)

nums = 1000
running_var = np.random.normal(20, 5, size = nums )
cutoff_value = 20
treated_effect = 15

outcome = 3 * running_var +  np.where(running_var >= cutoff_value, treated_effect, 0) + np.random.normal(0,3,size = nums)

data = pd.DataFrame({'running_var' : running_var, 'outcome' : outcome})
data['D'] = (data['running_var'] >= cutoff_value).astype(int)

 

배정변수에 따른 결과변수의 scatter plot을 그려보면 아래와 같습니다

배정변수에 따라 결과변수 값이 선형적으로 증가하며, 임계값($C_0$)에서 jump(인과 효과)가 일어나는 것을 알 수 있습니다.

plt.scatter(data['running_var'], data['outcome'], s= 5)
plt.xlabel('running_var')
plt.ylabel('outcome')

배정변수와 결과변수의 scatter plot

 

회귀모델을 이용한 인과효과 추정

아래와 같이 식을 구성한 후 인과 효과($D_i$의 회귀계수)를 추정할 수 있습니다

$$\large{Y_i = \alpha + \rho D_i + \gamma (X_i - C_0) + \epsilon_i}$$

model1 = sms.ols('outcome ~ running_var + D', data).fit()
model1.summary().tables[1]

ols 추정 결과

회귀 계수를 해석하면 다음과 같습니다

  • running_var : 배정변수의 회귀 계수로, 배정변수 1단위 증가 당 결과변수 증가량
  • $D$ : 인과 효과로 배정변수 임계값에서의 jump의 크기를 의미. 추정해야하는 $15$와 유사하며 p-value를 기준으로 보았을 때 유의함

이와 같이 배정변수의 임계값을 기준으로 처치 변수의 dummy를 회귀식에 추가하면 인과효과를 추정할 수 있습니다.


마치며

이상으로 Sharp RD에서 회귀모델을 활용한 인과효과 추정방법에 대해 알아보았습니다

글 읽어주셔서 감사합니다.

 

 

글이 도움이 되셨다면 아래 클릭 한번 부탁드립니다 :)

 

반응형