2011-06-29 17 views
2

2つの確率変数xとyの和の確率分布は、個々の分布の畳み込みによって与えられます。私は数値的にこれをやっているいくつかのトラブルがあります。次の例では、xとyは一様に分布し、それぞれの分布はヒストグラムとして近似されています。私の推論では、ヒストグラムは、x + yの分布を与えるために畳み込まれるべきだと言います。予想されるように次のように与え2つのヒストグラムの畳み込みを見つける

from numpy.random import uniform 
from numpy import ceil,convolve,histogram,sqrt 
from pylab import hist,plot,show 

n = 10**2 

x,y = uniform(-0.5,0.5,n),uniform(-0.5,0.5,n) 

bins = ceil(sqrt(n)) 

pdf_x = histogram(x,bins=bins,normed=True) 
pdf_y = histogram(y,bins=bins,normed=True) 

s = convolve(pdf_x[0],pdf_y[0]) 

plot(s) 
show() 

、すなわち、三角分布で

enter image description here

、。しかし、私はx値を見つける方法がわかりません。誰かがここで私を正すことができるなら、私はそれを感謝します。

+0

プロットで指定しなかった場合、 'x'の値はどのように正しいでしょうか?また、厳密に言えば、 'ヒストグラム'はあなたに 'pdf'を簡単に与えません。しかし、最初に、あなたの 'bin 'の数を' n'とみなしてください。ありがとう – eat

+0

@ eat:正しい。編集を参照してください。 – lafras

答えて

5

はまだ(より暗い詳細に向けて)に移動するために、私はさらに、このようにコードを適応:

from numpy.random import uniform 
from numpy import convolve, cumsum, histogram, linspace 

s, e, n= -0.5, 0.5, 1e3 
x, y, bins= uniform(s, e, n), uniform(s, e, n), linspace(s, e, n** .75) 
pdf_x= histogram(x, normed= True, bins= bins)[0] 
pdf_y= histogram(y, normed= True, bins= bins)[0] 
c= convolve(pdf_x, pdf_y); c= c/ c.sum() 
bins= linspace(2* s, 2* e, len(c)) 
# a simulation 
xpy= uniform(s, e, 10* n)+ uniform(s, e, 10* n) 
c2= histogram(xpy, normed= True, bins= bins)[0]; c2= c2/ c2.sum() 

from pylab import grid, plot, show, subplot 
subplot(211), plot(bins, c) 
plot(linspace(xpy.min(), xpy.max(), len(c2)), c2, 'r'), grid(True) 
subplot(212), plot(bins, cumsum(c)), grid(True), show() 

このように、プロットにこのような何かを与える:上部がPDFを表し enter image description here を(青い線)、実際にはかなり三角形に見え、シミュレーション(赤い点)は三角形を反映しています。下の部分はCDFを表し、これも予想通りにS-カーブに従うように見えます。

+0

答えをありがとう。 [convolution](http://en.wikipedia.org/wiki/Convolution)のWikipediaの記事によれば、私は新しいxの範囲が-1から1になると期待します。それは私が苦労している部分です。 – lafras

+0

この(pdf_x = histogram(x)** [0] **)はヒストグラムのビンの「場所」を無視し、ヒストグラムをPDFに変換してから畳み込みを行います。したがって、実際のデータでは、2つのデータセットのヒストグラムが正確に同じビンを持つように「整列」されていることを確認してから(これを実行する前に、 'bins = bins'引数を使用してください)。重複していないギャップやマージンをゼロカウント(空のビン)で埋めるでしょう。そうしないと、結果として得られるPDF(およびCDF)は、S曲線や三角形のように見えますが、間違っています。 – hobs

関連する問題