Mímisbrunnr知恵の泉

← 計量経済学 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 土台:操作変数法と2SLS(因果推論・IVの識別)・重回帰分析(統計・OLS)・操作変数の考え方

要点(BLUF)

1. 2SLSの手順

内生変数 xx、操作変数 zz、外生コントロール ww(あれば)に対し:

第1段:x=π0+π1z+π2w+v,x^=π^0+π^1z+π^2w\text{第1段}:\quad x=\pi_0+\pi_1 z+\pi_2 w+v,\qquad \hat x=\hat\pi_0+\hat\pi_1 z+\hat\pi_2 w 第2段:y=β0+β1x^+β2w+ε\text{第2段}:\quad y=\beta_0+\beta_1 \hat x+\beta_2 w+\varepsilon

第1段で xx を「zzww で説明できる部分 x^\hat x」と「残り vv(交絡を含む)」に分解し、x^\hat x だけを第2段で使う。x^\hat x は構成上 z,wz,w の関数なので交絡 uu と無相関——これが偏りの消える理由です。実務では手計算の二段ではなく IV2SLS(標準誤差が正しく出る)を使いますが、論理は上の二段そのものです。

flowchart LR
    A["内生変数 x(交絡で汚れている)"] --> B["第1段: x を z, w に回帰"]
    B --> C["予測値 x̂(z 由来=外生部分のみ)"]
    C --> D["第2段: y を x̂ に回帰"]
    D --> E["β̂ は一致推定(OLSの偏りが消える)"]

2. 実証:内生性でOLSが偏る → 2SLSで直る

未観測の能力 ability が教育 educ と賃金 wage の両方を押し上げる(欠落変数バイアス)状況を作ります。操作変数 z(例:近所に大学があるか)は educ に効くが ability とは無関係(外生)。真の教育の収益は 0.50.5 です。

import numpy as np
import statsmodels.api as sm

np.random.seed(0)
n = 5000
# 能力 ability は未観測の交絡(educ と wage の両方を押し上げる)
ability = np.random.normal(0, 1, n)
# 操作変数 z(近所に大学があるか):educ に効くが ability とは無関係(外生)
z = np.random.normal(0, 1, n)
# 教育年数:操作変数 z と 未観測能力 ability で決まる(→ educ は内生)
educ = 0.7 * z + 0.6 * ability + np.random.normal(0, 1, n)
# 真の教育の収益(賃金への因果効果)は 0.5
beta_true = 0.5
wage = beta_true * educ + 1.0 * ability + np.random.normal(0, 1, n)

# (1) 素朴な OLS:ability が欠落 → educ と誤差が相関 → 上方バイアス
ols = sm.OLS(wage, sm.add_constant(educ)).fit()
print(f"真の効果              = {beta_true:.3f}")
print(f"OLS(内生性で偏り)    = {ols.params[1]:.3f}")

# (2) 2SLS(手計算):第1段 educ を z に回帰 → 予測値 educ_hat(z 由来=外生部分)
first = sm.OLS(educ, sm.add_constant(z)).fit()
educ_hat = first.fittedvalues
# 第2段:wage を educ_hat に回帰
second = sm.OLS(wage, sm.add_constant(educ_hat)).fit()
print(f"2SLS(操作変数で補正) = {second.params[1]:.3f}")

# 操作変数の関連性(第1段の t・弱操作変数でないか)
print(f"第1段 z の t 値        = {first.tvalues[1]:.1f}(大きいほど関連性が強い)")

出力:

真の効果              = 0.500
OLS(内生性で偏り)    = 0.814
2SLS(操作変数で補正) = 0.485
第1段 z の t 値        = 42.6

出力の意味:OLSは 0.8140.814 と真値 0.5000.500 から大きく上振れしました——能力という交絡が教育と賃金の両方を押し上げ、教育の係数に紛れ込んだためです(内生性とは(バイアスの源の地図))。2SLSは 0.4850.485 とほぼ真値を回収。第1段で教育の「zz が動かした外生部分」だけを取り出し、能力由来の汚れた変動を捨てたからです。第1段の zztt値は 42.642.6 と非常に大きく、強い操作変数であることも確認できます(弱操作変数なら2SLSも信頼できません)。

3. 弱操作変数の害

第1段が弱い(Cov(z,x)0\mathrm{Cov}(z,x)\approx 0)と、2SLSは深刻に劣化します:(1) 有限標本バイアスがOLS方向に残る、(2) 標準誤差が爆発して推定が不安定、(3) 漸近近似が効かず信頼区間が信用できない。診断は第1段の FF 統計量(操作変数が複数なら同時 FF)。経験則は F>10F>10、近年はより厳しい基準(実効 FF)も使われます。弱いときは、操作変数を選び直すか、弱操作変数に頑健な推定(LIML・Anderson–Rubin信頼区間)に切り替えます。

⚠️ よくある誤解・落とし穴

関連ノート