下記の
第五章~データを使ってパラメタを推定するまで(博打推定パート)
に関する手記が届いたので公開する。
第五章は、ジョジョ5部みたいなもんです。もちろん「これでうまくいくぜぇ!」と思った我々は「これでジョルノたちを倒せるwww」と敵側です。。。Backwardに解いて処刑用BGMをいいタイミングで流しましょう。
「構造推定は大変」なのは外生変数所与の内生変数の分布を均衡モデルで完全に説明しようという狂気を孕んでいるから。誘導型の場合は結局のところ外生変数の変化に対する内生変数の変化の1次近似を色々とみてるだけだから理論と現実のズレを見ないふりができるけど構造推定はそうではない。
— Kohei Kawaguchi (@mixingale) May 7, 2021
なので、構造推定プロジェクトの最大の難関は、いつも、数値計算で均衡が計算できるぐらいにシンプルなモデルであるという制約の下で、観察されたP(内生変数|外生変数)のうち、リサーチクエスチョン上重要な変動を捉えられるぐらいにフレキシブルなモデルを探す、という問題として現れてくる。
— Kohei Kawaguchi (@mixingale) May 7, 2021
難所1. 第四章で作ったモデルに、第二章で集めたデータを対応させるコード実装ができるか(前処理)
をどうやって対応するか。感謝の正拳突きや!!!
実際のところは、ちゃんとデータ生成過程が書かれてるモンテカルロシミュレーションコードをレプリケーションしたり書き直ししたりして土地勘を養うのがよいとおもう。構造推定に限らず、共同研究などでのコードやデータ管理や環境設定はプログラマーのプロジェクトマネジメントを参考にベストプラクティスを探すのがよいらしい。
難所2. 複数の初期値を試して、(真値は当然分からないが)reasonableなパラメタが推定できるか。
これはいわゆる「いろんな特定化を試してsweet spotを探す作業」も含まれている。構造推定で厄介なのは特定化さぐりみたいなものが、「パッケージを使って回帰でいうXの関数形や組み合わせを試してみる作業」では済まず、コードを書き直して均衡を解きなおして推定するという作業が主になる。これはコーディングと計算時間の見積もりができない。あと、理論モデルで想定していない要素は、追加修正が絶対できない(たとえば、情報完備ゲームを想定していて、情報不完備ゲームな要素を追加することは絶対できない)。
また、reasonableかどうかは理論的に解釈できるかどうかだけでなく、次章の均衡計算で現実データを再現できるかどうか、反実仮想の均衡計算結果も理論的に妥当かどうか、という複数の基準がある。想定している反実仮想に応じて、すべての基準をクリアする必要があったり、推定値の解釈基準だけクリアすればいいだけのときもある。ただここの基準が緩いと、あとのパートで自分で解釈できないところがたくさん出てくる=推定コードがおかしい、という沼にはまってしまうので、ごまかさない方がよい。
難所3. 使う推定量に応じたStandard Errorを解析的にかブートストラップなりで計算して実装できるか、現実的な時間でそれが済むか
ブートストラップなら一つの特定化したモデルに対して1000回ぐらい解かないといけない。初期値に依存する非線形なモデルなんかは一つのブートストラップしたデータに対して30回異なる初期値を試すことになる。結果表に5モデル(列)あったら、5*1000*30回は計算する必要がある。並列化しないと永遠に終わらないし、一回の計算時間はせいぜい数分で終わらないとお話にならない。最初のうちに固定費はできるだけ削ることが大事です。
ソルバーに微分情報が与えれるならば、SEが計算できるし絶対そうしましょう(Dube, Fox, Su 2012)。
この章が薄っぺらいのは、誘導系の実証研究とそれほど変わらないからなのか、経験が薄いからなのかは識別不可能です。