文書の過去の版を表示しています。


Stan

Stanは次のような仕組みを持つソフトウェアである。

  1. Stan言語を用いて事前分布とモデルの設定を与えると、ハミルトニアンモンテカルロ法に基づいて事後分布に従う乱数を発生させるC++コードを生成する。
  2. 生成したコードをコンパイルすると、予め用意されていたライブラリを用いて実行できるバイナリができあがる。
  3. これにデータを与えて実行すると、事後分布に従う疑似乱数列を出力する。

出力されるのは疑似乱数列のデータである。たとえば平均やメディアンを計算したり、ヒストグラムを描くなど、データの扱いにまた別のソフトウェアを必要とするため、通常はRやPythonなどの環境を通して用いられる。

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というファイルに保存する。