PyMC MCMC 分析 - .summary()
我刚接触PyMC,遇到了一些问题,想要获取与我的先验相关的参数,比如均值和标准差。
我在一个叫做'model.py'的文件中描述我的模型,内容如下:
import pymc
import numpy
#constants
r_div=numpy.loadtxt("r_div", comments="#", unpack=False)
map=numpy.loadtxt("map", comments="#", delimiter=",", unpack=False)
M_star=3*10^6;
#data
n=numpy.loadtxt("n")
#priors
alpha_0=pymc.Uniform('alpha_0end',-10,10, value=0)
logA_0=pymc.Uniform('logA_0end',-10,10,value=-6.1246)
#model
@pymc.deterministic(plot=False)
def r(logA_0=logA_0,alpha_0=alpha_0,M_star=M_star,r_div=r_div):
r=r_div*numpy.exp(logA_0)*((numpy.exp(map[:,1])/M_star)**(alpha_0))
return r
#likelihood
Distribution=pymc.Poisson('Distribution',mu=r,value=n,observed=True)
然后我在ipython中使用以下脚本来运行MCMC链:
import pymc
import model
M=pymc.MCMC(model)
M.sample(100000, burn=10000)
M.summary()
一切看起来都很顺利,直到我执行最后一个命令M.summary()时,出现了错误:
AttributeError Traceback (most recent call last) in () ----> 1 M.summary()
AttributeError: 'MCMC'对象没有'summary'这个属性
我确信链已经成功运行,因为命令M.trace('alpha_0end')[:]显示有链的元素,但我无法获取任何关于先验的信息,比如均值或标准差。我尝试了不同的summary命令组合。例如:M.alpha_0end.summary()
如果能知道有没有简单的方法来获取先验的标准差和均值,那就太好了。
2 个回答
0
这个总结子程序是在2012年2月添加的(a04551094a70451a4afee4e11be8b6872e74fe46)。当时的版本号是2.2-grad。
如果你的 pm.__version__
是2.2-grad或者更低,那说明你使用的pymc版本太旧,无法使用这个功能。版本2.2-beta或更高的版本应该可以正常使用。
0
我无法运行你的代码,但在这个简单的例子中,M.summary()
对我来说是可以正常工作的:
In [1]: import pymc as pm
In [2]: pm.__version__
Out[2]: '2.3.2'
In [3]: X = pm.Normal('X', 0, 1)
In [4]: M = pm.MCMC(dict(X=X))
In [5]: M.sample(100000, burn=10000)
[-----------------100%-----------------] 100000 of 100000 complete in 5.0 sec
In [6]: M.summary()
X:
Mean SD MC Error 95% HPD interval
------------------------------------------------------------------
-0.0 1.003 0.003 [-1.897 2.026]
Posterior quantiles:
2.5 25 50 75 97.5
|---------------|===============|===============|---------------|
-1.961 -0.673 0.0 0.675 1.964