QRKalmanFilterR
(時系列解析に興味がない方、申し訳ありません)
QR分解だけ使用する平方根カルマンフィルタ(Square root Kalman Filter using only QR decompositions)のR実装について
時系列解析・状態空間モデルでよく用いられる状態推定アルゴリズムとしてカルマンフィルタがあります。カルマンフィルタは線形代数(行列とベクトル)だけで書くことができ、とても実装が簡単な状態推定アルゴリズムですが、(スタンダードな定式化だと)カルマンゲインの計算に逆行列が必要となり、大規模なモデルの場合、計算負荷や誤差が大きくなるなどの課題があることが知られています。
また、定義上、状態の共分散行列(分散・共分散行列)はpositive semi-definite(正半定値)でなければならないのですが、複雑なモデルや観測誤差が極めて小さいモデルを推定すると(共分散行列の要素に)マイナスの値が出てしまうなどの問題も知られています。
その問題を解決するために平方根カルマンフィルタが1960年代から知られているのですが、ハウスホルダー変換(など)が必要になり、実装が案外面倒です(私が頭が悪くてやりたくないだけかもしれませんが・・・)。
最近、Twitter(現X)で「QR分解だけ使用する平方根カルマンフィルタ」が話題になり、「QR分解だけでできるなんてお得だ」と思ったので、Rで実装してみました(提案者のTracyさんはJuliaを使っています)。
https://github.com/koiti-yano/QRKalmanFilterR
簡単にアルゴリズムの概要をQuartoで書いてPDFにしてみました(これから少しずつ充実させます)。
https://github.com/koiti-yano/QRKalmanFilterR/blob/main/tools/square_root_kalman_filter.pdf
寿司.iconNONONOexe.icon