1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math4.legacy.stat.inference;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import org.apache.commons.math4.legacy.exception.MathIllegalArgumentException;
23 import org.apache.commons.math4.legacy.stat.descriptive.SummaryStatistics;
24 import org.junit.Assert;
25 import org.junit.Test;
26
27
28
29
30
31
32
33 public class OneWayAnovaTest {
34
35 protected OneWayAnova testStatistic = new OneWayAnova();
36
37 private double[] emptyArray = {};
38
39 private double[] classA =
40 {93.0, 103.0, 95.0, 101.0, 91.0, 105.0, 96.0, 94.0, 101.0 };
41 private double[] classB =
42 {99.0, 92.0, 102.0, 100.0, 102.0, 89.0 };
43 private double[] classC =
44 {110.0, 115.0, 111.0, 117.0, 128.0, 117.0 };
45
46 @Test
47 public void testAnovaFValue() {
48
49 List<double[]> threeClasses = new ArrayList<>();
50 threeClasses.add(classA);
51 threeClasses.add(classB);
52 threeClasses.add(classC);
53
54 Assert.assertEquals("ANOVA F-value", 24.67361709460624,
55 testStatistic.anovaFValue(threeClasses), 1E-12);
56
57 List<double[]> twoClasses = new ArrayList<>();
58 twoClasses.add(classA);
59 twoClasses.add(classB);
60
61 Assert.assertEquals("ANOVA F-value", 0.0150579150579,
62 testStatistic.anovaFValue(twoClasses), 1E-12);
63
64 List<double[]> emptyContents = new ArrayList<>();
65 emptyContents.add(emptyArray);
66 emptyContents.add(classC);
67 try {
68 testStatistic.anovaFValue(emptyContents);
69 Assert.fail("empty array for key classX, MathIllegalArgumentException expected");
70 } catch (MathIllegalArgumentException ex) {
71
72 }
73
74 List<double[]> tooFew = new ArrayList<>();
75 tooFew.add(classA);
76 try {
77 testStatistic.anovaFValue(tooFew);
78 Assert.fail("less than two classes, MathIllegalArgumentException expected");
79 } catch (MathIllegalArgumentException ex) {
80
81 }
82 }
83
84
85 @Test
86 public void testAnovaPValue() {
87
88 List<double[]> threeClasses = new ArrayList<>();
89 threeClasses.add(classA);
90 threeClasses.add(classB);
91 threeClasses.add(classC);
92
93 Assert.assertEquals("ANOVA P-value", 6.959446E-06,
94 testStatistic.anovaPValue(threeClasses), 1E-12);
95
96 List<double[]> twoClasses = new ArrayList<>();
97 twoClasses.add(classA);
98 twoClasses.add(classB);
99
100 Assert.assertEquals("ANOVA P-value", 0.904212960464,
101 testStatistic.anovaPValue(twoClasses), 1E-12);
102 }
103
104 @Test
105 public void testAnovaPValueSummaryStatistics() {
106
107 List<SummaryStatistics> threeClasses = new ArrayList<>();
108 SummaryStatistics statsA = new SummaryStatistics();
109 for (double a : classA) {
110 statsA.addValue(a);
111 }
112 threeClasses.add(statsA);
113 SummaryStatistics statsB = new SummaryStatistics();
114 for (double b : classB) {
115 statsB.addValue(b);
116 }
117 threeClasses.add(statsB);
118 SummaryStatistics statsC = new SummaryStatistics();
119 for (double c : classC) {
120 statsC.addValue(c);
121 }
122 threeClasses.add(statsC);
123
124 Assert.assertEquals("ANOVA P-value", 6.959446E-06,
125 testStatistic.anovaPValue(threeClasses, true), 1E-12);
126
127 List<SummaryStatistics> twoClasses = new ArrayList<>();
128 twoClasses.add(statsA);
129 twoClasses.add(statsB);
130
131 Assert.assertEquals("ANOVA P-value", 0.904212960464,
132 testStatistic.anovaPValue(twoClasses, false), 1E-12);
133 }
134
135 @Test
136 public void testAnovaTest() {
137
138 List<double[]> threeClasses = new ArrayList<>();
139 threeClasses.add(classA);
140 threeClasses.add(classB);
141 threeClasses.add(classC);
142
143 Assert.assertTrue("ANOVA Test P<0.01", testStatistic.anovaTest(threeClasses, 0.01));
144
145 List<double[]> twoClasses = new ArrayList<>();
146 twoClasses.add(classA);
147 twoClasses.add(classB);
148
149 Assert.assertFalse("ANOVA Test P>0.01", testStatistic.anovaTest(twoClasses, 0.01));
150 }
151 }