操作変数法#

概要#

観察データから結果変数Yへの処置Xの効果を測りたい場合、共変量Uをコントロールしない限り、推定量に欠落変数バイアスを生じさせる。

../../_images/1b103193a6ac18fb042d4c4b72591e6028495ded469ad507f17fac2d033af541.svg

他の変数から独立して処置Xを通じてのみYに影響を与えるZのような変数があれば、これを利用することでXYの因果効果を識別することが可能になる。この場合のZのような変数を操作変数(instrmental variable: IV)と呼ぶ。

../../_images/dcc620ce6fae605babe68f96da0c15926ef387ee7677c778174463813585a4e7.svg

操作変数法の推定方法#

2つの方法がある

  1. ZYの因果効果とZXの因果効果を割って推定する

  2. 二段階最小二乗法

どちらのアプローチでも同じ推定結果を得ることができる。

データの生成#

../../_images/c08ebdcaf88490efbb5bc1b7369d4c7047f54f33b2d17a61b58c1e90fc4c7f52.svg
Hide code cell source
import numpy as np
import pandas as pd

gamma = 2
beta = 4

n = 500
np.random.seed(0)
u = np.random.uniform(low=0, high=1, size=n)
z = np.random.uniform(low=-1, high=1, size=n)
x = 10 + gamma * z + 5 * u + np.random.normal(size=n)
y = 5 + beta * x + 5 * u + np.random.normal(scale=2, size=n)

df = pd.DataFrame(dict(y=y, x=x, z=z, u=u))
df.round(1).head()
y x z u
0 52.1 11.9 -0.4 0.5
1 65.4 13.1 -0.3 0.7
2 65.0 15.0 0.0 0.6
3 65.6 13.5 0.5 0.5
4 46.7 11.0 -0.3 0.4
Hide code cell source
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(df)
plt.show()
../../_images/c7e614b3a34ff75371a8338d2077dfaa3c90156a6fbf27fd450067dd99174ad9.png

そのまま推定した場合#

次のような単回帰モデルを考える

Y=β0+β1X+ε

説明変数はXのみで、E[ε]=0とする。

回帰係数β0,β1を正しく推定するためには、説明変数の外生性が重要な条件となる。

説明変数が外生変数であるときE[Xε]=Cov(X,ε)=0が成立するので、

(1)β1=Cov(X,Y)Var(X)

となる。

説明変数が内生変数である場合、

E[Xε]=Cov(X,ε)0

から

Cov(X,Y)=Var(X)β1+Cov(X,ε)

から、(1)式の右辺は

β1+Cov(X,ε)Var(X)β1

となる

Hide code cell source
import statsmodels.api as sm
import statsmodels.formula.api as smf
from stargazer.stargazer import Stargazer

models = [
    smf.ols('y ~ x', data=df).fit(),
    smf.ols('y ~ x + z', data=df).fit(),
    smf.ols('y ~ x + u', data=df).fit(),
]
Stargazer(models)
Dependent variable: y
(1)(2)(3)
Intercept2.660***-0.0746.220***
(0.612)(0.699)(0.623)
u4.926***
(0.423)
x4.386***4.603***3.906***
(0.048)(0.055)(0.059)
z-1.407***
(0.198)
Observations500500500
R20.9430.9480.955
Adjusted R20.9430.9480.955
Residual Std. Error2.237 (df=498)2.133 (df=497)1.984 (df=497)
F Statistic8275.698*** (df=1; 498)4575.533*** (df=2; 497)5326.716*** (df=2; 497)
Note:*p<0.1; **p<0.05; ***p<0.01

方法1:ZYの因果効果とZXの因果効果を割って推定する#

ZYの因果効果=ZYの因果効果ZXの因果効果

であるため、ZYの因果効果とZXの因果効果を割って推定する。

XYの因果効果をβZXの因果効果をγとおくと、ZYの因果効果はその積β×γになる。

そのため

β=β×γγ

で推定するということ。

../../_images/854922582d9bea195eff132275518f43763d7bf16eb23fd2ca111d298e4a768c.svg

ZXの検証を第一段階(first stage)の検証、ZYの検証を誘導型(reduced form)の検証という。

  • 第一段階:X=γ0+γ1Z+e

  • 誘導型:Y=π0+π1Z+v

from patsy import dmatrices

y, X = dmatrices("x ~ z", data=df, return_type="dataframe")
model1 = sm.OLS(y, X).fit()
model1.params
Intercept    12.537640
z             1.981999
dtype: float64
y, X = dmatrices("y ~ z", data=df, return_type="dataframe")
model2 = sm.OLS(y, X).fit()
model2.params
Intercept    57.638072
z             7.716850
dtype: float64
model2.params / model1.params
Intercept    4.597203
z            3.893468
dtype: float64

方法2:二段階最小二乗法#

Xの変動のうちZの変動に起因する変動分X^を推定し、その後X^Yの因果効果を推定する(それによりUに起因するXの変動を除く)

第一段階#

XZに回帰する(eは誤差項)

X=γ0+γ1Z+e

