2010-12-15 23 views
2

は、私は、次の2の確率変数があるとします。私はしたい= -42とSTDEV = 52つの正規確率変数を組み合わせる

意味Yが3.5
= = 6とSTDEVを意味

Xを最初の2つに基づいて新しい確率変数Zを作成し、Xが時間の90%、Yが時間の10%で発生することを知る。

それはZの平均を計算することは容易である:0.9 * 6 + 0.1 * -42 = 1.2

しかし、それは、単一の機能にZのためのランダムな値を生成することができますか?もちろん は、私はそれらの線に沿って何か行うことができます:

if (randIntBetween(1,10) > 1) 
    GenerateRandomNormalValue(6, 3.5); 
else 
    GenerateRandomNormalValue(-42, 5); 

をしかし、私は本当に、通常の必要はありません、このような確率変数の確率密度関数(Z)として作用する単一の機能を持っていると思います。あなたの助けのための

安っぽい擬似コードのため申し訳ありません

ありがとう!

編集:ここでは具体的な一つの質問のようになります。

のは、私たちは10を超える高い数字で終わるの確率だろう何Z.から5つのconsecutives値の結果を追加しましょうか?

+0

機能として提供したコードをラッピングする問題は何ですか?これは2つの乱数を生成し、あなたのタスクをよく実行します。何を探していますか? – unsym

+0

まあ、ここではZで表される変数(通常の変数の組み合わせ)など、多くの変数があります。私はそのような変数を最終的に組み合わせなければならないので、それらを表現する最善の方法を探しています... – ibiza

答えて

4

しかし、私は本当に、通常必要 ないよう 確率変数(Z)のための 確率密度関数として作用する 単一の機能を持っていると思います。

オーケーあなたが密度をしたい場合は、ここにある:

rho = 0.9 * density_of_x + 0.1 * density_of_y 

しかし、あなたがいない1を行う場合は、この密度から採取することはできません)そのCDF(実行不可能面倒ではなく)2を計算します)反転する(これには数値ソルバーが必要です)。または、rejection sampling(または亜種、重要度のサンプリングなど)を行うことができます。これはコストがかかり、正しく得るには面倒です。

(例えば、疑似ランダムシーケンスを使用しない)非常に強い理由がある場合を除いて、 "if"ステートメント(つまりジェネレータを3回呼び出す)に進む必要があります。

+0

ありがとう、私が質問にしたコメントを見て、結局変数を組み合わせる必要がありますそれはあなたの答えを変えるでしょうか? – ibiza

+0

@ibiza:全くありません。 –

+2

ところで、これの専門用語は「混合分布」です。あなたの分布は2つの法線の混合です。 –

0

最も簡単で一般的に適用可能な解決策は、問題をシミュレートすることです:

