Omitted Variable Bias

2020. 9. 10. 00:03계량경제학

반응형

Omitted Variable Bias은 다중 회귀 분석에서 종속변수를 설명하기 위한 중요한 독립변수이나, 모형에서 누락되어 오차항에 포함되었을 때 발생하는 편향입니다.

Omitted Variable Bias가 발생하기 위해서는, 독립변수 $X$는 Omitted Variable과 관계(Correlated)가 되있어야 하며, Omitted Variable은 종속변수에 대한 설명력을 가져야합니다.

$y_i = \alpha+\beta_1 x_i+\mu_i$의 회귀 식이 있다고 가정해보겠습니다.

OLS(Ordinary Least Squares)로 추정된 $\widehat{\beta_1}$  아래와 같이 나타납니다.

$y_i$를 $y_i = \alpha+\beta_1 x_i+\mu_i$을 활용하여 표현하면 아래와 같이 정리할 수 있습니다.  

이때 Omitted Variable $X_2$가 오차항에 포함되어 있다면 오차항은 $\mu_i=\beta_2 x_{2i}+v_i$로 표현할 수 있습니다. 그렇다면 위의 식은 아래와 같이 변형 될 수 있습니다.

즉 원래 오차항에 Omitted Variable $X_2$가 없었다면 $\beta_1$이 되어야 할  $\widehat{\beta_1}$에 Bias가 발생하게 됩니다.(맨 처음에 정의한 것처럼 사용하고 있는 독립변수 $X$는 Omitted Variable과 Correlation을 가지기 떄문에 Covariance가 0이 되지 않습니다.)

Python을 통해서 실제로 Omitted Variable이 어떻게 영향을 미치는지 알아보겠습니다. Code는 Introduction to econometrics in R를 참조했으며 R로 작성된 코드를 가능한한 Python 코드로 변경하였습니다. 데이터는 책에서 활용한 R패키지 데이터와 동일한 데이터를 활용했습니다.(R에서 Package 데이터를 다운받았습니다.)

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
from math import sqrt
import random
import scipy.stats as stats

## load the data
CASchools = pd.read_csv("CASchools.csv")
CASchools.head()

## define variable
CASchools["STR"]=CASchools["students"]/CASchools["teachers"]
CASchools["score"]=(CASchools["read"]+CASchools["math"])/2

## compute correlations
CASchools["STR"].corr(CASchools["score"]) ##-0.2263627455032566
CASchools["STR"].corr(CASchools["english"]) ## 0.1876423665343432

## omitted variable
mod_ = smf.ols("score ~ STR", data=CASchools).fit() ## having risk to overestimate absoulte value of beta1
mod_.summary()
"""
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept    698.9329      9.467     73.825      0.000     680.323     717.543
STR           -2.2798      0.480     -4.751      0.000      -3.223      -1.337
"""
multi_mod_ = smf.ols("score ~ STR+english",data=CASchools).fit()
multi_mod_.summary()

"""
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept    686.0322      7.411     92.566      0.000     671.464     700.600
STR           -1.1013      0.380     -2.896      0.004      -1.849      -0.354
english       -0.6498      0.039    -16.516      0.000      -0.727      -0.572

"""

결과를 확인해보면 english 변수를 활용할 때보다 english 변수를 활용하지 않을 때 STR의 절대값이 더 크다는 것을 확인할 수 있습니다. 이는 Score를 설명하는데 있어 english learner의 영향을 고려하지 않음으로써 STR(선생대 학생비율)의 중요도가 지나치게 커진것임을 알 수 있습니다.

이와 같이 Omitted Variable의 포함 여부에 따라 추정한 계수의 영향력이나 해석이 달라질 수 있습니다.

 

반응형