0

由于贝叶斯因子,我想计算给定数据集的模型的边际可能性,以便将其与另一个进行比较。

我使用 PyMC 2 来获取每个模型的每个参数的后分布。

这是原理(我使用了MCMC):

## PRIOR
myPar  = pymc.Normal( name='Parameter',  mu=0.3,    tau=1/0.2**2,     value=0.3)

## LOG LIKELIHOOD
@pymc.stochastic(observed=True)
def mesLL(myPar = myPar, value = Obs):
    loglike = 0.0
    for i in range(len(value)):
        myMean = model(myPar)
        myStd2 = sigMes**2
        loglike += pymc.normal_like(value[i], mu = myMean, tau = 1./myStd2)
    return loglike

## SAMPLER
np.random.seed(123456)
pymc.numpy.random.seed(123456)
#
ModBayes = pymc.Model([myPar,mesLL])
sampler  = pymc.MCMC(ModBayes)
sampler.use_step_method(pymc.AdaptiveMetropolis, [myPar])
sampler.sample(iter = 10000, burn = 4000, thin = 3)

现在我不知道如何实现边际可能性。

先感谢您。

4

1 回答 1

0

每个采样参数的近似边际分布是参数采样值的频率图。PyMC2 缺少 PyMC3(现在是 ArviZ)更完整的绘图工具,但您可以简单地使用(类似于文档中示例中matplotlib所做的)。在这种情况下,它将类似于

from matplotlib.pyplot import hist

hist(ModBayes.trace('myPar')[:], density=True)
hist(ModBayes.trace('mesLL')[:], density=True)
于 2019-06-05T03:13:14.387 回答