/*
* File: AnalysisOfVarianceOneWayTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright August 17, 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 java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import junit.framework.TestCase;
/**
*
* @author Kevin R. Dixon
*/
public class AnalysisOfVarianceOneWayTest
extends TestCase
{
public AnalysisOfVarianceOneWayTest( String testName )
{
super( testName );
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.
*/
public void testClone()
{
System.out.println( "clone" );
AnalysisOfVarianceOneWay instance = new AnalysisOfVarianceOneWay();
AnalysisOfVarianceOneWay clone = (AnalysisOfVarianceOneWay) instance.clone();
assertNotSame( instance, clone );
}
/**
* Test of evaluateNullHypothesis method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.
*/
public void testEvaluateNullHypothesis1()
{
System.out.println( "evaluateNullHypothesis1" );
// I apologize for this clunky notation... it comes from a social
// science text book: "Statistics for the Behavioral Sciences" by
// Gravetter & Wallnau, Chapter 13.3, p. 406-412
// I also double-checked the results with the anova() function in
// octave
Collection<Collection<Double>> data = new LinkedList<Collection<Double>>();
data.add( Arrays.asList( 0.0, 1.0, 3.0, 1.0, 0.0 ) );
data.add( Arrays.asList( 4.0, 3.0, 6.0, 3.0, 4.0 ) );
data.add( Arrays.asList( 1.0, 2.0, 2.0, 0.0, 0.0 ) );
AnalysisOfVarianceOneWay.Statistic stat =
AnalysisOfVarianceOneWay.INSTANCE.evaluateNullHypothesis( data );
final double EPS = 1e-4;
assertEquals( 0.0017708, stat.getNullHypothesisProbability(), EPS );
assertEquals( 11.25, stat.getF(), EPS );
assertEquals( 2.0, stat.getDFbetween(), EPS );
assertEquals( 12.0, stat.getDFwithin(), EPS );
System.out.println( "p = " + stat.getNullHypothesisProbability() );
System.out.println( "F = " + stat.getF() );
System.out.println( "DFb = " + stat.getDFbetween() );
System.out.println( "DFw = " + stat.getDFwithin() );
}
/**
* Test of evaluateNullHypothesis method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.
*/
public void testEvaluateNullHypothesis2()
{
System.out.println( "evaluateNullHypothesis2" );
// I also double-checked the results with the anova() function in
// octave
Collection<Collection<Double>> data = new LinkedList<Collection<Double>>();
data.add( Arrays.asList( 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 ) );
data.add( Arrays.asList( 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0 ) );
AnalysisOfVarianceOneWay.Statistic stat =
AnalysisOfVarianceOneWay.INSTANCE.evaluateNullHypothesis( data );
System.out.println( "p = " + stat.getNullHypothesisProbability() );
System.out.println( "F = " + stat.getF() );
System.out.println( "DFb = " + stat.getDFbetween() );
System.out.println( "DFw = " + stat.getDFwithin() );
final double EPS = 1e-4;
assertEquals( 0.030842, stat.getNullHypothesisProbability(), EPS );
assertEquals( 5.4878, stat.getF(), EPS );
assertEquals( 1.0, stat.getDFbetween(), EPS );
assertEquals( 18.0, stat.getDFwithin(), EPS );
}
public AnalysisOfVarianceOneWay.Statistic createStatisticInstance()
{
double F = Math.random() + 1.0;
double dof1 = Math.random() * 10 + 1;
double dof2 = Math.random() * 10 + 1;
return new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticClone()
{
System.out.println( "Statistic.clone" );
AnalysisOfVarianceOneWay.Statistic instance = this.createStatisticInstance();
AnalysisOfVarianceOneWay.Statistic clone = instance.clone();
assertNotSame( instance, clone );
assertEquals( instance.getNullHypothesisProbability(), clone.getNullHypothesisProbability() );
assertEquals( instance.getDFbetween(), clone.getDFbetween() );
assertEquals( instance.getDFwithin(), clone.getDFwithin() );
assertEquals( instance.getF(), clone.getF() );
}
/**
* Test of getF method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticGetF()
{
System.out.println( "Statistic.getF" );
double F = Math.random();
double dof1 = 10;
double dof2 = 20;
AnalysisOfVarianceOneWay.Statistic instance = new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
assertEquals( F, instance.getF() );
}
/**
* Test of setF method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticSetF()
{
System.out.println( "Statistic.setF" );
double F = Math.random();
double dof1 = 10;
double dof2 = 20;
AnalysisOfVarianceOneWay.Statistic instance = new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
assertEquals( F, instance.getF() );
double F2 = F + 1.0;
instance.setF( F2 );
assertEquals( F2, instance.getF() );
}
/**
* Test of getDFbetween method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticGetDFbetween()
{
System.out.println( "Statistic.getDFbetween" );
double F = Math.random();
double dof1 = 10;
double dof2 = 20;
AnalysisOfVarianceOneWay.Statistic instance = new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
assertEquals( dof1, instance.getDFbetween() );
}
/**
* Test of setDFbetween method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticSetDFbetween()
{
System.out.println( "Statistic.setDFbetween" );
double F = Math.random();
double dof1 = 10;
double dof2 = 20;
AnalysisOfVarianceOneWay.Statistic instance = new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
assertEquals( dof1, instance.getDFbetween() );
double dof12 = dof1 + 1.0;
instance.setDFbetween( dof12 );
assertEquals( dof12, instance.getDFbetween() );
}
/**
* Test of getDFwithin method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticGetDFwithin()
{
System.out.println( "Statistic.getDFwithin" );
double F = Math.random();
double dof1 = 10;
double dof2 = 20;
AnalysisOfVarianceOneWay.Statistic instance = new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
assertEquals( dof2, instance.getDFwithin() );
}
/**
* Test of setDFwithin method, of class gov.sandia.cognition.learning.util.statistics.AnalysisOfVarianceOneWay.Statistic.
*/
public void testStatisticSetDFwithin()
{
System.out.println( "Statistic.setDFwithin" );
double F = Math.random();
double dof1 = 10;
double dof2 = 20;
AnalysisOfVarianceOneWay.Statistic instance = new AnalysisOfVarianceOneWay.Statistic( F, dof1, dof2 );
assertEquals( dof2, instance.getDFwithin() );
double dof22 = dof2 + 1.0;
instance.setDFwithin( dof22 );
assertEquals( dof22, instance.getDFwithin() );
}
public void testMemberEvaluate()
{
System.out.println( "Member Evaluate" );
// I also double-checked the results with the anova() function in
// octave
Collection<Double> data1 = Arrays.asList( 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 );
Collection<Double> data2 = Arrays.asList( 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0 );
AnalysisOfVarianceOneWay anova = new AnalysisOfVarianceOneWay();
AnalysisOfVarianceOneWay.Statistic stat =
anova.evaluateNullHypothesis( data1, data2 );
final double EPS = 1e-4;
assertEquals( 0.030842, stat.getNullHypothesisProbability(), EPS );
assertEquals( 5.4878, stat.getF(), EPS );
assertEquals( 1.0, stat.getDFbetween(), EPS );
assertEquals( 18.0, stat.getDFwithin(), EPS );
}
}