えーっと、MARSSのモデルは下記の通り。観察変数を$n$本とする。$d_t$は外生変数で、それぞれ$p$本、$q$本。$d_t$には許さない。章末に他のソフトの紹介が載っている。著者ら曰く、MARSSパッケージは速度を最適化してない、特に時点数が多いときには堪忍な、とのこと。MARSS()関数である。3章は著者らが開発したEMアルゴリズムの説明(パス!)。4章がたぶんいちばん大事な章で、MARSS()に対するデータとモデルの渡し方。このパッケージの特徴として、渡すものはすべてユーザの責任で正しくつくらないといけない。データはn行T列の横長な行列で渡す。モデルは、dlmパッケージのdlmMod*()やKFASパッケージのSSM*()のようなヘルパー関数はなくて、自分でシステム行列を書きまくりリストにして渡す必要がある。モデルの要素は行列なのだが、なかに数値と文字列を混在させたいので、list()をmatrix()で並べるのが望ましい。1)ってな風に書けってことである。MARSS()に渡すモデルにいれられる要素は以下の通り。V0を除き、すべて時間変動可能であって、そのときはarray()で渡すのだが(5.3節)、ややこしいので省略。ここでは時間不変の場合についてメモする。状態に乗せる傾き$u_t$。m行1列の行列で渡す。二本目には毎時点で定数u1が、三本目には毎時点で定数u2が加算されることになる。U="zero"というショートカット表現がある。デフォルトはU="unequal"。観察に乗せる傾き$a_t$。A="scaling"というショートカットがある。デフォルトはA="scaling"。初期状態の平均$\pi$。面白いことに、ここに変数名をつけてパラメータ扱いすることができるのである(つまり、初期状態の事前分布次第で結果が変わってきちゃうよね、という議論を回避できるわけだ)。デフォルトはよくわかんないんだけど(4.5節にはx0じゃなくてpiって書いてある...)、たぶんx0="unequal"だと思う。状態撹乱項の分散行列$Q_t$。m行m列の行列を渡す。"sb"))というような書き方をしてはいけないということ。"sb")とするのはオッケー。