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 org.apache.commons.math4.legacy.exception.DimensionMismatchException;
20  import org.apache.commons.math4.legacy.exception.NoDataException;
21  import org.apache.commons.math4.legacy.exception.NullArgumentException;
22  import org.apache.commons.math4.legacy.exception.NumberIsTooLargeException;
23  import org.junit.Assert;
24  import org.junit.Test;
25  
26  
27  
28  
29  
30  
31  
32  public class WilcoxonSignedRankTestTest {
33  
34      protected WilcoxonSignedRankTest testStatistic = new WilcoxonSignedRankTest();
35  
36      @Test
37      public void testWilcoxonSignedRankSimple() {
38          
39  
40  
41  
42          final double x[] = {1.83, 0.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30};
43          final double y[] = {0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29};
44  
45          
46  
47  
48  
49  
50  
51          Assert.assertEquals(40, testStatistic.wilcoxonSignedRank(x, y), 1e-10);
52          Assert.assertEquals(0.03906, testStatistic.wilcoxonSignedRankTest(x, y, true), 1e-5);
53  
54          
55  
56  
57  
58  
59  
60  
61  
62          Assert.assertEquals(40, testStatistic.wilcoxonSignedRank(x, y), 1e-10);
63          Assert.assertEquals(0.0329693812, testStatistic.wilcoxonSignedRankTest(x, y, false), 1e-10);
64      }
65  
66      @Test
67      public void testWilcoxonSignedRankInputValidation() {
68          
69  
70  
71          final double[] x1 = new double[30];
72          final double[] x2 = new double[31];
73          final double[] y1 = new double[30];
74          final double[] y2 = new double[31];
75          for (int i = 0; i < 30; ++i) {
76              x1[i] = x2[i] = y1[i] = y2[i] = i;
77          }
78  
79          
80          
81  
82          try {
83              testStatistic.wilcoxonSignedRankTest(x2, y2, true);
84              Assert.fail("More than 30 samples and exact chosen, NumberIsTooLargeException expected");
85          } catch (NumberIsTooLargeException ex) {
86              
87          }
88  
89          
90  
91          try {
92              testStatistic.wilcoxonSignedRankTest(new double[] { }, new double[] { 1.0 }, true);
93              Assert.fail("x does not contain samples (exact), NoDataException expected");
94          } catch (NoDataException ex) {
95              
96          }
97  
98          try {
99              testStatistic.wilcoxonSignedRankTest(new double[] { }, new double[] { 1.0 }, false);
100             Assert.fail("x does not contain samples (asymptotic), NoDataException expected");
101         } catch (NoDataException ex) {
102             
103         }
104 
105         try {
106             testStatistic.wilcoxonSignedRankTest(new double[] { 1.0 }, new double[] { }, true);
107             Assert.fail("y does not contain samples (exact), NoDataException expected");
108         } catch (NoDataException ex) {
109             
110         }
111 
112         try {
113             testStatistic.wilcoxonSignedRankTest(new double[] { 1.0 }, new double[] { }, false);
114             Assert.fail("y does not contain samples (asymptotic), NoDataException expected");
115         } catch (NoDataException ex) {
116             
117         }
118 
119         
120 
121         try {
122             testStatistic.wilcoxonSignedRankTest(new double[] { 1.0, 2.0 }, new double[] { 3.0 }, true);
123             Assert.fail("x and y not same size (exact), DimensionMismatchException expected");
124         } catch (DimensionMismatchException ex) {
125             
126         }
127 
128         try {
129             testStatistic.wilcoxonSignedRankTest(new double[] { 1.0, 2.0 }, new double[] { 3.0 }, false);
130             Assert.fail("x and y not same size (asymptotic), DimensionMismatchException expected");
131         } catch (DimensionMismatchException ex) {
132             
133         }
134 
135         
136 
137 
138         try {
139             testStatistic.wilcoxonSignedRankTest(null, null, true);
140             Assert.fail("x and y is null (exact), NullArgumentException expected");
141         } catch (NullArgumentException ex) {
142             
143         }
144 
145         try {
146             testStatistic.wilcoxonSignedRankTest(null, null, false);
147             Assert.fail("x and y is null (asymptotic), NullArgumentException expected");
148         } catch (NullArgumentException ex) {
149             
150         }
151 
152         
153 
154 
155         try {
156             testStatistic.wilcoxonSignedRankTest(null, new double[] { 1.0 }, true);
157             Assert.fail("x is null (exact), NullArgumentException expected");
158         } catch (NullArgumentException ex) {
159             
160         }
161 
162         try {
163             testStatistic.wilcoxonSignedRankTest(null, new double[] { 1.0 }, false);
164             Assert.fail("x is null (asymptotic), NullArgumentException expected");
165         } catch (NullArgumentException ex) {
166             
167         }
168 
169         try {
170             testStatistic.wilcoxonSignedRankTest(new double[] { 1.0 }, null, true);
171             Assert.fail("y is null (exact), NullArgumentException expected");
172         } catch (NullArgumentException ex) {
173             
174         }
175 
176         try {
177             testStatistic.wilcoxonSignedRankTest(new double[] { 1.0 }, null, false);
178             Assert.fail("y is null (asymptotic), NullArgumentException expected");
179         } catch (NullArgumentException ex) {
180             
181         }
182     }
183 }