I have alpha[S] where S = 3. Each has different bounds. I can not declare alpha[1] [2] and [3] separately in parameter block. Is there another way to set separate bounds for each element?

Do `real<lower=0,upper=1> alpha_raw[S]`

in `parameters`

. Map the three elements of `alpha_raw`

into `alpha`

in the `transformed parameters`

block. Figure out the Jacobian correction if you are placing a prior on `alpha`

.

Wait. I am not getting the whole picture. I declared real alpha in transformed block, then how do I specify different bounds when I map alpha into alpha_raw? alpha[1] = alpha_raw[1] doesn’t allow me to set bounds.

`alpha[1] = g(alpha_raw[1])`

where `g()`

is some function (or maybe just an expression) that enforces the bounds.

What I am currently doing in my own models, where I want one of the parameters to be bounded between 0 and an individual bound for each element, is to make use of the inverse-logit function. If multiplied by the upper boundary value, this will transform the data/parameter values to be bounded between 0 and the multiplied value:

As @bgoodri said, setting up the Jacobian should also work, however, I don’t now how to do it.

Here is an example from how I do it. Might not be the most correct way but hope it helps.

```
data {
int N; // number of measurements
real y[N]; // individual measurements
}
transformed data {
real upper_lim[N];
upper_lim = y; // vector of upper limits
}
parameters {
vector[N] tauU; // unconstrained target parameter
}
transformed parameters {
vector[N] tau; // bounded target parameter
for(n in 1:N){
tau[n] = inv_logit(tauU[n]) * upper_lim[n];
}
}
mode l{
tauU ~ normal(0,1); // unconstrained prior
y ~ normal(0, tau);
}
```

There’s an explanation in the manual in the section titled “Vectors with Varying Bounds”.