我是 pymc 和贝叶斯统计的新手。这里我试图实现一个非常简单的pymc模型,以便与理论结果进行比较。在我的测试案例中,我假设一个正常的先验作为 mu~N(20,20)
和一个可能性假设为 data~N(mu,10)
假设有 10 个观测值如下面的代码所示,在这个简单的模型中,后验 pdf 的理论结果应该是 N(6.84,6.67)
;然而,我很困惑为什么我的 pymc 模型产生的结果与理论结果相去甚远。这是我的代码。我想知道问题是出自我的代码还是我的贝叶斯统计概念。谢谢你的帮助。
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 正常先验+正常似然不正确收敛?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27221426/