Поскольку это не вопрос, связанными по математике, но об использовании библиотеки делать символьные вычисления, SO лучше подходит для ответа на этом, чем {математики | Статистика} .stackexchange.comУсловная вероятность с SymPy
Я хочу использовать SymPy вычислить следующее:
Это код, я использую в SymPy
from sympy.stats import Normal, density, DiscreteUniform, P, given
from sympy import Symbol, pprint, symbols, Symbol, Eq
sigma = Symbol("sigma", positive=True)
mu = DiscreteUniform('mu', [1,2])
N = Normal('normal', mu, sigma)
sampling_dist = given(N, Eq(mu, 1))
prior = P(Eq(mu, 1))
marginal = P(Eq(mu, 1))*given(N, Eq(mu, 1))+P(Eq(mu, 2))*given(N, Eq(mu,2))
post = prior * sampling_dist/marginal
Теперь я хочу
- быть в состоянии напечатать уравнение для апостериорного распределения (Я ожидаю, что сигма и х единственным неизвестным)
- Plot задняя фиксируя сигмы с известным значением
Я попытался распечатать уравнение, задавая плотность с
density(post)(Symbol('x'))
И я получаю следующую ошибку
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-9b0e1c9ada72> in <module>()
----> 1 density(post)(Symbol('x'))
/Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py in density(expr, condition, evaluate, numsamples, **kwargs)
692 **kwargs)
693
--> 694 return Density(expr, condition).doit(evaluate=evaluate, **kwargs)
695
696
/Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py in doit(self, evaluate, **kwargs)
643 isinstance(pspace(expr), SinglePSpace)):
644 return expr.pspace.distribution
--> 645 result = pspace(expr).compute_density(expr, **kwargs)
646
647 if evaluate and hasattr(result, 'doit'):
/Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py in pspace(expr)
430 return rvs[0].pspace
431 # Otherwise make a product space
--> 432 return ProductPSpace(*[rv.pspace for rv in rvs])
433
434
/Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py in __new__(cls, *spaces)
278 # Overlapping symbols
279 if len(symbols) < sum(len(space.symbols) for space in spaces):
--> 280 raise ValueError("Overlapping Random Variables")
281
282 if all(space.is_Finite for space in spaces):
ValueError: Overlapping Random Variables
Даже если я подчиняюсь сигме с константой, я получаю ту же ошибку. Я (очевидный) не понимаю, что я делаю неправильно.