It’s actually been in the manual since version 1. I think the reference manual is probably getting lost in the shuffle these days after being split out into a separate volume.
And back in the days when we used <-
for assignment, we had
lp__ <- lp__ + alpha;
Removing lp__
as a user-modifiable variable was the only backwards-compatibility breaking change we’ve made to the language.
I got tired of suggesting this because I was the only one speaking up for it. Specifically, I wanted to be able to have
transformed parameters {
real alpha = exp(alpha_unc);
jacobian += exp(alpha);
}
so that we could define Jacobians for transformed parameters right in the transformed parameters block. Then lp__ would be a combianation of the constrained model log density plus the log Jacobian determinant of the constraining transform.
Without this, we can’t actually implement Stan transformation in Stan. In uses for optimization, we turn the Jacobian off. There’s now way to write a Jacobian that gets turned off for optimization in the Stan language as it stands.
But, when I implemented the first version of the Stan language, I forgot to allow lp__
modifying statements in transformed parameters. Then everyone got fixated on all lp__
modification happening in the model block. That’s also why we don’t allow sampling statements in the parameters block for priors.
But I still like it, and if I were king of Stan, we’d have the above syntax.