2023年11月9日木曜日

Pythonで状態空間モデル・カルマンフィルタ

 
前のブログで、島田さんのサンプルコードのうち、ARモデルのstatsmodelsのAR()はv0.12で削除されたので、代わりにAuroReg()を使うように修正するという話をまとめてました(まとめていたことを忘れていましたw)。
VARモデルや単位根検定、グレンジャー因果、状態空間モデルのうち線形ガウス型モデルのところまで、サンプルコードがほぼそのままで動くことを確認しました。非線形非ガウス型モデルの粒子フィルタのところはまだ確認していないです。

サンプルコードのうち、web上のデータを取得するところはweb上にすでにそのページが無くなっていることがあるので、そこは修正する必要があります。状態空間モデルのサンプルで使われているデータは以下のリンク先でダウンロードできるので、ダウンロードしたcsvファイルをpcの任意の場所に保存してread_csvで読み込むように修正しました。

AirPassengers.csv

それから『時系列解析』のP111の脚注にあるように、scipy.optimizeモジュールのminimize関数を利用して状態空間モデルのパラメータを最適化するときに"masked arrays are not supported"というエラーが発生するので、以下のリンク先を参考に、pykalmanのフォルダの中の"utils.py"というファイルの73行目を以下のように修正すると、ちゃんと動きました。

pykalmanの修正


私の場合、AnacondaのJupyter Notebookからpip install pykalmanでpykalmanをインストールしたので、pykalmanのutils.pyのファイルの場所はanaconda3/Lib/site-packages/pykalmanの中でした。

〈AR成分付き季節調整モデルによる長期予測〉