|
TMB Documentation
v1.9.11
|
Projection of multivariate gaussian variable. More...
#include <density.hpp>
Projection of multivariate gaussian variable.
Preserves sparseness if possible. Generally it is not.
Given a gaussian density f:R^n -> R.
Given an integer vector "proj" with elements in 1,...,n.
Construct the mariginal density of "x[proj]".
Details:
--------
Let x=[x_A]
[x_B]
with precision
Q=[Q_AA Q_AB]
[Q_BA Q_BB]
and assume that proj=A.
The marginal density is (with notation 0:=0*x_B )
p_A(x_A)=p(x_A,x_B)/p(x_B|x_A)=p(x_A,0)/p(0|x_A)
Now see that
1. p(x_A,0) is easy because full precision is sparse.
2. p(0|x_A) is N(-Q_BB^-1 * Q_BA x_A, Q_BB^-1) so
p(0|x_A) = |Q_BB|^.5 * exp(-.5*x_A Q_AB * Q_BB^-1 * Q_BA x_A)
Trick to evaluate this with what we have available:
Note 1: Q_BA x_A = [0 I_BB] * full_jacobian([ x_A ]
[ 0 ] )
Call this quantity "y_B" we have
p(0|x_A) = |Q_BB|^.5 * exp(-.5*y_B' * Q_BB^-1 * y_B)
Note 2: Consider now a density with _covariance_ Q_BB
phi(y)=|Q_BB|^-.5 * exp(-.5*y' * Q_BB^-1 * y)
Then
phi(y)/phi(0)^2=|Q_BB|^.5 * exp(-.5*y' * Q_BB^-1 * y)
which is actually the desired expression of p(0|x_A).
Summary:
-------
Negative log-density of A-marginal is
-log p(x_A,0) + log phi(y) - 2*log(phi(0))
= f(x_A,0) - dmvnorm(y_B) + 2*dmvnorm(0)
Definition at line 1297 of file density.hpp.