しきい値処理されたベータ分布を効率的にサンプリング


10

次の分布から効率的にサンプリングするにはどうすればよいですか?

xB(α,β), x>k

が大きすぎない場合、リジェクションサンプリングが最善のアプローチである可能性がありますが、kが大きい場合の処理​​方法がわかりません。おそらく、適用できる漸近近似がありますか?kk


1
明確にあなたが"であっつもりは何をクリアしていない "。切り捨てられたベータ分布を意味しますか(kで左側が切り捨てられます)?xB(α,β), x>kk
Glen_b-モニカの復活2017

@Glen_b正確に。
user1502040

5
両方の形状パラメーターが1より大きい場合、ベータ分布は対数凹型であるため、拒否サンプリングに指数関数的エンベロープを使用できます。切り捨てられた指数分布からすでにサンプリングしている切り捨てられていないベータ変量を生成する場合(これは簡単です)、この方法を適用するのは簡単です。
Scortchi-モニカの回復

回答:


14

Fp0=F(k)

UU(p0,1)X=F1(U)

XFkF1FU

U(p0,1)B(2,8)

切り捨てられた分布からの逆変換サンプリング


5
(+1)変位値関数はそれほど簡単に評価されないことに注意してください。
Scortchi-モニカを回復

1
@Scortchi aまたはbのいずれかが1または少なくとも整数の場合、それほど悪くない形式があります(ウィキペディアを参照)。そしてPythonにはscipy.special.betaincその逆があり、Rにはがありpbetaます。
Graipher '19

3
@Graipher:私は「一般的には安く」と言っておくべきでした-可能であれば、ニュートンラフソンまたは他の反復的なソリューションを避ける方が良いでしょう。(ところでそれqbetaはRの分位関数のためです。)
Scortchi-Reinstate Monica

1
@Scortchiは正しいですが、ほとんどの場合、現代のコンピュータでは、これは大きな問題ではありません。ほとんどのソフトウェアで直接利用でき、分位関数にアクセスできる場合にのみ、任意の切り捨てられた分布に一般化できるため、このアプローチもお勧めします。
Tim

1
kk

8

k

αβk1<k2

f(x)=x(α1)(1x)(β1)B(k2,α,β)B(k1,α,β)

xLxUα,β>1

g(x)=cλeλ(xxL)

を見つけるλ

λ=a1xb11x
c
c=f(x)λeλ(xxL)

ここに画像の説明を入力してください

A=c(1eλ(xUxL))
xλc

Q(x)=xa(1x)b(a+b2)xa+1[exp((b1)(xxL)1x+xL(a1)x(a1))exp((b1)(xxU)1x+xU(a1)x(a1))]

微分書くdQdxxdQdx=0

k1k2Ulog(1U)λλ

ここに画像の説明を入力してください

このアプローチの美点は、すべてのハードワークがセットアップにあることです。エンベロープ関数を定義すると、トランケートされたベータ密度の正規化定数が計算され、あとは均一なランダム変量を生成して、いくつかの単純な算術演算、ログと累乗、および比較を実行するだけです。包絡線関数を引き締めると(水平線またはより多くの指数曲線を使用して)、当然、拒否の数を減らすことができます。


1
+1いい考えです。ベータは、パラメータの値が中程度から大きい場合はほぼ正常であるため、相互の距離に応じて、ガウスエンベロープを使用する方がはるかに効率的です。
whuber

α<1β<1

1
αβ

@whuber:(1)密度が対数凹でないため、ここでエンベロープを作成するために取ったアプローチは機能しません。(2)(a)私は確かに代数関数+ログとパワー、トリガーを意味しました。私が尋ねられたら関数、そしておそらくガンマ関数さえ-私は正確な概念を持っていなかったことを告白します。(b)要点-関数の迅速な評価は、閉じた形式の関数に限定されません。
Scortchi-モニカの回復

1
α<1β<1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.