Python 有辛条件概率

Python 有辛条件概率,python,probability,sympy,Python,Probability,Sympy,因为这不是一个与数学相关的问题,而是关于使用库进行符号计算的问题,所以比{math | stats}.stackexchange.com更适合回答这个问题 我想使用Symphy计算以下各项: 这是我在Sympy中使用的代码 from sympy.stats import Normal, density, DiscreteUniform, P, given from sympy import Symbol, pprint, symbols, Symbol, Eq sigma = Symbol("

因为这不是一个与数学相关的问题,而是关于使用库进行符号计算的问题,所以比{math | stats}.stackexchange.com更适合回答这个问题

我想使用Symphy计算以下各项:

这是我在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
现在我想

  • 能够打印后验分布方程(我希望sigma和x是唯一未知的)
  • 用已知值固定sigma,绘制后验曲线
  • 我试着通过问密度来打印方程

    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
    
    ---------------------------------------------------------------------------
    ValueError回溯(最近一次调用上次)
    在()
    ---->1密度(柱)(符号('x'))
    /用户/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py密度(expr、condition、evaluate、numsamples、**kwargs)
    692**夸尔格)
    693
    -->返回密度(expr,条件).doit(evaluate=evaluate,**kwargs)
    695
    696
    /doit中的Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py(self,evaluate,**kwargs)
    643 iInstance(pspace(expr),SinglePSpace)):
    644返回表达式pspace.distribution
    -->645结果=pspace(expr)。计算密度(expr,**kwargs)
    646
    647如果评估和hasattr(结果“doit”):
    /pspace中的Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py(expr)
    430返回rvs[0]。pspace
    431#否则就形成一个产品空间
    -->432退货产品空间(*[rv.pspace用于rv中的rv])
    433
    434
    /Users/alexis/anaconda3/lib/python3.4/site-packages/sympy/stats/rv.py in_uuuuuunew_uuuuuuu(cls,*空格)
    278#重叠符号
    279如果len(符号)280上升值错误(“重叠随机变量”)
    281
    282如果all(space.is_有限表示空格中的空格):
    ValueError:重叠的随机变量
    

    即使我用一个常数代替sigma,我也会得到同样的错误。我(显然是Lu)不明白我做错了什么。

    我不完全明白您试图完成什么,但我在Jupyter笔记本中运行了您的代码,并在启用Symphy.init_printing()的情况下检查了
    post
    的输出,其中显示了以下内容:

    抛出的异常,
    ValueError:Overlapping Random Variables
    ,表明SymPy根本不知道如何处理表达式。我建议您仔细检查表达式的构造,以更零碎的方式测试输出