我有一个随机变量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
似乎没有用。
答案 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的表达式。出于同样的原因,我没有使用variance
或covariance
函数(因为它们涉及变量E(x2)
而不是正确的值3),将所有内容明确表示为期望值。