「時系列分析と状態空間モデルの基礎」(隼本)をpystanで実装してみた


やったこと

  • 「時系列分析と状態空間モデルの基礎 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を用いて実装した。
  • 本の結果と比較して正しく実装できていそうなことを確認した。

少しでも皆さんの役に立てれば幸いです。

参考サイト