差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
stan [2018/04/18 18:02] – watalu | stan [2018/04/18 19:37] (現在) – watalu | ||
---|---|---|---|
行 3: | 行 3: | ||
Stanは次のような仕組みを持つソフトウェアである。 | Stanは次のような仕組みを持つソフトウェアである。 | ||
- | - Stan言語を用いて事前分布とモデルの設定を与えると、ハミルトニアンモンテカルロ法に基づいて事後分布に従う乱数を発生させるC++コードを生成する。 | + | - [[:: |
- 生成したコードをコンパイルすると、予め用意されていたライブラリを用いて実行できるバイナリができあがる。 | - 生成したコードをコンパイルすると、予め用意されていたライブラリを用いて実行できるバイナリができあがる。 | ||
- これにデータを与えて実行すると、事後分布に従う疑似乱数列を出力する。 | - これにデータを与えて実行すると、事後分布に従う疑似乱数列を出力する。 | ||
行 9: | 行 9: | ||
出力されるのは疑似乱数列のデータである。たとえば平均やメディアンを計算したり、ヒストグラムを描くなど、データの扱いにまた別のソフトウェアを必要とするため、通常はRやPythonなどの環境を通して用いられる。 | 出力されるのは疑似乱数列のデータである。たとえば平均やメディアンを計算したり、ヒストグラムを描くなど、データの扱いにまた別のソフトウェアを必要とするため、通常はRやPythonなどの環境を通して用いられる。 | ||
- | === Stanモデリング言語 === | + | ここでは、[[::stan:r|Rを通じてStanを利用する]]ことにする。 |
- | + | ||
- | Stanのための事前分布やモデルの記述には、[[https://stan-ja.github.io/ | + | |
- | + | ||
- | Stanのコードは、幾つかの宣言ブロックからなるという構造を持つ。各ブロックは接頭語と中括弧{}で区切られる。主なブロックはdata、parameters、modelの3種類である。dataブロックとparametersブロックはそれぞれ、データとパラメータの変数型を定義する。dataブロックに観測値を記すこともできるが、新たな観測値を得る都度、コンパイルし直すことになるため、あまり推奨されない。modelブロックに、事前分布やデータのモデルを指定する。 | + | |
- | + | ||
- | 例えば平坦なベータ分布を事前分布とし、二項分布から1回の観測値を得る場合のStanのための記述は次のようになる。 | + | |
- | + | ||
- | < | + | |
- | data{ // データの宣言 | + | |
- | int x; // 観測された成功回数 | + | |
- | Int n; // 試行回数 | + | |
- | } | + | |
- | parameters{ | + | |
- | real< | + | |
- | } | + | |
- | model{ | + | |
- | p ~ beta(1, | + | |
- | x ~ binomial(n, | + | |
- | } | + | |
- | </ | + | |
- | これらをテキストエディタで書き、binomial.stanというファイルに保存する。 | + | |