やったこと
- 「時系列分析と状態空間モデルの基礎 RとStanで学ぶ理論と実装」の第6部4章をPyStanで実装した
この記事の対象者
- 状態空間モデルをpythonで実装したいけど書き方が分からない!という人
- PyStanのバージョンを本記事執筆時点のもので動かしたい人
はじめに
- 本記事は私が参考にさせて頂いた元記事に、以下の2点を追加しただけの記事になります。
- 第6部4章に特化
- 2024年1月時点(記事執筆時点)のPyStanのバージョンに対応
- 元記事様:https://qiita.com/takuto512/items/1c903564691e231e1b67
- 実際に動かそうとすると、第6部4章が無い(元記事は、第6部3章と5章はあるが4章が無い)、ライブラリのバージョンが古いという理由でハマったので、勝手ながら執筆させて頂きました。
- 実装はGoogle Colabを用いて行っています。
- コードはこちらから。
https://github.com/intrinsic-motivatio-n/hayabusa-bon
実装結果
コードはgithubをご参照ください。以下のような結果になります。
応用:複雑な観測方程式を持つモデル
おまけ:実装時にハマったポイント
とにかくビルド周りでめちゃくちゃハマりました。
-
import stan
pystanではなく、stanに名前が変わっているので注意です -
import nest_asyncio
これを入れないとstanのビルドでエラーが出ます -
array[n_sample] int catch_y; // 捕獲数
stanファイルの変数の指定方法(配列を扱う場合)が変わっています。array[XXX]+型+変数名が正しいようです。 -
stm = stan.build(model, data=data_dict, random_seed=1)
ビルド時にデータやseed値を指定するようです。詳細は公式ドキュメントをご確認ください。
まとめ
- 隼本の第6部4章をpythonで実装した
- 2024年1月時点のPyStanのバージョンに対応
参考サイト
- 隼本サポートページ:https://logics-of-blue.com/tsa-ssm-book-support/
- Rとstanのコードとデータ:https://github.com/logics-of-blue/book-tsa-ssm-foundation
- 「時系列分析と状態空間モデルの基礎」(隼本)をpystanで実装してみた
https://qiita.com/takuto512/items/1c903564691e231e1b67 - PyStan公式ドキュメント:https://pystan.readthedocs.io/en/latest/