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

How to create a random variable whose parameters are themselves random variables in SymPy?

我有一个随机变量 Y,其分布为泊松分布,参数本身是一个随机变量 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 似乎没有用。

这种操作没有在 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),将所有内容明确表示为预期值。