第17章: 制限従属変数モデルと標本選択修正

Jeffrey Wooldridge (2018).
Introductory Econometrics: A Modern Approach
Seventh Edition. Cengage Learning.

2026-03-14

準備

必要なパッケージの読み込み

library(wooldridge)
install.packages("AER")
library(AER)
install.packages("survival")
library(survival)

17-1 二値応答のロジットとプロビット・モデル

線形確率モデル (LPM) の限界

応答確率 [17.1, 17.2]: \[P(y = 1|\mathbf{x}) = G(\beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k) = G(\beta_0 + \mathbf{x\beta})\]

17-1a ロジットとプロビット・モデルの定式化

\(G\)\((0,1)\) の値をとる関数:

ロジット・モデル [17.3]: \[G(z) = \frac{\exp(z)}{1 + \exp(z)} = \Lambda(z)\] (標準ロジスティック分布のCDF)

プロビット・モデル [17.4]: \[G(z) = \Phi(z) = \int_{-\infty}^{z} \phi(v)\,dv\] (標準正規分布のCDF)

潜在変数モデルによる導出

潜在変数モデル [17.6]: \[y^* = \beta_0 + \mathbf{x\beta} + e, \quad y = \mathbf{1}[y^* > 0]\]

偏効果

連続変数 \(x_j\) の応答確率への偏効果 [17.7]: \[\frac{\partial p(\mathbf{x})}{\partial x_j} = g(\beta_0 + \mathbf{x\beta})\beta_j, \quad g(z) \equiv \frac{dG}{dz}(z)\]

二値変数 \(x_1\) の効果 [17.8]: \[G(\beta_0 + \beta_1 + \beta_2 x_2 + \cdots + \beta_k x_k) - G(\beta_0 + \beta_2 x_2 + \cdots + \beta_k x_k)\]

17-1b ロジット・プロビットの最尤推定

対数尤度関数 [17.11]: \[\ell_i(\boldsymbol{\beta}) = y_i \log[G(\mathbf{x}_i\boldsymbol{\beta})] + (1-y_i)\log[1-G(\mathbf{x}_i\boldsymbol{\beta})]\]

\(\mathcal{L}(\boldsymbol{\beta}) = \sum_{i=1}^n \ell_i(\boldsymbol{\beta})\) を最大化 \(\Rightarrow\) MLE は一致・漸近正規・漸近効率

17-1c 複数の仮説の検定

尤度比 (LR) 統計量 [17.12]: \[LR = 2(\mathcal{L}_{ur} - \mathcal{L}_r) \overset{a}{\sim} \chi^2_q\]

Wald統計量: 線形モデルの \(F\) 統計量に相当(計量ソフトが自動計算)

17-1d 推定値の解釈: スケール因子

ロジット・プロビット係数の大きさは直接解釈困難 → スケール因子で調整

平均における偏効果 (PEA) [17.14]: \[g(\hat{\beta}_0 + \bar{\mathbf{x}}\hat{\boldsymbol{\beta}}) = g\!\left(\hat{\beta}_0 + \hat{\beta}_1\bar{x}_1 + \cdots + \hat{\beta}_k\bar{x}_k\right)\]

平均偏効果 (APE) / 平均限界効果 (AME) [17.15]: \[n^{-1}\sum_{i=1}^n g(\hat{\beta}_0 + \mathbf{x}_i\hat{\boldsymbol{\beta}})\]

適合度指標

正確な予測割合 (percent correctly predicted):

疑似 \(R^2\) (McFadden): \[1 - \mathcal{L}_{ur}/\mathcal{L}_o\]

17-1d 例17.1: 既婚女性の労働参加

例17.1: LPM・ロジット・プロビットの比較 (MROZ)

data(mroz)
# LPM (OLS)
res_lpm <- lm(inlf ~ nwifeinc + educ + exper + expersq +
                age + kidslt6 + kidsge6, data = mroz)
# ロジット
res_logit <- glm(inlf ~ nwifeinc + educ + exper + expersq +
                   age + kidslt6 + kidsge6,
                 data = mroz, family = binomial(link = "logit"))
# プロビット
res_probit <- glm(inlf ~ nwifeinc + educ + exper + expersq +
                    age + kidslt6 + kidsge6,
                  data = mroz, family = binomial(link = "probit"))

例17.1: 係数の比較(表17.1)

