1 package baseCode.math;
2
3 import junit.framework.TestCase;
4 import baseCode.math.DescriptiveWithMissing;
5 import baseCode.util.RegressionTesting;
6 import cern.colt.list.DoubleArrayList;
7 import cern.jet.stat.Descriptive;
8
9 /***
10 * <p>
11 * Title:
12 * </p>
13 * <p>
14 * Description:
15 * </p>
16 * <p>
17 * Copyright: Copyright (c) 2004
18 * </p>
19 * <p>
20 * Institution:: Columbia University
21 * </p>
22 *
23 * @author Paul Pavlidis
24 * @version $Id: TestDescriptiveWithMissing.java,v 1.1 2005/03/17 13:58:41 pavlidis Exp $
25 */
26
27 public class TestDescriptiveWithMissing extends TestCase {
28
29 private DoubleArrayList data1missing;
30 private DoubleArrayList data1Nomissing;
31 private DoubleArrayList data2missing;
32 private DoubleArrayList data2Nomissing;
33 private DoubleArrayList data3shortmissing;
34 private DoubleArrayList data3shortNomissing;
35
36 private DoubleArrayList datacortest1Nomissing;
37 private DoubleArrayList datacortest2Nomissing;
38 private DoubleArrayList dataAcortest1Nomissing;
39
40 protected void setUp() throws Exception {
41 super.setUp();
42 data1missing = new DoubleArrayList( new double[] {
43 1.0, Double.NaN, 3.0, 4.0, 5.0, 6.0
44 } );
45 data2missing = new DoubleArrayList( new double[] {
46 Double.NaN, Double.NaN, 3.0, Double.NaN, 3.5, 4.0
47 } );
48 data3shortmissing = new DoubleArrayList( new double[] {
49 Double.NaN, Double.NaN, 3.0
50 } );
51
52
53 data1Nomissing = new DoubleArrayList( new double[] {
54 1.0, 3.0, 4.0, 5.0, 6.0
55 } );
56 data2Nomissing = new DoubleArrayList( new double[] {
57 3.0, 3.5, 4.0
58 } );
59 data3shortNomissing = new DoubleArrayList( new double[] {
60 3.0
61 } );
62
63 datacortest1Nomissing = new DoubleArrayList( new double[] {
64 3.0, 5.0, 6.0
65 } );
66 dataAcortest1Nomissing = new DoubleArrayList( new double[] {
67 1.0, 3.0, 5.0, 6.0
68 } );
69 datacortest2Nomissing = new DoubleArrayList( new double[] {
70 3.0, 3.5, 4.0
71 } );
72
73 }
74
75 protected void tearDown() throws Exception {
76 super.tearDown();
77 }
78
79 public void testCorrelationA() {
80 double s1 = Math.sqrt( Descriptive.sampleVariance(
81 datacortest1Nomissing.size(), Descriptive
82 .sum( datacortest1Nomissing ), Descriptive
83 .sumOfSquares( datacortest1Nomissing ) ) );
84 double s2 = Math.sqrt( Descriptive.sampleVariance(
85 datacortest2Nomissing.size(), Descriptive
86 .sum( datacortest2Nomissing ), Descriptive
87 .sumOfSquares( datacortest2Nomissing ) ) );
88
89 double expectedReturn = Descriptive.correlation( datacortest1Nomissing,
90 s1, datacortest2Nomissing, s2 );
91 double actualReturn = DescriptiveWithMissing.correlation( data1missing,
92 data2missing );
93 assertEquals( "return value", expectedReturn, actualReturn,
94 1e-15 );
95 }
96
97 public void testCorrelationB() {
98 double s1 = Math.sqrt( Descriptive.sampleVariance(
99 datacortest1Nomissing.size(), Descriptive
100 .sum( datacortest1Nomissing ), Descriptive
101 .sumOfSquares( datacortest1Nomissing ) ) );
102 double s2 = Math.sqrt( Descriptive.sampleVariance(
103 datacortest2Nomissing.size(), Descriptive
104 .sum( datacortest2Nomissing ), Descriptive
105 .sumOfSquares( datacortest2Nomissing ) ) );
106
107 double s1m = 0;
108 double s2m = 0;
109 double expectedReturn = Descriptive.correlation( datacortest1Nomissing,
110 s1, datacortest2Nomissing, s2 );
111 double actualReturn = DescriptiveWithMissing.correlation( data1missing,
112 s1m, data2missing, s2m );
113
114 assertEquals( "return value", expectedReturn, actualReturn,
115 1e-15 );
116 }
117
118 public void testCovariance() {
119 double expectedReturn = Descriptive.covariance( datacortest1Nomissing,
120 datacortest2Nomissing );
121 double actualReturn = DescriptiveWithMissing.covariance( data1missing,
122 data2missing );
123 assertEquals( "return value", expectedReturn, actualReturn,
124 Double.MIN_VALUE );
125 }
126
127 public void testDurbinWatson() {
128 double expectedReturn = Descriptive.durbinWatson( data1Nomissing );
129 double actualReturn = DescriptiveWithMissing.durbinWatson( data1missing );
130 assertEquals( "return value", expectedReturn, actualReturn,
131 Double.MIN_VALUE );
132 }
133
134 public void testDurbinWatsonTwo() {
135 double expectedReturn = Descriptive.durbinWatson( data2Nomissing );
136 double actualReturn = DescriptiveWithMissing.durbinWatson( data2missing );
137 assertEquals( "return value", expectedReturn, actualReturn,
138 Double.MIN_VALUE );
139 }
140
141 public void testDurbinWatsonShort() {
142
143 try {
144 double expectedReturn = Descriptive.durbinWatson( data3shortNomissing );
145 double actualReturn = DescriptiveWithMissing
146 .durbinWatson( data3shortmissing );
147 assertEquals( "Short array failure.", expectedReturn, actualReturn,
148 Double.MIN_VALUE );
149 fail( "Should have thrown an IllegalArgumentException" );
150 } catch ( IllegalArgumentException e ) {
151 return;
152 } catch ( Exception e ) {
153 fail( "Threw wrong exception: " + e );
154 }
155 }
156
157 public void testGeometricMean() {
158 double expectedReturn = Descriptive.geometricMean( data1Nomissing );
159 double actualReturn = DescriptiveWithMissing.geometricMean( data1missing );
160 assertEquals( "Excercises sumOfLogarithms too; return value",
161 expectedReturn, actualReturn, Double.MIN_VALUE );
162
163 }
164
165 public void testMean() {
166 double expectedReturn = Descriptive.mean( data1Nomissing );
167 double actualReturn = DescriptiveWithMissing.mean( data1missing );
168 assertEquals( "return value", expectedReturn, actualReturn,
169 Double.MIN_VALUE );
170
171 }
172
173 public void testMin() {
174 double expectedReturn = Descriptive.min( data1Nomissing );
175 double actualReturn = DescriptiveWithMissing.min( data1missing );
176 assertEquals( "return value", expectedReturn, actualReturn,
177 Double.MIN_VALUE );
178 }
179
180 public void testMax() {
181 double expectedReturn = Descriptive.max( data1Nomissing );
182 double actualReturn = DescriptiveWithMissing.max( data1missing );
183 assertEquals( "return value", expectedReturn, actualReturn,
184 Double.MIN_VALUE );
185 }
186
187 public void testMedian() {
188 data1missing.sort();
189 data1Nomissing.sort();
190 double expectedReturn = Descriptive.median( data1Nomissing );
191 double actualReturn = DescriptiveWithMissing.median( data1missing );
192 assertEquals( "return value", expectedReturn, actualReturn,
193 Double.MIN_VALUE );
194 }
195
196 public void testProduct() {
197 double expectedReturn = Descriptive.product( data1Nomissing );
198 double actualReturn = DescriptiveWithMissing.product( data1missing );
199 assertEquals( "return value", expectedReturn, actualReturn,
200 Double.MIN_VALUE );
201 }
202
203 public void testSampleKurtosis() {
204 double expectedReturn = Descriptive.sampleKurtosis( data1Nomissing,
205 Descriptive.mean( data1Nomissing ), Descriptive.sampleVariance(
206 data1Nomissing, Descriptive.mean( data1Nomissing ) ) );
207 double actualReturn = DescriptiveWithMissing.sampleKurtosis(
208 data1missing, DescriptiveWithMissing.mean( data1missing ),
209 DescriptiveWithMissing.sampleVariance( data1missing,
210 DescriptiveWithMissing.mean( data1missing ) ) );
211 assertEquals( "Exercises sampleVariance, mean as well; return value",
212 expectedReturn, actualReturn, Double.MIN_VALUE );
213 }
214
215 public void testQuantile() {
216 data1missing.sort();
217 data1Nomissing.sort();
218 double expectedReturn = Descriptive.quantile( data1Nomissing, 0.10 );
219 double actualReturn = DescriptiveWithMissing
220 .quantile( data1missing, 0.10 );
221 assertEquals( "return value", expectedReturn, actualReturn,
222 Double.MIN_VALUE );
223
224 }
225
226 public void testSum() {
227 double expectedReturn = Descriptive.sum( data1Nomissing );
228 double actualReturn = DescriptiveWithMissing.sum( data1missing );
229 assertEquals( "return value", expectedReturn, actualReturn,
230 Double.MIN_VALUE );
231 }
232
233 public void testSumOfSquares() {
234 double expectedReturn = Descriptive.sumOfSquares( data1Nomissing );
235 double actualReturn = DescriptiveWithMissing.sumOfSquares( data1missing );
236 assertEquals( "return value", expectedReturn, actualReturn,
237 Double.MIN_VALUE );
238 }
239
240 public void testSampleVariance() {
241 double expectedReturn = Descriptive.sampleVariance( data1Nomissing,
242 Descriptive.mean( data1Nomissing ) );
243 double actualReturn = DescriptiveWithMissing.sampleVariance(
244 data1missing, DescriptiveWithMissing.mean( data1missing ) );
245 assertEquals( "return value", expectedReturn, actualReturn,
246 Double.MIN_VALUE );
247
248 }
249
250 public void testStandardize() {
251
252
253
254 DoubleArrayList expectedReturn = new DoubleArrayList( new double[] {
255 -1.4556506857481, Double.NaN, -0.415900195928029,
256 0.103975048982007, 0.623850293892044, 1.14372553880208
257 } );
258
259 DescriptiveWithMissing.standardize( data1missing );
260 assertEquals( true, RegressionTesting.closeEnough( data1missing,
261 expectedReturn, 0.0001 ) );
262 }
263
264 public void testTrimmedMean() {
265 data1Nomissing.sort();
266 data1missing.sort();
267 double expectedReturn = Descriptive.trimmedMean( data1Nomissing,
268 Descriptive.mean( data1Nomissing ), 1, 1 );
269 double actualReturn = DescriptiveWithMissing.trimmedMean( data1missing,
270 DescriptiveWithMissing.mean( data1missing ), 1, 1 );
271 assertEquals( "return value", expectedReturn, actualReturn,
272 Double.MIN_VALUE );
273
274 }
275
276 public void testVariance() {
277 double expectedReturn = Descriptive.variance( data1Nomissing.size(),
278 Descriptive.sum( data1Nomissing ), Descriptive
279 .sumOfSquares( data1Nomissing ) );
280 double actualReturn = DescriptiveWithMissing.variance(
281 DescriptiveWithMissing.sizeWithoutMissingValues( data1missing ),
282 DescriptiveWithMissing.sum( data1missing ), DescriptiveWithMissing
283 .sumOfSquares( data1missing ) );
284 assertEquals( "return value", expectedReturn, actualReturn, 0.000001 );
285 }
286
287 }