/* * File: GaussianConfidenceTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright July 16, 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.method; import gov.sandia.cognition.statistics.distribution.UnivariateGaussian; import java.util.Collection; import java.util.LinkedList; import java.util.Random; import junit.framework.TestCase; /** * * @author Kevin R. Dixon */ public class GaussianConfidenceTest extends TestCase { public static final Random random = new Random(1); public static final double TOLERANCE = 1e-5; public GaussianConfidenceTest(String testName) { super(testName); } public static GaussianConfidence createInstance() { return new GaussianConfidence(); } /** * Test of clone method, of class gov.sandia.cognition.learning.util.function.cost.GaussianConfidence. */ public void testClone() { System.out.println("clone"); GaussianConfidence instance = createInstance(); GaussianConfidence clone = (GaussianConfidence) instance.clone(); assertNotSame(instance, clone); } public static GaussianConfidence.Statistic createStatisticInstance() { double z = Math.abs(UnivariateGaussian.CDF.Inverse.evaluate(random.nextDouble(), 0.0, 1.0)); return new GaussianConfidence.Statistic(z); } /** * Test of clone method, of class gov.sandia.cognition.learning.util.statistics.GaussianConfidence.Statistic. */ public void testStatisticClone() { System.out.println("Statistic.clone"); GaussianConfidence.Statistic instance = createStatisticInstance(); GaussianConfidence.Statistic clone = (GaussianConfidence.Statistic) instance.clone(); assertNotSame(instance, clone); assertEquals(instance.getNullHypothesisProbability(), clone.getNullHypothesisProbability()); assertEquals(instance.getZ(), clone.getZ()); } /** * Test of getZ method, of class gov.sandia.cognition.learning.util.statistics.GaussianConfidence.Statistic. */ public void testStatisticGetZ() { System.out.println("Statistic.getZ"); double z = random.nextDouble(); GaussianConfidence.Statistic instance = new GaussianConfidence.Statistic(z); assertEquals(z, instance.getZ()); assertEquals(2.0 * UnivariateGaussian.CDF.evaluate(-z, 0, 1), instance.getNullHypothesisProbability()); } /** * Test of setZ method, of class gov.sandia.cognition.learning.util.statistics.GaussianConfidence.Statistic. */ public void testStatisticSetZ() { System.out.println("Statistic.setZ"); double z = random.nextDouble(); GaussianConfidence.Statistic instance = new GaussianConfidence.Statistic(z); assertEquals(z, instance.getZ()); double z2 = z + 1.0; instance.setZ(z2); assertEquals(z2, instance.getZ()); } /** * Test of evaluateNullHypothesis method, of class gov.sandia.cognition.learning.util.statistics.GaussianConfidence. */ public void testEvaluateNullHypothesis() { System.out.println("evaluateNullHypothesis"); int N1 = random.nextInt(1000) + 10; Collection<Double> data1 = new LinkedList<Double>(); UnivariateGaussian g1 = new UnivariateGaussian(random.nextGaussian(), random.nextDouble()); for (int i = 0; i < N1; i++) { data1.add(random.nextGaussian() * Math.sqrt(g1.getVariance()) + g1.getMean()); } int N2 = random.nextInt(1000) + 10; Collection<Double> data2 = new LinkedList<Double>(); UnivariateGaussian g2 = new UnivariateGaussian(random.nextGaussian(), random.nextDouble()); for (int i = 0; i < N2; i++) { data2.add(random.nextGaussian() * Math.sqrt(g2.getVariance()) + g2.getMean()); } GaussianConfidence instance = new GaussianConfidence(); GaussianConfidence.Statistic s1 = instance.evaluateNullHypothesis(data1, data1); assertEquals(0.0, s1.getZ()); assertEquals(1.0, s1.getNullHypothesisProbability()); GaussianConfidence.Statistic s2 = instance.evaluateNullHypothesis(data1, data2); assertTrue(s2.getZ() > 0.0); assertEquals(2.0 * UnivariateGaussian.CDF.evaluate(-s2.getZ(), 0, 1), s2.getNullHypothesisProbability(), 1e-5); } /** * Test of computeConfidenceInterval method, of class gov.sandia.cognition.learning.util.statistics.GaussianConfidence. */ public void testComputeConfidenceInterval() { System.out.println("computeConfidenceInterval"); int N = random.nextInt(1000) + 100; double confidence = random.nextDouble(); Collection<Double> data = new LinkedList<Double>(); for (int i = 0; i < N; i++) { data.add(random.nextGaussian()); } UnivariateGaussian g = UnivariateGaussian.MaximumLikelihoodEstimator.learn(data, 0.0); double alpha = 1.0 - confidence; double z = -UnivariateGaussian.CDF.Inverse.evaluate(alpha / 2.0, 0, 1); double delta = z * Math.sqrt(g.getVariance() / data.size()); GaussianConfidence conf = new GaussianConfidence(); ConfidenceInterval c = conf.computeConfidenceInterval(data, confidence); assertEquals(g.getMean(), c.getCentralValue(), TOLERANCE); assertEquals(g.getMean() - delta, c.getLowerBound(), TOLERANCE); assertEquals(g.getMean() + delta, c.getUpperBound(), TOLERANCE); assertEquals(N, c.getNumSamples()); assertEquals(confidence, c.getConfidence()); } }