1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.math.stat.regression;
18  
19  import org.junit.Before;
20  import org.junit.Test;
21  
22  public class GLSMultipleLinearRegressionTest extends MultipleLinearRegressionAbstractTest {
23  
24      private double[] y;
25      private double[][] x;
26      private double[][] omega;
27  
28      @Before
29      @Override
30      public void setUp(){
31          y = new double[]{11.0, 12.0, 13.0, 14.0, 15.0, 16.0};
32          x = new double[6][];
33          x[0] = new double[]{1.0, 0, 0, 0, 0, 0};
34          x[1] = new double[]{1.0, 2.0, 0, 0, 0, 0};
35          x[2] = new double[]{1.0, 0, 3.0, 0, 0, 0};
36          x[3] = new double[]{1.0, 0, 0, 4.0, 0, 0};
37          x[4] = new double[]{1.0, 0, 0, 0, 5.0, 0};
38          x[5] = new double[]{1.0, 0, 0, 0, 0, 6.0};
39          omega = new double[6][];
40          omega[0] = new double[]{1.0, 0, 0, 0, 0, 0};
41          omega[1] = new double[]{0, 2.0, 0, 0, 0, 0};
42          omega[2] = new double[]{0, 0, 3.0, 0, 0, 0};
43          omega[3] = new double[]{0, 0, 0, 4.0, 0, 0};
44          omega[4] = new double[]{0, 0, 0, 0, 5.0, 0};
45          omega[5] = new double[]{0, 0, 0, 0, 0, 6.0};
46          super.setUp();
47      }
48     
49      @Test(expected=IllegalArgumentException.class)
50      public void cannotAddXSampleData() {
51          createRegression().newSampleData(new double[]{}, null, null);
52      }
53  
54      @Test(expected=IllegalArgumentException.class)
55      public void cannotAddNullYSampleData() {
56          createRegression().newSampleData(null, new double[][]{}, null);
57      }
58      
59      @Test(expected=IllegalArgumentException.class)
60      public void cannotAddSampleDataWithSizeMismatch() {
61          double[] y = new double[]{1.0, 2.0};
62          double[][] x = new double[1][];
63          x[0] = new double[]{1.0, 0};
64          createRegression().newSampleData(y, x, null);
65      }
66      
67      @Test(expected=IllegalArgumentException.class)
68      public void cannotAddNullCovarianceData() {
69          createRegression().newSampleData(new double[]{}, new double[][]{}, null);
70      }
71      
72      @Test(expected=IllegalArgumentException.class)
73      public void notEnoughData() {
74          double[]   reducedY = new double[y.length - 1];
75          double[][] reducedX = new double[x.length - 1][];
76          double[][] reducedO = new double[omega.length - 1][];
77          System.arraycopy(y,     0, reducedY, 0, reducedY.length);
78          System.arraycopy(x,     0, reducedX, 0, reducedX.length);
79          System.arraycopy(omega, 0, reducedO, 0, reducedO.length);
80          createRegression().newSampleData(reducedY, reducedX, reducedO);
81      }
82      
83      @Test(expected=IllegalArgumentException.class)
84      public void cannotAddCovarianceDataWithSampleSizeMismatch() {
85          double[] y = new double[]{1.0, 2.0};
86          double[][] x = new double[2][];
87          x[0] = new double[]{1.0, 0};
88          x[1] = new double[]{0, 1.0};
89          double[][] omega = new double[1][];
90          omega[0] = new double[]{1.0, 0};
91          createRegression().newSampleData(y, x, omega);
92      }
93  
94      @Test(expected=IllegalArgumentException.class)
95      public void cannotAddCovarianceDataThatIsNotSquare() {
96          double[] y = new double[]{1.0, 2.0};
97          double[][] x = new double[2][];
98          x[0] = new double[]{1.0, 0};
99          x[1] = new double[]{0, 1.0};
100         double[][] omega = new double[3][];
101         omega[0] = new double[]{1.0, 0};
102         omega[1] = new double[]{0, 1.0};
103         omega[2] = new double[]{0, 2.0};
104         createRegression().newSampleData(y, x, omega);
105     }
106 
107     @Override
108     protected GLSMultipleLinearRegression createRegression() {
109         GLSMultipleLinearRegression regression = new GLSMultipleLinearRegression();
110         regression.newSampleData(y, x, omega);
111         return regression;
112     }
113 
114     @Override
115     protected int getNumberOfRegressors() {
116         return x[0].length;
117     }
118 
119     @Override
120     protected int getSampleSize() {
121         return y.length;
122     }
123         
124 }