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))
Output:
E(x2) = 3, var(x2) = 6, cov(x1, x2) = 3
注意外观Ex2
代替E(x2)
在方差和协方差的公式中。使用E(x2)
这里会给出不正确的结果,因为E(x2)
是涉及 z1 的表达式。出于同样的原因我不使用variance
or covariance
函数(因为它们涉及变量E(x2)
而不是正确的值 3),将所有内容明确表达为期望值。