This is an old version, view current version.

11.1 Unit vectors

The length of a vector \(x \in \mathbb{R}^K\) is given by \[ \Vert x \Vert = \sqrt{x^{\top}\,x} = \sqrt{x_1^2 + x_2^2 + \cdots + x_K^2}. \] Unit vectors are defined to be vectors of unit length (i.e., length one).

With a variable declaration such as

unit_vector[K] x;

the value of x will be constrained to be a vector of size K with unit length; the reference manual chapter on constrained parameter transforms provides precise definitions.

Warning: An extra term gets added to the log density to ensure the distribution on unit vectors is proper. This is not a problem in practice, but it may lead to misunderstandings of the target log density output (lp__ in some interfaces). The underlying source of the problem is that a unit vector of size \(K\) has only \(K - 1\) degrees of freedom. But there is no way to map those \(K - 1\) degrees of freedom continuously to \(\mathbb{R}^N\)—for example, the circle can’t be mapped continuously to a line so the limits work out, nor can a sphere be mapped to a plane. A workaround is needed instead. Stan’s unit vector transform uses \(K\) unconstrained variables, then projects down to the unit hypersphere. Even though the hypersphere is compact, the result would be an improper distribution. To ensure the unit vector distribution is proper, each unconstrained variable is given a “Jacobian” adjustment equal to an independent standard normal distribution. Effectively, each dimension is drawn standard normal, then they are together projected down to the hypersphere to produce a unit vector. The result is a proper uniform distribution over the hypersphere.