在pymc中根据保存的轨迹绘制图形



我需要用不同的参数运行MCMC不同的次数来检查收敛性。所以我决定保存跟踪,以便当我需要知道(为了比较的目的)

的结果是什么

pymc.MCMC (iter = 10000, burn = 1000, thin = 10)

我不需要重新运行它。(这需要花费很多时间(我必须为许多不同的参数值做同样的事情))。

我找到了一个解决办法

m = MCMC([tau, rv], db='pickle', dbname='10000iter1000burn.pickle')
m.sample(iter = 10000, burn = 5000, thin = 10)
m.db.close()

跟踪现在保存在名为10000iter1000burn.pickle

的数据库中

现在,为了加载跟踪,我执行以下命令

db = pymc.database.pickle.load('10000iter5000burn.pickle')

,当我执行print db.trace('tau')[:]时,我得到相同的输出,但当我想绘制图形或获取其他信息时,它失败了

plot(db)  #error

plot()接受至少2个参数(1给定)但是当我绘制(m)(当我再次运行采样器时的初始情况)时,它工作得很好。

同样db.tau.summary()给出错误'Trace'对象没有属性'summary'当我执行m.tau.summary()

时,它可以正常工作

对于db.logp

也是如此

我是这个领域的新手。如果语法上有任何错误,请纠正我。如果有其他方法可以让我重新绘制图形并获得模型的对数概率,而无需再次运行mcmc,我将很高兴知道。

不能直接将数据库后端传递给plot函数。您可以传递(1)原始节点/随机(2)跟踪对象(3)pymc节点/随机的字典或(4)原始输出。

最新更新