Xの予測値X^を得る

X^=γ^0+γ^1Z

第二段階#

XX^に置き換えて回帰分析を行う

Y=β0+β1X^+ε

この推定量は二段階最小二乗(two-stage least squares: TSLS)推定量と呼ばれる。

単回帰かつ操作変数が1つの場合のTSLS推定量は

β^1TSLS=ZYZX

となる。

OLSを用いてTSLSを行う#

IV系のパッケージを使わずに推定する方法。TSLS推定値は得られるが標準誤差の推定はできない。

y, X = dmatrices("x ~ z", data=df, return_type="dataframe")
model1 = sm.OLS(y, X).fit()
model1.params
Intercept    12.537640
z             1.981999
dtype: float64
x_hat = model1.predict(X)
y, X = dmatrices("y ~ x_hat", data=df.assign(x_hat=x_hat), return_type="dataframe")
model2 = sm.OLS(y, X).fit()
Stargazer([model2])
Dependent variable: y
(1)
Intercept8.823**
(4.039)
x_hat3.893***
(0.321)
Observations500
R20.228
Adjusted R20.226
Residual Std. Error8.252 (df=498)
F Statistic146.832*** (df=1; 498)
Note:*p<0.1; **p<0.05; ***p<0.01

TSLS#

専用のメソッドを用いる方法。標準誤差も適切に推定できるはずだが、statsmodelsのIV2SLSはバグってる様子

from statsmodels.sandbox.regression.gmm import IV2SLS

y, X = dmatrices("y ~ x", data=df, return_type="dataframe")
result = IV2SLS(y, X, instrument=df["z"]).fit()
result.summary()
/usr/local/lib/python3.10/site-packages/statsmodels/regression/linear_model.py:1884: RuntimeWarning: invalid value encountered in sqrt
  return np.sqrt(np.diag(self.cov_params()))
IV2SLS Regression Results
Dep. Variable: y R-squared: -14101.824
Model: IV2SLS Adj. R-squared: -14130.143
Method: Two Stage F-statistic: -8.392e-17
Least Squares Prob (F-statistic): 1.00
Date: Fri, 04 Apr 2025
Time: 10:54:08
No. Observations: 500
Df Residuals: 498
Df Model: 1
coef std err t P>|t| [0.025 0.975]
Intercept -904.5164 nan nan nan nan nan
x -12.0000 nan nan nan nan nan
Omnibus: 8.687 Durbin-Watson: 0.002
Prob(Omnibus): 0.013 Jarque-Bera (JB): 5.330
Skew: 0.050 Prob(JB): 0.0696
Kurtosis: 2.504 Cond. No. 78.1
from linearmodels.iv import IV2SLS
model = IV2SLS.from_formula("y ~ [x ~ z]", df).fit()
model
IV-2SLS Estimation Summary
Dep. Variable: y R-squared: 0.9641
Estimator: IV-2SLS Adj. R-squared: 0.9640
No. Observations: 500 F-statistic: 50.264
Date: Fri, Apr 04 2025 P-value (F-stat) 0.0000
Time: 10:54:09 Distribution: chi2(1)
Cov. Estimator: robust
Parameter Estimates
Parameter Std. Err. T-stat P-value Lower CI Upper CI
x 3.7399 0.5275 7.0897 0.0000 2.7060 4.7738


Endogenous: x
Instruments: z
Robust Covariance (Heteroskedastic)
Debiased: False
id: 0x7fadc39a91b0

#

学習効果#

Stinebrickner, T. R., & Stinebrickner, R. (2007). The causal effect of studying on academic performance (Working Paper No. 13341). National Bureau of Economic Research. Retrieved April, 23, 2015.

方法

  • Y:最初のセメスターのGPA

  • X:1日あたりの平均勉強時間

  • Z:ルームメイトがビデオゲームを買ったらZ=1、買わなかったらZ=0

    • ルームメイトはランダムに割り当てられる

  • n=210

    • 対象は Berea College の大学1年生(2001年)

結果

  • IV(TSLS)推定量:0.360

  • 勉強時間が1時間減ったことによるGPAの減少幅は0.36ポイント

操作変数法の推定量の特性#

操作変数の妥当性の条件#

次の2つの条件を満たす操作変数Zが必要

  1. 操作変数の関連性corr(Z,X)0

  2. 操作変数の外生性corr(Z,ε)=0

TSLS推定量の一致性#

関連性と外生性が満たされるとき、TSLS推定量は一致性をもつ。

(証明)

単回帰モデルにおけるTSLS推定量

β^1TSLS=ZYZX=sZ,YsZ,X

を例にとる。

推定モデルY=β0+β1X+εより、

Cov(Z,Y)=Cov(Z,β0+β1X+ε)=Cov(Z,β0)+Cov(Z,β1X)+Cov(Z,ε)=0+Cov(Z,β1X)+0=β1Cov(Z,X)

したがって

β1=Cov(Z,Y)Cov(Z,X)

