36.3 Some differences in the statistical models that are allowed
Stan does not yet support declaration of discrete parameters. Discrete data variables are supported. Inference is supported for discrete parameters as described in the mixture and latent discrete parameters chapters of the manual.
Stan has some distributions on covariance matrices that do not exist in BUGS, including a uniform distribution over correlation matrices which may be rescaled, and the priors based on C-vines defined in Lewandowski, Kurowicka, and Joe (2009). In particular, the Lewandowski et al. prior allows the correlation matrix to be shrunk toward the unit matrix while the scales are given independent priors.
In BUGS you need to define all variables. In Stan, if you
declare but don’t define a parameter it implicitly has a flat prior
(on the scale in which the parameter is defined). For example, if
you have a parameter p
declared as
real<lower=0, upper=1> p;
and then have no sampling statement for p
in the model
block, then you are implicitly assigning a uniform \([0,1]\) prior on
p
.
On the other hand, if you have a parameter theta
declared with
real theta;
and have no sampling statement for theta
in the model
block, then
you are implicitly assigning an improper uniform prior on
\((-\infty,\infty)\) to theta
.
BUGS models are always proper (being constructed as a product of proper marginal and conditional densities). Stan models can be improper. Here is the simplest improper Stan model:
parameters {
real theta;
}model { }
Although parameters in Stan models may have improper priors, we do not want improper posterior distributions, as we are trying to use these distributions for Bayesian inference. There is no general way to check if a posterior distribution is improper. But if all the priors are proper, the posterior will be proper also.
Each statement in a Stan model is directly translated into the C++ code for computing the log posterior. Thus, for example, the following pair of statements is legal in a Stan model:
0,1);
y ~ normal(2,3); y ~ normal(
The second line here does not simply overwrite the first; rather, both statements contribute to the density function that is evaluated. The above two lines have the effect of including the product, \(\textsf{normal}(y \mid 0,1) * \textsf{normal}(y \mid 2,3)\), into the density function.
For a perhaps more confusing example, consider the following two lines in a Stan model:
0.8 * y, sigma);
x ~ normal(0.8 * x, sigma); y ~ normal(
At first, this might look like a joint normal distribution with a correlation of 0.8. But it is not. The above are not interpreted as conditional entities; rather, they are factors in the joint density. Multiplying them gives, \(\textsf{normal}(x \mid 0.8y,\sigma) \times \textsf{normal}(y \mid 0.8x,\sigma)\), which is what it is (you can work out the algebra) but it is not the joint distribution where the conditionals have regressions with slope 0.8.
With censoring and truncation, Stan uses the censored-data or truncated-data likelihood—this is not always done in BUGS. All of the approaches to censoring and truncation discussed in Andrew Gelman et al. (2013) and Andrew Gelman and Hill (2007) may be implemented in Stan directly as written.
Stan, like BUGS, can benefit from human intervention in the form of reparameterization.