ベータ分布サンプリング; Beta Distribution Sampling
概要
ベータ分布とは以下の式で表現される確率分布。閉区間[0, 1]の連続一様分布に従う\(\alpha+\beta-1\)の確率変数を大きい順に並べたとき、小さい方から\(\alpha\)番目の確率変数は形状パラメータ\(\alpha, \beta\)のベータ分布に従う。
$$f(x)=\frac{x^{\alpha-1} (1-x)^{\beta - 1}} {B (\alpha, \beta)} , \quad 0 \leq x \leq 1 $$ ここで\(B (\alpha, \beta)\)はベータ関数である。ベータ関数は簡単に言えば上式の分子の0から1の積分で、正規化定数として機能している。
ベータ分布に従う確率変数の生成には形状パラメータ\(\kappa=\alpha, \beta\)、尺度パラメータ\(\theta=1\)の2つのガンマ分布に従う確率変数を\(R_1, R_2\)としたとき、\(\frac{R_1}{R_1+R_2}\)がベータ分布に従うことを利用する。
ソースコード
namespace ExRandom.Continuous {
public class BetaRandom : Random{
readonly GammaRandom g1, g2;
public BetaRandom(MT19937 mt, double alpha = 1, double beta = 1) {
if(mt == null) {
throw new ArgumentNullException();
}
this.g1 = new GammaRandom(mt, kappa:alpha, theta:1);
this.g2 = new GammaRandom(mt, kappa:beta, theta:1);
}
public override double Next() {
double r1 = g1.Next(), r2 = g2.Next();
return r1 / Math.Max(r1 + r2, double.Epsilon);
}
}
}
関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス
ガンマ分布サンプリング