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