Experiments and Quasi-Experiments(실험/준실험 연구)

2020. 11. 15. 22:20계량경제학

반응형

이번 포스팅에서는, 특정 prgramm이나 정책을 평가하기 위해 많이 활용되고 있는 계량경제 방법론을 정리해보도록 하겠습니다. 

기본적인 Concept는 두 그룹을 Random으로 Assign하고, 한 그룹에는 특정 Treatment를 하고(Treatment 그룹), 한 그룹에는 Treatment를 하지 않고(Control group), 두 그룹을 비교하는 것입니다. 이 비교를 통해서 특정 Treatment가 가지는 효과를 분석할 수 있습니다.

사실 현실에서 Random한 그룹에 Treatment를 수행한 데이터를 수집하는 것이 쉽지는 않습니다. 예를 들어 학생의 성적과 한 반의 학생수의 관련성에 대해서 분석을 해본다고 가정하겠습니다. 한 Class의 학생 수는 Random하게 결정되기보다는, 해당 동네의 경제적 수준 및 환경에 크게 영향을 받을 것입니다. 따라서 한 Class의 학생 수에 따른 시험성적은 실험적 상황에 놓인 데이터라고 보기 어렵습니다.

하지만 특정한 외부 상황은 quasi-experiment 또는 nautral experiment라고 불리는 준실험적 상황을 야기할 수 있습니다. 예를 들어 자연재해와 같은 것입니다. 특정 지역은 자연재해에 손해를 보고 특정 지역은 자연재해에 의해 손해를 보지 않았다먼, 마치 Random하게 Treatment가 수행된 상황으로 간주할 수 있을 것입니다.

먼저 Potential Outcome과 Average casual effect에 대해 정리해보겠습니다.

Potential Outcome은 특정 개인이 Treatment를 받았을 때와 받지 않았을 때의 Outcome의 차이를 나타냅니다. 다만, 개별 개인 기준으로 효과를 측정하기는 어렵기 때문에, Average casual effect를 측정하며, average treatment effect라고 부르기도 합니다.

실험적 연구를 하기 위해서는 아래와 같은 가정을 만족해야합니다.

1. 연구집단은 모집단에서 Random하게 선정되어야 합니다.

2. 연구집단은 Treatment group과 Control group으로 Random하게 배정되어야 합니다.

위의 두가지 가정을 만족하게 된다면, Average casual effect는 아래와 같이 표현될 수 있습니다.

이 때 $X_i$는 binary treatment indicator 입니다.

이러한 차이에 대한 효과는 회귀모형으로 추정할 수도 있습니다.

일반화된 형태는 다음과 같습니다.

$W_i$는 처리효과 $X_i$와 관련없는 pretreatment characterisitc입니다.

Student-Teacher Achievement Ratio(STAR) 데이터를 활용하여, Class size가 학생들의 학업성과에 어떻게 영향을 미쳤는지를 분석해보겠습니다. 해당 Project에서는 다른 것들을 통제한체 Random하게 Class size를 부여하는 실제 실험을 수행했기 때문에, 동네 환경/경제 수준에 따라 Class size가 결정되는 것과 달리 "실험 환경"이라고 판단할 수 있습니다.

Kinder garden, 1,2,3 grade 총 4년동안 실험을 수행 되었으며, Treatment는 아래와 같습니다.

  K 1 2 3
Treatment1 Small Class Small Class Small Class Small Class
Treatment2 Regular Class + aide Regular Class + aide Regular Class + aide Regular Class + aide
Control Regular Class Regular Class Regular Class Regular Class

해당 데이터는 R 에서 AER 패키지를 활용하여 다운 받았습니다.

Treatment의 효과를 알기위한 모형은 아래와 같습니다.

$$ Y_i = \beta_0 + \beta_1 SmallClass_i + \beta_2RegAide_i + \mu_i $$

import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf

STAR= pd.read_csv("STAR.csv")

fmk = smf.ols("I(readk+mathk)~stark", data=STAR).fit()
fmk.summary()

'''
                            coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------
Intercept               918.0429      1.641    559.363      0.000     914.825     921.260
stark[T.regular+aide]     0.3139      2.310      0.136      0.892      -4.215       4.843
stark[T.small]           13.8990      2.409      5.771      0.000       9.177      18.621
'''

fm1 = smf.ols("I(read1+math1)~star1", data=STAR).fit()
fm1.summary()

'''
                            coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------
Intercept              1039.3926      1.836    566.148      0.000    1035.794    1042.992
star1[T.regular+aide]    11.9587      2.686      4.453      0.000       6.694      17.223
star1[T.small]           29.7808      2.807     10.610      0.000      24.278      35.283
'''

fm2 = smf.ols("I(read2+math2)~star2", data=STAR).fit()
fm2.summary()

'''
                            coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------
Intercept              1157.8066      1.849    626.045      0.000    1154.181    1161.432
star2[T.regular+aide]     3.4791      2.566      1.356      0.175      -1.550       8.509
star2[T.small]           19.3944      2.710      7.157      0.000      14.082      24.706
'''

fm3 = smf.ols("I(read3+math3)~star3", data=STAR).fit()
fm3.summary()

'''
                            coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------
Intercept              1228.5064      1.715    716.255      0.000    1225.144    1231.869
star3[T.regular+aide]    -0.2909      2.302     -0.126      0.899      -4.803       4.221
star3[T.small]           15.5866      2.395      6.509      0.000      10.892      20.281
'''

추정된 결과를 보면 모든 학년에 걸쳐, Class size를 줄이는 것은 학업성과에 유의한 결과를 가졌습니다. 다만 regular size +aide의 경우에는 1학년을 제외하고는 학업성과에 유의한 결과를 가지지 못했습니다. 다만 해당 모형에서 더 정확한 얻기 위해서는 추가적인 Regressor를 고려해야 합니다.

반응형