PyMC MCMC 分析 - .summary()

0 投票
2 回答
996 浏览
提问于 2025-04-18 09:58

我刚接触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

撰写回答