I am interested in an ordered simplex - I have a mixture model, and am getting switching of parameters for different threads, but believe an ordered simplex would solve that issue. Is it possible to enforce this ordering? Is enforcing an ordering on a simplex a bad idea on a mixture model?

# Ordered Simplex

**bgoodri**#2

It is quite possible to use an ordered simplex if you do

```
data {
int<lower=1> K;
vector<lower=0>[K] alpha;
}
parameters {
positive_ordered[K] lambda;
}
transformed parameters {
simplex[K] pi = lambda / sum(lambda);
}
model {
// implies pi ~ dirichlet(alpha)
target += gamma_lpdf(lambda | alpha, 1);
// use pi in your likelihood
}
```

Opinions differ as to whether this is a disaster or works perfectly fine.

**quebbs**#3

Thank you - this is a creative approach. I will give it a try to see if it leads to disaster ;)

Why wouldn’t this work? It’s identified through the prior.

Of course, the prior will matter here for fitting.

A simpler alternative

```
parameters {
positive_ordered[K] pi_raw;
...
transformed parameters {
ordered[K] pi = softmax(pi_raw);
```

won’t work because the `pi_raw`

parameters won’t be identified. And you can’t just add a zero value to identify if you want to preserve orderedness. You can’t just put a prior on `pi`

here without including the log Jacobian of the softmax transform, either.

**bgoodri**#5

Something about when you have so much data that the posterior distribution of `pi`

has very little variance, then NUTS has to take many very small steps to navigate through the values of `lambda`

that is consistent with both that value of `pi`

and the gamma prior on `lambda`

.