如何在pymc3中模拟正常的贝叶斯后验概率?

2024-04-29 16:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在研究贝叶斯统计,我试图估计正态分布的平均值,给定正态先验和正态分布的数据。 我有公式来分析计算后验分布,但我想通过模拟来解决它,看看结果是否一致

平均值的先验值为N(160,10)。 我的数据是存储在熊猫数据帧的一列中的120个样本,它们遵循正态分布N(2562301)。 使用公式,我的平均值后验分布应该是N(195,6.57)

但是,绘制轨迹时,轨迹结果不一致。代码如下:

with pm.Model() as model: 
    mu = pm.Normal('parameters', mu=160, sd=50)
    observed_data = pm.Normal(
        'observed_data', mu=mu, observed=df['Cholestoral']) 
with model:
# Sample from the posterior
    trace = pm.sample(draws=300, chains=2, tune=300, 
                      discard_tuned_samples=True)

如果我以这种方式绘制后验曲线,我会得到一个平均值为256且方差很小的正态分布。 如果我把我的数据的方差2301加到观察到的_数据中,我得到一个均值为160的后验a正态分布

我不明白我的代码出了什么问题。有人能帮忙吗


Tags: 数据代码model轨迹with绘制公式平均值