Playground 13:動学的意思決定の実験室
計量経済学II(ブラウザ上でRが動きます)
- このページのRコードは、あなたのブラウザの中で動いている(WebAssembly + webR)。インストールは一切不要。
- 初回だけ、ページ読み込みに30秒〜1分かかる(R本体とパッケージのダウンロード)。2回目以降はキャッシュで速くなる。
- 各セルのコードは自由に書き換えて「Run Code」で実行できる。何をどう壊しても誰にも迷惑はかからない。おかしくなったらページを再読み込みすれば元に戻る。
- 元ネタは講義ノート(
lecture13.html)。ここでは推定はせず、「モデルを解く → 政策関数を眺める → 政策を変えて解き直す」という動学モデルの遊び方を体感することに集中する。
実験1:割引因子βと交換行動
Rust (1987) のバスエンジン交換問題を、そのまま実験台にする。状態は走行距離 \(x \in \{0, 1, \ldots, K-1\}\)(今日は \(K=20\))。毎期、維持(\(a=0\)、その期の費用は \(\theta_1 x\))か交換(\(a=1\)、費用は \(RC\)、距離は0にリセット)を選ぶ。将来まで見据えた価値(choice-specific value)は、次の Bellman 方程式で決まる:
\[ v(x, a) = u(x, a) + \beta \sum_{x'} P(x' \mid x, a) V(x') \]
\(V(x)\) は logsum(Emax)で閉じる——第2回の遺産だ。道具箱の solve_rust() がこれを価値関数反復で解き、状態ごとの交換確率(logit)を返す。断っておくと、この回の \(\beta\) は割引因子である(第2〜4回の選好パラメータの \(\beta\) とは別物)。\(\beta = 0\) の myopic な意思決定者は将来の維持費増を一切無視するので、交換がほとんど起きなくなる——はずだ。確かめよう。
betas <- c(0, 0.5, 0.9, 0.99, 0.999)にしてみよう。反復回数はどこまで伸びるか。カーブは \(\beta = 0.99\) からさらに大きく動くか。価値関数反復は縮小係数 \(\beta\) の幾何収束なので、\(\beta\) が1に近いほど収束は劇的に遅くなる。theta1 <- 0.05(維持費がゆるやかにしか増えない世界)にすると、\(\beta\) の違いによるカーブの開きは大きくなるか、小さくなるか。予想してから実行しよう。- \(\beta = 0\) のカーブは床に張り付いている。\(u(x,0) = -0.15x\) と \(u(x,1) = -8\) を見比べれば、今日の損得だけなら \(x=19\) でも維持が得(\(0.15 \times 19 = 2.85 < 8\))だからだ。では forward-looking な意思決定者は、なぜ同じ \(x=19\) で8割方交換するのか。
実験2:交換費用と政策関数
DP の解として出てくる「状態ごとの交換確率」を政策関数(policy function)と呼ぶ。深層パラメータ \((\theta_1, RC)\) を動かすと、この政策関数がどう動くか。交換費 \(RC\) を上げれば交換は割高になり、カーブは右(もっと走り込んでから交換)へずれるはずだ。破線は \(P = 0.5\) の目安で、これを初めて超える状態を「交換の閾値」として表に出す。カーブが動く余地を作るため、状態数は \(K=40\) に増やしてある。
RC_values <- c(8, 16)にして、交換費を2倍にすると閾値(表のthreshold_x)が何状態ぶん後ろにずれるか確かめよう。費用を2倍にしても、閾値は2倍にはならないはずだ。theta1 <- 0.30(維持費が急勾配な世界)にすると、カーブの位置だけでなく「立ち上がりの鋭さ」も変わる。\(RC\) を変えたときの動き方との違いを観察しよう。- \(RC\) と \(\theta_1\) は、どちらも「交換 vs 維持」の相対コストを動かすのに、政策関数への効き方が違うのはなぜか。維持費の差 \(\theta_1 x\) は状態に比例して開いていく、という点から考えてみよう。
実験3:反実仮想 — 交換費用の補助
構造モデルの配当が反実仮想だ。政府(や本社)が交換費を補助して、実効的な交換費が \((1-s) \times RC\) になる政策を考える。この政策のデータはどこにも存在しない。推定した構造・状態遷移が適切で、政策を変えても好みや技術を表すパラメータが不変だという追加仮定を置けるなら、\(RC\) を置き換えて DP を解き直し、政策後の選択と状態分布を計算できる。ただし「深層パラメータ」と名付けただけで不変性が保証されるわけではない。長期的な効果は、交換方針が誘導するマルコフ連鎖の定常分布(steady_state())から、平均交換率と平均走行距離で測る。
s_grid <- seq(0, 0.6, by = 0.05)に細かくして、セルの末尾にggplot(tab, aes(subsidy_rate, replace_rate)) + geom_line() + geom_point() + labs(x = "subsidy rate", y = "long-run replacement rate")を足すと、関係の形が一目で見える。- 補助の逆、課税も同じ道具で計算できる。
s_grid <- c(0, -0.2, -0.5)(交換費が1.2倍・1.5倍)にすると、交換率と平均走行距離は補助のときと対称に動くか。 - 補助率を0.1ずつ上げたときの交換率の増分(
replace_change_pctの差)は一定か。線形でないなら、逓増と逓減のどちらか。政府が「補助率を倍にすれば効果も倍」と見積もったら、何をどう間違えるか。
次に読むもの
- 講義ノート本体:
lecture13.html(NFXP と CCP による推定、myopic 推定の失敗、反実仮想の完全版) - coding課題:
assignment13.qmd(縮小版の Rust モデルをゼロから自分で実装し、NFXP と CCP を比較して反実仮想まで回す)