OLS 기반 인과추론 시 오차항 관련 체크 필요 가정
배경
- 아래 글을 DANBI에서 보다가 더 알아보게 되었습니다.
OLS를 떠받치는 몇 개의 기둥이 있는데 그중 실용적으로 가장 중요한 것이 일치성(consistency)다. 쉽게 말해서 OLS를 통해 도출된 추정량이 있을 때 샘플사이즈가 커지면서 이 값이 참 값으로 접근한다는 것이다. 일치성이 충족되면 우리는 적당하게 큰 표본에 대해서 추정치가 좋은 속성을 지니고 있다고 말할 수 있다.
그렇다면, 이 일치성을 만족시키는 조건은 무엇인가? 수학적인 정의를 풀어 말하면, 회귀분석의 독립변수 혹은 regressor가 에러와 상관성이 없어야 한다. 이 조건이 깨지만 일치성이 깨진다. 일치성이 결여된 추정량은 쓰임새가 몹시 제한적이다. 그림에서 보듯이 오차항은 말 그대로 우연한 오차로서 종속변수 혹은 regressand에 영향을 주어야 한다는 것이다.
주요 가정들
-
오차항의 정규성 검정:
Q-Q 플롯과 Kolmogorov-Smirnov 검정을 통해 오차항이 정규분포를 따르는지 시각화하고 검정합니다.p-value
가 0.05보다 크면 정규성을 따르는 것으로 간주합니다. -
오차항의 독립성 검정:
Durbin-Watson 검정을 통해 오차항 간의 자기상관이 있는지 확인합니다. 값이 2에 가까울수록 자기상관이 없음을 나타냅니다. -
다중공선성 문제 확인:
Variance Inflation Factor(VIF)를 계산하여 다중공선성 문제를 확인합니다. VIF 값이 5를 넘으면 다중공선성 문제가 있다고 판단할 수 있습니다.
주요 가정
- 오차항의 독립성 (No Endogeneity):
- 오차항과 설명 변수 사이에 상관관계가 없어야 합니다.
- 즉, 설명 변수는 오차항과 독립적이어야 인과관계를 정확히 추정할 수 있습니다
- . 오차항에 설명 변수가 포함되거나 상관관계가 있다면, 설명 변수의 계수 추정치가 편향될 수 있습니다. 이 문제를 **내생성(endogeneity)**이라고 합니다.
- 오차항과 설명 변수 사이의 상관계수를 계산하여 내생성 문제를 확인합니다. 상관계수가 0에 가까워야 설명 변수와 오차항이 독립적입니다.
- 해결책으로는 도구변수(Instrumental Variables) 방법이 있습니다.
- 오차항의 등분산성 (Homoscedasticity):
- 오차항의 분산이 모든 설명 변수에 걸쳐 일정해야 합니다.
- 만약 이 가정이 위배되면 이분산성(heteroscedasticity)이 발생하게 되며, 회귀계수의 표준 오차 추정이 왜곡되어 결과의 신뢰성을 저하시킬 수 있습니다.
- 이를 검정하기 위해 Breusch-Pagan 검정이나 White 검정 등을 사용할 수 있습니다.
- Breusch-Pagan 검정을 사용하여 오차항의 분산이 일정한지 확인합니다.
p-value
가 0.05보다 크면 등분산성이 있다고 볼 수 있습니다.
- Breusch-Pagan 검정을 사용하여 오차항의 분산이 일정한지 확인합니다.
- 오차항의 정규성 (Normality of Residuals):
- 회귀분석에서 통계적 유의성을 추정하려면, 오차항이 정규분포를 따른다는 가정이 필요합니다.
- 이 가정이 만족되지 않으면 회귀계수의 t-통계량과 p-value의 신뢰성이 떨어질 수 있습니다.
- Q-Q 플롯과 Kolmogorov-Smirnov 검정을 통해 오차항이 정규분포를 따르는지 시각화하고 검정합니다.
p-value
가 0.05보다 크면 정규성을 따르는 것으로 간주합니다.
- 오차항의 독립성 (Independence of Residuals):
- 오차항들이 서로 독립적이어야 합니다. 즉, 오차항 간의 자기상관(autocorrelation)이 없어야 합니다.
- 특히, 시간 데이터(시계열 데이터)의 경우 자기상관 문제가 자주 발생합니다.
- 이 문제를 해결하기 위해서 Durbin-Watson 검정이 자주 사용됩니다.
- Durbin-Watson 검정을 통해 오차항 간의 자기상관이 있는지 확인합니다. 값이 2에 가까울수록 자기상관이 없음을 나타냅니다.
- 모형의 적합성 (Model Specification):
- 오차항과 관련된 중요한 변수를 모형에 누락하지 않아야 합니다.
- 중요한 설명 변수를 제외하거나 잘못된 형태로 포함하면, **누락변수편향(Omitted Variable Bias)**이 발생할 수 있습니다.
- 이로 인해 인과관계 추정이 왜곡될 수 있습니다.
코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor
from scipy import stats
# 샘플 데이터 생성
np.random.seed(42)
n = 100
X = np.random.normal(0, 1, n)
X2 = X**2 # 비선형성 예시
epsilon = np.random.normal(0, 1, n)
Y = 2 * X + 3 * X2 + epsilon
# DataFrame에 저장
df = pd.DataFrame({'X': X, 'X2': X2, 'Y': Y})
# 독립 변수에 상수항 추가
X = sm.add_constant(df[['X', 'X2']])
# OLS 회귀 모델 적합
model = sm.OLS(df['Y'], X)
results = model.fit()
# 회귀 결과 출력
print(results.summary())
# 1. 오차항의 독립성 (내생성 문제)
# 오차항과 설명 변수 간의 상관관계 확인
residuals = results.resid
corr_X_resid = np.corrcoef(df['X'], residuals)[0, 1]
print(f"오차항과 X 변수 간의 상관계수: {corr_X_resid}")
# 2. 오차항의 등분산성 검정: Breusch-Pagan Test
from statsmodels.stats.diagnostic import het_breuschpagan
bp_test = het_breuschpagan(residuals, X)
labels = ['Lagrange multiplier statistic', 'p-value', 'f-value', 'f p-value']
print(dict(zip(labels, bp_test)))
# 3. 오차항의 정규성 검정: Q-Q Plot
sm.qqplot(residuals, line='45')
plt.title('Q-Q Plot of Residuals')
plt.show()
# Kolmogorov-Smirnov 검정
ks_stat, ks_p_value = stats.kstest(residuals, 'norm')
print(f"Kolmogorov-Smirnov test p-value: {ks_p_value}")
# 4. 오차항의 독립성 검정: Durbin-Watson Test
from statsmodels.stats.stattools import durbin_watson
dw_stat = durbin_watson(residuals)
print(f"Durbin-Watson statistic: {dw_stat}")
# 5. 다중공선성 문제 확인: Variance Inflation Factor (VIF)
vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif["features"] = X.columns
print(vif)