Playground 1:予測と因果の実験室
計量経済学II(ブラウザ上でRが動きます)
- このページのRコードは、あなたのブラウザの中で動いている(WebAssembly + webR)。インストールは一切不要。
- 初回だけ、ページ読み込みに30秒〜1分かかる(R本体とパッケージのダウンロード)。2回目以降はキャッシュで速くなる。
- 各セルのコードは自由に書き換えて「Run Code」で実行できる。何をどう壊しても誰にも迷惑はかからない。おかしくなったらページを再読み込みすれば元に戻る。
- 元ネタは講義ノート(
lecture1.html)。ここでは「数値をいじって挙動を体感する」ことに集中する。
実験1:交絡の強さと素朴OLSのバイアス
講義ノートのシミュレーション1、「広告費と売上の罠」の世界だ。地力(quality)の強い店舗ほど本部が広告費を多く配分し、地力はそれ自体が売上を押し上げる。交絡のツマミは2つある。quality→広告費の conf_strength(ノートでは30)と、quality→売上の beta_quality(ノートでは0.4)だ。真の広告効果は 0.002 しかない。qualityを見ない素朴なOLSの係数が真値の数倍に膨らみ、quality込みのOLSが真値のすぐ近くに戻ることを、表で確かめよう。
conf_strength <- 0(本部が地力と無関係に予算を配る世界)にすると、素朴OLSの係数は真値0.002にほぼ一致するか。予想してから実行しよう。beta_quality <- 0.8(地力の売上への効果を2倍)にすると、素朴OLSの係数はどれくらい膨らむか。広告の真の効果は何ひとつ変わっていないのに、である。- このバイアスは、データを増やせば消える種類の問題だろうか。予想してから
n_storesを10倍にして確かめ、「識別の問題」と「推定精度の問題」の違いを自分の言葉で説明してみよう。
実験2:価格の内生性 — 販売数量の弾力性の符号が逆転する瞬間
講義ノートのシミュレーション2、「値上げすると売上が増える?」の世界。繁忙期(需要ショックが大きい週)ほど店は強気の価格を付ける。その強気さが gamma_price(ノートでは0.3)だ。真の需要曲線は弾力性-1.2の右下がりなのに、log-log OLSの推定弾力性は gamma_price 次第で符号までひっくり返る。図は両対数なので、真の需要曲線もOLSの回帰直線もまっすぐな線として重なる。gamma_price を0から少しずつ上げて(あるいは0.3から少しずつ下げて)、推定値がプラスに転じる境目を探そう。境目の近くでは標本誤差が邪魔をするので、探索するときは n_weeks <- 20000 にしておくと見やすい。
gamma_price <- 0(価格設定が需要ショックと無関係な世界)にすると、推定弾力性は真の-1.2の近くに戻る。残ったズレは標本誤差なので、n_weeksを増やすとさらに-1.2に近づくことも確かめよう。phi_demand <- 1.6(需要ショックの直接効果を2倍)にすると、推定弾力性はどちら向きに、どれくらい動くか。交絡変数が需要に強く効くほど、汚染はひどくなるだろうか。- 符号がプラスに転じる境目の
gamma_priceは、あなたの予想よりずっと小さかったはずだ。価格そのものの変動の小ささ(logでsd 0.05)と見比べて、なぜこれほど僅かな交絡でOLSが壊れるのか考えてみよう。
実験3:反実仮想の乖離 — 素朴な予測はどこまで信じてよいか
実験1の世界に戻り、意思決定の言葉に翻訳する。「広告費を2倍にしたら売上は何%増えるか」という反実仮想を、(i) 真のモデルと (ii) 素朴OLSモデルの両方で計算し、その乖離を交絡の強さ \(c\)(quality→広告費の係数)の関数として描く。サンプルが大きいとき、素朴OLSの係数はおおよそ
\[ \hat{\beta}_{\mathrm{naive}} \approx \beta_{\mathrm{ad}} + \beta_{\mathrm{quality}} \times \frac{c}{c^2 + 15^2} \]
に近づく(15は広告費に入るノイズの標準偏差)。分母に \(c^2\) が入っているので、膨らみ方は単調ではない点にも注意して眺めよう。既定の設定では、真の効果はどの \(c\) でもおおむね22%前後である(店舗別の変化率を平均するため、広告費分布の分散や10万円でのクリップにより僅かには動く)。それに対し、素朴OLSに基づく予測は大きく暴走する。表の gap_pp 列が、%ポイントで測った両者の乖離だ。
conf_grid <- seq(0, 5, by = 0.5)にして、弱い交絡の領域をズームしよう。乖離は \(c\) がどのあたりから「無視できない」大きさになるか。ad_multiplier <- 1.2(2割増というささやかな施策)に変えると、真の効果と乖離の大きさはそれぞれどう変わるか。- あなたが意思決定者なら、素朴OLSの予測を使ってよいのは乖離がどこまでのときか。基準を自分で決めて(例:真の効果の±2割以内なら許容、など)、それを満たす \(c\) の範囲を表から読み取ってみよう。その範囲の狭さが、このコースで因果推論と構造モデルを学ぶ理由である。
次に読むもの
- 講義ノート本体:
lecture1.html(コース全体の見取り図と、今回の2つのシミュレーションの完全版) - coding課題:
assignment1.qmd(今回の価格弾力性シミュレーションを店舗パネルデータに拡張し、操作変数法(2SLS)で真の弾力性を回収する練習)