Playground 2:logit需要モデルの実験室
計量経済学II(ブラウザ上でRが動きます)
重要このページの使い方
- このページのRコードは、あなたのブラウザの中で動いている(WebAssembly + webR)。インストールは一切不要。
- 初回だけ、ページ読み込みに30秒〜1分かかる(R本体とパッケージのダウンロード)。2回目以降はキャッシュで速くなる。
- 各セルのコードは自由に書き換えて「Run Code」で実行できる。何をどう壊しても誰にも迷惑はかからない。おかしくなったらページを再読み込みすれば元に戻る。
- 元ネタは講義ノート(
lecture2.html)。ここでは「数値をいじって挙動を体感する」ことに集中する。
実験1:Gumbel乱数からlogit公式が「出てくる」ことを確かめる
logit公式はどこにも書いていないのに、「Gumbelノイズ付き効用の最大値を選ぶ」だけで選択頻度が公式と一致する。\(\delta\)(各ブランドの魅力度)と\(N\)を変えて確かめよう。
ノートやってみよう
delta_true <- c(0, 0, 0)にすると4つのシェアはどうなるか。予想してから実行しよう。N <- 500に減らすと2本の棒はどれくらいズレるか。Nを増やすとどう収束していくか。- どれか1つの \(\delta\) を5にしてみよう。他のシェアは「比率を保ったまま」縮むか?(この性質が後のIIAにつながる)
実験2:最尤法の真値回収 — サンプルサイズとSEの関係
DGPの真のパラメータを自分で決め、そのデータから自作MLEが真値を取り戻せるかを見る。講義の核心「真値回収はいつでも最初にやるべき検証」を体感しよう。ここではoutsideの効用を0、Gumbel誤差のscaleを1に正規化し、さらにブランド固定のsweetnessと全ブランド切片が共線になるのを避けるためCの切片を0に固定している。最後の固定は位置正規化とは別の識別制約である。
ノートやってみよう
Nを300、3000、10000と変えて、SEがおおよそ \(1/\sqrt{N}\) で縮むことを確認しよう。alpha_price <- 0.001(価格がほぼ効かない世界)にすると、alpha_priceのSEは相対的にどうなるか。データの中の価格変動が「効用の差」をほとんど生まないとき、推定は難しくなる。- 真値が95%信頼区間から外れることもある。何度かseedを変えて(
set.seed(1)など)、だいたい20回に1回くらい外れる感覚を掴もう。 - 表のSEは、正しく特定されたiid logit尤度を前提にした逆HessianのモデルベースSEである。実データの反復選択なら同じ計算を無条件に使えない。
実験3:弾力性行列とIIA — logitの便利さと不便さ
推定はスキップして、パラメータから直接、弾力性行列 \(\eta_{jj} = -\alpha p_j (1 - s_j)\)、\(\eta_{jk} = \alpha p_k s_k\) を計算する。列を縦に見るのがポイント。
ノートやってみよう
- B列(Bの値上げの影響)を縦に見ると、AとCの相対的な増加率(交差弾力性)が完全に同じになっている。
sweetnessをどう変えてもこの一致が崩れないことを確認しよう。絶対的なシェアポイント増分は元のA・Cシェアに比例し、同じとは限らない。 theta[4](価格係数)を0.05にすると、対角(自己弾力性)はどう変わるか。- Bの価格を200にして(シェアを潰して)、B列の交差弾力性がどう変わるか見てみよう。交差弾力性は「値上げされるBの価格とシェア」だけで決まり、流入先の類似性は入らない。
実験4:収入を最大化する価格を探す
需要モデルが手に入ると、価格設定の問いに答えられる。Aの価格を動かして、シェアと収入(価格 × シェア)の曲線を描く。
ノートやってみよう
- 価格係数
theta[4]を0.01(鈍感な客)と0.05(敏感な客)にして、収入最大化価格がどう動くか比べよう。 - 競合Bが値下げ(
price_B <- 90)してきたら、Aの最適価格はどうすべきか。モデルに聞いてみよう。 - 実験2で自分が推定した
fit$thetaをここに貼れば、「推定 → 意思決定」のパイプラインが一周する。
次に読むもの
- 講義ノート本体:
lecture2.html(導出・推論・モンテカルロの完全版) - coding課題:
assignment2.qmd(動画配信サービスのプラン選択を題材に、今日の手順をゼロから自分で実装する)