« Du & Kamakura (2012) メモ | メイン | 読了:Holmes, Ward, & Scheuerell (2014) MARSSパッケージで多変量時系列分析 »
2014年10月24日 (金)
ここんところの状態空間モデル祭りで目を通した論文から... 著者PetrisさんはRのdlmパッケージの作者で、著書の邦訳も出ている。
Petris, G., Petrone, S. (2011) State Space Models in R. Journal of Statistical Software. 41(4).
状態空間モデル用ソフトウェア特集号の記事のひとつ。この特集号の縛りで、前半はNileデータというデータセットの分析例。ご自身のdlmパッケージと、そのあとに出たKFASパッケージでの分析例を紹介しているのだけれど、KFASの仕様はその後大きく変わったようで、現時点ではあまり役に立たない。
後半では、まずdlmのウリであるベイズ流の推測について紹介。この辺、全然知らん話なのでちょっとメモしておくと...
観察データ$y_{1:n}$の下で、パラメータのベクトル$\psi$と状態系列$\alpha_{0:n}$の事後分布$\pi (\psi, \alpha_{0:n} | y_{1:n})$をベイズ推論したいわけだけど、ここで難しいのは、MCMCが事前分布やモデルにspecificになってしまい、一般的なアルゴリズムを組めない、という点。
ローカルレベルモデルのコード例を紹介。パラメータは不規則撹乱項の分散$\sigma^2_\epsilon$とレベル撹乱項の分散$\sigma^2_\xi$である。それぞれ事前分布は逆ガンマ分布と考え、dlmGibbsDIG()という関数で同時事後分布$\pi(\sigma^2_\epsilon, \sigma^2_\xi, \alpha_{0:n} | y_{1:n})$をGibbsサンプリングする。ただし、速度は遅く、主として教育用である由。
いっぽう、データとパラメータの下での状態の条件つき分布 $\pi (\alpha_{0:n} | \psi, y_{1:n})$からサンプリングするGibbsサンプラーなら一般的な形で作れる。やり方は2つあって、ひとつはForward-Filtering Backward-Sampling (FFBS)アルゴリズムというやり方、もう一つはsimulation smootherってやつ(Durbin&Koopman本に出てくる奴だ... たぶん一生理解できないだろう)。dlmパッケージはdlmBSample()という関数で前者を提供している由。なんだかわからんが、へーそうですか。
なお、オンラインでフィルタ化・予測するのに時点ごとにMCMCをやるのは現実的でない。これもいろいろやり方があるのだそうで、ひとつには、共役事前分布を使いさらにいくつか制約を受け入れれば、閉形式で解ける由。これをdiscount factors法というのだそうだ。dlmパッケージには入っていないが、別途ツールを配っている、とのこと。
最後に、介入変数を投入する例、モデルの合成の例、多変量時系列の例(KFAS)。
Petris, G. (2010) An R Package for Dynamic Linear Models. Journal of Statistical Software. 36(12).
上記論文の前年の、dlmパッケージについての紹介。ざざーっとめくっただけだけど、読了にしておく。コレスキー分解とかヘシアン行列とかいわれると、もう目が文字を受け付けなくなってしまうのですよ... なんだか洋菓子の名前みたいだなあ、お腹すいたなあ、なんて...
なお、動的線形モデルに関連するその他のパッケージとして挙げられていたのは、statパッケージのStructTS()、KalmanLike()とその仲間たち。dseパッケージ(多変量ARMAモデルなんかを扱うらしい。時間不変なモデルならおススメ、とのこと)。sspirパッケージ(調べてみたらCRANから消えていた)。
論文:データ解析(-2014) - 読了: Petris & Petrone (2011), Petris (2010) dlmパッケージとそのライバルたち