This is an automated email from the ASF dual-hosted git repository. erans pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-math.git
commit 55fbf2dc6e85c63fbfb8693789ec45d44f4976d5 Author: Chee Sing Lee <l...@bigml.com> AuthorDate: Tue Apr 9 11:34:39 2019 -0700 MATH-1477: fix reordering check in MillerUpdatingRegression.regress --- .../stat/regression/MillerUpdatingRegression.java | 2 +- .../regression/MillerUpdatingRegressionTest.java | 45 +++++++++++++++++----- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegression.java b/src/main/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegression.java index 0558719..e3b563b 100644 --- a/src/main/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegression.java +++ b/src/main/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegression.java @@ -1063,7 +1063,7 @@ public class MillerUpdatingRegression implements UpdatingMultipleLinearRegressio } boolean needsReorder = false; - for (int i = 0; i < this.nvars; i++) { + for (int i = 0; i < series.length; i++) { if (this.vorder[i] != series[i]) { needsReorder = true; break; diff --git a/src/test/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegressionTest.java b/src/test/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegressionTest.java index 30c5bff..01065db 100644 --- a/src/test/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegressionTest.java +++ b/src/test/java/org/apache/commons/math4/stat/regression/MillerUpdatingRegressionTest.java @@ -1051,19 +1051,27 @@ public class MillerUpdatingRegressionTest { } - @Test - public void testSubsetRegression() { - - MillerUpdatingRegression instance = new MillerUpdatingRegression(3, true); - MillerUpdatingRegression redRegression = new MillerUpdatingRegression(2, true); + private void subsetRegression(int i_exclude, boolean constant){ + int[] indices = new int[2]; + int j = 0; + for (int i = 0; i < 3; i++){ + if (i != i_exclude){ + indices[j] = i; + j++; + } + } + int i0 = indices[0]; + int i1 = indices[1]; + MillerUpdatingRegression instance = new MillerUpdatingRegression(3, constant); + MillerUpdatingRegression redRegression = new MillerUpdatingRegression(2, constant); double[][] x = new double[airdata[0].length][]; double[][] xReduced = new double[airdata[0].length][]; double[] y = new double[airdata[0].length]; for (int i = 0; i < airdata[0].length; i++) { x[i] = new double[3]; - x[i][0] = FastMath.log(airdata[3][i]); - x[i][1] = FastMath.log(airdata[4][i]); - x[i][2] = airdata[5][i]; + x[i][i0] = FastMath.log(airdata[3][i]); + x[i][i1] = FastMath.log(airdata[4][i]); + x[i][i_exclude] = airdata[5][i]; xReduced[i] = new double[2]; xReduced[i][0] = FastMath.log(airdata[3][i]); @@ -1075,7 +1083,17 @@ public class MillerUpdatingRegressionTest { instance.addObservations(x, y); redRegression.addObservations(xReduced, y); - RegressionResults resultsInstance = instance.regress( new int[]{0,1,2} ); + int includedIndices[]; + if (constant){ + includedIndices = new int[3]; + includedIndices[0] = 0; + includedIndices[1] = i0 + 1; + includedIndices[2] = i1 + 1; + } else { + includedIndices = indices; + } + + RegressionResults resultsInstance = instance.regress( includedIndices ); RegressionResults resultsReduced = redRegression.regress(); TestUtils.assertEquals(resultsInstance.getParameterEstimates(), resultsReduced.getParameterEstimates(), 1.0e-12); @@ -1083,4 +1101,13 @@ public class MillerUpdatingRegressionTest { } + @Test + public void testSubsetRegression() { + for (int i=0; i < 3; i++){ + subsetRegression(i, true); + subsetRegression(i, false); + } + } + + }