PerlとJAGSで赤池情報量基準(AIC): 間に合わせのパッケージ

[17/08/05 16:26 更新]

最低限のことが出来るように、間に合わせのパッケージを修正した。このtar ballには、Perl Package、サンブルスクリプト、それに使うデータが含まれている。

AIC等を計算するための修正の他に、いくつかの修正を行なった。

他にも細かい修正を山ほどやっている。

サンプルスクリプト 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;

といった形。チェインの番号を指定する必要は、ない。

スクリプトの最後の部分は、もとのままでもグラフを描けるのだが、新しいやり方で書いてみた。PDLPDL::Graphics::Gnuplotが必要なのでコメントアウトしてるが、#を外せば使えるはずである。フィッティング・パラメータ以外のパラータは$jags->paramに反映されないので、sigma2だけcoda経由になっている。

他に何ができるかは、パッケージのソースで判断してほしい。足りない部分は、自分で作ってほしい。

[次の「AICの計算」へ] [「インストール」に戻る] [「PerlとJAGSで赤池情報量基準(AIC)」に戻る] [「あえてのPerl」に戻る]