Constraining order in a Mixture model

When I try to repeat your example, it also throws an error, but I am on version 3.11.


I will look into trying this with pymc3 4.0.

This might be too specific, but hopefully it helps explain what I am attempting to do. I am looking at developing a model for velocity profiles dependent on material type. The velocity is typically modeled as: V = c_1 \cdot z ^ {c_2}, where z is depth. Unfortunately, the material classification is poor at this site so I am trying to break the data into two (or three) materials and each material should have a different c_1 and c_2. In the pycm3 model, I am using a marginalized mixture model with the mean that varies with depth and computed from c_1 and c_2. I would like to constrain the mean such that one model is always greater than another model.

In playing with the model construction, I noticed that the NUTS sampler doesn’t seem to work well with a pm.Potential(...). However, if I change to step=pm.Metropolis() then the sampling works. I didn’t see any documentation that would would have lead me to this change.

Thanks for your help.