小さな形状パラメータ検討ような、0近傍αは= 1 / 100。0との間の範囲のα、E - αは、およそ1ガンマPDFが約あるので、X α - 1つの D X / Γ (α )。これはおおよそのCDFに統合することができ、F α(X )= X ααα=1/100αe−α1xα−1dx/Γ(α)。それを逆にすると、1/αのべき乗、つまり巨大な指数が見られます。以下のためにα=1/100これは、(倍精度値未満アンダーフローのいくつかの機会原因10-300、多かれ少なかれ)。以下は、αの10を底とする対数の関数としてアンダーフローが発生する可能性のプロットです。Fα(x)=xααΓ(α)1/αα=1/10010−300α
1つの解決策は、log(Gamma)変量を生成するためにこの近似を活用することです。実際には、Gamma変量を生成しようとし、小さすぎる場合は、この近似電力分布から対数を生成します(以下を参照)。(これが元のアンダーフロー変量の有効な代替となるように、ログがアンダーフロー範囲内になるまでこれを繰り返します。)ディリクレ計算では、各ログ値からすべての対数の最大値を減算します。ガンマが変化するため、ディリクレ値に影響しません。結果のログが小さすぎる(たとえば、-100未満)場合は、真のゼロのログとして扱います。他のログを累乗します。これで、アンダーフローなしで続行できます。
これには以前よりもさらに時間がかかりますが、少なくとも機能します!
形状パラメーターを使用して近似の対数ガンマ変量を生成するには、C = log (Γ (α ))+ log (α )を事前計算します。log Gammaの値を直接計算するアルゴリズムがあるため、これは簡単です。0〜1の一様なランダムフロートを生成し、その対数を取り、αで除算し、それにCを追加します。αC=log(Γ(α))+log(α)αC
スケールパラメーターは変量を再スケーリングするだけなので、これらの手順で変数を調整しても問題はありません。すべてのスケールパラメーターが同じである場合でも必要ありません。
編集
別の回答では、OP は、一様変量(B (α )変量)の乗にΓ (α + 1 )変量を掛ける方法を説明しています。この作品これら二つの同時分布のPDFに等しい変量ので( α X α - 1)(Y α E - Y次元Y / Γ (α + 1 ))。z = x yの pdfを見つけるには1/αB(α)Γ(α+1)(αxα−1)(yαe−ydy/Γ(α+1))z=xy我々は置換ヤコビアンによって、分割をX、及びアウト統合Xを。積分マスト範囲Zへ∞ため0 ≤ Y ≤ 1、そこy→z/xxxz∞0≤y≤1
pdf(z)=αΓ(α+1)∫∞z(xα/x)e−x(z/x)α−1dxdz=1Γ(α)zα−1e−zdz,
これは、分布の確率密度関数です。Γ(α)
全体のポイントは、場合、Γ (α + 1 )から引き出された値はアンダーフローする可能性が低く、そのログと独立した一様変量のログの1 / α倍を合計することにより、Γ (α )変量。ログは非常に負の値になる可能性がありますが、浮動小数点表現でアンダーフローするアンチログの構築をバイパスします。0<α<1Γ(α+1)1/αΓ(α)