1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package ubic.basecode.math.linearmodels;
16
17 import cern.colt.list.DoubleArrayList;
18 import cern.colt.matrix.DoubleMatrix1D;
19 import cern.colt.matrix.DoubleMatrix2D;
20 import cern.colt.matrix.impl.DenseDoubleMatrix2D;
21 import cern.colt.matrix.linalg.Algebra;
22 import cern.jet.math.Functions;
23 import org.apache.commons.math3.distribution.FDistribution;
24 import org.junit.Test;
25 import ubic.basecode.dataStructure.matrix.*;
26 import ubic.basecode.io.reader.DoubleMatrixReader;
27 import ubic.basecode.io.reader.StringMatrixReader;
28 import ubic.basecode.math.DescriptiveWithMissing;
29 import ubic.basecode.math.MatrixStats;
30
31 import java.util.List;
32 import java.util.Map;
33 import java.util.zip.GZIPInputStream;
34
35 import static java.util.Objects.requireNonNull;
36 import static org.junit.Assert.*;
37
38
39
40
41 public class LeastSquaresFitTest {
42
43 @Test
44 public void testLSFOneContinuousWithMissing3() throws Exception {
45 DoubleMatrixReader f = new DoubleMatrixReader();
46 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
47 "/data/example.madata.withmissing.small.txt" ) );
48
49 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 9, 1 );
50 design.set( 0, 0, 0.12 );
51 design.set( 1, 0, 0.24 );
52 design.set( 2, 0, 0.48 );
53 design.set( 3, 0, 0.96 );
54 design.set( 4, 0, 0.12 );
55 design.set( 5, 0, 0.24 );
56 design.set( 6, 0, 0.48 );
57 design.set( 7, 0, 0.96 );
58 design.set( 8, 0, 0.96 );
59
60 design.setRowNames( testMatrix.getColNames() );
61 design.addColumnName( "Value" );
62
63 LeastSquaresFit fit = new LeastSquaresFit( design, testMatrix );
64
65 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
66
67 LinearModelSummary s = sums.get( "228980_at" );
68 assertNotNull( s );
69 assertEquals( 0.1495, s.getFStat(), 0.01 );
70 assertEquals( 0.7123, s.getOverallPValue(), 0.001 );
71 assertEquals( 10.9180, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
72 assertEquals( 0.712, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
73 assertEquals( 6, ( int ) s.getResidualsDof() );
74 GenericAnovaResult a = s.getAnova();
75 assertNotNull( a );
76 assertEquals( 0.1495, a.getMainEffectFStat( "Value" ), 0.0001 );
77 assertEquals( 1, ( int ) a.getMainEffectDof( "Value" ) );
78 assertEquals( 6, ( int ) a.getResidualsDof() );
79
80 FDistribution fd = new FDistribution( 1, 6 );
81 double p = 1.0 - fd.cumulativeProbability( 0.1495 );
82 assertEquals( 0.7123, p, 0.0001 );
83 assertEquals( 0.7123, a.getMainEffectPValue( "Value" ), 0.0001 );
84
85 s = sums.get( "1553129_at" );
86 assertNotNull( s );
87 assertEquals( 2.095, s.getFStat(), 0.01 );
88 assertEquals( 0.1911, s.getOverallPValue(), 0.001 );
89 assertEquals( 3.78719, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
90 assertEquals( 0.191, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
91 a = s.getAnova();
92 assertNotNull( a );
93 assertEquals( 0.1911, a.getMainEffectPValue( "Value" ), 0.0001 );
94
95 s = fit.summarize( 14 );
96 assertNotNull( s );
97 assertEquals( "214502_at", s.getKey() );
98 assertEquals( 1.992, s.getFStat(), 0.01 );
99 assertEquals( 0.2172, s.getOverallPValue(), 0.001 );
100 assertEquals( 4.2871, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
101 assertEquals( 0.217, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
102
103 s = sums.get( "232018_at" );
104 assertNotNull( s );
105 assertEquals( 1.381, s.getFStat(), 0.01 );
106 assertEquals( 0.2783, s.getOverallPValue(), 0.001 );
107 assertEquals( 6.6537, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
108 assertEquals( 0.278, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
109 a = s.getAnova();
110 assertNotNull( a );
111 assertEquals( 0.2783, a.getMainEffectPValue( "Value" ), 0.0001 );
112 s = sums.get( "228980_at" );
113 assertNotNull( s );
114 assertEquals( 0.1495, s.getFStat(), 0.01 );
115 assertEquals( 0.7123, s.getOverallPValue(), 0.001 );
116 assertEquals( 10.9180, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
117 assertEquals( 0.712, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
118 a = s.getAnova();
119 assertNotNull( a );
120 assertEquals( 0.7123, a.getMainEffectPValue( "Value" ), 0.0001 );
121 }
122
123 @Test
124 public void testLSFThreeLevelsOnecontinous2() throws Exception {
125 DoubleMatrixReader f = new DoubleMatrixReader();
126 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
127 "/data/example.madata.small.txt" ) );
128
129 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 9, 2 );
130
131 design.set( 0, 0, "A" );
132 design.set( 1, 0, "A" );
133 design.set( 2, 0, "A" );
134 design.set( 3, 0, "B" );
135 design.set( 4, 0, "B" );
136 design.set( 5, 0, "B" );
137 design.set( 6, 0, "C" );
138 design.set( 7, 0, "C" );
139 design.set( 8, 0, "C" );
140 design.set( 0, 1, 0.12 );
141 design.set( 1, 1, 0.24 );
142 design.set( 2, 1, 0.48 );
143 design.set( 3, 1, 0.96 );
144 design.set( 4, 1, 0.12 );
145 design.set( 5, 1, 0.24 );
146 design.set( 6, 1, 0.48 );
147 design.set( 7, 1, 0.96 );
148 design.set( 8, 1, 0.96 );
149
150 design.setRowNames( testMatrix.getColNames() );
151 design.addColumnName( "Factor" );
152 design.addColumnName( "Value" );
153
154 LeastSquaresFit fit = new LeastSquaresFit( design, testMatrix );
155
156 DoubleMatrix2D coeffs = fit.getCoefficients();
157 assertEquals( 3.7458080, coeffs.get( 0, 0 ), 0.0001 );
158 assertEquals( -0.4388889, coeffs.get( 1, 2 ), 0.0001 );
159 assertEquals( 0.5709091, coeffs.get( 2, 10 ), 0.0001 );
160 assertEquals( 0.04856061, coeffs.get( 2, 18 ), 0.0001 );
161 assertEquals( -1.1363636, coeffs.get( 3, 10 ), 0.0001 );
162 assertEquals( 0.11174242, coeffs.get( 3, 18 ), 0.0001 );
163
164 DoubleMatrix2D fitted = fit.getFitted();
165
166 assertEquals( 3.764747, fitted.get( 0, 0 ), 0.0001 );
167 assertEquals( 6.043990, fitted.get( 1, 3 ), 0.0001 );
168 assertEquals( 10.858586, fitted.get( 7, 2 ), 0.0001 );
169 assertEquals( 6.307879, fitted.get( 18, 8 ), 0.0001 );
170
171 List<GenericAnovaResult> anova = fit.anova();
172 assertEquals( 19, anova.size() );
173 }
174
175 @Test
176 public void testLSFThreeLevelsOneContinuousWithMissing3() throws Exception {
177 DoubleMatrixReader f = new DoubleMatrixReader();
178 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
179 "/data/example.madata.withmissing.small.txt" ) );
180
181 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 9, 2 );
182
183 design.set( 0, 0, "A" );
184 design.set( 1, 0, "A" );
185 design.set( 2, 0, "A" );
186 design.set( 3, 0, "B" );
187 design.set( 4, 0, "B" );
188 design.set( 5, 0, "B" );
189 design.set( 6, 0, "C" );
190 design.set( 7, 0, "C" );
191 design.set( 8, 0, "C" );
192 design.set( 0, 1, 0.12 );
193 design.set( 1, 1, 0.24 );
194 design.set( 2, 1, 0.48 );
195 design.set( 3, 1, 0.96 );
196 design.set( 4, 1, 0.12 );
197 design.set( 5, 1, 0.24 );
198 design.set( 6, 1, 0.48 );
199 design.set( 7, 1, 0.96 );
200 design.set( 8, 1, 0.96 );
201
202 design.setRowNames( testMatrix.getColNames() );
203 design.addColumnName( "Factor" );
204 design.addColumnName( "Value" );
205
206 LeastSquaresFit fit = new LeastSquaresFit( design, new DenseDoubleMatrix2D( testMatrix.asArray() ) );
207
208 DoubleMatrix2D coeffs = fit.getCoefficients();
209 assertEquals( 3.7458080, coeffs.get( 0, 0 ), 0.0001 );
210 assertEquals( -0.4388889, coeffs.get( 1, 2 ), 0.0001 );
211 assertEquals( 0.5709091, coeffs.get( 2, 10 ), 0.0001 );
212 assertEquals( 0.04856061, coeffs.get( 2, 18 ), 0.0001 );
213 assertEquals( -1.1363636, coeffs.get( 3, 10 ), 0.0001 );
214 assertEquals( 0.11174242, coeffs.get( 3, 18 ), 0.0001 );
215
216 DoubleMatrix2D fitted = fit.getFitted();
217
218 assertEquals( 3.764747, fitted.get( 0, 0 ), 0.0001 );
219 assertEquals( 6.043990, fitted.get( 1, 3 ), 0.0001 );
220 assertEquals( 10.8333, fitted.get( 7, 2 ), 0.0001 );
221 assertEquals( 6.307879, fitted.get( 18, 8 ), 0.0001 );
222
223 List<GenericAnovaResult> anova = fit.anova();
224
225 assertEquals( 19, anova.size() );
226 }
227
228 @Test
229 public void testLSFTwoLevels() throws Exception {
230 DoubleMatrixReader f = new DoubleMatrixReader();
231 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
232 "/data/example.madata.small.txt" ) );
233
234 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 9, 1 );
235
236 design.set( 0, 0, "A" );
237 design.set( 1, 0, "A" );
238 design.set( 2, 0, "A" );
239 design.set( 3, 0, "A" );
240 design.set( 4, 0, "B" );
241 design.set( 5, 0, "B" );
242 design.set( 6, 0, "B" );
243 design.set( 7, 0, "B" );
244 design.set( 8, 0, "B" );
245 design.setRowNames( testMatrix.getColNames() );
246 design.addColumnName( "Factor" );
247
248 LeastSquaresFit fit = new LeastSquaresFit( design, testMatrix );
249
250 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
251
252 LinearModelSummary s = sums.get( "1553129_at" );
253 assertEquals( 0.182999, s.getFStat(), 0.0001 );
254 assertEquals( 0.6817, s.getOverallPValue(), 0.001 );
255 assertEquals( 3.84250, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
256 assertEquals( 0.682, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
257
258 double[] effects = s.getEffects();
259 assertEquals( -11.58333, effects[0], 0.0001 );
260 assertEquals( 0.04999, effects[1], 0.0001 );
261
262 double[] stdevUnscaled = s.getStdevUnscaled();
263 assertEquals( 0.5, stdevUnscaled[0], 0.0001 );
264 assertEquals( 0.6708203932, stdevUnscaled[1], 0.0001 );
265
266 double sigma = s.getSigma();
267 assertEquals( 0.11673841331, sigma, 0.0001 );
268
269 s = sums.get( "232018_at" );
270 assertEquals( -18.9866667, s.getEffects()[0], 0.0001 );
271 assertEquals( 0.1714319, s.getEffects()[1], 0.0001 );
272 assertEquals( 0.07879, s.getFStat(), 0.01 );
273 assertEquals( 0.787, s.getOverallPValue(), 0.001 );
274 assertEquals( 6.2650, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
275 assertEquals( 0.787, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
276 sigma = s.getSigma();
277 assertEquals( 0.61072556381, sigma, 0.0001 );
278 }
279
280
281
282
283 @Test
284 public void testLSFTwoLevels2() throws Exception {
285 DoubleMatrixReader f = new DoubleMatrixReader();
286 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
287 "/data/lmtest1.dat.manymissing.txt" ) );
288
289 StringMatrixReader of = new StringMatrixReader();
290 StringMatrix<String, String> sampleInfo = of.read( this.getClass()
291 .getResourceAsStream( "/data/lmtest1.des.txt" ) );
292
293 DesignMatrix d = new DesignMatrix( sampleInfo, true );
294 d.addInteraction();
295
296 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
297 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
298 assertEquals( 100, sums.size() );
299
300 for ( Map.Entry<String, LinearModelSummary> e : sums.entrySet() ) {
301 String key = e.getKey();
302 LinearModelSummary lms = e.getValue();
303 GenericAnovaResult a = lms.getAnova();
304 assertNotNull( a );
305 double interactionEffectP = a.getInteractionEffectPValue();
306
307
308 }
309 }
310
311 @Test
312 public void testLSFTwoLevels3() throws Exception {
313 DoubleMatrixReader f = new DoubleMatrixReader();
314 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
315 "/data/anova-test-data.txt" ) );
316
317 StringMatrixReader of = new StringMatrixReader();
318 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
319 "/data/anova-test-des.txt" ) );
320
321 DesignMatrix d = new DesignMatrix( sampleInfo, true );
322 d.addInteraction( "factor1", "factor2" );
323
324 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
325 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
326 assertEquals( 100, sums.size() );
327
328 for ( LinearModelSummary lms : sums.values() ) {
329 GenericAnovaResult a = lms.getAnova();
330 assertNotNull( a );
331 double interactionEffectP = a.getInteractionEffectPValue();
332
333
334 }
335
336 LinearModelSummary linearModelSummary3 = sums.get( "probe_4" );
337 assertNotNull( linearModelSummary3.getAnova() );
338 assertEquals( 0.0048, linearModelSummary3.getAnova().getMainEffectPValue( "factor1" ), 0.0001 );
339 LinearModelSummary linearModelSummary2 = sums.get( "probe_10" );
340 assertNotNull( linearModelSummary2.getAnova() );
341 assertEquals( 5.158e-10, linearModelSummary2.getAnova().getMainEffectPValue( "factor1" ), 1e-12 );
342 LinearModelSummary linearModelSummary1 = sums.get( "probe_98" );
343 assertNotNull( linearModelSummary1.getAnova() );
344 assertEquals( 0.6888, linearModelSummary1.getAnova().getMainEffectPValue( "factor2" ), 1e-4 );
345 LinearModelSummary linearModelSummary = sums.get( "probe_10" );
346 assertNotNull( linearModelSummary.getAnova() );
347 assertEquals( 0.07970, linearModelSummary.getAnova().getMainEffectPValue( "factor2" ), 1e-4 );
348
349 }
350
351 @Test
352 public void testLSFTwoLevelsOneContinuous() throws Exception {
353 DoubleMatrixReader f = new DoubleMatrixReader();
354 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
355 "/data/example.madata.small.txt" ) );
356
357 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 9, 2 );
358
359 design.set( 0, 0, "A" );
360 design.set( 1, 0, "A" );
361 design.set( 2, 0, "A" );
362 design.set( 3, 0, "A" );
363 design.set( 4, 0, "B" );
364 design.set( 5, 0, "B" );
365 design.set( 6, 0, "B" );
366 design.set( 7, 0, "B" );
367 design.set( 8, 0, "B" );
368 design.set( 0, 1, 0.12 );
369 design.set( 1, 1, 0.24 );
370 design.set( 2, 1, 0.48 );
371 design.set( 3, 1, 0.96 );
372 design.set( 4, 1, 0.12 );
373 design.set( 5, 1, 0.24 );
374 design.set( 6, 1, 0.48 );
375 design.set( 7, 1, 0.96 );
376 design.set( 8, 1, 0.96 );
377
378 design.setRowNames( testMatrix.getColNames() );
379 design.addColumnName( "Factor" );
380 design.addColumnName( "Value" );
381
382 LeastSquaresFit fit = new LeastSquaresFit( design, testMatrix );
383
384 DoubleMatrix2D coeffs = fit.getCoefficients();
385 assertEquals( 3.77868, coeffs.get( 0, 0 ), 0.0001 );
386 assertEquals( 0.24476, coeffs.get( 1, 2 ), 0.0001 );
387 assertEquals( -0.680449, coeffs.get( 2, 10 ), 0.0001 );
388 assertEquals( 0.114084, coeffs.get( 2, 18 ), 0.0001 );
389
390 DoubleMatrix2D fitted = fit.getFitted();
391
392 assertEquals( 3.795698, fitted.get( 0, 0 ), 0.0001 );
393 assertEquals( 5.497165, fitted.get( 1, 3 ), 0.0001 );
394 assertEquals( 10.879917, fitted.get( 7, 2 ), 0.0001 );
395 assertEquals( 6.346546, fitted.get( 18, 8 ), 0.0001 );
396
397 List<GenericAnovaResult> anova = fit.anova();
398 assertEquals( 19, anova.size() );
399 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
400
401 LinearModelSummary s = sums.get( "1553129_at" );
402 assertEquals( 0.9389, s.getFStat(), 0.01 );
403 assertEquals( 0.4418, s.getOverallPValue(), 0.001 );
404 assertEquals( 3.77868, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
405 assertEquals( 0.810, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
406 GenericAnovaResult a = s.getAnova();
407 assertNotNull( a );
408 assertEquals( 0.2429, a.getMainEffectPValue( "Value" ), 0.0001 );
409
410 s = sums.get( "232018_at" );
411 assertEquals( 0.7167, s.getFStat(), 0.01 );
412 assertEquals( 0.5259, s.getOverallPValue(), 0.001 );
413 assertEquals( 6.5712, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
414 assertEquals( 0.664, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
415 a = s.getAnova();
416 assertNotNull( a );
417 assertEquals( 0.2893, a.getMainEffectPValue( "Value" ), 0.0001 );
418
419
420 DoubleMatrix2D studentizedResiduals = fit.getStudentizedResiduals();
421
422 double[] expectedStudentizedResiduals = new double[] { -0.34655041, 1.46251738, -0.61403124, -0.34663812,
423 -1.51245468, 0.06875469, 1.45818880, 1.02811044, -1.31696150 };
424
425 for ( int i = 0; i < 9; i++ ) {
426 assertEquals( expectedStudentizedResiduals[i], studentizedResiduals.viewRow( 10 ).get( i ), 0.001 );
427 }
428
429
430
431
432 assertEquals( 1.1,
433 DescriptiveWithMissing.variance( new DoubleArrayList( studentizedResiduals.viewRow( 10 ).toArray() ) ),
434 0.1 );
435
436
437 studentizedResiduals = fit.getStudentizedResiduals();
438 expectedStudentizedResiduals = new double[] { 0.46128657, -5.49429390, 0.84157385, 1.10053286, 1.10538546,
439 -0.01706794, -0.05318259, -0.56926585, -0.35107932 };
440 for ( int i = 0; i < 9; i++ ) {
441 assertEquals( expectedStudentizedResiduals[i], studentizedResiduals.viewRow( 0 ).get( i ), 0.001 );
442 }
443
444 }
445
446
447
448
449 @Test
450 public void testMatrixWeightedRegress() {
451 DoubleMatrix2D dat = new DenseDoubleMatrix2D( new double[][] { { 1, 2, 3, 4, 5 }, { 1, 1, 6, 3, 2 } } );
452 DoubleMatrix2D des = new DenseDoubleMatrix2D( new double[][] { { 1, 1, 1, 1, 1 }, { 1, 2, 2, 3, 3 },
453 { 2, 1, 5, 3, 4 } } );
454
455 DoubleMatrix2D w = dat.copy();
456 w.assign( dat );
457 Algebra solver = new Algebra();
458 des = solver.transpose( des );
459 LeastSquaresFit fit = new LeastSquaresFit( des, dat, w );
460
461
462
463
464
465
466
467
468 DoubleMatrix2D actuals = solver.transpose( fit.getCoefficients() );
469 double[][] expected = new double[][] { { -1.7070, 1.7110, 0.3054 }, { 0.2092, -0.6642, 1.3640 } };
470 for ( int i = 0; i < expected.length; i++ ) {
471 assertArrayEquals( expected[i], actuals.viewRow( i ).toArray(), 0.001 );
472 }
473
474
475 actuals = fit.getFitted();
476 expected = new double[][] { { 0.6151, 2.0210, 3.2430, 4.3430, 4.6490 }, { 2.273, 0.245, 5.701, 2.309, 3.673 } };
477 for ( int i = 0; i < expected.length; i++ ) {
478 assertArrayEquals( expected[i], actuals.viewRow( i ).toArray(), 0.001 );
479 }
480
481
482 actuals = fit.getResiduals();
483 expected = new double[][] { { 0.38490, -0.02092, -0.24270, -0.34310, 0.35150 },
484 { -1.2730, 0.7550, 0.2986, 0.6910, -1.6730 } };
485 for ( int i = 0; i < expected.length; i++ ) {
486 assertArrayEquals( expected[i], actuals.viewRow( i ).toArray(), 0.001 );
487 }
488
489 }
490
491
492
493
494 @Test
495 public void testOneWayAnova() throws Exception {
496 DoubleMatrixReader f = new DoubleMatrixReader();
497 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
498 "/data/anova-test-data.txt" ) );
499
500 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 8, 1 );
501 for ( int i = 0; i < 8; i++ ) {
502 design.set( i, 0, "A" + i % 3 );
503 }
504 design.addColumnName( "Factor1" );
505
506 DesignMatrix d = new DesignMatrix( design, true );
507
508 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
509 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
510 assertEquals( 100, sums.size() );
511
512 for ( LinearModelSummary lms : sums.values() ) {
513 GenericAnovaResult a = lms.getAnova();
514 assertNotNull( a );
515 double interactionEffectP = a.getInteractionEffectPValue();
516 assertTrue( Double.isNaN( interactionEffectP ) );
517 }
518
519 LinearModelSummary sum4 = sums.get( "probe_4" );
520 assertNotNull( sum4.getContrastCoefficients() );
521 assertEquals( 0.6531, sum4.getOverallPValue(), 0.0001 );
522 assertEquals( 0.2735, sum4.getFStat(), 0.0001 );
523 assertNotNull( sum4.getAnova() );
524 assertEquals( 0.2735, sum4.getAnova().getMainEffectFStat( "Factor1" ), 0.0001 );
525 assertEquals( 2, ( int ) sum4.getAnova().getResidualsDof() );
526 assertEquals( 1, ( int ) sum4.getAnova().getMainEffectDof( "Factor1" ) );
527 assertEquals( 0.6531, sum4.getAnova().getMainEffectPValue( "Factor1" ), 0.0001 );
528
529 LinearModelSummary sum21 = sums.get( "probe_21" );
530 assertNotNull( sum21.getContrastCoefficients() );
531 assertEquals( 0.6492, sum21.getOverallPValue(), 0.0001 );
532 assertEquals( 0.4821, sum21.getFStat(), 0.0001 );
533 assertNotNull( sum21.getAnova() );
534 assertEquals( 0.4821, sum21.getAnova().getMainEffectFStat( "Factor1" ), 0.0001 );
535 assertEquals( 4, ( int ) sum21.getAnova().getResidualsDof() );
536 assertEquals( 2, ( int ) sum21.getAnova().getMainEffectDof( "Factor1" ) );
537 assertEquals( 0.6492, sum21.getAnova().getMainEffectPValue( "Factor1" ), 0.0001 );
538
539 LinearModelSummary sum98 = sums.get( "probe_98" );
540 assertNotNull( sum98.getContrastCoefficients() );
541 assertEquals( 0.1604, sum98.getOverallPValue(), 0.0001 );
542 assertEquals( 2.993, sum98.getFStat(), 0.0001 );
543 assertNotNull( sum98.getAnova() );
544 assertEquals( 4, ( int ) sum98.getAnova().getResidualsDof() );
545 assertEquals( 2, ( int ) sum98.getAnova().getMainEffectDof( "Factor1" ) );
546 assertEquals( 2.9931, sum98.getAnova().getMainEffectFStat( "Factor1" ), 0.0001 );
547 assertEquals( 0.1604, sum98.getAnova().getMainEffectPValue( "Factor1" ), 1e-4 );
548
549 LinearModelSummary sum10 = sums.get( "probe_10" );
550 assertNotNull( sum10.getContrastCoefficients() );
551 assertEquals( 0.8014, sum10.getOverallPValue(), 0.0001 );
552 assertEquals( 0.2314, sum10.getFStat(), 0.0001 );
553 assertNotNull( sum10.getAnova() );
554 assertEquals( 5, ( int ) sum10.getAnova().getResidualsDof() );
555 assertEquals( 2, ( int ) sum10.getAnova().getMainEffectDof( "Factor1" ) );
556 assertEquals( 0.8014, sum10.getAnova().getMainEffectPValue( "Factor1" ), 1e-4 );
557
558
559
560
561 LinearModelSummary sum60 = sums.get( "probe_60" );
562 assertNotNull( sum60.getContrastCoefficients() );
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577 assertEquals( 9.00145, sum60.getContrastCoefficients().get( 0, 0 ), 0.0001 );
578 assertEquals( -0.01020, sum60.getContrastCoefficients().get( 1, 0 ), 0.0001 );
579 assertEquals( Double.NaN, sum60.getContrastCoefficients().get( 2, 0 ), 0.0001 );
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595 assertEquals( 2, ( int ) sum60.getResidualsDof() );
596 assertEquals( 1, ( int ) sum60.getNumeratorDof() );
597
598 assertNotNull( sum60.getAnova() );
599 assertEquals( 2, ( int ) sum60.getAnova().getResidualsDof() );
600 assertEquals( 1, ( int ) sum60.getAnova().getMainEffectDof( "Factor1" ) );
601
602
603
604 assertEquals( 0.0004715, sum60.getFStat(), 1e-7 );
605 assertEquals( 0.9846482, sum60.getOverallPValue(), 1e-5 );
606
607
608 assertEquals( 0.9846482, sum60.getAnova().getMainEffectPValue( "Factor1" ), 1e-5 );
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695 }
696
697 @Test
698 public void testSingular() throws Exception {
699 DoubleMatrixReader f = new DoubleMatrixReader();
700 DoubleMatrix<String, String> testMatrix = f
701 .read( this.getClass().getResourceAsStream( "/data/lmtest2.dat.txt" ) );
702
703 StringMatrixReader of = new StringMatrixReader();
704 StringMatrix<String, String> sampleInfo = of.read( this.getClass()
705 .getResourceAsStream( "/data/lmtest2.des.txt" ) );
706 DesignMatrix d = new DesignMatrix( sampleInfo, true );
707
708 assertEquals( 9, d.getMatrix().columns() );
709
710 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
711
712 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
713 assertEquals( 81, sums.size() );
714
715 for ( LinearModelSummary lms : sums.values() ) {
716 GenericAnovaResult a = lms.getAnova();
717 assertNotNull( a );
718 }
719
720 LinearModelSummary s = sums.get( "A01157cds_s_at" );
721
722 assertNotNull( s.getContrastCoefficients() );
723
724 assertEquals( 7.3740000, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
725
726 assertEquals( 6, ( int ) s.getResidualsDof() );
727 assertEquals( 7, ( int ) s.getNumeratorDof() );
728 assertEquals( 0.8634, s.getFStat(), 0.01 );
729 assertEquals( 0.5795, s.getOverallPValue(), 0.001 );
730
731 }
732
733
734
735
736 @Test
737 public void testSingular2() throws Exception {
738 DoubleMatrixReader f = new DoubleMatrixReader();
739 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
740 "/data/1027_GSE6189.data.test.txt" ) );
741
742 StringMatrixReader of = new StringMatrixReader();
743 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
744 "/data/1027_GSE6189_expdesign.data.txt" ) );
745 DesignMatrix d = new DesignMatrix( sampleInfo, true );
746
747 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix.getRowRange( 0, 0 ) );
748
749 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
750 assertEquals( 1, sums.size() );
751 for ( LinearModelSummary lms : sums.values() ) {
752 GenericAnovaResult a = lms.getAnova();
753 assertNotNull( a );
754 }
755 LinearModelSummary s = sums.get( "1367452_at" );
756 assertNotNull( s );
757 assertNotNull( s.getContrastCoefficients() );
758
759
760
761
762
763
764
765
766
767
768 double[] coef = new double[] { 15.10776244, -0.01689300, 0.09835841, -0.20163964, Double.NaN, -0.04092962,
769 Double.NaN, 0.06660370 };
770
771 for ( int i = 0; i < s.getContrastCoefficients().rows(); i++ ) {
772 assertEquals( coef[i], s.getContrastCoefficients().get( i, 0 ), 0.0001 );
773 }
774
775 }
776
777 @Test
778 public void testThreeWaySingular() throws Exception {
779 DoubleMatrixReader f = new DoubleMatrixReader();
780 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
781 "/data/1064_GSE7863.data.test.txt" ) );
782
783 StringMatrixReader of = new StringMatrixReader();
784 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
785 "/data/1064_GSE7863_expdesign.data.test.txt" ) );
786 DesignMatrix d = new DesignMatrix( sampleInfo, true );
787
788 assertEquals( 5, d.getMatrix().columns() );
789
790 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
791
792 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
793 assertEquals( 416, sums.size() );
794
795 for ( LinearModelSummary lms : sums.values() ) {
796 GenericAnovaResult a = lms.getAnova();
797 assertNotNull( a );
798 }
799
800 LinearModelSummary s = sums.get( "1415696_at" );
801
802 assertNotNull( s.getContrastCoefficients() );
803 assertEquals( 0.000794, s.getContrastCoefficients().get( 2, 3 ), 0.001 );
804 assertEquals( 11, ( int ) s.getResidualsDof() );
805 assertEquals( 4, ( int ) s.getNumeratorDof() );
806 assertEquals( 24.38, s.getFStat(), 0.01 );
807 assertEquals( 2.025e-05, s.getOverallPValue(), 0.001 );
808 GenericAnovaResult anova = s.getAnova();
809 assertNotNull( anova );
810 assertEquals( 29.0386, anova.getMainEffectFStat( "Treatment" ), 0.0001 );
811
812 s = sums.get( "1415837_at" );
813 assertNotNull( s.getContrastCoefficients() );
814 assertEquals( 11, ( int ) s.getResidualsDof() );
815 assertEquals( 4, ( int ) s.getNumeratorDof() );
816 assertEquals( 22.72, s.getFStat(), 0.01 );
817 assertEquals( 2.847e-05, s.getOverallPValue(), 0.001 );
818 anova = s.getAnova();
819 assertNotNull( anova );
820 assertEquals( 6.5977, anova.getMainEffectFStat( "Treatment" ), 0.0001 );
821
822 s = sums.get( "1416179_a_at" );
823 assertNotNull( s.getContrastCoefficients() );
824 assertEquals( 11, ( int ) s.getResidualsDof() );
825 assertEquals( 4, ( int ) s.getNumeratorDof() );
826 assertEquals( 25.14, s.getFStat(), 0.01 );
827 assertEquals( 1.743e-05, s.getOverallPValue(), 0.001 );
828 anova = s.getAnova();
829 assertNotNull( anova );
830 assertEquals( 38.411, anova.getMainEffectFStat( "Treatment" ), 0.001 );
831
832 s = sums.get( "1456759_at" );
833 assertNotNull( s.getContrastCoefficients() );
834 assertEquals( 11, ( int ) s.getResidualsDof() );
835 assertEquals( 4, ( int ) s.getNumeratorDof() );
836 assertEquals( 7.903, s.getFStat(), 0.01 );
837 assertEquals( 0.002960, s.getOverallPValue(), 0.001 );
838 anova = s.getAnova();
839 assertNotNull( anova );
840 assertEquals( 10.3792, anova.getMainEffectFStat( "Treatment" ), 0.001 );
841 assertEquals( 2.6253, anova.getMainEffectFStat( "Genotype" ), 0.001 );
842 }
843
844
845
846
847 @Test
848 public void testTwoWayAnovaUnfittable() throws Exception {
849 DoubleMatrixReader f = new DoubleMatrixReader();
850 DoubleMatrix<String, String> testMatrix = f.read( this.getClass()
851 .getResourceAsStream( "/data/lmtest10.dat.txt" ) );
852
853 StringMatrixReader of = new StringMatrixReader();
854 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
855 "/data/lmtest10.des.txt" ) );
856
857 DesignMatrix d = new DesignMatrix( sampleInfo, true );
858
859 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
860 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
861 assertEquals( 1, sums.size() );
862
863 for ( LinearModelSummary lms : sums.values() ) {
864 GenericAnovaResult a = lms.getAnova();
865 assertNotNull( a );
866 assertEquals( Double.NaN, a.getMainEffectPValue( "CellType" ), 0.0001 );
867 assertEquals( Double.NaN, a.getMainEffectPValue( "SamplingTimePoint" ), 0.0001 );
868 }
869
870 DoubleMatrix2D coefficients = fit.getCoefficients();
871 DoubleMatrix2D residuals = fit.getResiduals();
872
873 assertEquals( 2.238, coefficients.get( 0, 0 ), 0.0001 );
874 assertEquals( 0.0, coefficients.get( 1, 0 ), 0.0001 );
875
876 for ( int i = 0; i < residuals.rows(); i++ ) {
877 assertEquals( 0.0, residuals.get( 0, i ), 0.00001 );
878 }
879 }
880
881
882
883
884 @Test
885 public void testTwoWayAnovaWithInteractions() throws Exception {
886 DoubleMatrixReader f = new DoubleMatrixReader();
887 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
888 "/data/GSE8441_expmat_8probes.txt" ) );
889
890 StringMatrixReader of = new StringMatrixReader();
891 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
892 "/data/606_GSE8441_expdesign.data.txt" ) );
893 DesignMatrix d = new DesignMatrix( sampleInfo, true );
894 d.addInteraction();
895
896 assertEquals( 4, d.getMatrix().columns() );
897
898 assertEquals( 22, testMatrix.columns() );
899
900 LeastSquaresFit fit = new LeastSquaresFit( d, testMatrix );
901
902 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
903 assertEquals( 8, sums.size() );
904
905 for ( LinearModelSummary lms : sums.values() ) {
906 GenericAnovaResult a = lms.getAnova();
907 assertNotNull( a );
908 }
909
910 LinearModelSummary s = sums.get( "217757_at" );
911 GenericAnovaResult anova = s.getAnova();
912
913 assertNotNull( s.getContrastCoefficients() );
914 assertEquals( 0.763, s.getContrastCoefficients().get( 2, 3 ), 0.001 );
915 assertEquals( 18, ( int ) s.getResidualsDof() );
916 assertEquals( 3, ( int ) s.getNumeratorDof() );
917 assertEquals( 0.299, s.getFStat(), 0.01 );
918 assertEquals( 0.8257, s.getOverallPValue(), 0.001 );
919
920 assertNotNull( anova );
921 assertEquals( 0.5876, anova.getMainEffectFStat( "Treatment" ), 0.0001 );
922 assertEquals( 0.5925, anova.getInteractionEffectPValue(), 0.001 );
923
924 s = sums.get( "202851_at" );
925 anova = s.getAnova();
926 assertNotNull( s.getContrastCoefficients() );
927 assertEquals( 0.787, s.getContrastCoefficients().get( 2, 3 ), 0.001 );
928 assertEquals( 18, ( int ) s.getResidualsDof() );
929 assertEquals( 3, ( int ) s.getNumeratorDof() );
930 assertEquals( 0.1773, s.getFStat(), 0.01 );
931 assertEquals( 0.9104, s.getOverallPValue(), 0.001 );
932
933 assertNotNull( anova );
934 assertEquals( 0.3777, anova.getMainEffectFStat( "Treatment" ), 0.0001 );
935 assertEquals( 0.9956, anova.getInteractionEffectPValue(), 0.001 );
936 }
937
938
939
940
941 @Test
942 public void testTwoWayTwoLevelsOneContinousInteractionC() throws Exception {
943 DoubleMatrixReader f = new DoubleMatrixReader();
944 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
945 "/data/example.madata.small.txt" ) );
946
947 ObjectMatrix<String, String, Object> design = new ObjectMatrixImpl<>( 9, 3 );
948
949 design.set( 0, 0, "A" );
950 design.set( 1, 0, "A" );
951 design.set( 2, 0, "A" );
952 design.set( 3, 0, "A" );
953 design.set( 4, 0, "B" );
954 design.set( 5, 0, "B" );
955 design.set( 6, 0, "B" );
956 design.set( 7, 0, "B" );
957 design.set( 8, 0, "B" );
958 design.set( 0, 1, 0.12 );
959 design.set( 1, 1, 0.24 );
960 design.set( 2, 1, 0.48 );
961 design.set( 3, 1, 0.96 );
962 design.set( 4, 1, 0.12 );
963 design.set( 5, 1, 0.24 );
964 design.set( 6, 1, 0.48 );
965 design.set( 7, 1, 0.96 );
966 design.set( 8, 1, 0.96 );
967 design.set( 0, 2, "C" );
968 design.set( 1, 2, "C" );
969 design.set( 2, 2, "D" );
970 design.set( 3, 2, "D" );
971 design.set( 4, 2, "C" );
972 design.set( 5, 2, "C" );
973 design.set( 6, 2, "D" );
974 design.set( 7, 2, "D" );
975 design.set( 8, 2, "D" );
976 design.addColumnName( "Treat" );
977 design.addColumnName( "Value" );
978 design.addColumnName( "Geno" );
979
980 DesignMatrix designMatrix = new DesignMatrix( design, true );
981 designMatrix.addInteraction( "Treat", "Geno" );
982 LeastSquaresFit fit = new LeastSquaresFit( designMatrix, testMatrix );
983
984 Map<String, LinearModelSummary> sums = fit.summarizeByKeys( true );
985
986 LinearModelSummary s = sums.get( "1553129_at" );
987 assertEquals( 1.791, s.getFStat(), 0.01 );
988 assertEquals( 0.2930, s.getOverallPValue(), 0.001 );
989 assertEquals( 3.71542, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
990 assertEquals( 0.184, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
991 assertEquals( 0.137, s.getContrastCoefficients().get( 4, 3 ), 0.001 );
992 GenericAnovaResult a = s.getAnova();
993 assertNotNull( a );
994 assertEquals( 0.137, a.getInteractionEffectPValue(), 0.001 );
995
996 s = sums.get( "232018_at" );
997 assertEquals( 0.7167, s.getFStat(), 0.01 );
998 assertEquals( 0.6235, s.getOverallPValue(), 0.001 );
999 assertEquals( 6.8873, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
1000 assertEquals( 0.587932, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
1001 a = s.getAnova();
1002 assertNotNull( a );
1003 assertEquals( 0.2904, a.getInteractionEffectPValue(), 0.001 );
1004
1005 for ( LinearModelSummary lms : sums.values() ) {
1006 GenericAnovaResult anova = lms.getAnova();
1007 assertNotNull( anova );
1008 double interactionEffectP = anova.getInteractionEffectPValue();
1009 assertFalse( Double.isNaN( interactionEffectP ) );
1010
1011 }
1012
1013 }
1014
1015 @Test
1016 public void testVectorRegress() {
1017
1018 DoubleMatrix1D vectorA = new DenseDoubleMatrix1D( new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } );
1019 DoubleMatrix1D vectorB = new DenseDoubleMatrix1D( new double[] { 1, 2, 2, 3, 3, 4, 4, 5, 5, 6 } );
1020
1021 LeastSquaresFit fit = new LeastSquaresFit( vectorA, vectorB );
1022
1023 DoubleMatrix2D coefficients = fit.getCoefficients();
1024 DoubleMatrix2D residuals = fit.getResiduals();
1025
1026 assertEquals( 0.666666, coefficients.get( 0, 0 ), 0.0001 );
1027 assertEquals( 0.5152, coefficients.get( 1, 0 ), 0.0001 );
1028
1029 double[] expectedResiduals = new double[] { -0.1818182, 0.3030303, -0.2121212, 0.2727273, -0.2424242,
1030 0.2424242, -0.2727273, 0.2121212, -0.3030303, 0.1818182 };
1031
1032 for ( int i = 0; i < expectedResiduals.length; i++ ) {
1033 assertEquals( expectedResiduals[i], residuals.get( 0, i ), 0.00001 );
1034 }
1035
1036 }
1037
1038 @Test
1039 public void testVectorWeightedRegress() {
1040
1041
1042
1043 DoubleMatrix1D vectorA = new DenseDoubleMatrix1D( new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } );
1044 DoubleMatrix1D vectorB = new DenseDoubleMatrix1D( new double[] { 1, 2, 2, 3, 3, 4, 4, 5, 5, 6 } );
1045 DoubleMatrix1D w = vectorA.copy().assign( Functions.inv );
1046
1047 LeastSquaresFit fit = new LeastSquaresFit( vectorA, vectorB, w );
1048
1049 DoubleMatrix2D coefficients = fit.getCoefficients();
1050 DoubleMatrix2D residuals = fit.getResiduals();
1051
1052
1053 assertEquals( 0.60469, coefficients.get( 0, 0 ), 0.0001 );
1054 assertEquals( 0.52642, coefficients.get( 1, 0 ), 0.0001 );
1055
1056 double[] expectedResiduals = new double[] { -0.1311097, 0.3424702, -0.1839499, 0.2896301, -0.2367900,
1057 0.2367900, -0.2896301, 0.1839499, -0.3424702, 0.1311097 };
1058
1059 for ( int i = 0; i < expectedResiduals.length; i++ ) {
1060 assertEquals( expectedResiduals[i], residuals.get( 0, i ), 0.00001 );
1061 }
1062
1063 double[] expectedFitted = new double[] { 1.13111, 1.65753, 2.18395, 2.71037, 3.23679, 3.76321, 4.28963,
1064 4.81605, 5.34247, 5.86889 };
1065
1066 for ( int i = 0; i < expectedFitted.length; i++ ) {
1067 assertEquals( expectedFitted[i], fit.getFitted().get( 0, i ), 0.00001 );
1068 }
1069 }
1070
1071 @Test
1072 public void testVectorWeightedRegressWithMissing() throws Exception {
1073
1074 DoubleMatrixReader f = new DoubleMatrixReader();
1075 DoubleMatrix<String, String> testMatrix = f.read( this.getClass().getResourceAsStream(
1076 "/data/example.madata.withmissing.small.txt" ) );
1077 DoubleMatrix1D libSize = MatrixStats.colSums( testMatrix );
1078 testMatrix = MatrixStats.convertToLog2Cpm( testMatrix, libSize );
1079
1080 StringMatrixReader of = new StringMatrixReader();
1081 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
1082 "/data/example.metadata.small.txt" ) );
1083 DesignMatrix designMatrix = new DesignMatrix( sampleInfo );
1084 DoubleMatrix2D weights = new DenseDoubleMatrix2D( testMatrix.asArray() );
1085 weights.assign( Functions.inv );
1086
1087 LeastSquaresFit fit = new LeastSquaresFit( designMatrix, testMatrix, weights );
1088 assertTrue( fit.isHasMissing() );
1089
1090 DoubleMatrix2D coefficients = fit.getCoefficients();
1091 DoubleMatrix2D residuals = fit.getResiduals();
1092
1093 assertEquals( 15.339801, coefficients.get( 0, 0 ), 0.0001 );
1094 assertEquals( -0.024058, coefficients.get( 1, 1 ), 0.0001 );
1095 assertEquals( -0.059586, coefficients.get( 2, 18 ), 0.0001 );
1096
1097 assertEquals( -0.073732, residuals.get( 0, 0 ), 0.0001 );
1098 assertEquals( -0.064656, residuals.get( 1, 1 ), 0.0001 );
1099 assertEquals( -0.085214, residuals.get( 18, 8 ), 0.0001 );
1100 assertTrue( Double.isNaN( residuals.get( 4, 2 ) ) );
1101
1102 }
1103
1104
1105
1106
1107
1108
1109 @Test
1110 public void testNHBE() throws Exception {
1111 DoubleMatrixReader f = new DoubleMatrixReader();
1112 DoubleMatrix<String, String> testMatrix = f.read( new GZIPInputStream( requireNonNull( this.getClass().getResourceAsStream(
1113 "/data/NHBE_transcriptome_data.txt.gz" ) ) ) );
1114
1115 StringMatrixReader of = new StringMatrixReader();
1116 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
1117 "/data/NHBE_design.txt" ) );
1118
1119 DesignMatrix designMatrix = new DesignMatrix( sampleInfo );
1120 designMatrix.addInteraction();
1121 designMatrix.setBaseline( "time", "1_h" );
1122 designMatrix.setBaseline( "Treatment", "control" );
1123
1124 LeastSquaresFit fit = new LeastSquaresFit( designMatrix, testMatrix );
1125
1126
1127
1128
1129 ModeratedTstat.ebayes( fit );
1130
1131
1132
1133 List<LinearModelSummary> sums = fit.summarize( true );
1134
1135
1136 assertEquals( 0.34927, sums.get( 0 ).getSigma(), 0.0001 );
1137 assertEquals( 1.3859, sums.get( 0 ).getPriorDof(), 0.01 );
1138
1139
1140
1141
1142 }
1143
1144
1145
1146
1147 @Test
1148 public void testEstrogen() throws Exception {
1149 DoubleMatrixReader f = new DoubleMatrixReader();
1150 DoubleMatrix<String, String> testMatrix = f.read( new GZIPInputStream( requireNonNull( this.getClass().getResourceAsStream(
1151 "/data/estrogen.data.txt.gz" ) ) ) );
1152
1153 StringMatrixReader of = new StringMatrixReader();
1154 StringMatrix<String, String> sampleInfo = of.read( this.getClass().getResourceAsStream(
1155 "/data/estrogen.meta.txt" ) );
1156
1157 DesignMatrix designMatrix = new DesignMatrix( sampleInfo );
1158 designMatrix.addInteraction();
1159 LeastSquaresFit fit = new LeastSquaresFit( designMatrix, testMatrix );
1160
1161
1162 List<LinearModelSummary> sums = fit.summarize( true );
1163
1164
1165 LinearModelSummary s = sums.get( 0 );
1166 assertEquals( 3.8976, s.getFStat(), 0.01 );
1167 assertEquals( 0.11092, s.getOverallPValue(), 0.001 );
1168 assertEquals( 9.69220, s.getContrastCoefficients().get( 0, 0 ), 0.001 );
1169 assertEquals( -1.4517, s.getContrastCoefficients().get( 1, 2 ), 0.001 );
1170 assertEquals( 0.220, s.getContrastCoefficients().get( 1, 3 ), 0.001 );
1171 assertEquals( 4, ( int ) s.getResidualsDof() );
1172 GenericAnovaResult a = s.getAnova();
1173 assertNotNull( a );
1174 assertEquals( 0.24143, a.getMainEffectFStat( "time" ), 0.0001 );
1175 assertEquals( 1, ( int ) a.getMainEffectDof( "time" ) );
1176 assertEquals( 4, ( int ) a.getResidualsDof() );
1177 assertEquals( 2.43873, a.getInteractionEffectFStat(), 0.001 );
1178 assertEquals( 0.19340, a.getInteractionEffectPValue(), 0.001 );
1179
1180
1181 ModeratedTstat.ebayes( fit );
1182 sums = fit.summarize( true );
1183 LinearModelSummary x = sums.get( 0 );
1184
1185 assertEquals( 0.0765, x.getSigma(), 0.0001 );
1186 assertEquals( 4.48, x.getPriorDof(), 0.01 );
1187
1188 assertEquals( 3.8976, x.getFStat(), 0.01 );
1189 assertEquals( 0.11092, x.getOverallPValue(), 0.001 );
1190
1191 assertEquals( 9.692196, x.getContrastCoefficients().get( 0, 0 ), 0.0001 );
1192 assertEquals( -0.92608, x.getContrastCoefficients().get( 1, 2 ), 0.001 );
1193 assertEquals( 0.38, x.getContrastCoefficients().get( 1, 3 ), 0.001 );
1194 assertEquals( 4, ( int ) x.getResidualsDof() );
1195
1196 assertEquals( 0.34671, x.getContrastCoefficients().get( 3, 3 ), 0.0001 );
1197
1198 GenericAnovaResult ax = x.getAnova();
1199
1200 assertNotNull( ax );
1201 assertEquals( 0.098252, ax.getMainEffectFStat( "time" ), 0.0001 );
1202 assertEquals( 1, ( int ) ax.getMainEffectDof( "time" ) );
1203 assertEquals( 8.48, ax.getResidualsDof(), 0.001 );
1204
1205 assertEquals( 3.6678, ax.getMainEffectFStat( "dose" ), 0.0001 );
1206 assertEquals( 1, ( int ) ax.getMainEffectDof( "dose" ) );
1207 assertEquals( 8.48, ax.getResidualsDof(), 0.001 );
1208
1209
1210
1211 assertEquals( 0.99247, ax.getInteractionEffectFStat(), 0.0001 );
1212 assertEquals( 0.34671, ax.getInteractionEffectPValue(), 0.0001 );
1213
1214 }
1215 }