やったこと
- 「時系列分析と状態空間モデルの基礎 RとStanで学ぶ理論と実装」のstanの章のコードをpystanを用いて実装した
この記事の対象者
- 時系列分析を知りたくて隼本を読んだけどpythonしかわからない!pythonで書いてくれ!という人
はじめに
時系列分析の入門書で調べると必ず出てくるのが「時系列分析と状態空間モデルの基礎 RとStanで学ぶ理論と実装」,いわゆる隼本です。
この本では,「ARモデル,MAモデルといった時系列分析」,「ガウス線形状態空間モデル」「ベイズ推定による状態空間モデル」について非常に噛み砕いて説明されています。
本の中で使用されているのはR言語とstan言語であり,pythonしか使えない筆者のような人間にとってはそれが少し痛手です。
しかし,pythonでもstanを使用することも可能なので,本で紹介されていることと同じことが実装可能です。
そこで実際にpythonを用いて,隼本のstanによるベイズ推定を実装したので紹介します。
実装はgoogle colabを用いて行っています。google colabではpystanがimportするのみで使用可能です。つまり初期設定がいりません,非常に便利です。
コードはこちらから。
https://github.com/nakanakana12/hayabusa-bon
実装結果
コードはgithubを参照していただくとして,ここでは簡単に結果のみを紹介します。
Stanによるローカルレベルモデルの推定
ローカルレベルモデル(ランダムウォークにノイズが加わったもの)の状態空間を推定した結果が下記になります。
青が状態,オレンジが観測値です。stanを用いて推定した状態の95%区間が青網になります。本のグラフと比べると正しく実装できていそうです。
応用:複雑な観察方程式を持つモデル
次の章では,もう少し複雑な方程式をモデリングしています。
青線が観測値,オレンジ線が過程誤差がない場合の値になります。こちらも正しく実装できています。
まとめ
- 隼本のstan部分をpythonを用いて実装した。
- 本の結果と比較して正しく実装できていそうなことを確認した。
少しでも皆さんの役に立てれば幸いです。