Search in sources :

Example 41 with Matrix

use of dr.math.matrixAlgebra.Matrix in project beast-mcmc by beast-dev.

the class CorrelationSymmetricMatrixTest method testGetParameterAsMatrix.

public void testGetParameterAsMatrix() {
    CorrelationSymmetricMatrix matrix = getMatrix(CorrelationSymmetricMatrix.Type.AS_IS);
    double[][] M = matrix.getParameterAsMatrix();
    System.out.println(new Matrix(M));
    double sum = 0.0;
    for (double x : M[0]) {
        sum += x;
    }
    assertEquals(sum, 7.0);
}
Also used : CorrelationSymmetricMatrix(dr.inference.model.CorrelationSymmetricMatrix) Matrix(dr.math.matrixAlgebra.Matrix) CorrelationSymmetricMatrix(dr.inference.model.CorrelationSymmetricMatrix)

Example 42 with Matrix

use of dr.math.matrixAlgebra.Matrix in project beast-mcmc by beast-dev.

the class LKJTransformTest method testTransformation.

public void testTransformation() {
    System.out.println("\nTest LKJ transform.");
    double[] transformedValue = transform.inverse(CPCs, 0, CPCs.length);
    double[] inverseTransformedValues = transform.transform(transformedValue, 0, transformedValue.length);
    SymmetricMatrix R = compoundCorrelationSymmetricMatrix(transformedValue, dim);
    System.out.println("transformedValue=" + R);
    try {
        assertTrue("Positive Definite", R.isPD());
    } catch (IllegalDimension illegalDimension) {
        illegalDimension.printStackTrace();
    }
    System.out.println("iCPC=" + new Matrix(inverseTransformedValues, dim * (dim - 1) / 2, 1));
    assertEquals("size CPCs", format.format(CPCs.length), format.format(inverseTransformedValues.length));
    for (int k = 0; k < CPCs.length; k++) {
        assertEquals("inverse transform k=" + k, format.format(CPCs[k]), format.format(inverseTransformedValues[k]));
    }
}
Also used : SymmetricMatrix.compoundCorrelationSymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix.compoundCorrelationSymmetricMatrix) SymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix) Matrix(dr.math.matrixAlgebra.Matrix) IllegalDimension(dr.math.matrixAlgebra.IllegalDimension) SymmetricMatrix.compoundCorrelationSymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix.compoundCorrelationSymmetricMatrix) SymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix)

Example 43 with Matrix

use of dr.math.matrixAlgebra.Matrix in project beast-mcmc by beast-dev.

the class LKJTransformTest method testJacobianCholesky.

public void testJacobianCholesky() {
    System.out.println("\nTest LKJ Cholesky Jacobian.");
    // Matrix
    double[][] jacobianMat = transformChol.computeJacobianMatrixInverse(CPCs);
    Matrix Jac = new Matrix(jacobianMat);
    System.out.println("Jacobian Matrix=" + Jac.transpose());
    assertEquals("size Jacobian Matrix", format.format(dim * (dim - 1) / 2), format.format(Jac.rows()));
    assertEquals("size Jacobian Matrix", format.format(dim * (dim - 1) / 2), format.format(Jac.columns()));
    // Determinant
    double jacobianDet = (new Transform.InverseMultivariate(transformChol)).getLogJacobian(CPCs, 0, CPCs.length);
    double jacobianDetBis = 0;
    for (int i = 0; i < jacobianMat[0].length; i++) {
        jacobianDetBis += Math.log(jacobianMat[i][i]);
    }
    System.out.println("Log Jacobiant Det direct=" + jacobianDet);
    System.out.println("Log Jacobiant Det matrix=" + jacobianDetBis);
    assertEquals("jacobian log det", format.format(jacobianDet), format.format(jacobianDetBis));
}
Also used : SymmetricMatrix.compoundCorrelationSymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix.compoundCorrelationSymmetricMatrix) SymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix) Matrix(dr.math.matrixAlgebra.Matrix)

Example 44 with Matrix

use of dr.math.matrixAlgebra.Matrix in project beast-mcmc by beast-dev.

the class FullyConjugateMultivariateTraitLikelihood method getReport.

