I am having trouble writing models like this in PyMC3:
It’s a mixture model in which the components themselves are Dirichlet distributions. I studied this gaussian example from the documentation:
with pm.Model() as model: mu = pm.Normal('mu', mu=np.arange(5), sigma=1, shape=5) # Each component has an independent mean w = pm.Dirichlet('w', a=np.ones((3, 5))) # w is a stack of 3 independent 5 component weight arrays components = pm.Normal.dist(mu=mu, sigma=1, shape=(3, 5)) # The mixture is an array of 3 elements. # Each can be thought of as an independent scalar mixture of 5 components like = pm.Mixture('like', w=w, comp_dists = components, shape=3)
I tried to replicate it as follows:
with pm.Model() as model: comp_dists = pm.Dirichlet.dist(np.ones((10,15)), shape=(10,15)) weights = pm.Dirichlet("weights", np.ones((20, 10)), shape=(20,10)) mix = pm.Mixture("likelihood", w=weights, comp_dists=comp_dists)
But it gives me ValueError: Input dimension mis-match. (input.shape = 20, input.shape = 10). I have tried exchanging the dimensions, using MixtureSameFamily instead of Mixture and using a list of dists instead os a multidimensional dist, but to no avail. Perhaps I am doing something silly with those shape arguments, but I’ve been stuck on this for a few days now.
Can you please provide some guidance? Thanks!