diff --git a/project.xml b/project.xml
index fdeefa47f..bf6487cce 100644
--- a/project.xml
+++ b/project.xml
@@ -23,7 +23,7 @@
Math
commons-math
commons-math
- 1.2-RC2
+ 2.0-SNAPSHOT
2003
Commons Math
The Math project is a library of lightweight, self-contained mathematics and statistics components addressing the most common practical problems not immediately available in the Java programming language or commons-lang.
diff --git a/src/java/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegression.java b/src/java/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegression.java
index 3a721a940..49057c13d 100644
--- a/src/java/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegression.java
+++ b/src/java/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegression.java
@@ -34,20 +34,43 @@ public abstract class AbstractMultipleLinearRegression implements
protected RealMatrix Y;
/**
- * Adds y sample data.
+ * Loads model x and y sample data from a flat array of data, overriding any previous sample.
+ * Assumes that rows are concatenated with y values first in each row.
+ *
+ * @param data input data array
+ * @param nobs number of observations (rows)
+ * @param nvars number of independent variables (columnns, not counting y)
+ */
+ public void newSampleData(double[] data, int nobs, int nvars) {
+ double[] y = new double[nobs];
+ double[][] x = new double[nobs][nvars + 1];
+ int pointer = 0;
+ for (int i = 0; i < nobs; i++) {
+ y[i] = data[pointer++];
+ x[i][0] = 1.0d;
+ for (int j = 1; j < nvars + 1; j++) {
+ x[i][j] = data[pointer++];
+ }
+ }
+ this.X = new RealMatrixImpl(x);
+ this.Y = new RealMatrixImpl(y);
+ }
+
+ /**
+ * Loads new y sample data, overriding any previous sample
*
* @param y the [n,1] array representing the y sample
*/
- protected void addYSampleData(double[] y) {
+ protected void newYSampleData(double[] y) {
this.Y = new RealMatrixImpl(y);
}
/**
- * Adds x sample data.
+ * Loads new x sample data, overriding any previous sample
*
* @param x the [n,k] array representing the x sample
*/
- protected void addXSampleData(double[][] x) {
+ protected void newXSampleData(double[][] x) {
this.X = new RealMatrixImpl(x);
}
diff --git a/src/java/org/apache/commons/math/stat/regression/GLSMultipleLinearRegression.java b/src/java/org/apache/commons/math/stat/regression/GLSMultipleLinearRegression.java
index 02cf32b65..139e13675 100644
--- a/src/java/org/apache/commons/math/stat/regression/GLSMultipleLinearRegression.java
+++ b/src/java/org/apache/commons/math/stat/regression/GLSMultipleLinearRegression.java
@@ -44,15 +44,12 @@ public class GLSMultipleLinearRegression extends AbstractMultipleLinearRegressio
/** Covariance matrix. */
private RealMatrix Omega;
- /**
- * {@inheritDoc}
- */
- public void addData(double[] y, double[][] x, double[][] covariance) {
+ public void newSampleData(double[] y, double[][] x, double[][] covariance) {
validateSampleData(x, y);
- addYSampleData(y);
- addXSampleData(x);
+ newYSampleData(y);
+ newXSampleData(x);
validateCovarianceData(x, covariance);
- addCovarianceData(covariance);
+ newCovarianceData(covariance);
}
/**
@@ -60,7 +57,7 @@ public class GLSMultipleLinearRegression extends AbstractMultipleLinearRegressio
*
* @param omega the [n,n] array representing the covariance
*/
- protected void addCovarianceData(double[][] omega){
+ protected void newCovarianceData(double[][] omega){
this.Omega = new RealMatrixImpl(omega);
}
diff --git a/src/java/org/apache/commons/math/stat/regression/MultipleLinearRegression.java b/src/java/org/apache/commons/math/stat/regression/MultipleLinearRegression.java
index cd793aa4e..eb0795b50 100644
--- a/src/java/org/apache/commons/math/stat/regression/MultipleLinearRegression.java
+++ b/src/java/org/apache/commons/math/stat/regression/MultipleLinearRegression.java
@@ -32,17 +32,6 @@ package org.apache.commons.math.stat.regression;
*/
public interface MultipleLinearRegression {
- /**
- * Adds sample and covariance data.
- *
- * @param y the [n,1] array representing the y sample
- * @param x the [n,k] array representing x sample
- * @param covariance the [n,n] array representing the covariance matrix or null
if not required for the
- * specific implementation
- * @throws IllegalArgumentException if required data arrays are null
or their dimensions are not appropriate
- */
- void addData(double[] y, double[][] x, double[][] covariance);
-
/**
* Estimates the regression parameters b.
*
diff --git a/src/java/org/apache/commons/math/stat/regression/OLSMultipleLinearRegression.java b/src/java/org/apache/commons/math/stat/regression/OLSMultipleLinearRegression.java
index 1935e9e43..3779f94de 100644
--- a/src/java/org/apache/commons/math/stat/regression/OLSMultipleLinearRegression.java
+++ b/src/java/org/apache/commons/math/stat/regression/OLSMultipleLinearRegression.java
@@ -40,13 +40,10 @@ import org.apache.commons.math.linear.RealMatrix;
*/
public class OLSMultipleLinearRegression extends AbstractMultipleLinearRegression {
- /**
- * {@inheritDoc}
- */
- public void addData(double[] y, double[][] x, double[][] covariance) {
+ public void newSampleData(double[] y, double[][] x) {
validateSampleData(x, y);
- addYSampleData(y);
- addXSampleData(x);
+ newYSampleData(y);
+ newXSampleData(x);
}
/**
diff --git a/src/test/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegressionTest.java b/src/test/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegressionTest.java
index d9d60fb7c..3fdef07c4 100644
--- a/src/test/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegressionTest.java
+++ b/src/test/org/apache/commons/math/stat/regression/AbstractMultipleLinearRegressionTest.java
@@ -61,45 +61,5 @@ public abstract class AbstractMultipleLinearRegressionTest {
double variance = regression.estimateRegressandVariance();
assertTrue(variance > 0.0);
}
-
- @Test(expected=IllegalArgumentException.class)
- public void cannotAddXSampleData() {
- regression.addData(new double[]{}, null, null);
- }
-
- @Test(expected=IllegalArgumentException.class)
- public void cannotAddNullYSampleData() {
- regression.addData(null, new double[][]{}, null);
- }
-
- @Test(expected=IllegalArgumentException.class)
- public void cannotAddSampleDataWithSizeMismatch() {
- double[] y = new double[]{1.0, 2.0};
- double[][] x = new double[1][];
- x[0] = new double[]{1.0, 0};
- regression.addData(y, x, null);
- }
-
- /**
- * Loads model Y[] and X[][] arrays from a flat array of data.
- * Assumes that rows are concatenated with y values first in each row.
- *
- * @param data input data array
- * @param y vector of y values to be filled
- * @param x matrix of x values to be filled
- * @param nobs number of observations (rows)
- * @param nvars number of independent variables (columnns, not counting y)
- */
- protected void loadModelData(double[] data, double[] y, double[][] x, int nobs, int nvars) {
- int pointer = 0;
- for (int i = 0; i < nobs; i++) {
- y[i] = data[pointer++];
- x[i][0] = 1.0d;
- for (int j = 1; j < nvars + 1; j++) {
- x[i][j] = data[pointer++];
- }
- }
-
- }
}
diff --git a/src/test/org/apache/commons/math/stat/regression/GLSMultipleLinearRegressionTest.java b/src/test/org/apache/commons/math/stat/regression/GLSMultipleLinearRegressionTest.java
index 1a1dc1cd4..37b69383c 100644
--- a/src/test/org/apache/commons/math/stat/regression/GLSMultipleLinearRegressionTest.java
+++ b/src/test/org/apache/commons/math/stat/regression/GLSMultipleLinearRegressionTest.java
@@ -45,10 +45,27 @@ public class GLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
super.setUp();
}
+ @Test(expected=IllegalArgumentException.class)
+ public void cannotAddXSampleData() {
+ createRegression().newSampleData(new double[]{}, null, null);
+ }
+ @Test(expected=IllegalArgumentException.class)
+ public void cannotAddNullYSampleData() {
+ createRegression().newSampleData(null, new double[][]{}, null);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void cannotAddSampleDataWithSizeMismatch() {
+ double[] y = new double[]{1.0, 2.0};
+ double[][] x = new double[1][];
+ x[0] = new double[]{1.0, 0};
+ createRegression().newSampleData(y, x, null);
+ }
+
@Test(expected=IllegalArgumentException.class)
public void cannotAddNullCovarianceData() {
- regression.addData(new double[]{}, new double[][]{}, null);
+ createRegression().newSampleData(new double[]{}, new double[][]{}, null);
}
@Test(expected=IllegalArgumentException.class)
@@ -59,7 +76,7 @@ public class GLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
x[1] = new double[]{0, 1.0};
double[][] omega = new double[1][];
omega[0] = new double[]{1.0, 0};
- regression.addData(y, x, omega);
+ createRegression().newSampleData(y, x, omega);
}
@Test(expected=IllegalArgumentException.class)
@@ -72,12 +89,12 @@ public class GLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
omega[0] = new double[]{1.0, 0};
omega[1] = new double[]{0, 1.0};
omega[2] = new double[]{0, 2.0};
- regression.addData(y, x, omega);
+ createRegression().newSampleData(y, x, omega);
}
- protected MultipleLinearRegression createRegression() {
- MultipleLinearRegression regression = new GLSMultipleLinearRegression();
- regression.addData(y, x, omega);
+ protected GLSMultipleLinearRegression createRegression() {
+ GLSMultipleLinearRegression regression = new GLSMultipleLinearRegression();
+ regression.newSampleData(y, x, omega);
return regression;
}
diff --git a/src/test/org/apache/commons/math/stat/regression/OLSMultipleLinearRegressionTest.java b/src/test/org/apache/commons/math/stat/regression/OLSMultipleLinearRegressionTest.java
index 7e9d6b0e9..027f7ff3f 100644
--- a/src/test/org/apache/commons/math/stat/regression/OLSMultipleLinearRegressionTest.java
+++ b/src/test/org/apache/commons/math/stat/regression/OLSMultipleLinearRegressionTest.java
@@ -38,9 +38,9 @@ public class OLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
super.setUp();
}
- protected MultipleLinearRegression createRegression() {
- MultipleLinearRegression regression = new OLSMultipleLinearRegression();
- regression.addData(y, x, null);
+ protected OLSMultipleLinearRegression createRegression() {
+ OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
+ regression.newSampleData(y, x);
return regression;
}
@@ -52,6 +52,24 @@ public class OLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
return y.length;
}
+ @Test(expected=IllegalArgumentException.class)
+ public void cannotAddXSampleData() {
+ createRegression().newSampleData(new double[]{}, null);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void cannotAddNullYSampleData() {
+ createRegression().newSampleData(null, new double[][]{});
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void cannotAddSampleDataWithSizeMismatch() {
+ double[] y = new double[]{1.0, 2.0};
+ double[][] x = new double[1][];
+ x[0] = new double[]{1.0, 0};
+ createRegression().newSampleData(y, x);
+ }
+
@Test
public void testPerfectFit() {
double[] betaHat = regression.estimateRegressionParameters();
@@ -102,13 +120,10 @@ public class OLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
// Transform to Y and X required by interface
int nobs = 16;
int nvars = 6;
- double[] y = new double[nobs];
- double[][] x = new double[nobs][nvars + 1];
- loadModelData(design, y, x, nobs, nvars);
// Estimate the model
- MultipleLinearRegression model = new OLSMultipleLinearRegression();
- model.addData(y, x, null);
+ OLSMultipleLinearRegression model = new OLSMultipleLinearRegression();
+ model.newSampleData(design, nobs, nvars);
// Check expected beta values from NIST
double[] betaHat = model.estimateRegressionParameters();
@@ -193,13 +208,10 @@ public class OLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre
// Transform to Y and X required by interface
int nobs = 47;
int nvars = 4;
- double[] y = new double[nobs];
- double[][] x = new double[nobs][nvars + 1];
- loadModelData(design, y, x, nobs, nvars);
// Estimate the model
- MultipleLinearRegression model = new OLSMultipleLinearRegression();
- model.addData(y, x, null);
+ OLSMultipleLinearRegression model = new OLSMultipleLinearRegression();
+ model.newSampleData(design, nobs, nvars);
// Check expected beta values from R
double[] betaHat = model.estimateRegressionParameters();