我正在尝试建模一个过程,其中二项式过程中使用的试验次数 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.
我确定我错误地制定了这个,但我不确定如何。
答案 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:
这是一个模型错误规范问题,而不是错误。这意味着可能性的初始参数值与数据不兼容 - 您需要指定兼容的初始值。