cc.mallet.util
Class MVNormal

java.lang.Object
  extended by cc.mallet.util.MVNormal

public class MVNormal
extends java.lang.Object

Tools for working with multivariate normal distributions


Constructor Summary
MVNormal()
           
 
Method Summary
static double[] bandCholesky(double[] input, int numRows)
           
static double[] bandMatrixRoot(int dim, int bandwidth)
          For testing band cholesky factorization
static double[] cholesky(double[] input, int numRows)
          Simple Cholesky decomposition, with no checks on squareness, symmetricality, or positive definiteness.
static java.lang.String diagonalToString(double[] matrix, int dimension)
           
static java.lang.String doubleArrayToString(double[] matrix, int dimension)
          Create a string representation of a square matrix in one-dimensional array format
static double[] getScatterMatrix(double[][] observationMatrix)
           
static double[] invertLowerTriangular(double[] inputMatrix, int dimension)
          This method returns the (lower-triangular) inverse of a lower triangular matrix.
static double[] invertSPD(double[] inputMatrix, int dimension)
           
static double[] lowerTriangularCrossproduct(double[] inputMatrix, int dimension)
          Returns L'L for lower triangular matrix L.
static double[] lowerTriangularProduct(double[] leftMatrix, double[] rightMatrix, int dimension)
          Returns (lower-triangular) X = AB for square lower-triangular matrices A and B
static void main(java.lang.String[] args)
           
static FeatureVector nextFeatureVector(Alphabet alphabet, double[] mean, double[] precision, Randoms random)
           
static double[] nextMVNormal(double[] mean, double[] precision, Randoms random)
          Sample a multivariate normal from a precision matrix (ie inverse covariance matrix)
static double[][] nextMVNormal(int n, double[] mean, double[] precision, Randoms random)
           
static double[] nextMVNormalPosterior(double[] priorMean, double[] priorPrecisionDiagonal, double[] precision, double[] observedMean, int observations, Randoms random)
           
static double[] nextMVNormalWithCholesky(double[] mean, double[] precisionLowerTriangular, Randoms random)
           
static double[] nextWishart(double[] sqrtScaleMatrix, int dimension, int degreesOfFreedom, Randoms random)
          A Wishart random variate, based on R code by Bill Venables.
static double[] nextWishartPosterior(double[] scatterMatrix, int observations, double[] priorPrecisionDiagonal, int priorDF, int dimension, Randoms random)
           
static double[] nextZeroSumMVNormalWithCholesky(double[] mean, double[] precisionLowerTriangular, Randoms random)
          Sample a vector x from N(m, (LL')-1, such that sum_i x_i = 0.
static double[] solveWithBackSubstitution(double[] b, double[] lowerTriangular)
          This method returns x such that L'x = b.
static double[] solveWithForwardSubstitution(double[] b, double[] lowerTriangular)
          This method returns x such that Lx = b where L is lower triangular
static void testCholesky()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MVNormal

public MVNormal()
Method Detail

cholesky

public static double[] cholesky(double[] input,
                                int numRows)
Simple Cholesky decomposition, with no checks on squareness, symmetricality, or positive definiteness. This follows the implementation from JAMA fairly closely.

Returns L such that LL' = A and L is lower-triangular.


bandCholesky

public static double[] bandCholesky(double[] input,
                                    int numRows)

bandMatrixRoot

public static double[] bandMatrixRoot(int dim,
                                      int bandwidth)
For testing band cholesky factorization


nextMVNormal

public static double[] nextMVNormal(double[] mean,
                                    double[] precision,
                                    Randoms random)
Sample a multivariate normal from a precision matrix (ie inverse covariance matrix)


nextMVNormalWithCholesky

public static double[] nextMVNormalWithCholesky(double[] mean,
                                                double[] precisionLowerTriangular,
                                                Randoms random)

nextZeroSumMVNormalWithCholesky

public static double[] nextZeroSumMVNormalWithCholesky(double[] mean,
                                                       double[] precisionLowerTriangular,
                                                       Randoms random)
Sample a vector x from N(m, (LL')-1, such that sum_i x_i = 0.


nextMVNormal

public static double[][] nextMVNormal(int n,
                                      double[] mean,
                                      double[] precision,
                                      Randoms random)

nextFeatureVector

public static FeatureVector nextFeatureVector(Alphabet alphabet,
                                              double[] mean,
                                              double[] precision,
                                              Randoms random)

nextMVNormalPosterior

public static double[] nextMVNormalPosterior(double[] priorMean,
                                             double[] priorPrecisionDiagonal,
                                             double[] precision,
                                             double[] observedMean,
                                             int observations,
                                             Randoms random)
Parameters:
priorMean - A vector of mean values
priorPrecisionDiagonal - A vector representing a diagonal prior precision matrix
precision - A precision matrix

solveWithBackSubstitution

public static double[] solveWithBackSubstitution(double[] b,
                                                 double[] lowerTriangular)
This method returns x such that L'x = b. Note the transpose: this method assumes that the input matrix is LOWER triangular, even though back substitution operates on UPPER triangular matrices.


solveWithForwardSubstitution

public static double[] solveWithForwardSubstitution(double[] b,
                                                    double[] lowerTriangular)
This method returns x such that Lx = b where L is lower triangular


invertLowerTriangular

public static double[] invertLowerTriangular(double[] inputMatrix,
                                             int dimension)
This method returns the (lower-triangular) inverse of a lower triangular matrix.


lowerTriangularCrossproduct

public static double[] lowerTriangularCrossproduct(double[] inputMatrix,
                                                   int dimension)
Returns L'L for lower triangular matrix L.


lowerTriangularProduct

public static double[] lowerTriangularProduct(double[] leftMatrix,
                                              double[] rightMatrix,
                                              int dimension)
Returns (lower-triangular) X = AB for square lower-triangular matrices A and B


invertSPD

public static double[] invertSPD(double[] inputMatrix,
                                 int dimension)

nextWishart

public static double[] nextWishart(double[] sqrtScaleMatrix,
                                   int dimension,
                                   int degreesOfFreedom,
                                   Randoms random)
A Wishart random variate, based on R code by Bill Venables.

Parameters:
sqrtScaleMatrix - The lower-triangular matrix square root of the scale matrix. To draw from the posterior of a precision (ie inverse covariance) matrix, this should be chol( S^{-1} ), where S is the scatter matrix X'X of columns of MV normal observations X.
dimension - The size of the matrix
degreesOfFreedom - The degree of freedom for the Wishart. Should be greater than dimension. For a posterior distribution, this is the number of observations + the df of the prior.

nextWishartPosterior

public static double[] nextWishartPosterior(double[] scatterMatrix,
                                            int observations,
                                            double[] priorPrecisionDiagonal,
                                            int priorDF,
                                            int dimension,
                                            Randoms random)

doubleArrayToString

public static java.lang.String doubleArrayToString(double[] matrix,
                                                   int dimension)
Create a string representation of a square matrix in one-dimensional array format


diagonalToString

public static java.lang.String diagonalToString(double[] matrix,
                                                int dimension)

getScatterMatrix

public static double[] getScatterMatrix(double[][] observationMatrix)

testCholesky

public static void testCholesky()

main

public static void main(java.lang.String[] args)