round(cbind(
  LPM    = coef(res_lpm),
  Logit  = coef(res_logit),
  Probit = coef(res_probit)
), 3)
##                LPM  Logit Probit
## (Intercept)  0.586  0.425  0.270
## nwifeinc    -0.003 -0.021 -0.012
## educ         0.038  0.221  0.131
## exper        0.039  0.206  0.123
## expersq     -0.001 -0.003 -0.002
## age         -0.016 -0.088 -0.053
## kidslt6     -0.262 -1.443 -0.868
## kidsge6      0.013  0.060  0.036

例17.1: 正確な予測割合

round(100 * c(
  LPM   = mean((fitted(res_lpm)    >= 0.5) == mroz$inlf),
  Logit = mean((fitted(res_logit)  >= 0.5) == mroz$inlf),
  Probit= mean((fitted(res_probit) >= 0.5) == mroz$inlf)
), 1)
##    LPM  Logit Probit 
##   73.4   73.6   73.4

例17.1: 疑似 \(R^2\)(McFadden)

L0 <- logLik(glm(inlf ~ 1, data = mroz, family = binomial))

round(c(
  Logit_擬似R2  = 1 - logLik(res_logit)  / L0,
  Probit_擬似R2 = 1 - logLik(res_probit) / L0,
  LPM_R2          = summary(res_lpm)$r.squared
), 3)
##  Logit_擬似R2 Probit_擬似R2        LPM_R2 
##         0.220         0.221         0.264

例17.1: APEスケール因子の計算

# プロビット: g(z) = φ(z)
xb_hat <- predict(res_probit, type = "link")
ape_scale_probit <- mean(dnorm(xb_hat))
# ロジット: g(z) = Λ(z)[1-Λ(z)]
p_hat <- fitted(res_logit)
ape_scale_logit <- mean(p_hat * (1 - p_hat))
# APEスケール因子の比較
round(c(
  Probit = ape_scale_probit,
  Logit  = ape_scale_logit
), 3)
## Probit  Logit 
##  0.301  0.179

例17.1: APEのLPMとの比較(表17.2)

# 各変数のAPE比較(表17.2より educ, exper, kidslt6)
vars_ape <- c("educ", "exper", "kidslt6")
ape_tbl <- cbind(
  LPM    = coef(res_lpm)[vars_ape],
  Logit  = ape_scale_logit  * coef(res_logit)[vars_ape],
  Probit = ape_scale_probit * coef(res_probit)[vars_ape]
)
round(ape_tbl, 4)
##             LPM   Logit  Probit
## educ     0.0380  0.0395  0.0394
## exper    0.0395  0.0368  0.0371
## kidslt6 -0.2618 -0.2578 -0.2612

17-2 コーナー解応答のためのTobitモデル

コーナー解応答とは

Tobitモデルの定式化

潜在変数モデル [17.18, 17.19]: \[y^* = \beta_0 + \mathbf{x\beta} + u, \quad u|\mathbf{x} \sim \text{Normal}(0, \sigma^2)\] \[y = \max(0, y^*)\]

\(y_i = 0\) の確率 [17.21]: \[P(y = 0|\mathbf{x}) = 1 - \Phi(\mathbf{x\beta}/\sigma)\]

対数尤度 [17.22]: \[\ell_i = \mathbf{1}(y_i=0)\log[1-\Phi(\mathbf{x}_i\boldsymbol{\beta}/\sigma)] + \mathbf{1}(y_i>0)\log\!\left\{\tfrac{1}{\sigma}\phi\!\left[\tfrac{y_i - \mathbf{x}_i\boldsymbol{\beta}}{\sigma}\right]\right\}\]

17-2a Tobit推定値の解釈

条件付き期待値 (\(y > 0\) のとき) [17.24]: \[E(y|y>0, \mathbf{x}) = \mathbf{x\beta} + \sigma\lambda(\mathbf{x\beta}/\sigma)\]

逆ミルズ比: \(\lambda(c) = \phi(c)/\Phi(c)\)(常に正)

無条件期待値 [17.25]: \[E(y|\mathbf{x}) = \Phi(\mathbf{x\beta}/\sigma)\mathbf{x\beta} + \sigma\phi(\mathbf{x\beta}/\sigma)\]

\(E(y|\mathbf{x})\) への偏効果 [17.30]: \[\frac{\partial E(y|\mathbf{x})}{\partial x_j} = \beta_j\,\Phi(\mathbf{x\beta}/\sigma)\]

Tobit偏効果とOLSの比較

PEAスケール因子: \(\Phi(\bar{\mathbf{x}}\hat{\boldsymbol{\beta}}/\hat{\sigma})\) - \(\hat{\beta}_j \times \Phi(\bar{\mathbf{x}}\hat{\boldsymbol{\beta}}/\hat{\sigma}) \approx \tilde{\gamma}_j\)

