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

时间:2018-07-03 00:48:09

标签: statistics probability sympy

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

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

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

简单地将2的概率分布函数相乘很容易,但是我想知道sympy是否具有直接产生概率变量的功能。

1 个答案:

答案 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