python - pymc normal prior + normal likelihood 没有正确收敛?

标签 python bayesian pymc

我是 pymc 和贝叶斯统计的新手。在这里,我试图实现一个极其简单的 pymc 模型,以便与理论结果进行比较。在我的测试用例中,我假设正常先验为 mu~N(20,20) 并且可能性假设为 data~N(mu,10)

假设有 10 个观察值如下面的代码所示,在这个简单的模型中,后验 pdf 的理论结果应该是 N(6.84,6.67);但是,我很困惑为什么我的 pymc 模型产生的结果与理论结果相差甚远。这是我的代码。我想知道问题是出 self 的代码还是我的贝叶斯统计概念。感谢您的帮助。

from __future__ import division
import pymc as pm
import numpy as np

data=[2.944,-13.361,7.143,16.235,-6.917, 8.580,12.540,
          -15.937,-14.409, 5.711]
mean=pm.Normal('mean',mu=20.,tau=1./20)
prec=1./10

obs=pm.Normal('obs',mu=mean,tau=prec,value=data,observed=True)
model=pm.Model([obs, mean])
mcmc=pm.MCMC(model)

mcmc.sample(500,100)

mcmc.stats()

结果表明后验均值为N(0.25,1),与理论结果相去甚远。

'mean': {'95% HPD interval': array([-1.80515483,  2.06741224]),
  'mc error': 0.04850118114229577,
  'mean': 0.22188919237458093,
  'n': 400,
  'quantiles': {2.5: -1.7106911626432717,
   25: -0.39834886222214749,
   50: 0.24108945921296354,
   75: 0.85983578287420315,
   97.5: 2.282198749772455},
  'standard deviation': 0.99310330871482888}

最佳答案

应该mean=pm.Normal('mean',mu=20.,tau=1./20**2)吗?

关于python - pymc normal prior + normal likelihood 没有正确收敛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221426/

相关文章:

python - 使用 PyMC3 进行增量模型更新

python - PyMC3:相同输入的不同预测

贝叶斯概率矩阵分解 (BPMF) 与 PyMC3 : PositiveDefiniteError using `NUTS`

python - 如何在 SVN 预提交 Hook 中列出特定目录

Python cx_Freeze __init__ "no module named codecs"

python - 使用 from_formula 更改之前的 Pymc3

Mysql 贝叶斯并按星级排序

r - WinBUGS/R 中贝叶斯分层建模(使用三个级别)的建议示例

python - Python 中 JSON 数据的问题

python - 使用 OLS 回归预测 future 值(Python、StatsModels、Pandas)