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_Bx_A)=p(x_A,0)/p(0x_A) Now see that 1. p(x_A,0) is easy because full precision is sparse. 2. p(0x_A) is N(Q_BB^1 * Q_BA x_A, Q_BB^1) so p(0x_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(0x_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(0x_A). Summary:  Negative logdensity of Amarginal 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.