This is an old version, view current version.
22.6 Avoiding validation
Stan validates all of its data structure constraints. For example, consider a transformed parameter defined to be a covariance matrix and then used as a covariance parameter in the model block.
transformed parameters {
cov_matrix[K] Sigma;
...
} // first validation
model {
y ~ multi_normal(mu, Sigma); // second validation
...
Because Sigma
is declared to be a covariance matrix, it will be
factored at the end of the transformed parameter block to ensure that
it is positive definite. The multivariate normal log density function
also validates that Sigma
is positive definite. This test is
expensive, having cubic run time (i.e., \(\mathcal{O}(N^3)\) for
\(N \times N\) matrices), so it should not be done twice.
The test may be avoided by simply declaring Sigma
to be a simple
unconstrained matrix.
transformed parameters {
matrix[K, K] Sigma;
...
model {
y ~ multi_normal(mu, Sigma); // only validation
Now the only validation is carried out by the multivariate normal.