標本による推定量β^1TSLSは母集団の共分散Cov(Z,Y),Cov(Z,X)を標本の共分散sZ,Y,sZ,Xに置き換えたものであり、標本サイズが大きくなればβ1に近づく

β^1TSLS=sZ,YsZ,XCov(Z,Y)Cov(Z,X)

TSLS推定量の標準誤差#

二段階最小二乗法を行う場合、二段階目のOLS推定量の標準誤差は正しくない(第一段階で推定した予測値を用いていることの考慮がされていないため)

実際に使うときは手作業で二段階最小二乗法を行うのではなく、統計分析ソフトに任せるほうがよい(更にいうと不均一分散に対して頑健な標準誤差を使うのがよい)

漸近的に(大規模標本では)、TSLSを推定量の標本分布は正規分布N(β1,σβ^1TSLS2)に従う。

σβ^1TSLS2=1nVar[(ZE[Z])μ]Cov(Z,X)2

(S&W、App. 12.3)

ワルド推定量#

単回帰モデルY=β0+β1X+εを想定する。

Xは内生変数E(ε|X)0とする。

次の条件を満たす操作変数Zがあるとする。

  • ダミー変数である:Z{0,1}

  • 外生性を満たす:E(ε|Z)=0

  • 関連性を満たす:E(X|Z)0

β1は次の2つのモデルを用いて推定することができる

  • 第一段階:X=π0+π1Z+v

  • 誘導形:Y=γ0+γ1Z+w

β1=E(Y|Z=1)E(Y|Z=0)E(Y|X=1)E(Y|X=0)=γ1π1

上記の方法による推定量をワルド推定量(Wald estimator)と呼ぶ。

LATE#

操作変数は母集団全体ではなく特定のサブグループの処置割り当てに影響を与える事が多い

→ IV推定量は「母集団全体の平均処置効果」ではなく、「操作変数の変動の影響を受けるサブグループの処置効果」を捉えている

このような推定量の解釈として、局所的平均処置効果(local average treatment effect: LATE)という概念がある

誰が操作変数の影響を受けるか?#

操作変数も処置変数も二値変数のケースでは、処置変数Dの操作変数Zについての潜在的結果D(Z)の組み合わせは4パターンになる

  • Always-Taker: Zがなんであれ必ずD=1

  • Never-Taker: Zがなんであれ必ずD=0

  • Complier: Z=1ならばD=1を選択し、Z=0ならばT=0を選択

  • Defier: Z=0ならばD=1を選択し、Z=1ならば=0を選択

LATE#

  1. 独立性(independence):{Y(0),Y(1),D(0),D(1)}Z

  2. 除外制約(exclusion restriction):ZからYへの影響はDを通じてのみ存在

  3. 関連性(relevance):ZDに影響を与えうる:E[D(1)D(0)]0

  4. 単調性(monotonicity):D(1)D(0)0 for all i, or vice versa (no defier)

上記の4つの仮定が成り立つとき、

β1,Wald=E(Y|Z=1)E(Y|Z=0)E(D|Z=1)E(D|Z=0)=E[Y(1)Y(0)|complier]=β1,LATE

となる

証明

Defierが居ないと仮定すると

E[YiZi=1]=E[YiZi=1,i が Always-Taker ]P(i が Always-Taker Zi=1)+E[YiZi=1,i が Never-Taker ]P(i が Never-Taker Zi=1)+E[YiZi=1,i が Complier ]P(i が Complier Zi=1)=E[Yi(1)i が Always-Taker ]pAT+E[Yi(0)i が Never-Taker ]pNT+E[Yi(1)i が Complier ]pC

同様に

E[YiZi=0]=E[Yi(1)i が Always-Taker ]pAT+E[Yi(0)i が Never-Taker ]pNT+E[Yi(0)i が Complier ]pC

なので、

E[YiZi=1]E[YiZi=0]={E[Yi(1)i が Complier ]E[Yi(0)i が Complier ]}pC

LATEの意味#

IV推定量は、操作変数によって処置変数の状況が変わるグループ(complier)における平均処置効果を捉える

β1,LATE=E[Y(1)Y(0)|T=complier]

Complierか否かは観測不可能→LATEは観測不可能なグループについての因果効果

操作変数が異なればLATEも異なる

外的妥当性については常に留意が必要

ITTとLATE#

実験(RCT)において、処置をランダムに割り当てても、処置に従わない人たち(non-complier)もいる

intention-to-treat (ITT) effect:処置を割り当てられた人たちにおける「処置のオファー」の平均効果

処置に従った人たち(complier)における平均処置効果は

ITTcompliance

処置の無作為割り当て(オファー)がZ、処置が実現されたかどうかをDとする

defierもalways-takerもなしと仮定すると?Z=0なら常にD(Z)=0となるため

β1,Wald=E(Y|Z=1)E(Y|Z=0)E(D|Z=1)E(D|Z=0)=E(Y|Z=1)E(Y|Z=0)E(D|Z=1)0=E(Y|Z=1)E(Y|Z=0)P(D=1|Z=1)=ITT effectcompliance rate

参考文献#