Hi,

I’ve been looking for the doc about pymc3.distributions.transforms.
There is an example in the api_qickstart page, but I could not find anything else. Is there something that I missed or does it remain to be done?

I am particularly interested by the transform that can be used to impose an ordered constraint on two variable, as x_1<x_2. I looked at the source code but I recognize that I didn’t understand it!

Thanks a lot

Hi Timothé!
Usually, you can use a potential to enforce a constraint. In your case, it would go like:

    import theano.tensor as tt

means = pm.Normal("means", mu=np.array([0.9, 1]), sd=1, shape=2)
pm.Potential("order_means", tt.switch(means[1] - means[0] < 0, -np.inf, 0))


When \mu_1 < \mu_0, the model adds - \infty to the likelihood and will ignore the combinations of parameters that verify this condition. Otherwise, the model lives its life as usual.
This solution with pm.Potential is very flexible, but the ordered constraint is so common that you can also enforce it directly with:

    means = pm.Normal('means', mu=np.array([0.9, 1]), sd=1, shape=2,
transform=pm.distributions.transforms.ordered)


These examples come from Osvaldo Martin’s very good book and notebooks.
And what about the documentation about pymc3.distributions.transforms?