NCP with `offset`/`multiplier` vs doing it "by hand"

Is there any difference in parametrization or efficiency in writing a non-centered parametrization with offset and multiplier, vs introducing an auxiliary parameter?

Here is an example of the former:

parameters {
  real<offset=1, multiplier=10> x;
}
model {
  // ...
  x ~ normal(1, 10);
}

And of the latter:

parameters {
  real x0;
}
transformed parameters {
  real x = 10 * x0 + 1;
}
model {
  // ...
  x0 ~ std_normal();
}

Lastly, I often find myself with e.g. omega ~ normal(0, 10) hyperparameters. Is there any benefit to using either of the techniques above? What if I have a non-zero (but still constant or data) location?

Thanks,

Will

Check out this recently revived thread for some unexpected differences between the two parameterisations. It was mostly over my head but I think the auxiliary approach always works as intended, whereas the offset/multiplier approach can have run into some issues. Re: hyperparameters, I don’t think it’ll matter too much there as the funnel geometry happens when there’s parameters on both the left- and right-hand sides of expressions.

2 Likes