public LeastSquareResultsWithTransform(LeastSquareResults transformedFitResult) { super(transformedFitResult); _transform = null; _modelParameters = transformedFitResult.getFitParameters(); _inverseJacobianModelPararms = getFittingParameterSensitivityToData(); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullParams1() { new LeastSquareResults(1, null, COVAR); }
@Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (!(obj instanceof GeneralizedLeastSquareResults)) { return false; } GeneralizedLeastSquareResults<?> other = (GeneralizedLeastSquareResults<?>) obj; if (!Objects.equals(_function, other._function)) { return false; } return true; }
@Test public void testHashCode() { LeastSquareResults ls1 = new LeastSquareResults(1.0, PARAMS, COVAR); LeastSquareResults ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}})); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}}), null); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); ls1 = new LeastSquareResults(1.0, PARAMS, COVAR, INV_JAC); ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}}), DoubleMatrix.copyOf(new double[][] { {0.5, 0.6}, {0.7, 0.8}})); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); }
public void testBSplineFit() { final GeneralizedLeastSquare gls = new GeneralizedLeastSquare(); final LeastSquareResults results = gls.solve(X, Y, SIGMA, BASIS_FUNCTIONS); final Function<Double, Double> spline = new BasisFunctionAggregation<>(BASIS_FUNCTIONS, results.getFitParameters().toArray()); assertEquals(0.0, results.getChiSq(), 1e-12); assertEquals(-0.023605293, spline.apply(0.5), 1e-8); if (PRINT) { System.out.println("Chi^2:\t" + results.getChiSq()); System.out.println("weights:\t" + results.getFitParameters()); for (int i = 0; i < 101; i++) { final double x = 0 + i * 2.0 / 100.0; System.out.println(x + "\t" + spline.apply(x)); } for (int i = 0; i < X.length; i++) { System.out.println(X[i] + "\t" + Y[i]); } } }
@Test public void testRecall() { final double chiSq = 12.46; LeastSquareResults res = new LeastSquareResults(chiSq, PARAMS, COVAR); assertEquals(chiSq, res.getChiSq(), 0.0); for (int i = 0; i < 2; i++) { assertEquals(PARAMS.get(i), res.getFitParameters().get(i), 0); for (int j = 0; j < 2; j++) { assertEquals(COVAR.get(i, j), res.getCovariance().get(i, j), 0); } } res = new LeastSquareResults(chiSq, PARAMS, COVAR, INV_JAC); assertEquals(chiSq, res.getChiSq(), 0.0); for (int i = 0; i < 2; i++) { assertEquals(PARAMS.get(i), res.getFitParameters().get(i), 0); for (int j = 0; j < 2; j++) { assertEquals(COVAR.get(i, j), res.getCovariance().get(i, j), 0); assertEquals(INV_JAC.get(i, j), res.getFittingParameterSensitivityToData().get(i, j), 0); } } }
public void solveRandomNoiseTest() { final MatrixAlgebra ma = new OGMatrixAlgebra(); final double[] y = new double[20]; for (int i = 0; i < 20; i++) { y[i] = Y.get(i) + SIGMA.get(i) * NORMAL.nextRandom(); } final DoubleArray start = DoubleArray.of(0.7, 1.4, 0.2, -0.3); final NonLinearLeastSquare ls = new NonLinearLeastSquare(); final LeastSquareResults res = ls.solve(X, DoubleArray.copyOf(y), SIGMA, PARAM_FUNCTION, PARAM_GRAD, start); final double chiSqDoF = res.getChiSq() / 16; assertTrue(chiSqDoF > 0.25); assertTrue(chiSqDoF < 3.0); final DoubleArray trueValues = DoubleArray.of(1, 1, 0, 0); final DoubleArray delta = (DoubleArray) ma.subtract(res.getFitParameters(), trueValues); final LUDecompositionCommons decmp = new LUDecompositionCommons(); final LUDecompositionResult decmpRes = decmp.apply(res.getCovariance()); final DoubleMatrix invCovariance = decmpRes.solve(DoubleMatrix.identity(4)); double z = ma.getInnerProduct(delta, ma.multiply(invCovariance, delta)); z = Math.sqrt(z); assertTrue(z < 3.0); }
@Test public void testEquals() { LeastSquareResults ls1 = new LeastSquareResults(1.0, PARAMS, COVAR); LeastSquareResults ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}})); assertEquals(ls1, ls2); ls2 = new LeastSquareResults(1.0, PARAMS, COVAR, null); assertEquals(ls1, ls2); ls2 = new LeastSquareResults(1.1, PARAMS, COVAR); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.1, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } })); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2 }, {0.2, 0.4 } })); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, PARAMS, COVAR, INV_JAC); assertFalse(ls1.equals(ls2)); ls1 = new LeastSquareResults(1, PARAMS, COVAR, INV_JAC); ls2 = new LeastSquareResults(1, PARAMS, COVAR, COVAR); assertFalse(ls1.equals(ls2)); }
@Override public int hashCode() { int prime = 31; int result = super.hashCode(); result = prime * result + _function.hashCode(); return result; }
public void solveExactTest2() { final DoubleArray start = DoubleArray.of(0.2, 1.8, 0.2, 0.3); final LeastSquareResults result = LS.solve(Y, SIGMA, FUNCTION, start); assertEquals(0.0, result.getChiSq(), 1e-8); assertEquals(1.0, result.getFitParameters().get(0), 1e-8); assertEquals(1.0, result.getFitParameters().get(1), 1e-8); assertEquals(0.0, result.getFitParameters().get(2), 1e-8); assertEquals(0.0, result.getFitParameters().get(3), 1e-8); }
public void testFit() { final GeneralizedLeastSquare gls = new GeneralizedLeastSquare(); final double[] y = new double[Y.length]; for (int i = 0; i < Y.length; i++) { y[i] = Y[i] + SIGMA[i] * NORMAL.nextRandom(); } final LeastSquareResults results = gls.solve(X, y, SIGMA, SIN_FUNCTIONS); assertTrue(results.getChiSq() < 3 * Y.length); }
@Override public int hashCode() { int prime = 31; int result = super.hashCode(); result = prime * result + ((_inverseJacobianModelPararms == null) ? 0 : _inverseJacobianModelPararms.hashCode()); result = prime * result + ((_modelParameters == null) ? 0 : _modelParameters.hashCode()); result = prime * result + ((_transform == null) ? 0 : _transform.hashCode()); return result; }
new BasisFunctionAggregation<>(BASIS_FUNCTIONS_2D, results.getFitParameters().toArray()); assertEquals(0.0, results.getChiSq(), 1e-16); assertEquals(0.05161579, spline.apply(new double[] {4, 3 }), 1e-8); System.out.println("Chi^2:\t" + results.getChiSq()); System.out.println("weights:\t" + results.getFitParameters());
@Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeChiSq2() { new LeastSquareResults(-1, PARAMS, COVAR, INV_JAC); }
vols = updateParameters(sabrDefinition, vols, resTransform.getModelParameters()); return IborCapletFloorletVolatilityCalibrationResult.ofLeastSquare(vols, res.getChiSq());
public void smallPertubationTest() { final MatrixAlgebra ma = new OGMatrixAlgebra(); final double[] dy = new double[20]; for (int i = 0; i < 20; i++) { dy[i] = 0.1 * SIGMA.get(i) * NORMAL.nextRandom(); } final DoubleArray deltaY = DoubleArray.copyOf(dy); final DoubleArray solution = DoubleArray.of(1.0, 1.0, 0.0, 0.0); final NonLinearLeastSquare ls = new NonLinearLeastSquare(); final DoubleMatrix res = ls.calInverseJacobian(SIGMA, FUNCTION, GRAD, solution); final DoubleArray deltaParms = (DoubleArray) ma.multiply(res, deltaY); final DoubleArray y = (DoubleArray) ma.add(Y, deltaY); final LeastSquareResults lsRes = ls.solve(X, y, SIGMA, PARAM_FUNCTION, PARAM_GRAD, solution); final DoubleArray trueDeltaParms = (DoubleArray) ma.subtract(lsRes.getFitParameters(), solution); assertEquals(trueDeltaParms.get(0), deltaParms.get(0), 5e-5); assertEquals(trueDeltaParms.get(1), deltaParms.get(1), 5e-5); assertEquals(trueDeltaParms.get(2), deltaParms.get(2), 5e-5); assertEquals(trueDeltaParms.get(3), deltaParms.get(3), 5e-5); }
return true; if (!super.equals(obj)) { return false;
public void solveExactWithoutGradientTest() { final DoubleArray start = DoubleArray.of(1.2, 0.8, -0.2, -0.3); final NonLinearLeastSquare ls = new NonLinearLeastSquare(); final LeastSquareResults result = ls.solve(X, Y, SIGMA, PARAM_FUNCTION, start); assertEquals(0.0, result.getChiSq(), 1e-8); assertEquals(1.0, result.getFitParameters().get(0), 1e-8); assertEquals(1.0, result.getFitParameters().get(1), 1e-8); assertEquals(0.0, result.getFitParameters().get(2), 1e-8); assertEquals(0.0, result.getFitParameters().get(3), 1e-8); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeChiSq1() { new LeastSquareResults(-1, PARAMS, COVAR); }