Stanモデリング言語

Stanのための事前分布やモデルの記述には、Stanモデリング言語を用いる。BUGSのモデリング言語と共通点が多いため、WinBUGSやJAGSを使ったことがある人には、かなり馴染みやすいと思われる。

Stanのコードは、幾つかの宣言ブロックからなるという構造を持つ。各ブロックは接頭語と中括弧{}で区切られる。主なブロックはdata、parameters、modelの3種類である。dataブロックとparametersブロックはそれぞれ、データとパラメータの変数型を定義する。dataブロックに観測値を記すこともできるが、新たな観測値を得る都度、コンパイルし直すことになるため、あまり推奨されない。modelブロックに、事前分布やデータのモデルを指定する。

例えば平坦なベータ分布を事前分布とし、二項分布から1回の観測値を得る場合のStanのための記述は次のようになる。

data{  // データの宣言
  int x;  // 観測された成功回数
  Int n;  // 試行回数
}
parameters{  // 未知パラメータの宣言
  real<lower=0,upper=1> p;  % pは0以上1以下の実数
}
model{  // 事前分布とモデルの宣言
  p ~ beta(1,1);  // パラメータが(1,1)のベータ分布
  x ~ binomial(n,p);  // 二項分布
}

これらをテキストエディタで書き、binomial.stanというファイルに保存する。