Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyMC-Bernoulli模型检验_Python_Bayesian_Pymc_Bernoulli Probability - Fatal编程技术网

Python PyMC-Bernoulli模型检验

Python PyMC-Bernoulli模型检验,python,bayesian,pymc,bernoulli-probability,Python,Bayesian,Pymc,Bernoulli Probability,我目前正在尝试使用PyMC进行模型检查,其中我的模型是伯努利模型,我有一个测试版。我想做(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]

我目前正在尝试使用PyMC进行模型检查,其中我的模型是伯努利模型,我有一个测试版。我想做(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)
我遇到的主要问题是确定
差异
函数的预期值。仅使用
p.trace()
在这里不起作用,因为这些是概率。不知何故,我需要在这里加入样本量,但我很难做到这一点,就像我对二项模型所做的那样。我也不太确定,我是否正确地进行了
gof_绘图


希望有人能帮我!谢谢

根据
差异
功能,参数为:

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\u sim=mc.Bernoulli('surv\u sim',p=p,size=n)

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

D=mc.差异(是,surv\u sim.trace(),mc.bernoulli\u expval(p.trace())

bernoulli_expval
只是吐回
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)

根据
差异
功能,参数为:

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\u sim=mc.Bernoulli('surv\u sim',p=p,size=n)

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

D=mc.差异(是,surv\u sim.trace(),mc.bernoulli\u expval(p.trace())

bernoulli_expval
只是吐回
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)

非常感谢您的回复。带有
size
参数的提示非常棒!关于期望值,我没有使用
expval
函数,因为正如您所提到的,它只回吐
p
。因此,我再一次不确定这个解决方案,差异是否在做它应该做的事情。它现在做的是将数据和模拟的二进制结果与概率参数进行比较。另一个想法是:如果我将这个模型扩展到一个分类模型,我甚至更不确定如何处理它。我对
差异
函数不是很熟悉。年,
pymc
的作者之一建议使用
gof_图
生成后验预测图。我不知道为什么。非常感谢你的回复。带有
size
参数的提示非常棒!关于期望值,我没有使用
expval
函数,因为正如您所提到的,它只回吐
p
。因此,我再一次不确定这个解决方案,差异是否在做它应该做的事情。它现在做的是将数据和模拟的二进制结果与概率参数进行比较。另一个想法是:如果我将这个模型扩展到一个分类模型,我甚至更不确定如何处理它。我对
差异
函数不是很熟悉。年,
pymc
的作者之一建议使用
gof_图
生成后验预测图。我不知道为什么。