/* * File: FriedmanConfidenceTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright May 4, 2011, 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.collection.CollectionUtil; import gov.sandia.cognition.statistics.distribution.ChiSquareDistribution; import gov.sandia.cognition.statistics.distribution.SnedecorFDistribution; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Random; import org.junit.Test; import static org.junit.Assert.*; /** * Tests for class FriedmanConfidenceTest. * @author krdixon */ public class FriedmanConfidenceTest { /** * 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; /** * Default number of samples to test against, {@value}. */ public final int NUM_SAMPLES = 1000; /** * Default Constructor */ public FriedmanConfidenceTest() { } /** * Test of clone method, of class FriedmanConfidence. */ @Test public void testConstructors() { System.out.println("Constructors"); FriedmanConfidence instance = new FriedmanConfidence(); assertNotNull( instance ); } @Test public void testCreateStatistic() { System.out.println( "Create statistic" ); // Demsar's paper, p. 13 ArrayList<Double> treatmentRankMeans = CollectionUtil.asArrayList( Arrays.asList( 3.143, 2.000, 2.893, 1.964 ) ); FriedmanConfidence.Statistic instance = new FriedmanConfidence.Statistic( 4, 14, treatmentRankMeans ); assertEquals( 9.28, instance.getChiSquare(), 0.01 ); assertEquals( 3.69, instance.getF(), 0.01 ); assertEquals( 1.0-SnedecorFDistribution.CDF.evaluate(instance.getF(),3.0, 39.0), instance.getNullHypothesisProbability(), TOLERANCE ); assertEquals( 1.0-ChiSquareDistribution.CDF.evaluate(instance.getChiSquare(),3.0), instance.getChiSquareNullHypothesisProbability(), TOLERANCE ); } /** * Test of evaluateNullHypothesis method, of class FriedmanConfidence. */ @Test public void testEvaluateNullHypothesis_Collection_Collection() { System.out.println("evaluateNullHypothesis"); Collection<Double> A = Arrays.asList( 9.0, 9.5, 5.0, 7.5, 9.5, 7.5, 8.0, 7.0, 8.5, 6.0 ); Collection<Double> C = Arrays.asList( 6.0, 8.0, 4.0, 6.0, 7.0, 6.5, 6.0, 4.0, 6.5, 3.0 ); FriedmanConfidence instance = new FriedmanConfidence(); FriedmanConfidence.Statistic result = instance.evaluateNullHypothesis(A,C); System.out.println( "Result: " + result ); } /** * Test of evaluateNullHypothesis method, of class FriedmanConfidence. */ @Test public void testEvaluateNullHypothesis_Collection() { System.out.println("evaluateNullHypothesis"); // From: http://faculty.vassar.edu/lowry/ch15a.html Collection<Double> A = Arrays.asList( 9.0, 9.5, 5.0, 7.5, 9.5, 7.5, 8.0, 7.0, 8.5, 6.0 ); Collection<Double> B = Arrays.asList( 7.0, 6.5, 7.0, 7.5, 5.0, 8.0, 6.0, 6.5, 7.0, 7.0 ); Collection<Double> C = Arrays.asList( 6.0, 8.0, 4.0, 6.0, 7.0, 6.5, 6.0, 4.0, 6.5, 3.0 ); @SuppressWarnings("unchecked") Collection<? extends Collection<Double>> experiment = Arrays.asList( A, B, C ); FriedmanConfidence.Statistic result = FriedmanConfidence.INSTANCE.evaluateNullHypothesis(experiment); System.out.println( "Result: " + result ); assertEquals( 9.95, result.getChiSquare(), TOLERANCE ); assertEquals( 2.0, result.getDegreesOfFreedom(), TOLERANCE ); assertEquals( 3, result.getTreatmentCount() ); assertEquals( 10, result.getSubjectCount() ); assertEquals( 2.65, result.getTreatmentRankMeans().get(0), TOLERANCE ); assertEquals( 2.1, result.getTreatmentRankMeans().get(1), TOLERANCE ); assertEquals( 1.25, result.getTreatmentRankMeans().get(2), TOLERANCE ); FriedmanConfidence.Statistic clone = result.clone(); assertNotSame( result.getTreatmentRankMeans(), clone.getTreatmentRankMeans() ); assertEquals( result.toString(), clone.toString() ); } /** * Test of evaluateNullHypothesis method, of class FriedmanConfidence. */ @Test public void testEvaluateNullHypothesis2() { System.out.println("evaluateNullHypothesis2"); // From: http://www.scribd.com/doc/14109461/Friedman-nonparametric-test Collection<Integer> A = Arrays.asList( 167, 267, 303, 110, 120, 210, 113, 223 ); Collection<Integer> B = Arrays.asList( 111, 222, 245, 134, 345, 304, 129, 289 ); Collection<Integer> C = Arrays.asList( 310, 456, 532, 220, 678, 315, 189, 430 ); @SuppressWarnings("unchecked") Collection<? extends Collection<Integer>> experiment = Arrays.asList( A, B, C ); FriedmanConfidence.Statistic result = FriedmanConfidence.INSTANCE.evaluateNullHypothesis(experiment); System.out.println( "Result: " + result ); assertEquals( 3.884892407768348E-5, result.getNullHypothesisProbability(), TOLERANCE ); assertEquals( 0.0021874911181828383, result.getChiSquareNullHypothesisProbability(), TOLERANCE ); assertEquals( 12.25, result.getChiSquare(), TOLERANCE ); assertEquals( 2.0, result.getDegreesOfFreedom(), TOLERANCE ); assertEquals( 3, result.getTreatmentCount() ); assertEquals( 8, result.getSubjectCount() ); assertEquals( 22.866666666666667, result.getF(), TOLERANCE ); assertEquals( 1.375, result.getTreatmentRankMeans().get(0), TOLERANCE ); assertEquals( 1.625, result.getTreatmentRankMeans().get(1), TOLERANCE ); assertEquals( 3.0, result.getTreatmentRankMeans().get(2), TOLERANCE ); } }