1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math4.legacy.stat.regression;
18
19 import org.apache.commons.math4.legacy.exception.MathIllegalArgumentException;
20 import org.apache.commons.math4.legacy.exception.NullArgumentException;
21 import org.apache.commons.math4.legacy.linear.RealMatrix;
22 import org.apache.commons.math4.legacy.linear.RealVector;
23 import org.junit.Assert;
24 import org.junit.Before;
25 import org.junit.Test;
26
27
28 public abstract class MultipleLinearRegressionAbstractTest {
29
30 protected AbstractMultipleLinearRegression regression;
31
32 @Before
33 public void setUp(){
34 regression = createRegression();
35 }
36
37 protected abstract AbstractMultipleLinearRegression createRegression();
38
39 protected abstract int getNumberOfRegressors();
40
41 protected abstract int getSampleSize();
42
43 @Test
44 public void canEstimateRegressionParameters(){
45 double[] beta = regression.estimateRegressionParameters();
46 Assert.assertEquals(getNumberOfRegressors(), beta.length);
47 }
48
49 @Test
50 public void canEstimateResiduals(){
51 double[] e = regression.estimateResiduals();
52 Assert.assertEquals(getSampleSize(), e.length);
53 }
54
55 @Test
56 public void canEstimateRegressionParametersVariance(){
57 double[][] variance = regression.estimateRegressionParametersVariance();
58 Assert.assertEquals(getNumberOfRegressors(), variance.length);
59 }
60
61 @Test
62 public void canEstimateRegressandVariance(){
63 if (getSampleSize() > getNumberOfRegressors()) {
64 double variance = regression.estimateRegressandVariance();
65 Assert.assertTrue(variance > 0.0);
66 }
67 }
68
69
70
71
72
73 @Test
74 public void testNewSample() {
75 double[] design = new double[] {
76 1, 19, 22, 33,
77 2, 20, 30, 40,
78 3, 25, 35, 45,
79 4, 27, 37, 47
80 };
81 double[] y = new double[] {1, 2, 3, 4};
82 double[][] x = new double[][] {
83 {19, 22, 33},
84 {20, 30, 40},
85 {25, 35, 45},
86 {27, 37, 47}
87 };
88 AbstractMultipleLinearRegression regression = createRegression();
89 regression.newSampleData(design, 4, 3);
90 RealMatrix flatX = regression.getX().copy();
91 RealVector flatY = regression.getY().copy();
92 regression.newXSampleData(x);
93 regression.newYSampleData(y);
94 Assert.assertEquals(flatX, regression.getX());
95 Assert.assertEquals(flatY, regression.getY());
96
97
98 regression.setNoIntercept(true);
99 regression.newSampleData(design, 4, 3);
100 flatX = regression.getX().copy();
101 flatY = regression.getY().copy();
102 regression.newXSampleData(x);
103 regression.newYSampleData(y);
104 Assert.assertEquals(flatX, regression.getX());
105 Assert.assertEquals(flatY, regression.getY());
106 }
107
108 @Test(expected=NullArgumentException.class)
109 public void testNewSampleNullData() {
110 double[] data = null;
111 createRegression().newSampleData(data, 2, 3);
112 }
113
114 @Test(expected=MathIllegalArgumentException.class)
115 public void testNewSampleInvalidData() {
116 double[] data = new double[] {1, 2, 3, 4};
117 createRegression().newSampleData(data, 2, 3);
118 }
119
120 @Test(expected=MathIllegalArgumentException.class)
121 public void testNewSampleInsufficientData() {
122 double[] data = new double[] {1, 2, 3, 4};
123 createRegression().newSampleData(data, 1, 3);
124 }
125
126 @Test(expected=NullArgumentException.class)
127 public void testXSampleDataNull() {
128 createRegression().newXSampleData(null);
129 }
130
131 @Test(expected=NullArgumentException.class)
132 public void testYSampleDataNull() {
133 createRegression().newYSampleData(null);
134 }
135 }