我是 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() :
() ----> 1 M.summary() 中的 AttributeError Traceback (最近一次调用最后一次)
AttributeError:“MCMC”对象没有属性“摘要”
我相信链已经成功运行,因为命令 M.trace('alpha_0end')[:] 显示那里有链元素,但我无法获取有关先验的任何信息,例如平均值或标准偏差。我尝试了 summary 命令的不同排列。例如:M.alpha_0end.summary()
了解是否有一种简单的方法可以得出先验的标准差和均值会很有帮助。