変数の型

Stan の変数は基本的に実数か整数かの 2 つの型で表す。実数を束ねたものとして、ベクトル型や行列型なども用意されている。

実数・整数型

実数型は real、整数型は int で変数の宣言を行う。

real x;変数 x を実数として使う。
int n変数 n を整数として使う。

変数の宣言とともに、変数の取りうる値の範囲も指定できる。具体的には、最小値は lower、最大値は upper で範囲を指定できる。

real<lower=-0.5> x;変数 x を -0.5 以上の実数として使う。
real<upper=0.5> x;変数 x を 0.5 以下の実数として使う。
real<lower=-0.5, upper=0.5> x;変数 x を -0.5 以上かつ 0.5 以下の実数として使う。
int<lower=-5> x;変数 x を -5 以上の整数として使う。
int<upper=5> x;変数 x を 5 以下の整数として使う。
int<lower=-5, upper=5> x;変数 x を -5 以上かつ 5 以下の整数として使う。

ベクトル・行列型

Stan では、複数の実数を束ねてベクトルとして扱うために、ベクトル型が用意されている。また、複数のベクトルを束ねて行列として扱うために、行列型も用意されている。

vector[10] x;変数 x を 10 個の要素をもつ実数ベクトルとして使う。
matrix[5, 20] x変数 x を 5 行 20 列の実数行列として使う。

ベクトル型と行列型を使用する際に、ベクトルの要素数や行列の行数と列数を予め指定する必要がある。上の表のように定数として書き込む方法のほかに、例えば data ブロックで、ベクトル型のデータを宣言するには、次のようにして、ベクトルとともにその要素数も宣言しておく方法もある。

data {
    int n;
    vector x[n];
}

行列についても同じように変数宣言することができる。

data {
    int n;
    int m;
    matrix x[n, m];
}

その他の変数型

上で紹介した実数、整数、ベクトルおよび行列以外にも多くの変数型が定義されている。定義されている変数型は Stan リファレンスマニュアルに詳しく書かれている。