假设我在SymPy中定义了2个概率变量:
x = Normal('x', 0, 2)
y = 2*x + Normal('0', 3)
现在有证据表明y = 4,是否有可能定义一个遵循后验分布P(x | y = 4)的新概率变量?
简单地将2的概率分布函数相乘很容易,但是我想知道sympy是否具有直接产生概率变量的功能。
答案 0 :(得分:0)
典型的方法是将条件作为第二个参数传递而不创建新的随机符号:例如,
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))
返回16*erf(3*sqrt(2)/10)/25 + 16*erfc(3*sqrt(2)/10)/25 + 16/25
。