2015-09-07 5 views
2

Поскольку это не вопрос, связанными по математике, но об использовании библиотеки делать символьные вычисления, SO лучше подходит для ответа на этом, чем {математики | Статистика} .stackexchange.comУсловная вероятность с SymPy

Я хочу использовать SymPy вычислить следующее:

posterior equation

Это код, я использую в 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 

Теперь я хочу

  1. быть в состоянии напечатать уравнение для апостериорного распределения (Я ожидаю, что сигма и х единственным неизвестным)
  2. 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 

Даже если я подчиняюсь сигме с константой, я получаю ту же ошибку. Я (очевидный) не понимаю, что я делаю неправильно.

ответ

0

Я не совсем понимаю, что вы пытаетесь достичь, но я побежал код в блокноте Jupyter и рассмотрел выход post с sympy.init_printing() включена, который отображает следующее:

enter image description here

Исключение, которое выбрасывается, ValueError: Overlapping Random Variables, предполагает, что Sympy просто не знает, что делать с этим выражением. Я предлагаю вам дважды проверить структуру вашего выражения, протестировав результат более по частям.

Смежные вопросы