试图取样时,PyMC抛出错误或崩溃

时间:2015-07-25 19:14:03

标签: python pymc

我正在尝试建模一个过程,其中二项式过程中使用的试验次数 n 是由非齐次泊松过程生成的。我目前正在使用PyMC来拟合Poisson部分(示例here,没有整个封顶部分),但我无法弄清楚如何将它与二项式集成。如何利用泊松过程生成我所生成的并将其用于拟合二项式过程?或者有更好的方法来使用类似的方法吗?

这是我尝试过的:

import pymc as pm
import numpy as np

t = np.arange(5)

a = pm.Uniform(name='a', value=1., lower=0, upper=10)
b = pm.Uniform(name='b', value=1., lower=0, upper=10)

@pm.deterministic
def linear(a=a, b=b):
    return a * t + b

N_A = pm.Poisson(mu=linear, name='N_A')
C = pm.Beta('C', 1, 1)
obs_A = pm.Binomial('obs_A', N_A, C, observed=True, value=np.array([0,1,4,3,7])

mcmc = pm.MCMC([obs_A, C, N_A, a, b])
mcmc.sample(10000,5000)

当我尝试拉取样本时,会抛出错误

pymc.Node.ZeroProbability: Stochastic obs_A's value is outside its support, or it forbids its parents' current values.

我确定我错误地制定了这个,但我不确定如何。

1 个答案:

答案 0 :(得分:0)

出现错误是因为自动生成的N_A初始值(试验次数)小于pm.Binomial中指定的某些观测值,即观察到此数字的概率为零,并且必须拒绝初始值。一种解决方案是明确地为N_A提供可接受的初始值:

x = np.array([0,1,4,3,7])
N_A = pm.Poisson(mu=linear, name='N_A', value=x)

供参考:https://github.com/pymc-devs/pymc/issues/12

  

这是一个模型错误规范问题,而不是错误。这意味着可能性的初始参数值与数据不兼容 - 您需要指定兼容的初始值。