在 SymPy 中,如何计算后验概率?

In SymPy, how to calculate posterior probability?

假设我在 SymPy 中定义了 2 个概率变量:

x = Normal('x', 0, 2)
y = 2*x + Normal('0', 3)

现在给出 y = 4 的证据,是否可以定义一个遵循后验分布 P(x | y=4) 的新概率变量?

简单的乘以2的概率分布函数很简单,但是不知道sympy有没有直接产生概率变量的功能

典型的方法是将条件作为第二个参数传递而不创建新的随机符号:例如,

density(x, Eq(y, 4))    # Lambda(x, 5*sqrt(2)*exp(8/25)*exp(-x**2/8)*exp(-2*(-x + 2)**2/9)/(12*sqrt(pi)))
P(x > 0, Eq(y, 4))      # -erfc(8*sqrt(2)/15)/2 + 1

但也可以使用 ContinuousRV:

创建具有自定义密度的随机变量
from sympy.stats import ContinuousRV
x_post = Symbol("x_post")
X_post = ContinuousRV(x_post, density(x, Eq(y, 4))(x_post))

例如,simplify(E(X_post)) returns 16*erf(3*sqrt(2)/10)/25 + 16*erfc(3*sqrt(2)/10)/25 + 16/25.