/*
* File: MultivariateCumulativeDistributionFunctionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Aug 31, 2010, Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the U.S. Government.
* Export of this program may require a license from the United States
* Government. See CopyrightHistory.txt for complete details.
*
*/
package gov.sandia.cognition.statistics.montecarlo;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.statistics.Distribution;
import gov.sandia.cognition.statistics.distribution.MultivariateGaussian;
import gov.sandia.cognition.statistics.distribution.UnivariateGaussian;
import gov.sandia.cognition.statistics.method.GaussianConfidence;
import java.util.ArrayList;
import junit.framework.TestCase;
import java.util.Random;
/**
* Unit tests for MultivariateCumulativeDistributionFunctionTest.
*
* @author krdixon
*/
public class MultivariateCumulativeDistributionFunctionTest
extends TestCase
{
/**
* Random number generator to use for a fixed random seed.
*/
public final Random RANDOM = new Random( 1 );
/**
* Default tolerance of the regression tests, {@value}.
*/
public final double TOLERANCE = 1e-5;
/**
* Confidence, {@value}.
*/
public final double CONFIDENCE = 0.95;
/**
* Tests for class MultivariateCumulativeDistributionFunctionTest.
* @param testName Name of the test.
*/
public MultivariateCumulativeDistributionFunctionTest(
String testName)
{
super(testName);
}
/**
* Tests the constructors of class MultivariateCumulativeDistributionFunctionTest.
*/
public void testConstructors()
{
System.out.println( "Constructors" );
MultivariateCumulativeDistributionFunction instance =
new MultivariateCumulativeDistributionFunction();
assertNotNull( instance );
}
protected void testGaussian(
int dim,
double tolerance )
{
System.out.println( "Gaussian Dimension: " + dim );
Distribution<Vector> d1 = new MultivariateGaussian(dim);
Vector x1 = VectorFactory.getDefault().createVector(dim);
int num = 10;
ArrayList<Double> means = new ArrayList<Double>( num );
ArrayList<Double> variances = new ArrayList<Double>( num );
for( int n = 0; n < num; n++ )
{
UnivariateGaussian result = MultivariateCumulativeDistributionFunction.compute(
x1, d1, RANDOM, tolerance );
means.add( result.getMean() );
variances.add( result.getVariance() );
}
GaussianConfidence.Statistic meanConfidence =
GaussianConfidence.evaluateNullHypothesis(means, 1.0/Math.pow(
2.0, dim) );
UnivariateGaussian meanResult =
UnivariateGaussian.MaximumLikelihoodEstimator.learn( means, 0.0 );
System.out.println( "Mean Result: " + meanResult );
System.out.println( "Mean Confidence: " + meanConfidence );
assertEquals( 1.0, meanConfidence.getNullHypothesisProbability(), 1.0-tolerance );
double numericalStddev = Math.sqrt(meanResult.getVariance());
System.out.println( "Numerical StdDev: " + numericalStddev );
assertTrue( numericalStddev <= tolerance );
UnivariateGaussian varianceResult =
UnivariateGaussian.MaximumLikelihoodEstimator.learn(variances, 0.0);
System.out.println( "Variance Result: " + varianceResult );
double sp = (Math.sqrt(meanResult.getVariance()) - Math.sqrt(varianceResult.getMean())) / Math.sqrt(meanResult.getVariance());
System.out.println( "StdDev Pct: " + sp );
// assertEquals( 0.0, sp, 1.0-CONFIDENCE);
}
/**
* Test of compute method, of class MultivariateCumulativeDistributionFunction.
*/
public void testComputeOneDim()
{
System.out.println("compute One Dim");
this.testGaussian(1, 1e-2);
}
public void testComputeDim3()
{
System.out.println( "compute 3 Dim" );
this.testGaussian(3, 1e-2);
}
}