如何创建一个随机变量,其参数本身就是SymPy中的随机变量?

时间:2017-07-21 12:04:29

标签: python probability sympy

我有一个随机变量Y,它的分布是Poisson,参数本身就是一个随机变量X,它是泊松参数10。

如何使用SymPy自动计算X和Y之间的协方差? 代码

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

引发错误 ValueError: Lambda must be positive 关于此事,我不清楚文档,并且使用函数given似乎没有用。

1 个答案:

答案 0 :(得分: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的表达式。出于同样的原因,我没有使用variancecovariance函数(因为它们涉及变量E(x2)而不是正确的值3),将所有内容明确表示为期望值。

相关问题