访问pymc采样中的可能性评估

时间:2017-02-24 14:16:38

标签: python pymc mcmc

我希望你能给我一些有用的暗示。

我想使用MCMC执行功能最小化 我的函数L(碰巧是-logGaussian)有5个变量。在我的代码中,我遍历第一个(J)并保持固定,我对其余4个自由变量(a, b, c, r)进行L采样。

这样做的目的是在多维参数空间中沿一个特定方向构建L的“轮廓”。因此,我对4个自由参数的后验分布不感兴趣,而是对每个J的4 + 1参数的样本和函数L的对应值感兴趣。

在模型下方,我传递给pymc.MCMC实例(示意图 - 不是MWE):

def model(J):
    a = Uniform('a', lower=0, upper=5)
    b = Uniform('b', lower=0, upper=5)
    c = Uniform('c', lower=0, upper=5)
    r = Uniform('r', lower=0, upper=5)

    @deterministic
    def loglike(J=J, a=a, b=b, c=c, r=r):
        return LL(a, b, J, r, c)

    return locals()

此时,为了获得值(J, L, a, b, c, r)的元组,对于给定范围内的J,我执行以下操作:

for J in J_array:
    M = MCMC(model(J))
    M.sample(110000, burn=10000, thin=1000)

    L_sample = M.trace('loglike')[:]
    true_indx = ~np.isnan(L_sample)
    L_sample = L_sample[true_indx]
    min_indx = np.where( L_sample==L_sample.min() )[0][0]
    L = L_sample[min_indx]

    for par in ['a', 'b', 'c', 'r']:
        exec( "{p}_sample = M.trace('{p}')[:]".format(p=par) )
        exec( "{p}_sample = {p}_sample[true_indx]".format(p=par) )
        exec( "{p} = {p}_sample[min_indx]".format(p=par) )

我的问题是:我做得对吗? 换句话说:给定我的模型,使用trace方法,我是否可以访问loglike函数的值或其后验值?在后一种情况下,如何访问MCMC采样器的简单似然评估?

非常感谢你的帮助。最好的,安德里亚

0 个答案:

没有答案