В SymPy, как рассчитать апостериорную вероятность? - PullRequest
0 голосов
/ 03 июля 2018

Предполагая, что я определил 2 вероятностные переменные в SymPy:

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

Теперь, учитывая, что y = 4, возможно ли определить новую переменную вероятности, которая следует за последним распределением P (x | y = 4)?

Легко просто умножить функцию распределения вероятности на 2, однако мне интересно, есть ли у sympy возможность напрямую вывести переменную вероятности.

1 Ответ

0 голосов
/ 03 июля 2018

Типичным способом является передача условий в качестве второго аргумента без создания нового случайного символа: например,

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.

...