あなたは1,000,000(単に高い数値)を持つ区分的関数を実行する時間の、ビンにそれらを分割することによって結果(のヒストグラムを生成し、そして、あなたのN(私の例では1,000,000)によって各ビンのカウントを分ける。これは、ここで未知数の

+0

なぜ気になるのですか?これは、(正規分布を仮定して)単純な解法でよく定義された問題です。 – ja72

+0

@jalexiou、これは決定論の教科書からまっすぐに聞こえました。 0.1/0.1のbernoulli試験はここでは十分に単純ですが、既知の解決法が機能しないより複雑な条件に置き換えられることもあります。 – Assaf

0

たくさん。あらゆる与えられたビンでZのPDFのための近似であなたを残しますが、基本的にあなただけの希望します2つ(またはそれ以上)の確率関数を互いに加算する。

任意の確率関数について、確率曲線(積分)の下の面積を計算し、0とその領域の間の乱数を生成することによって、その密度で乱数を計算することができます。次に、面積が乱数と等しくなるまで曲線に沿って移動し、それをあなたの値として使用します。

このプロセスは、任意の関数(または2つ以上の関数の合計)に一般化できます。

推敲: あなたはあなたが0から1にF(X)の積分を計算することによって、分布に基づいて乱数を計算することができ0〜1の範囲分布関数f(X)を持っている場合は、

ここで、0とAの間の乱数を生成し、その番号rと呼ぶことにします。ここで、0からtまでのf(x)の積分がrに等しくなるように、値tを見つける必要があります。 tはあなたの乱数です。

このプロセスは、任意の確率密度関数f(x)に使用できます。 2つ(またはそれ以上)の確率密度関数の合計を含む。

あなたの関数がどのように見えるのか分かりません。このために解析ソリューションを計算できるかどうかはわかりませんが、悪いケースでは数値技法を使って効果を近似できます。

+0

これは有望な答えのように見えますが、私はそれの本質をつかむのが難しいです...私の理解のためにちょっと凝ってください。 – ibiza

+0

(申し訳ありません) – aepryus

+0

おそらくhttp://ja.wikipedia.org/wiki/Probability_density_functionとhttp://ja.wikipedia.org/wiki/Cumulative_distribution_functionから始まります。私はこの問題を新鮮に見ていて、解決のための数学的基礎を与えています。私はそのようなコードを実装しようとしたことは一度もありません。他の人たちが問題を直接経験しているようです。 (アレクサンドル) – aepryus

2

ランダム変数が示されている場合、X =(STDEVを意味する)、次の代数は、X =(MX、SX)、Y =(私の、SY)の場合のように

number * x = (number*mean, number*stdev) 

x1 + x2 = (mean1+mean2, sqrt(stdev1^2+stdev2^2)) 

を適用しますその他の部分についてNormal Distribution見て、項目1

PS:線形結合は

Z = w1*X + w2*Y = (w1*mx,w1*sx) + (w2*my,w2*sy) = 
    (w1*mx+w2*my, sqrt((w1*sx)^2+(w2*sy)^2)) = 
    (1.2, 3.19) 

リンクです。悪い表記には申し訳ありません。新しい標準偏差は、ピタゴラス定理に類似したものによって計算される。それは平方和の平方根です。

+0

ありがとう私はそれを見ていますが、私のケースでは、Zの標準偏差は意味がありません。なぜなら、生の結果は平均からかなり離れている可能性があるからです。私が間違っていないと、XとYの組み合わせは間違いなく正規分布していないので、Zは通常2つの変数を表す正規分布変数になりたくありませんか? – ibiza

+0

OPは通常のディストリビューションを追加していません。彼はちょうど90%-10%の重さに基づいてどちらか一方を選択しています –

2

これは、分布の形である:

ListPlot[BinCounts[Table[If[RandomReal[] < .9, 
    RandomReal[NormalDistribution[6, 3.5]], 
    RandomReal[NormalDistribution[-42, 5]]], {1000000}], {-60, 20, .1}], 
    PlotRange -> Full, DataRange -> {-60, 20}] 

alt text

あなたは通常の変数を追加することが、ちょうど一定の確率でどちらか一方を選択していないとしてそれは、正常ではありません。

これは曲線が、この分布で5 VARSを追加するためのものである

編集:

alt text

上下のピークが単独分布のいずれかを取って表し、中間のピークアカウント混合する。

+0

素敵なビジュアルタッチありがとう!これは、Z値から取った単一値のPDFです。:) PDFを取得する最良の方法は、Zから5つの連続した値を指定できますか? a.k.a:Zから5つの連続値の結果を加算したとしましょう.10を超える数で終了する確率はどのくらいですか? – ibiza

+0

@ibizaこの答えは、それを計算するための少なくとも1つの正解をすでに持っているため、配布を「視覚的に」表示しています(@ Alexandreの回答を参照)。それにもかかわらず、私は5つのvarsを追加するためのグラフを詳述します:)。 –

+0

お時間をありがとう、これは非常に有用です。だから基本的には、この関数を計算する簡単な方法はありません(2番目のグラフ)と私は私のコード内のステートメントに固執する必要があります..? – ibiza

関連する問題