I have some data r and want to run this Multinomial model, I get an initialisation error, although the prior predictive works.
T = 12, g = 3, I = 50
with pm.Model() as model:
alpha = pm.Gamma('alpha', 1, 1, shape=g)
M = pm.Gamma('M', 1, 1)
K = pm.Gamma('K', 1, 1)
mu = pm.Gamma('mu', M * T, K, shape=I)
n = pm.Poisson('n', mu, shape=I)
p = pm.Dirichlet('p', alpha, shape=(I, g))
pred = pm.Multinomial('pred', n, p, shape=(I, g), observed=r)
pp = pm.sample_prior_predictive()
trace = pm.sample()
SamplingError: Initial evaluation of model at starting point failed!
When the sampling throws that error, it usually prints the test point. If not, you can print model.check_test_point()
. If I had to guess, I would suspect that M
and thus mu
and thus n
is too small relative to your data.
I think the problem is likely:
n = pm.Poisson('n', mu, shape=I)
Since you observed the multinomial, n is known n = r.sum(axis=-1)
. I guess you are assigning it as random variable so you can infer the parameter mu
and its hyper priors. So suggestion here is to do
n = pm.Poisson('n', mu, observed=r.sum(axis=-1))
1 Like
Junpeng, you are right, it dawned on me later, n was actually given.