線形回帰モデルに含めるべき説明変数を含めず、外生性の仮定が満たされない場合に生じるバイアスのことを 欠落変数バイアス(omitted variable bias) という。
背景¶
外生性¶
単回帰モデルを例にとる。
OLS推定量の一致性¶
単回帰モデル は両辺をと共分散をとると
傾き係数のOLS推定量に代入すると
という形に整理できる。
が外生変数のとき、より
となり、OLS推定量と真のパラメータは一致する。
欠落変数バイアス¶
単回帰モデル
を構築することを考える。
説明変数はのみであるため、それ以外のの変動はに含まれることになる。
もし、真のデータ生成過程において、変数があり真の誤差がで
のようになっていたとすると、単回帰モデルの誤差項にはが含まれていることになる。
もしがに影響を与えているだけでなく、にも影響を与えている(=は交絡因子)であるとすると、は外生性を満たさない
ということになる。そうなるとOLS推定量
は
の項が消えないため、その分だけ真のパラメータからずれることになる
数値例¶
人工データを生成し、欠落変数バイアスが であることを確認する
Source
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
# Data Generation
def simulate(n=20000, alpha=1.0, beta=2.0, theta=3.0, delta=0.8, seed=42):
rng = np.random.default_rng(seed)
Z = rng.normal(size=n) # confounder
eps = rng.normal(size=n) # shock to X
v = rng.normal(size=n) # shock to Y
X = delta * Z + eps # X depends on Z if delta≠0
Y = alpha + beta * X + theta * Z + v
u = theta * Z + v # omitted-term when regressing Y on X only
return pd.DataFrame({"Y": Y, "X": X, "Z": Z, "u": u})
beta_true = 2.0
df = simulate(delta=0.8, theta=3.0, beta=beta_true, n=1000, seed=123)
omit_model = smf.ols(formula='Y ~ X', data=df).fit()
full_model = smf.ols(formula='Y ~ X + Z', data=df).fit()
beta_hat_omit = omit_model.params["X"]
beta_hat_full = full_model.params["X"]
# Empirical bias
cov_Xu = np.cov(df["X"], df["u"], bias=True)[0,1]
var_X = np.var(df["X"])
bias_empirical = cov_Xu / var_X
pd.DataFrame({
"quantity": [
"β (true)",
"β_hat_omit (Y~X)",
"β_hat_full (Y~X+Z)",
"Bias (β_hat_omit − β)",
"Cov(X,u) / Var(X)"
],
"value": [
beta_true,
beta_hat_omit,
beta_hat_full,
beta_hat_omit - beta_true,
bias_empirical
]
}).round(3)Loading...
参考文献¶
安井翔太. (2020). 効果検証入門: 正しい比較のための因果推論 計量経済学の基礎. Gijutsu hyōronsha.
星野匡郎, 田中久稔, & 北川梨津. (2023). R による実証分析: 回帰分析から因果分析へ. 株式会社 オーム社.