PyMC Bernoulli模型检查

时间:2015-08-17 11:27:52

标签: python bayesian pymc bernoulli-probability

我目前正在尝试使用PyMC进行模型检查,其中我的模型是伯努利模型,我之前有Beta版。我想做(i)gof图以及(ii)计算后验预测p值。

我已经使用二项式模型运行我的代码,但我很难找到使伯努利模型正常工作的正确方法。不幸的是,没有任何我可以使用的例子。我的代码如下所示:

import pymc as mc
import numpy as np
alpha = 2
beta = 2
n = 13
yes = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,0,0])

p = mc.Beta('p',alpha,beta)
surv = mc.Bernoulli('surv',p=p,observed=True,value=yes)
surv_sim = mc.Bernoulli('surv_sim',p=p)

mc_est = mc.MCMC({'p':p,'surv':surv,'surv_sim':surv_sim})
mc_est.sample(10000,5000,2)

import matplotlib.pylab as plt
plt.hist(mc_est.surv_sim.trace(),bins=range(0,3),normed=True)
plt.figure()
plt.hist(mc_est.p.trace(),bins=100,normed=True)

mc.Matplot.gof_plot(mc_est.surv_sim.trace(), 10/13., name='surv')

#here I have issues
D = mc.discrepancy(yes, surv_sim, p.trace())
mc.Matplot.discrepancy_plot(D)

我遇到的主要问题是确定discrepancy函数的预期值。仅仅使用p.trace()在这里不起作用,因为这些是概率。不知何故,我需要在这里加入样本大小,但我正在努力以类似于二元模型的方式做到这一点。如果我正确地进行gof_plot,我也不太确定。

希望有人可以帮助我!谢谢!

1 个答案:

答案 0 :(得分:0)

根据discrepancy函数doc string,参数为:

observed : Iterable of observed values (size=(n,))
simulated : Iterable of simulated values (size=(r,n))
expected : Iterable of expected values (size=(r,) or (r,n))

所以你需要纠正两件事:

1)修改模拟结果,使其大小为n(例如,示例中为13):

surv_sim = mc.Bernoulli('surv_sim', p=p, size=n)

2)使用p.trace()方法封装您的bernoulli_expval

D = mc.discrepancy(yes, surv_sim.trace(), mc.bernoulli_expval(p.trace()))

bernoulli_expval只是吐回p。)

通过这两项更改,我得到以下内容:

enter image description here