1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.math.stat.descriptive.moment;
17
18 import junit.framework.Test;
19 import junit.framework.TestSuite;
20
21 import org.apache.commons.math.stat.descriptive.StorelessUnivariateStatisticAbstractTest;
22 import org.apache.commons.math.stat.descriptive.UnivariateStatistic;
23
24 /**
25 * Test cases for the {@link UnivariateStatistic} class.
26 *
27 * @version $Revision: 155427 $ $Date: 2005-02-26 06:11:52 -0700 (Sat, 26 Feb 2005) $
28 */
29 public class VarianceTest extends StorelessUnivariateStatisticAbstractTest{
30
31 protected Variance stat;
32
33 /**
34 * @param name
35 */
36 public VarianceTest(String name) {
37 super(name);
38 }
39
40
41
42
43 public UnivariateStatistic getUnivariateStatistic() {
44 return new Variance();
45 }
46
47 public static Test suite() {
48 TestSuite suite = new TestSuite(VarianceTest.class);
49 suite.setName("Variance Tests");
50 return suite;
51 }
52
53
54
55
56 public double expectedValue() {
57 return this.var;
58 }
59
60 /**
61 * Make sure Double.NaN is returned iff n = 0
62 *
63 */
64 public void testNaN() {
65 StandardDeviation std = new StandardDeviation();
66 assertTrue(Double.isNaN(std.getResult()));
67 std.increment(1d);
68 assertEquals(0d, std.getResult(), 0);
69 }
70
71 /**
72 * Test population version of variance
73 */
74 public void testPopulation() {
75 double[] values = {-1.0d, 3.1d, 4.0d, -2.1d, 22d, 11.7d, 3d, 14d};
76 SecondMoment m = new SecondMoment();
77 m.evaluate(values);
78 Variance v1 = new Variance();
79 v1.setBiasCorrected(false);
80 assertEquals(populationVariance(values), v1.evaluate(values), 1E-14);
81 v1.incrementAll(values);
82 assertEquals(populationVariance(values), v1.getResult(), 1E-14);
83 v1 = new Variance(false, m);
84 assertEquals(populationVariance(values), v1.getResult(), 1E-14);
85 v1 = new Variance(false);
86 assertEquals(populationVariance(values), v1.evaluate(values), 1E-14);
87 v1.incrementAll(values);
88 assertEquals(populationVariance(values), v1.getResult(), 1E-14);
89 }
90
91 /**
92 * Definitional formula for population variance
93 */
94 protected double populationVariance(double[] v) {
95 double mean = new Mean().evaluate(v);
96 double sum = 0;
97 for (int i = 0; i < v.length; i++) {
98 sum += (v[i] - mean) * (v[i] - mean);
99 }
100 return sum / (double) v.length;
101 }
102
103 }