2017-07-21 7 views
2

私はどうすれば自動的にXとYの間の共分散を計算するSymPyを使用することができ、パラメータ10SymPyでパラメータがランダム変数であるランダム変数を作成する方法は?

とその分布ポアソン分布であるパラメータを持つポアソンである確率変数X、自分自身である確率変数Yを持っていますか? コード

from sympy.stats import * 
x1 = Poisson("x1", 3) 
x2 = Poisson("x2", x1) 
print(covariance(x2,x1)) 

がエラー ValueError: Lambda must be positive を上げるドキュメントでは、この問題について私には明確ではない、と機能givenで遊んでは動作していないようでした。

+0

最新のSymPyバージョン(1.1)では、陽性要件が削除されました。しかし、そのような多変量ランダム変数の扱いはまだサポートされていません。 –

答えて

2

このような操作は、SymPyでは実装されていません。しかし、分布のパラメータには記号(下のz1)を渡すことができます。計算の最初のステップの後、z1をx1に置き換えて期待値を取る。

from sympy import Symbol 
from sympy.stats import Poisson, E 
z1 = Symbol("z1") 
x1 = Poisson("x1", 3) 
x2 = Poisson("x2", z1) 
Ex2 = E(E(x2).subs(z1, x1)) 
Vx2 = E(E((x2-Ex2)**2).subs(z1, x1)) 
cov = E(E((z1-E(x1))*(x2-Ex2)).subs(z1, x1)) 
print("E(x2) = {}, var(x2) = {}, cov(x1, x2) = {}".format(Ex2, Vx2, cov)) 

出力:

E(x2) = 3, var(x2) = 6, cov(x1, x2) = 3 

お知らせ分散と共分散のための式でEx2の代わりE(x2)の外観。 E(x2)を使用すると、E(x2)がz1を含む式であるため、誤った結果になります。同じ理由で、私はvarianceまたはcovariance関数を使用していません(正しい値3の代わりに変数E(x2)が必要です)。すべてを明示的に期待値として表現しています。

+0

このトリックは役に立たない。 SymPyバージョン1.1では、コード生成が緩和されているため、オブジェクトを置換せずに作成できます。 –

+3

あなた自身の便利な答えを投稿してください。 (私はバージョン1.1を使用していますが、置換なしでは結果は "ValueError:Overlapping Random Variables"になります) – FTP

+0

試行数も2項分布、つまり確率0.5の2項分布についてはどうでしょうか?上記は、この場合は正しく動作していないように見えます。二項演算に正の要件があるので、エラー「TypeError:シンボルをintに変換できません」が生成されます。 – Emolga

関連する問題