Playground 2:logit需要モデルの実験室

計量経済学II(ブラウザ上でRが動きます)

作者

Kei Ikegami

重要このページの使い方
  • このページの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(動画配信サービスのプラン選択を題材に、今日の手順をゼロから自分で実装する)