2

Xユニットが販売された範囲(高-低)しかわからないが、特定のアイテムの正確な価格がわからないデータ(毎日の株価チャートは良い例ですが、それは何でもかまいません)がある場合販売しました。簡単にするために、価格範囲には、そのような配布を実用的にするのに十分なバケットが含まれていると仮定します(たとえば、40セントの範囲では41セントの増分)。これらのアイテムを分散して、ベクトルに格納された正規ベル曲線を形成するにはどうすればよいですか?完璧である必要はありませんが、現実的です。

私の(非常に)素朴な考え方は、乱数は正規分布を形成するはずなので、バイナリRNGを持つようなことを行うことができると想定してきました。たとえば、40個のバケットがある場合、「0」が40回現れると、0番目のバケットが増分され、「1」が連続して現れると、39番目のバケットが増分されます。「1」が20回現れる場合、それはベクトルの真ん中にあります。Xユニットが考慮されるまで、アイテムごとにこれを実行します。これは正しい場合とそうでない場合があり、いずれの場合も必要以上に非効率的であるように思われます。もっと賢明なものを探しています。

これは宿題ではなく、私を悩ませてきた問題であり、私の統計は嗅ぎタバコではありません。ほとんどの文献は、すでに存在した後の分布の分析に関するもののようですが、人為的に分布を作成する方法についてはあまりありません。

私はこれをC++で書きたいので、Rやmatlabなどで事前にパッケージ化されたソリューションは私にはあまり役に立ちません。

ありがとう。これが理にかなっていることを願っています。

4

2 に答える 2

8

ほとんどの文献は、分布がすでに存在した後に分布を分析することについて書かれているようですが、人為的に分布を作成する方法についてはあまり書かれていません。

作成方法に関する文献はたくさんあります。Box–Muller 変換、Marsaglia 極法 (Box–Muller の変形)、および Ziggurat アルゴリズムの 3 つです。(これらの用語をグーグルで検索します)。どちらの Box-Muller 法も簡単に実装できます。

さらに良いことに、これらのアルゴリズムのいずれかを実装する既存の乱数発生器を使用するだけです。boost と新しい C++11 の両方にそのようなパッケージがあります。

于 2012-06-14T17:56:12.807 に答える
3

あなたが説明するアルゴリズムは、同じn分布に属する確率変数の合計として定義された確率変数が無限大になると正規分布に近づく傾向があるという中心極限定理に依存しています。コンピューター PRNG からの一様分布の疑似乱数変数は、この一般的な定理の特殊なケースになります。n

より効率的なアルゴリズムを取得するには、確率密度関数を、実軸を中央で拡張し、端まで縮小するある種のスペース ワープと見なすことができます。

F: R -> [0:1] を正規分布の累積関数、invF をその逆数、x を [0:1] 上に一様に分布する確率変数とすると、invF(x) は正規分布する確率変数になります。 .

これを実装するために必要なのは、invF(x) を計算できることだけです。残念ながら、この関数は初等関数では表現できません。実際、これは非線形微分方程式の解です。ただし、ニュートン法を使用して方程式 x = F(y) を効率的に解くことができます。

私が説明したのは逆変換法を簡略化したものです。これは非常に一般的なアプローチです。より効率的な正規分布からのサンプリング専用のアルゴリズムがあります。これらは、David Hammen の回答で言及されています。

于 2012-06-14T17:56:13.740 に答える