Rの関数から ivreg {AER} を確認します。
1. ivreg
関数の目的と概要
通常の回帰分析(lm()
関数など)では、説明変数が誤差項と相関していない(外生性を満たす)という仮定が置かれています。しかし、以下のような場合、この仮定が崩れ、推定結果にバイアス(偏り)が生じます。これを内生性 (endogeneity) の問題と呼びます。
- 欠落変数バイアス (Omitted Variable Bias): モデルに含まれていない変数が、被説明変数と説明変数の両方に影響を与えている。
- 例:「教育年数」が「賃金」に与える影響を分析したいが、個人の「能力」という観測できない変数が、教育年数(能力が高い人は高学歴になりやすい)と賃金(能力が高い人は高賃金)の両方に影響している。
- 同時決定性 (Simultaneity): 被説明変数と説明変数が相互に影響を与え合っている。
- 例:「価格」が「需要」に与える影響を見たいが、需要が高いと価格も上がるという逆の因果関係も存在する。
- 測定誤差 (Measurement Error): 説明変数に測定誤差が含まれている。
このような内生性の問題がある場合、通常の最小二乗法(OLS)は正しい因果効果を推定できません。そこで、操作変数法 (IV) を用います。
操作変数(Instrumental Variable, IV)とは、以下の2つの条件を満たす変数のことです。
- 関連性 (Relevance): 操作変数は、問題となっている内生変数と相関がある。
- 除外制約 (Exclusion Restriction): 操作変数は、被説明変数に対しては、内生変数を通じてのみ影響を与え、直接的な影響を持たない(誤差項と相関しない)。
ivreg
関数は、この操作変数を用いて、内生性の問題を解消し、バイアスのない推定を行うためのツールです。
2. ivreg
関数の使い方:引数の解説
ivreg
の最も重要な引数は formula
, data
です。特にformula
の書き方が独特です。
ivreg(formula, data, ...)
formula
の書き方
ivreg
では、Formula
パッケージの拡張formula
を利用し、|
(パイプ)記号を使ってモデルを記述します。
基本形: y ~ x1_endog + x2_exog | z1_instr + x2_exog
このformula
は2つのパートに分かれています。
-
|
の左側 (y ~ x1_endog + x2_exog
):- これは通常の回帰モデルの式(構造方程式)です。
-
y
: 被説明変数 (Dependent variable) -
x1_endog
,x2_exog
: 説明変数 (Regressors)。ここには、内生変数と外生変数の両方を含めます。
-
|
の右側 (z1_instr + x2_exog
):- ここには全ての操作変数を記述します。
- 重要な点は、
|
の左側に含まれる全ての外生変数も、|
の右側に含める必要があるということです。なぜなら、外生変数はそれ自身の最も良い操作変数だからです。 -
z1_instr
: 内生変数(x1_endog
)のための「外部」操作変数 (External instruments) -
x2_exog
: モデルに含まれるすべての外生変数 (Exogenous regressors)
その他の主要な引数
-
data
: モデルに使用するデータフレーム。 -
subset
: データの一部を分析対象とする場合に指定します。 -
na.action
: 欠損値の処理方法を指定します(例:na.omit
)。 -
weights
: 重み付き最小二乗法を行う場合の重みを指定します。
3. 具体的な実行例
シナリオ設定: 生徒の観測できない「やる気」が、「追加補習時間」(説明変数)と「テストの点数」(被説明変数)の両方に強い正の影響を与えている状況を考えます。この「やる気」が原因で、「追加補習時間」は内生変数となり、OLSで分析すると補習の効果を過大評価してしまいます。塾から遠い生徒ほど補習に参加しにくいという事実を利用し、「通塾距離」を操作変数とします。
3.1. サンプルデータの作成
# パッケージの読み込み
library(AER)
library(lmtest)
# 再現性のための乱数シード固定
<- 20250828
seed set.seed(888)
# データ数
<- 1000
n
# 1. 観測できない「やる気」を生成 (内生性の根源)
<- rnorm(n, mean = 5, sd = 2)
motivation
# 2. 操作変数「通塾距離」と外生変数「基礎学力」を生成
<- runif(n, 1, 10)
distance <- rnorm(n, mean = 50, sd = 10)
baseline_ability
# 3. 内生変数「追加補習時間」を生成
# 「やる気」が高いほど補習時間が増える
<- 1 + 1.0 * motivation - 0.5 * distance + rnorm(n, 0, 1)
tutoring_hours
# 4. 被説明変数「テストの点数」を生成
# 誤差項に含まれる「やる気」の影響は「5」とする
# 補習時間の真の効果は「8」とする
<- 5 * motivation + rnorm(n, 0, 5)
error <- 20 + 8 * tutoring_hours + 1 * baseline_ability + error
test_score
# データフレームにまとめる
<- data.frame(test_score, tutoring_hours, baseline_ability, distance) sim_data
3.2. モデルの推定と比較
(A) 内生性を無視したOLS分析(誤った分析)
<- lm(test_score ~ tutoring_hours + baseline_ability, data = sim_data)
ols_model
cat("--- OLSモデルの結果(バイアスあり)---\n")
print(coeftest(ols_model, vcov = vcovHC, type = "HC1"))
--- OLSモデルの結果(バイアスあり)---
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.533581 1.358714 24.68 < 2.2e-16 ***
tutoring_hours 11.033085 0.103325 106.78 < 2.2e-16 ***
baseline_ability 1.033718 0.026229 39.41 < 2.2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(B) 操作変数法を用いたivreg
による分析(正しい分析)
<- ivreg(test_score ~ tutoring_hours + baseline_ability | distance + baseline_ability,
iv_model data = sim_data
)
cat("\n--- IVモデルの結果(バイアス修正後)---\n")
print(summary(iv_model, vcov = vcovHC, type = "HC1", diagnostics = TRUE))
--- IVモデルの結果(バイアス修正後)---
Call:
ivreg(formula = test_score ~ tutoring_hours + baseline_ability |
distance + baseline_ability, data = sim_data)
Residuals:
Min 1Q Median 3Q Max
-32.8832 -7.4412 0.3245 7.9295 36.2679
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.0052 2.1233 20.73 <2e-16 ***
tutoring_hours 7.9408 0.2994 26.53 <2e-16 ***
baseline_ability 1.0290 0.0369 27.88 <2e-16 ***
Diagnostic tests:
df1 df2 statistic p-value
Weak instruments 1 997 296.0 <2e-16 ***
Wu-Hausman 1 996 369.1 <2e-16 ***
Sargan 0 NA NA NA
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 11.23 on 997 degrees of freedom
Multiple R-Squared: 0.8618, Adjusted R-squared: 0.8615
Wald test: 712.5 on 2 and 997 DF, p-value: < 2.2e-16
4. 結果の解釈と比較
OLSの結果:
tutoring_hours
の係数は 11.033085 と推定されました。これは、真の効果である「8」よりも、欠落変数バイアスの影響により、過大な評価となっています。IV (
ivreg
)の結果: 一方、ivreg
によるtutoring_hours
の係数は 7.9408 と推定されました。ivreg
はバイアスをほぼ除去し、真の値である「8」を捉えています。診断テスト:
- Weak instruments: F値が296.0であるため、操作変数の「関連性」は無いと考えられます。
- Wu-Hausman: p値が<2.2e-16であることから、「内生性は存在しない」という帰無仮説を有意に棄却できます。
5. Diagnostic testsの解説
1. Weak instruments(弱い操作変数の検定)の解説
このテストの目的は何か?
操作変数法の第一の条件である「関連性(Relevance)」が満たされているかを確認します。つまり、「使用した操作変数(この例では distance
)が、問題となっている内生変数(tutoring_hours
)と本当に相関関係にあるか?」を検定します。もし無相関である場合、ivreg
の推定結果は信頼できなくなります。
結果の読み方
- 帰無仮説 (H₀): 「操作変数は内生変数と無相関である」
- 実行結果:
statistic = 296.0
p-value < 2e-16
解釈と結論
p値が有意水準(5%)よりも小さく、帰無仮説は棄却されます、
また、経験則として、この検定の統計量(F統計量)が10以上であれば、操作変数は十分に強いと判断されるのが一般的です。
2. Wu-Hausman(ハウスマン検定)の解説
このテストの目的は何か?
そもそも「操作変数法を使う必要があったのか?」を事後的に検証します。具体的には、単純なOLSによる推定結果と、ivreg
による推定結果が、統計的に見て「同じ」と見なせるか、「異なる」かを検定します。もし両者に有意な差がなければ、内生性の問題は深刻ではなく、より単純なOLSでも問題なかったかもしれません。逆に、有意な差があれば、OLSの結果はバイアスを受けており、ivreg
を使う判断が正しかったことが裏付けられます。
結果の読み方
- 帰無仮説 (H₀): 「説明変数は外生変数である(=内生性は存在しない)」
- 実行結果:
statistic = 369.1
p-value < 2e-16
解釈と結論
p値が有意水準よりも小さく、帰無仮説は棄却されます。
これは、OLSによる推定結果とivreg
による推定結果の間に、統計的に有意な差が存在することを意味します。つまり、tutoring_hours
は内生変数であり、単純なOLS分析ではその係数がバイアスを受けていたことが示唆されています。
以上です。