APEスケール因子: \(n^{-1}\sum_{i=1}^n \Phi(\mathbf{x}_i\hat{\boldsymbol{\beta}}/\hat{\sigma})\)

コーナー解では \(\sigma\) も経済的に重要(補助的パラメータではない)

例17.2: 既婚女性の年間就業時間 (MROZ)

data(mroz)
# OLS(全観測)
res_ols172 <- lm(hours ~ nwifeinc + educ + exper + expersq +
                   age + kidslt6 + kidsge6, data = mroz)
# Tobit MLE(AER::tobit, 左打ち切り at 0)
res_tobit172 <- tobit(hours ~ nwifeinc + educ + exper + expersq +
                        age + kidslt6 + kidsge6,
                      data = mroz, left = 0)

例17.2: OLS vs Tobit(表17.3)

# 係数とσの比較
b_ols   <- c(coef(res_ols172),   sigma = summary(res_ols172)$sigma)
b_tobit <- c(coef(res_tobit172)[1:8], sigma = res_tobit172$scale)
round(cbind(OLS = b_ols, Tobit = b_tobit), 2)
##                 OLS   Tobit
## (Intercept) 1330.48  965.31
## nwifeinc      -3.45   -8.81
## educ          28.76   80.65
## exper         65.67  131.56
## expersq       -0.70   -1.86
## age          -30.51  -54.41
## kidslt6     -442.09 -894.02
## kidsge6      -32.78  -16.22
## sigma        750.18 1122.02

例17.2: APEスケール因子

xb_lin    <- predict(res_tobit172)
sigma_hat <- res_tobit172$scale
ape_scale_tobit <- mean(pnorm(xb_lin / sigma_hat))
cat("APEスケール因子 (Tobit):", round(ape_scale_tobit, 3), "\n")
## APEスケール因子 (Tobit): 0.589

例17.2: 変数別APE比較(表17.4)

vars172 <- c("nwifeinc","educ","exper","kidslt6","kidsge6","age")
ape_tbl172 <- cbind(
  Linear    = coef(res_ols172)[vars172],
  Tobit_APE = ape_scale_tobit * coef(res_tobit172)[vars172]
)
round(ape_tbl172, 2)
##           Linear Tobit_APE
## nwifeinc   -3.45     -5.19
## educ       28.76     47.47
## exper      65.67     77.45
## kidslt6  -442.09   -526.28
## kidsge6   -32.78     -9.55
## age       -30.51    -32.03

17-2b Tobitモデルの定式化の問題

簡易チェック: 二値変数 \(w = \mathbf{1}[y > 0]\) をプロビット推定

ハードル(2部分)モデル:

17-3 ポアソン回帰モデル

カウント変数とポアソン回帰

両辺の対数 [17.32]: \[\log[E(y|\mathbf{x})] = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k\]

\(x_j\) が1単位増加 → \(E(y|\mathbf{x})\) が約 \(100\beta_j\%\) 変化

ポアソン回帰の推定

ポアソン分布:

\[ P(y = h \mid \mathbf{x}) = \frac{\exp(-\exp(\mathbf{x}\beta))[\exp(\mathbf{x}\beta)]^{h}}{h!} \]

ポアソン対数尤度 [17.33]: \[\mathcal{L}(\boldsymbol{\beta}) = \sum_{i=1}^n \{y_i \mathbf{x}_i\boldsymbol{\beta} - \exp(\mathbf{x}_i\boldsymbol{\beta})\}\]

ポアソン分布の等分散制約

ポアソン分布の等分散制約 [17.34]: \[\text{Var}(y|\mathbf{x}) = E(y|\mathbf{x})\]

過分散の対処

分散が平均に比例する仮定 [17.35]: \[\text{Var}(y|\mathbf{x}) = \sigma^2 E(y|\mathbf{x})\]

\(\sigma^2 > 1\): 過分散、\(\sigma^2 < 1\): 過少分散

一致推定量 [テキスト p.581]: \[\hat{\sigma}^2 = \frac{1}{n-k-1}\sum_{i=1}^n \frac{\hat{u}_i^2}{\hat{y}_i}\]

例17.3: 若い男性の逮捕回数 (CRIME1)

data(crime1)
# OLS
res_ols173 <- lm(narr86 ~ pcnv + avgsen + tottime + ptime86 +
                   qemp86 + inc86 + black + hispan + born60,
                 data = crime1)
