I’ve got a problem with modeling a categorical latent parameter. My model is a variant of seven country quiz problem in Bayesian Cognitive Modeling. In the model, zj is a categorical parameter with 3 categories (0, 1, 2) and xi is a binary parameter. Theta depends on xi and zj. My code is as follow:
with pm.Model() as model:
alpha = pm.Uniform("alpha", lower=0., upper=1.)
beta = pm.Uniform("beta", lower=0., upper=alpha)
gamma = pm.Uniform("gamma", lower=0., upper=alpha)
xi = pm.Bernoulli("xi", p=np.array([1]+[0.5]*(Nx-1)).reshape(-1, 1), shape=(Nx, 1))
zj = pm.Categorical("zj", p=np.array([0.33, 0.33, 0.34]), shape=(1, Nz))
#Nx and Nz are the dimensions of xi and zj
theta = pm.Deterministic("theta", pt.switch(pt.eq(xi, zj), alpha, pt.switch(pt.eq(zj, 2), gamma, beta)))
kij = pm.Bernoulli("kij", p=theta, observed=data)
However, the results of sampling shows that both xi and zj are continuous:
A | mean | sd | hdi_3% | hdi_97% | mcse_mean | mcse_sd | ess_bulk | ess_tail | r_hat |
---|---|---|---|---|---|---|---|---|---|
xi[0, 0] | 1.000 | 0.000 | 1.000 | 1.000 | 0.000 | 0.000 | 4000.0 | 4000.0 | NaN |
xi[1, 0] | 0.824 | 0.381 | 0.000 | 1.000 | 0.024 | 0.017 | 257.0 | 257.0 | 1.01 |
xi[2, 0] | 0.216 | 0.411 | 0.000 | 1.000 | 0.029 | 0.021 | 199.0 | 199.0 | 1.01 |
xi[3, 0] | 0.213 | 0.409 | 0.000 | 1.000 | 0.031 | 0.022 | 173.0 | 173.0 | 1.01 |
I don’t know what’s happened, and I suppose maybe my usage of pm.Categorical is wrong. What should I do to get my model correct?
Thanks!