MCMC サンプリングの練習をしよう。
Stan を使う。実行環境は Google Colab 、よってローカル環境でのセットアップは一切不要。
ここにノートブックがある。
モデル定義
シンプルにただのベータ分布からサンプリングするだけをやってみよう。
data {
real<lower=0> alpha;
real<lower=0> beta;
}
parameters {
real<lower=0, upper=1> theta;
}
model {
theta ~ beta(alpha, beta);
}
やってることは だけ。この
をサンプリングして評価すればいい。
サンプリング実行
モデルをコンパイルしてサンプリングを実行しよう。
beta_model = CmdStanModel(stan_file=str(model_path)) fit = beta_model.sample( data={"alpha": 2.0, "beta": 5.0}, chains=8, parallel_chains=8, iter_warmup=1000, iter_sampling=10000, seed=20250815 )
として
からサンプリングする。
8並列で10,000個ずつサンプルを取る。最初の1,000個はバーンインとして捨てる。最終的に80,000個のサンプルが得られる。
サンプリング結果
得られたサンプルでヒストグラムを描いてみよう。

いい感じにフィットして見える。
サンプルから統計量を推測する
得られたサンプルから標本平均, 標本標準偏差を計算すると、真の平均や真の標準偏差を推測できる。
summ = fit.summary() print(summ.loc[["theta"], ["Mean", "StdDev", "R_hat", "ESS_bulk", "ESS_tail"]])
結果は、
| Mean (平均) | StdDev (標準偏差) | R_hat | ESS_bulk | ESS_tail | |
|---|---|---|---|---|---|
| theta | 0.284623 | 0.159601 | 1.00022 | 26463.6 | 25729.0 |
となった。
ベータ分布の平均と標準偏差の理論値は、
なのでここに を代入して比較すると、
| 平均 | 標準偏差 | |
|---|---|---|
| 理論値 | 0.285714 | 0.159718 |
| 標本からの推定 | 0.284623 | 0.159601 |
まぁまぁ良さそう。
まとめ
Google Colab は便利。Stan の文法に慣れていきたい。
私からは以上です。