構造推定をしたい匿名学生の実地体験ルポ (3) 「よくわからんがまぁ動いてるからヨシ!」フラグ 第三章~モデルが数値計算を通して正しく動くまで(経済学理論+数値計算パート)
ののかちゃんが構造推定のイントロ1枚目からモデルスライドを歌ってくれました
下記の
第三章~モデルが数値計算を通して正しく動くまで(経済学理論+数値計算パート)
に関する手記が届いたので公開する。
難所1. 自分の作った均衡モデルがバグなくプログラミング実装できるか、経済学理論で特徴づけされた通りの均衡数や性質が得られるか
難所2. 数値計算の解を探すアルゴリズムは適当か、縮小写像なり凸性なりで数学的に現実的なオーダーで(局所)解に収束することが示されているか。
難所3. 既存のパッケージやORや応用数学の観点から正しく定式化できて、正しくソルバー等を使えているか。初期値に依存するかどうか
をどう克服するか。これはモンテカルロシミュレーションの均衡データ生成パートをちゃんとやることで解決できる。モンテカルロシミュレーションの仕様書を経済学を知らないプログラマーにも実装できるように書いて、それ通り実装して均衡を計算してデータ発生させる。パラメタ数は最低限で!。生成したデータをプロットしてみる(需要曲線は右下がりになってるかなど)。目的関数があれば、1パラメタを動かして形を確かめる(凸性のチェックになる)。均衡計算にどれぐらい時間がかかるかも計測可能である。また1000 samples for 1000 experimentsとかどうせ反実仮想でやるので、時間がどれぐらいかかるかもここの段階である程度分かる。初期値への依存チェック、よさげな初期値の把握もこの時点でやっとくと、実データで変な初期値から始める愚行をせずにすむ。余裕があればでよいが、よさげなソルバーもこの時点でいくつか試して同じ結果が出るか確認しておく(Juliaで解けない行列がMatlabのソルバーがでは解けてることになっててバグの原因になったことがある)。「初期値をたくさん試して複数均衡か調べましたが一つしかありませんでした、だけどコードは公開しません」論文を世界から抹消しましょう。
難所4. 実装した均衡モデルは固定した真のパラメタと第二章で想定したエラーを入れたもとで正しく解けているのか
難所5. 真のパラメタを変更した時の挙動は、「事前の」理論的な解釈と(都合解釈でなく)一致しているか
をどう克服するか。これもモンテカルロシミュレーションのデータ生成パート(+エラーがあるのでちょい推定パート)をちゃんとやることで解決できる。エコノメ論文なら、ここが論文の数値計算結果を出すためのデータになる。なので、モンテカルロシミュレーションもワイできまっせ、というアピールにもなるので、学生ならちょろっとやってみるとよい気がする。これをやらないと「よくわからんがまぁ動いてるからヨシ!」な論文を見抜けずそれを追いかけて爆死するので、気を付けたし。ここで己の非力さと無力さを知ることが、デバッグ不可能な無茶モデルで死なないために重要になる。再度「初期値をたくさん試して複数均衡か調べましたが一つしかありませんでした、だけどコードは公開しません」論文を世界から抹消しましょう。二度いう。
有名な手法なのに誰もちゃんとモンテカルロシミュレーションしてないの闇すぎるし、応用しましたって論文がどう実装したのかの詳細が相変わらず全く分からない。定期
— にるそん (@ohtanilson) December 22, 2022
難所6. 現実的な速度で解き切れているか、並列化高速化できるのか
ここは計測した計算時間に依存する。計算時間が短いなら手元で回すのでよい。クラスターに投げるコードの書き方を念頭に置いておいた方がよい。この時点で高速化できる箇所を把握だけ(大幅改善はあとでよい)はしとくとよい。