Skip to content

Commit

Permalink
add parser, still need to check numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
xji3 committed Oct 27, 2023
1 parent e6551ca commit 72af827
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 5 deletions.
3 changes: 2 additions & 1 deletion src/dr/app/beast/development_parsers.properties
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@ dr.inferencexml.hmc.LFMFactorPotentialDerivativeParser
dr.inferencexml.hmc.LFMLoadingsPotentialDerivativeParser
dr.inferencexml.distribution.RowDimensionMultinomialPriorParser
dr.inferencexml.distribution.IndependentNormalDistributionModelParser

dr.inferencexml.distribution.GMRFDistributionLikelihoodParser

# CONSTRAINTS
dr.inference.model.EqualityConstraintModel
dr.inference.model.EqualityConstrainedParameter
Expand Down
103 changes: 103 additions & 0 deletions src/dr/inferencexml/distribution/GMRFDistributionLikelihoodParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
/*
* GMRFDistributionLikelihoodParser.java
*
* Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard
*
* This file is part of BEAST.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* BEAST is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/

package dr.inferencexml.distribution;

import dr.evomodelxml.coalescent.GMRFSkyrideLikelihoodParser;
import dr.evomodelxml.coalescent.smooth.SmoothSkygridLikelihoodParser;
import dr.inference.model.Parameter;
import dr.math.distributions.GMRFDistributionLikelihood;
import dr.xml.*;

/**
* @author Marc Suchard
* @author Xiang Ji
*/
public class GMRFDistributionLikelihoodParser extends AbstractXMLObjectParser {

private static final String POPULATION_PARAMETER = GMRFSkyrideLikelihoodParser.POPULATION_PARAMETER;
private static final String PRECISION_PARAMETER = GMRFSkyrideLikelihoodParser.PRECISION_PARAMETER;

private static final String SINGLE_BETA = GMRFSkyrideLikelihoodParser.SINGLE_BETA;
private static final String TIME_AWARE_SMOOTHING = GMRFSkyrideLikelihoodParser.TIME_AWARE_SMOOTHING;

private static final String LAMBDA_PARAMETER = GMRFSkyrideLikelihoodParser.LAMBDA_PARAMETER;


public final String NAME = "gmrfDistributionLikelihood";

@Override
public Object parseXMLObject(XMLObject xo) throws XMLParseException {

XMLObject cxo = xo.getChild(POPULATION_PARAMETER);
Parameter popParameter = (Parameter) cxo.getChild(Parameter.class);

cxo = xo.getChild(PRECISION_PARAMETER);
Parameter precParameter = (Parameter) cxo.getChild(Parameter.class);

Parameter lambda;
if (xo.getChild(LAMBDA_PARAMETER) != null) {
cxo = xo.getChild(LAMBDA_PARAMETER);
lambda = (Parameter) cxo.getChild(Parameter.class);
} else {
lambda = new Parameter.Default(LAMBDA_PARAMETER, 1.0);
}

Parameter gridPoints = SmoothSkygridLikelihoodParser.getGridPoints(xo);
return new GMRFDistributionLikelihood(NAME, precParameter, lambda, gridPoints, popParameter);
}

@Override
public XMLSyntaxRule[] getSyntaxRules() {
return rules;
}
private final XMLSyntaxRule[] rules = {
new ElementRule(POPULATION_PARAMETER, new XMLSyntaxRule[]{
new ElementRule(Parameter.class)
}),
new ElementRule(PRECISION_PARAMETER, new XMLSyntaxRule[]{
new ElementRule(Parameter.class)
}),
new ElementRule(SINGLE_BETA, new XMLSyntaxRule[] {
new ElementRule(Parameter.class),
}, true),
AttributeRule.newBooleanRule(TIME_AWARE_SMOOTHING, true),
};

@Override
public String getParserDescription() {
return null;
}

@Override
public Class getReturnType() {
return GMRFDistributionLikelihood.class;
}

@Override
public String getParserName() {
return NAME;
}
}
15 changes: 11 additions & 4 deletions src/dr/math/distributions/GMRFDistributionLikelihood.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,15 @@
import dr.inference.model.Model;
import dr.inference.model.Parameter;
import dr.inference.model.Variable;
import dr.xml.Reportable;
import no.uib.cipr.matrix.DenseVector;
import no.uib.cipr.matrix.SymmTridiagMatrix;

/**
* @author Xiang Ji
* @author Marc A. Suchard
*/
public class GMRFDistributionLikelihood extends AbstractModelLikelihood implements MultivariateDistribution {
public class GMRFDistributionLikelihood extends AbstractModelLikelihood implements MultivariateDistribution, Reportable {

private Parameter precisionParameter;

Expand All @@ -63,6 +64,7 @@ public GMRFDistributionLikelihood(String name,
this.gridParameter = gridParameter;
this.fieldLength = popSizeParameter.getDimension();
this.popSizeParameter = popSizeParameter;
setupGMRFWeights();
addVariable(precisionParameter);
addVariable(lambdaParameter);
addVariable(gridParameter);
Expand Down Expand Up @@ -143,12 +145,12 @@ private DenseVector getMeanAdjustedGamma(double[] x) {

@Override
public double[][] getScaleMatrix() {
return new double[0][];
throw new RuntimeException("Not yet implemented");
}

@Override
public double[] getMean() {
return new double[0];
throw new RuntimeException("Not yet implemented");
}

@Override
Expand Down Expand Up @@ -188,11 +190,16 @@ public Model getModel() {

@Override
public double getLogLikelihood() {
return 0;
return logPdf(popSizeParameter.getParameterValues());
}

@Override
public void makeDirty() {

}

@Override
public String getReport() {
return "gmrfDistributionLikelihood(" + getLogLikelihood() + ")";
}
}

0 comments on commit 72af827

Please sign in to comment.