001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.math.stat.regression;
018    
019    import org.junit.Before;
020    import org.junit.Test;
021    
022    public class GLSMultipleLinearRegressionTest extends MultipleLinearRegressionAbstractTest {
023    
024        private double[] y;
025        private double[][] x;
026        private double[][] omega;
027    
028        @Before
029        @Override
030        public void setUp(){
031            y = new double[]{11.0, 12.0, 13.0, 14.0, 15.0, 16.0};
032            x = new double[6][];
033            x[0] = new double[]{1.0, 0, 0, 0, 0, 0};
034            x[1] = new double[]{1.0, 2.0, 0, 0, 0, 0};
035            x[2] = new double[]{1.0, 0, 3.0, 0, 0, 0};
036            x[3] = new double[]{1.0, 0, 0, 4.0, 0, 0};
037            x[4] = new double[]{1.0, 0, 0, 0, 5.0, 0};
038            x[5] = new double[]{1.0, 0, 0, 0, 0, 6.0};
039            omega = new double[6][];
040            omega[0] = new double[]{1.0, 0, 0, 0, 0, 0};
041            omega[1] = new double[]{0, 2.0, 0, 0, 0, 0};
042            omega[2] = new double[]{0, 0, 3.0, 0, 0, 0};
043            omega[3] = new double[]{0, 0, 0, 4.0, 0, 0};
044            omega[4] = new double[]{0, 0, 0, 0, 5.0, 0};
045            omega[5] = new double[]{0, 0, 0, 0, 0, 6.0};
046            super.setUp();
047        }
048       
049        @Test(expected=IllegalArgumentException.class)
050        public void cannotAddXSampleData() {
051            createRegression().newSampleData(new double[]{}, null, null);
052        }
053    
054        @Test(expected=IllegalArgumentException.class)
055        public void cannotAddNullYSampleData() {
056            createRegression().newSampleData(null, new double[][]{}, null);
057        }
058        
059        @Test(expected=IllegalArgumentException.class)
060        public void cannotAddSampleDataWithSizeMismatch() {
061            double[] y = new double[]{1.0, 2.0};
062            double[][] x = new double[1][];
063            x[0] = new double[]{1.0, 0};
064            createRegression().newSampleData(y, x, null);
065        }
066        
067        @Test(expected=IllegalArgumentException.class)
068        public void cannotAddNullCovarianceData() {
069            createRegression().newSampleData(new double[]{}, new double[][]{}, null);
070        }
071        
072        @Test(expected=IllegalArgumentException.class)
073        public void notEnoughData() {
074            double[]   reducedY = new double[y.length - 1];
075            double[][] reducedX = new double[x.length - 1][];
076            double[][] reducedO = new double[omega.length - 1][];
077            System.arraycopy(y,     0, reducedY, 0, reducedY.length);
078            System.arraycopy(x,     0, reducedX, 0, reducedX.length);
079            System.arraycopy(omega, 0, reducedO, 0, reducedO.length);
080            createRegression().newSampleData(reducedY, reducedX, reducedO);
081        }
082        
083        @Test(expected=IllegalArgumentException.class)
084        public void cannotAddCovarianceDataWithSampleSizeMismatch() {
085            double[] y = new double[]{1.0, 2.0};
086            double[][] x = new double[2][];
087            x[0] = new double[]{1.0, 0};
088            x[1] = new double[]{0, 1.0};
089            double[][] omega = new double[1][];
090            omega[0] = new double[]{1.0, 0};
091            createRegression().newSampleData(y, x, omega);
092        }
093    
094        @Test(expected=IllegalArgumentException.class)
095        public void cannotAddCovarianceDataThatIsNotSquare() {
096            double[] y = new double[]{1.0, 2.0};
097            double[][] x = new double[2][];
098            x[0] = new double[]{1.0, 0};
099            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    }