[17/08/05 16:26 更新]
最低限のことが出来るように、間に合わせのパッケージを修正した。このtar ballには、Perl Package、サンブルスクリプト、それに使うデータが含まれている。
AIC等を計算するための修正の他に、いくつかの修正を行なった。
read_csv
をクラス・メソッドにしたcoda
の取り扱いを変更したcoda
の解析結果を$jags->param
に反映させるようにした(制限あり)他にも細かい修正を山ほどやっている。
reg_test.pl
前回と同じことをするサンプルスクリプトをreg_test.pl
の名前で置いている。このスクリプトは、regdata.csv
のデータをreg_model.jag
のモデルで推定する。
CSVファイルの読み込みは、
my %data = Makeshift::Jags->read_csv("regdata.csv");
となる。Jags
インスタンスを作る前でもよい。返り値は、読み込まれたデータと、そのデータ点数を収めたハッシュとなる。この場合、$data{x}
が、xの値を収めた配列のリファレンスとなり、$data{N}
が、データ点数となる。
収束判定の方法は早めに指定する。ただし、収束するまで計算するつもりなら、ここでの指定は不要。
$jags->coda->diag_method("geweke");
定数の設定はdata->set
で行う。
$jags->data->set(K => 2, %data);
モデルファイルの中でデータ点数をN
にしてるからこれでよいが、別の定数名にしてると多少ややこしい。
このあと、しばらくは、前回と同じ。
実行時に$jags->run
の代わりに、$jags->run("geweke")
を使えば、Gewekeの指標で収束判定をし、収束するまで計算を繰り返す。その際、coda
の解析結果を次の初期値に利用するが、モニターされてないパラメータ(ここではtau
)は更新されず、最初の初期値のままである。よって、このモードを使うときには、フィッティングに使うパラメータを全てモニターするのがよいだろう。
coda
のインスタンスの生成は、
my $coda = $jags->coda;
といった形。チェインの番号を指定する必要は、ない。
スクリプトの最後の部分は、もとのままでもグラフを描けるのだが、新しいやり方で書いてみた。PDL
とPDL::Graphics::Gnuplot
が必要なのでコメントアウトしてるが、#
を外せば使えるはずである。フィッティング・パラメータ以外のパラータは$jags->param
に反映されないので、sigma2
だけcoda
経由になっている。
他に何ができるかは、パッケージのソースで判断してほしい。足りない部分は、自分で作ってほしい。
[次の「AICの計算」へ] [「インストール」に戻る] [「PerlとJAGSで赤池情報量基準(AIC)」に戻る] [「あえてのPerl」に戻る]