# ポアソン QMLE
res_poisson <- glm(narr86 ~ pcnv + avgsen + tottime + ptime86 +
                     qemp86 + inc86 + black + hispan + born60,
                   data = crime1, family = poisson)

例17.3: 過分散パラメータの推定

n   <- nrow(crime1)
k1  <- length(coef(res_poisson))
u_hat <- residuals(res_poisson, type = "response")
y_hat <- fitted(res_poisson)
sigma2_hat <- sum(u_hat^2 / y_hat) / (n - k1)
# 過分散パラメータ σ̂²
round(sigma2_hat, 3)
## [1] 1.517
# QMLE標準誤差の修正倍率 σ̂ 
round(sqrt(sigma2_hat), 3)
## [1] 1.232

例17.3: OLS vs ポアソン回帰(表17.5)

# 比較する変数を指定
vars173 <- c("pcnv","black")

例17.3: OLS vs ポアソン回帰(表17.5)

# 係数の比較
round(cbind(
  OLS     = coef(res_ols173)[vars173],
  Poisson = coef(res_poisson)[vars173]
), 3)
##          OLS Poisson
## pcnv  -0.132  -0.402
## black  0.327   0.661

Poisson回帰の係数の解釈

例17.3: OLS vs ポアソン回帰の解釈比較

変数 OLS の解釈 Poisson の解釈
pcnv 有罪判決率が 10ポイント上昇すると、逮捕回数は 約-0.013回減少 有罪判決率が 10ポイント上昇すると、期待逮捕回数は 約-3.9%減少
black 黒人男性は、他条件一定で 平均逮捕回数が約0.327回多い 黒人男性の期待逮捕回数は、他条件一定で 約93.6%多い

17-4 打ち切り回帰モデルと切断回帰モデル

打ち切りデータと切断データの違い

打ち切り回帰 (censored regression):

切断回帰 (truncated regression):

17-4a 打ち切り正規回帰モデル

母集団モデル [17.36, 17.37]: \[y_i = \beta_0 + \mathbf{x}_i\boldsymbol{\beta} + u_i, \quad u_i|\mathbf{x}_i, c_i \sim \text{Normal}(0, \sigma^2)\] \[w_i = \min(y_i, c_i)\]

\(c_i\): 打ち切り閾値; 右打ち切りの場合)

打ち切りとTobitの比較

Tobit (コーナー解) 打ち切り回帰
ゼロの意味 経済的最適化の結果 データ収集の問題
\(\beta_j\) の解釈 \(E(y^*|\mathbf{x})\) への偏効果 \(E(y|\mathbf{x})\) への直接的効果
OLS適用 不一致(バイアスあり) 不一致(バイアスあり)
代表例 年間就業時間 上限打ち切りされた賃金

例17.4: 再犯の存続期間分析 (RECID)

library(survival)
data(recid)
# 打ち切り正規回帰(右打ち切り)
# cens=1: 打ち切り観測 → 事象指標 = 1 - cens
res_cens <- survreg(
  Surv(ldurat, 1 - cens) ~ workprg + priors + tserved +
    felon + alcohol + drugs + black + married + educ + age,
  data = recid, dist = "gaussian")

例17.4: 推定結果(表17.6)前半

coef_surv <- coef(res_cens)
se_surv   <- sqrt(diag(vcov(res_cens)))
result174 <- cbind(`係数` = round(coef_surv, 3),
                   SE   = round(se_surv,   3))
print(result174[1:6, ])
##               係数    SE
## (Intercept)  4.099 0.348
## workprg     -0.063 0.120
## priors      -0.137 0.021
## tserved     -0.019 0.003
## felon        0.444 0.145
## alcohol     -0.635 0.144

例17.4: 推定結果(表17.6)後半

print(result174[7:11, ])
##           係数    SE
## drugs   -0.298 0.133
## black   -0.543 0.117
## married  0.341 0.140
## educ     0.023 0.025
## age      0.004 0.001
cat("σ̂ =", round(res_cens$scale, 3), "\n")
## σ̂ = 1.81

例17.4: 結果の解釈

17-4b 切断回帰モデル

切断正規回帰モデル [17.40, 17.41]: \[y = \beta_0 + \mathbf{x\beta} + u, \quad u|\mathbf{x} \sim \text{Normal}(0, \sigma^2)\]

観測は \(y_i \leq c_i\) のときのみ(\(c_i\): 切断閾値)

条件付き密度: \[g(y|\mathbf{x}_i, c_i) = \frac{f(y|\mathbf{x}_i, \boldsymbol{\beta}, \sigma^2)}{F(c_i|\mathbf{x}_i, \boldsymbol{\beta}, \sigma^2)}, \quad y \leq c_i\]