@Override
public String getReport() {
    StringBuilder sb = new StringBuilder();
    // sb.append(this.g)
    // System.err.println("Hello");
    sb.append("Tree:\n");
    sb.append(getId()).append("\t");
    sb.append(treeModel.toString());
    sb.append("\n\n");
    double[][] treeVariance = computeTreeVariance();
    double[][] traitPrecision = getDiffusionModel().getPrecisionmatrix();
    Matrix traitVariance = new Matrix(traitPrecision).inverse();
    double[][] jointVariance = KroneckerOperation.product(treeVariance, traitVariance.toComponents());
    sb.append("Tree variance:\n");
    sb.append(new Matrix(treeVariance));
    sb.append(matrixMin(treeVariance)).append("\t").append(matrixMax(treeVariance)).append("\t").append(matrixSum(treeVariance));
    sb.append("\n\n");
    sb.append("Trait variance:\n");
    sb.append(traitVariance);
    sb.append("\n\n");
    // sb.append("Joint variance:\n");
    // sb.append(new Matrix(jointVariance));
    // sb.append("\n\n");
    sb.append("Tree dim: ").append(treeVariance.length).append("\n");
    sb.append("data dim: ").append(jointVariance.length);
    sb.append("\n\n");
    double[] data = new double[jointVariance.length];
    System.arraycopy(meanCache, 0, data, 0, jointVariance.length);
    if (nodeToClampMap != null) {
        int offset = treeModel.getExternalNodeCount() * getDimTrait();
        for (Map.Entry<NodeRef, RestrictedPartials> clamps : nodeToClampMap.entrySet()) {
            double[] partials = clamps.getValue().getPartials();
            for (double partial : partials) {
                data[offset] = partial;
                ++offset;
            }
        }
    }
    sb.append("Data:\n");
    sb.append(new Vector(data)).append("\n");
    sb.append(data.length).append("\t").append(vectorMin(data)).append("\t").append(vectorMax(data)).append("\t").append(vectorSum(data));
    sb.append(treeModel.getNodeTaxon(treeModel.getExternalNode(0)).getId());
    sb.append("\n\n");
    MultivariateNormalDistribution mvn = new MultivariateNormalDistribution(new double[data.length], new Matrix(jointVariance).inverse().toComponents());
    double logDensity = mvn.logPdf(data);
    sb.append("logLikelihood: ").append(getLogLikelihood()).append(" == ").append(logDensity).append("\n\n");
    final WishartSufficientStatistics sufficientStatistics = getWishartStatistics();
    final double[] outerProducts = sufficientStatistics.getScaleMatrix();
    sb.append("Outer-products (DP):\n");
    sb.append(new Vector(outerProducts));
    sb.append(sufficientStatistics.getDf()).append("\n");
    Matrix treePrecision = new Matrix(treeVariance).inverse();
    final int n = data.length / traitPrecision.length;
    final int p = traitPrecision.length;
    double[][] tmp = new double[n][p];
    for (int i = 0; i < n; ++i) {
        System.arraycopy(data, i * p, tmp[i], 0, p);
    }
    Matrix y = new Matrix(tmp);
    Matrix S = null;
    try {
        // Using Matrix-Normal form
        S = y.transpose().product(treePrecision).product(y);
    } catch (IllegalDimension illegalDimension) {
        illegalDimension.printStackTrace();
    }
    sb.append("Outer-products (from tree variance:\n");
    sb.append(S);
    sb.append("\n\n");
    return sb.toString();
}
Also used : IllegalDimension(dr.math.matrixAlgebra.IllegalDimension) MultivariateNormalDistribution(dr.math.distributions.MultivariateNormalDistribution) WishartSufficientStatistics(dr.math.distributions.WishartSufficientStatistics) NodeRef(dr.evolution.tree.NodeRef) Matrix(dr.math.matrixAlgebra.Matrix) Vector(dr.math.matrixAlgebra.Vector)

Example 45 with Matrix

use of dr.math.matrixAlgebra.Matrix in project beast-mcmc by beast-dev.

the class PrecisionMatrixGibbsOperator method doOperationDontFireChange.

public void doOperationDontFireChange() {
    if (wishartIsModel) {
        // TODO Deprecate
        setupWishartStatistics(priorModel);
        priorStatistics = setupStatistics(priorModel);
    }
    final double[][] scaleMatrix = getOperationScaleMatrixAndSetObservationCount();
    final double treeDf = numberObservations;
    final double df = priorDf + treeDf * pathWeight;
    double[][] draw = WishartDistribution.nextWishart(df, scaleMatrix);
    if (DEBUG) {
        System.err.println("draw = " + new Matrix(draw));
    }
    for (int i = 0; i < dim; i++) {
        Parameter column = precisionParam.getParameter(i);
        for (int j = 0; j < dim; j++) column.setParameterValueQuietly(j, draw[j][i]);
    }
}
Also used : SymmetricMatrix(dr.math.matrixAlgebra.SymmetricMatrix) Matrix(dr.math.matrixAlgebra.Matrix) Parameter(dr.inference.model.Parameter)

Aggregations

Matrix (dr.math.matrixAlgebra.Matrix)51 SymmetricMatrix (dr.math.matrixAlgebra.SymmetricMatrix)17 Vector (dr.math.matrixAlgebra.Vector)15 IllegalDimension (dr.math.matrixAlgebra.IllegalDimension)14 SymmetricMatrix.compoundCorrelationSymmetricMatrix (dr.math.matrixAlgebra.SymmetricMatrix.compoundCorrelationSymmetricMatrix)7 NodeRef (dr.evolution.tree.NodeRef)6 MultivariateNormalDistribution (dr.math.distributions.MultivariateNormalDistribution)5 WishartSufficientStatistics (dr.math.distributions.WishartSufficientStatistics)4 Parameter (dr.inference.model.Parameter)3 DoubleMatrix1D (cern.colt.matrix.DoubleMatrix1D)2 DoubleMatrix2D (cern.colt.matrix.DoubleMatrix2D)2 DenseDoubleMatrix2D (cern.colt.matrix.impl.DenseDoubleMatrix2D)2 Tree (dr.evolution.tree.Tree)2 MatrixParameter (dr.inference.model.MatrixParameter)2 RobustEigenDecomposition (dr.math.matrixAlgebra.RobustEigenDecomposition)2 WrappedMatrix (dr.math.matrixAlgebra.WrappedMatrix)2 BranchRates (dr.evolution.tree.BranchRates)1 MutableTreeModel (dr.evolution.tree.MutableTreeModel)1 CompoundSymmetricMatrix (dr.inference.model.CompoundSymmetricMatrix)1 CorrelationSymmetricMatrix (dr.inference.model.CorrelationSymmetricMatrix)1