これは、打ち切られた正規分布と呼ばれます。
http://en.wikipedia.org/wiki/Truncated_normal_distribution
クリスチャンロバートは、さまざまな状況(切り捨てポイントの場所に応じて異なるものを使用)でそれを行うためのアプローチについて、次のように書いています。
ロバート、CP(1995)「切り捨てられた正規変数のシミュレーション」、
Statistics and Computing、Volume 5、Issue 2、June、pp 121-125
http://arxiv.org/abs/0907.4010で入手可能な論文
ここでは、さまざまな切り捨てポイントに関するさまざまなアイデアについて説明します。これらに何らかの方法でアプローチする方法はこれだけではありませんが、通常はかなり優れたパフォーマンスを発揮します。さまざまな切り捨てポイントを使用して、さまざまな切り捨てられた法線を実行する場合は、これが合理的なアプローチです。ご指摘のとおり、これmsm::tnorm
はRobertのアプローチに基づいており、truncnorm::truncnorm
Geweke(1991)の受け入れ拒否サンプラーを実装しています。これは、ロバートの論文のアプローチに関連しています。msm::tnorm
通常のR
方法で密度、累積分布関数、分位数(逆累積分布関数)関数が含まれていることに注意してください。
アプローチに関する古いリファレンスは、Luc Devroyeの本です。それが絶版になったので、彼は著作権を取り戻し、ダウンロードとして利用可能にしました。
特定の例は、1で切り捨てられた標準の法線をサンプリングするのと同じです(が切り捨てポイントの場合)、結果をスケーリングします(乗算でと追加)。t(T - μ )/ σ= (5 − 3 )/ 2 = 1σμ
その特定のケースでは、ロバートはあなたのアイデア(2番目または3番目の化身)は非常に合理的であると示唆しています。許容値は約84%の時間で得られるため、平均で約法線を生成します(ベクトル化アルゴリズムを使用して十分な値を生成できるように範囲を計算して、時間の99.5%を生成し、時々生成することができます。最後のいくつかはあまり効率的ではありません-一度に1つでも)。1.19 n
ここでRコードの実装についての議論もあります(Rccpでは同じ質問に対する別の回答ですが、実際のRコードの方が高速です)。そこでのプレーンなRコードは6ミリ秒で50000の切り捨てられた法線を生成しますが、その特定の切り捨てられた法線は極端な尾部をカットするだけなので、より実質的な切り捨ては結果が遅いことを意味します。これは、生成する必要のある数を計算して、「十分すぎる」ことをほぼ確実にするために、「多すぎ」を生成するという考えを実装しています。
特定の種類の切り詰められた法線が何度も必要な場合は、おそらく問題にzigguratメソッドのバージョンまたは類似のバージョンを適応させることを検討します。
実際、ニコラスショパンはそれを既に実行したように見えるので、私が発生したのは私だけではありません。
http://arxiv.org/abs/1201.6140
彼は他のいくつかのアルゴリズムについて議論し、彼のアルゴリズムの3つのバージョンの時間を他のアルゴリズムと比較して、さまざまな切り捨て点の10 ^ 8個のランダムな法線を生成します。
おそらく、当然のことながら、彼のアルゴリズムは比較的高速であることが判明しました。
論文のグラフから、最悪の切り捨てポイントで比較した最も遅いアルゴリズムでさえ、約3秒で値が生成されます-これは、そこで議論されているアルゴリズムのいずれかが合理的であれば許容できることを示唆していますうまく実装されています。108
編集:私が確信していないものはここで言及されています(しかしおそらくリンクの1つにある)は切り捨てられたユニフォームを変換することです(ただし、切り捨ての境界内でユニフォームを生成するだけでユニフォームを切り捨てることができます) 。逆正規累積分布関数が高速である場合、これは高速かつ簡単であり、さまざまな切り捨てポイントでうまく機能します。