17-5 標本選択修正

非無作為標本選択の問題

17-5a 選択標本でOLSが一致する条件

母集団モデル [17.42]: \[y = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k + u, \quad E(u|x_1, \ldots, x_k) = 0\]

選択指標 \(s_i\): \(s_i = 1\) のとき観測、\(s_i = 0\) のとき非観測

外生的標本選択 → OLS 一致: 1. \(s\) が説明変数 \(\mathbf{x}\) のみの関数 2. \(s\)\((\mathbf{x}, u)\) と独立

内生的標本選択 → OLS 不一致: - 選択が誤差項 \(u\) に直接依存(例: 切断標本、偶発的打ち切り)

17-5b 偶発的打ち切り: モデル設定

人口モデル [17.46, 17.47]: \[y = \mathbf{x\beta} + u, \quad E(u|\mathbf{x}) = 0\] \[s = \mathbf{1}[\mathbf{z\gamma} + v \geq 0]\]

仮定:

偶発的打ち切りとOLSバイアス

\(\rho \neq 0\) のとき、選択標本 (\(s = 1\)) での条件付き期待値 [17.48]: \[E(y|\mathbf{z}, s=1) = \mathbf{x\beta} + \rho\lambda(\mathbf{z\gamma})\]

逆ミルズ比: \(\lambda(\mathbf{z\gamma}) = \phi(\mathbf{z\gamma})/\Phi(\mathbf{z\gamma})\)

Heckit法の手順

選択方程式のプロビットモデル [17.49]: \[P(s=1|\mathbf{z}) = \Phi(\mathbf{z\gamma})\]

2段階推定(Heckman, 1976):

  1. \(n\) 観測でプロビット \(s_i\) on \(\mathbf{z}_i\) を推定 \(\quad\Rightarrow\hat{\boldsymbol{\gamma}} \Rightarrow \hat{\lambda}_i = \lambda(\mathbf{z}_i\hat{\boldsymbol{\gamma}})\)

  2. 選択サンプル(\(s_i = 1\))で回帰 [17.50]: \[y_i \text{ on } \mathbf{x}_i,\, \hat{\lambda}_i\]

例17.5: 既婚女性の賃金提示方程式 (MROZ)

例17.5: Heckit推定(手動実装)

data(mroz)
# Step 1: 選択方程式のプロビット(全753人)
sel_probit <- glm(inlf ~ nwifeinc + educ + exper + expersq +
                    age + kidslt6 + kidsge6,
                  data = mroz, family = binomial(link = "probit"))
# 逆ミルズ比の計算
zg_hat <- predict(sel_probit, type = "link")
imr    <- dnorm(zg_hat) / pnorm(zg_hat)
# Step 2: 選択サンプル(就業者428人)でのOLS
mroz_work <- subset(mroz, inlf == 1)
imr_work  <- imr[mroz$inlf == 1]
res_heckit <- lm(lwage ~ educ + exper + expersq + imr_work,
                 data = mroz_work)

例17.5: OLS vs Heckit(表17.7)

# OLS(選択サンプルのみ)
res_ols175 <- lm(lwage ~ educ + exper + expersq, data = mroz_work)
# 係数比較
ols_vec <- c(coef(res_ols175), lambda = NA)
hec_vec <- coef(res_heckit)
names(hec_vec)[5] <- "lambda"
round(cbind(OLS = ols_vec, Heckit = hec_vec), 4)
##                 OLS  Heckit
## (Intercept) -0.5220 -0.5781
## educ         0.1075  0.1091
## exper        0.0416  0.0439
## expersq     -0.0008 -0.0009
## lambda           NA  0.0323

例17.5: 選択バイアスの検定

# λ_hat の係数(H0: rho = 0 の検定)
round(summary(res_heckit)$coefficients["imr_work", ], 4)
##   Estimate Std. Error    t value   Pr(>|t|) 
##     0.0323     0.1344     0.2401     0.8104

まとめ

第17章のまとめ

モデル 状況 推定法 R関数
ロジット 二値応答 MLE glm(..., family=binomial("logit"))
プロビット 二値応答 MLE glm(..., family=binomial("probit"))
Tobit コーナー解 MLE AER::tobit(..., left=0)
ポアソン カウント変数 QMLE glm(..., family=poisson)
打ち切り回帰 打ち切りデータ MLE survival::survreg()
Heckit 標本選択修正 2段階 手動: プロビット + OLS

まとめ(続き)