/*
* File: BetaDistributionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright October 2, 2007, 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.distribution;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.statistics.SmoothUnivariateDistributionTestHarness;
/**
*
* @author Kevin R. Dixon
*/
public class BetaDistributionTest
extends SmoothUnivariateDistributionTestHarness
{
/**
* Test
* @param testName name
*/
public BetaDistributionTest(
String testName )
{
super( testName );
}
@Override
public BetaDistribution createInstance()
{
double alpha = RANDOM.nextDouble() * 5;
double beta = RANDOM.nextDouble() * 5;
return new BetaDistribution( alpha, beta );
}
@Override
public void testDistributionConstructors()
{
System.out.println( "Default constructor" );
BetaDistribution instance = new BetaDistribution();
assertEquals( BetaDistribution.DEFAULT_ALPHA, instance.getAlpha() );
assertEquals( BetaDistribution.DEFAULT_BETA, instance.getBeta() );
double a = RANDOM.nextDouble();
double b = RANDOM.nextDouble();
instance = new BetaDistribution( a, b );
assertEquals( a, instance.getAlpha() );
assertEquals( b, instance.getBeta() );
BetaDistribution d2 = new BetaDistribution( instance );
assertEquals( instance.getAlpha(), d2.getAlpha() );
assertEquals( instance.getBeta(), d2.getBeta() );
}
/**
* Test of getAlpha method, of class gov.sandia.cognition.learning.util.statistics.distribution.BetaDistribution.
*/
public void testGetAlpha()
{
System.out.println( "getAlpha" );
double a = RANDOM.nextDouble();
double b = RANDOM.nextDouble();
BetaDistribution instance = new BetaDistribution( a, b );
assertEquals( a, instance.getAlpha() );
}
/**
* Test of setAlpha method, of class gov.sandia.cognition.learning.util.statistics.distribution.BetaDistribution.
*/
public void testSetAlpha()
{
System.out.println( "setAlpha" );
BetaDistribution.PDF instance = this.createInstance().getProbabilityFunction();
assertTrue( instance.getAlpha() > 0.0 );
double v = instance.getAlpha() + 1.0;
instance.setAlpha( v );
assertEquals( v, instance.getAlpha() );
try
{
instance.setAlpha( 0.0 );
fail( "Alpha must be > 0.0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
/**
* Test of getBeta method, of class gov.sandia.cognition.learning.util.statistics.distribution.BetaDistribution.
*/
public void testGetBeta()
{
System.out.println( "getBeta" );
double a = RANDOM.nextDouble();
double b = RANDOM.nextDouble();
BetaDistribution instance = new BetaDistribution( a, b );
assertEquals( b, instance.getBeta() );
}
/**
* Test of setBeta method, of class gov.sandia.cognition.learning.util.statistics.distribution.BetaDistribution.
*/
public void testSetBeta()
{
System.out.println( "setBeta" );
BetaDistribution.PDF instance = this.createInstance().getProbabilityFunction();
assertTrue( instance.getBeta() > 0.0 );
double v = instance.getBeta() + 1.0;
instance.setBeta( v );
assertEquals( v, instance.getBeta() );
try
{
instance.setBeta( 0.0 );
fail( "Beta must be > 0.0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public void testPDFKnownValues()
{
System.out.println( "PDF.evaluate" );
// I got these values from beta_pdf() in octave
assertEquals( 0.6366197724, BetaDistribution.PDF.evaluate( 0.5, 0.5, 0.5 ), TOLERANCE );
assertEquals( 1.0610329539, BetaDistribution.PDF.evaluate( 0.1, 0.5, 0.5 ), TOLERANCE );
assertEquals( 1.1599612085, BetaDistribution.PDF.evaluate( 0.1, 0.3, 0.5 ), TOLERANCE );
assertEquals( 1.5360000000, BetaDistribution.PDF.evaluate( 0.2, 2.0, 3.0 ), TOLERANCE );
assertEquals( 0.0, BetaDistribution.PDF.evaluate( -1.0, 1.0, 2.0 ) );
assertEquals( 0.0, BetaDistribution.PDF.evaluate( 2.0, 1.0, 2.0 ) );
}
@Override
public void testCDFKnownValues()
{
System.out.println( "CDF.evaluate" );
// I got these values from octave's beta_cdf() function
assertEquals( 0.5000000000, BetaDistribution.CDF.evaluate( 0.5, 0.5, 0.5 ), TOLERANCE );
assertEquals( 0.7048327647, BetaDistribution.CDF.evaluate( 0.8, 0.5, 0.5 ), TOLERANCE );
assertEquals( 0.3739009663, BetaDistribution.CDF.evaluate( 0.8, 2.0, 0.5 ), TOLERANCE );
assertEquals( 0.8032260180, BetaDistribution.CDF.evaluate( 0.8, 2.0, 1.5 ), TOLERANCE );
assertEquals( 0.0181127865, BetaDistribution.CDF.evaluate( 0.1, 2.0, 1.5 ), TOLERANCE );
}
@Override
public void testKnownConvertToVector()
{
System.out.println( "CDF.convertToVector" );
BetaDistribution instance = this.createInstance();
Vector x = instance.convertToVector();
assertEquals( 2, x.getDimensionality() );
assertEquals( instance.getAlpha(), x.getElement( 0 ) );
assertEquals( instance.getBeta(), x.getElement( 1 ) );
}
@Override
public void testPDFConstructors()
{
System.out.println( "PDF Constructors" );
BetaDistribution.PDF instance = new BetaDistribution.PDF();
assertEquals( BetaDistribution.DEFAULT_ALPHA, instance.getAlpha() );
assertEquals( BetaDistribution.DEFAULT_BETA, instance.getBeta() );
double a = RANDOM.nextDouble();
double b = RANDOM.nextDouble();
instance = new BetaDistribution.PDF( a, b );
assertEquals( a, instance.getAlpha() );
assertEquals( b, instance.getBeta() );
BetaDistribution.PDF d2 = new BetaDistribution.PDF( instance );
assertEquals( instance.getAlpha(), d2.getAlpha() );
assertEquals( instance.getBeta(), d2.getBeta() );
}
@Override
public void testCDFConstructors()
{
System.out.println( "CDF Constructors" );
BetaDistribution.CDF instance = new BetaDistribution.CDF();
assertEquals( BetaDistribution.DEFAULT_ALPHA, instance.getAlpha() );
assertEquals( BetaDistribution.DEFAULT_BETA, instance.getBeta() );
double a = RANDOM.nextDouble();
double b = RANDOM.nextDouble();
instance = new BetaDistribution.CDF( a, b );
assertEquals( a, instance.getAlpha() );
assertEquals( b, instance.getBeta() );
BetaDistribution.CDF d2 = new BetaDistribution.CDF( instance );
assertEquals( instance.getAlpha(), d2.getAlpha() );
assertEquals( instance.getBeta(), d2.getBeta() );
}
/**
* Learner
*/
public void testLearner()
{
System.out.println( "Learner" );
BetaDistribution.MomentMatchingEstimator learner =
new BetaDistribution.MomentMatchingEstimator();
this.distributionEstimatorTest(learner);
}
/**
* Weighted learner
*/
public void testWeightedLearner()
{
System.out.println( "Weighted Learner" );
BetaDistribution.WeightedMomentMatchingEstimator learner =
new BetaDistribution.WeightedMomentMatchingEstimator();
this.weightedDistributionEstimatorTest(learner);
}
}