Rの下限または上限で制約付き法線をシミュレート


9

Rを使用して制約付き正規分布からランダムデータを生成したいと思います。

たとえば、正規分布の変数をシミュレートしたいmean=3, sd= 2とします。5より大きい値はすべて同じ正規分布からリサンプリングされます。

したがって、一般的な機能については、次のことができます。

rnorm(n=100, mean=3, sd=2)

それから私はいくつかの考えを持っていました:

  • ifelseすべての値が境界内に収まるように制約されるまで繰り返すループで関数を反復します。
  • 必要以上に多くの値をシミュレートしn、制約を満たす最初の値を取ります。
  • ベクトル化された通常の変数シミュレーターを避け、代わりに内部のdoでforループを使用して、各観測を一度に1つずつシミュレーションし、必要に応じてループします。

上記のすべては少し不格好に見えます。

質問

  • 平均= 3、sd = 2、最大= 5の法線からRの制約付きランダム正規変数をシミュレートする簡単な方法は何ですか?
  • より一般的には、Rのシミュレートされた変数に制約を組み込む一般的な方法は何ですか

1
切り捨てられた正規分布(5で切り捨て)からランダムデータを生成したいと思います。
vinux 2013

回答:


13

これは、打ち切られた正規分布と呼ばれます。

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::truncnormGeweke(1991)の受け入れ拒否サンプラーを実装しています。これは、ロバートの論文のアプローチに関連しています。msm::tnorm通常のR方法で密度、累積分布関数、分位数(逆累積分布関数)関数が含まれていることに注意してください。

アプローチに関する古いリファレンスは、Luc Devroyeの本です。それが絶版になったので、彼は著作権を取り戻し、ダウンロードとして利用可能にしました。

特定の例は、1で切り捨てられた標準の法線をサンプリングするのと同じです(が切り捨てポイントの場合)、結果をスケーリングします(乗算でと追加)。ttμ/σ=5/2=1σμ

その特定のケースでは、ロバートはあなたのアイデア(2番目または3番目の化身)は非常に合理的であると示唆しています。許容値は約84%の時間で得られるため、平均で約法線を生成します(ベクトル化アルゴリズムを使用して十分な値を生成できるように範囲を計算して、時間の99.5%を生成し、時々生成することができます。最後のいくつかはあまり効率的ではありません-一度に1つでも)。1.19

ここでRコードの実装についての議論もあります(Rccpでは同じ質問に対する別の回答ですが、実際のRコードの方が高速です)。そこでのプレーンなRコードは6ミリ秒で50000の切り捨てられた法線を生成しますが、その特定の切り捨てられた法線は極端な尾部をカットするだけなので、より実質的な切り捨ては結果が遅いことを意味します。これは、生成する必要のある数を計算して、「十分すぎる」ことをほぼ確実にするために、「多すぎ」を生成するという考えを実装しています。

特定の種類の切り詰められた法線が何度も必要な場合は、おそらく問題にzigguratメソッドのバージョンまたは類似のバージョンを適応させることを検討します。

実際、ニコラスショパンはそれを既に実行したように見えるので、私が発生したのは私だけではありません。

http://arxiv.org/abs/1201.6140

彼は他のいくつかのアルゴリズムについて議論し、彼のアルゴリズムの3つのバージョンの時間を他のアルゴリズムと比較して、さまざまな切り捨て点の10 ^ 8個のランダムな法線を生成します。

おそらく、当然のことながら、彼のアルゴリズムは比較的高速であることが判明しました。

論文のグラフから、最悪の切り捨てポイントで比較した最も遅いアルゴリズムでさえ、約3秒で値が生成されます-これは、そこで議論されているアルゴリズムのいずれかが合理的であれば許容できることを示唆していますうまく実装されています。108

編集:私が確信していないものはここで言及されています(しかしおそらくリンクの1つにある)は切り捨てられたユニフォームを変換することです(ただし、切り捨ての境界内でユニフォームを生成するだけでユニフォームを切り捨てることができます) 。逆正規累積分布関数が高速である場合、これは高速かつ簡単であり、さまざまな切り捨てポイントでうまく機能します。


10

@glen_bのリファレンスに続き、R実装のみに焦点を当てています。切り捨てられた正規分布からサンプリングするように設計された関数がいくつかあります。

  • rtruncnorm(100, a=-Inf, b=5, mean=3, sd=2)truncnorm
  • rtnorm(100, 3, 2, upper=5)msm

それをありがとう。(次のパッケージを追跡し、メンションを編集する予定でした。以前にそのようなパッケージをいくつか見たことがありますが、それらの名前は思い出せませんでした。そこで、しばらく時間を節約できました。)
Glen_b -Reinstate Monica

答えてくれてありがとう。さまざまなアルゴリズムに関するより広範な概念資料への参照があることは素晴らしいことです。
Jeromy Anglim 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.