public LeastSquareResultsWithTransform(LeastSquareResults transformedFitResult) { super(transformedFitResult); _transform = null; _modelParameters = transformedFitResult.getFitParameters(); _inverseJacobianModelPararms = getFittingParameterSensitivityToData(); }
/** * * @param <T> The type of the independent variables (e.g. Double, double[], DoubleArray etc) * @param x independent variables * @param y dependent (scalar) variables * @param sigma (Gaussian) measurement error on dependent variables * @param basisFunctions set of basis functions - the fitting function is formed by these basis functions times a set of weights * @return the results of the least square */ public <T> GeneralizedLeastSquareResults<T> solve( T[] x, double[] y, double[] sigma, List<Function<T, Double>> basisFunctions) { return solve(x, y, sigma, basisFunctions, 0.0, 0); }
/** * This a matrix where the i,j-th element is the (infinitesimal) sensitivity of the i-th model parameter * to the j-th data point, when the fitting parameter are such that the chi-squared is minimised. * So it is a type of (inverse) Jacobian, but should not be confused with the model jacobian * (sensitivity of model parameters to internal parameters used in calibration procedure) or its inverse. * @return a matrix */ public DoubleMatrix getModelParameterSensitivityToData() { if (_inverseJacobianModelPararms == null) { setModelParameterSensitivityToData(); } return _inverseJacobianModelPararms; }
public void testPerfectFit() { final GeneralizedLeastSquare gls = new GeneralizedLeastSquare(); final LeastSquareResults results = gls.solve(X, Y, SIGMA, SIN_FUNCTIONS); assertEquals(0.0, results.getChiSq(), 1e-8); final DoubleArray w = results.getFitParameters(); for (int i = 0; i < WEIGHTS.length; i++) { assertEquals(WEIGHTS[i], w.get(i), 1e-8); } }
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); }
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); }
private LeastSquareResults finish( DoubleMatrix alpha, DecompositionResult decmp, double newChiSqr, DoubleMatrix jacobian, DoubleArray newTheta, DoubleArray sigma) { DoubleMatrix covariance = decmp.solve(DoubleMatrix.identity(alpha.rowCount())); DoubleMatrix bT = getBTranspose(jacobian, sigma); DoubleMatrix inverseJacobian = decmp.solve(bT); return new LeastSquareResults(newChiSqr, newTheta, covariance, inverseJacobian); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullParams1() { new LeastSquareResults(1, null, COVAR); }
/** * Use this when the model is given as a function of its parameters only (i.e. a function that takes a set of * parameters and return a set of model values, * so the measurement points are already known to the function), and analytic parameter sensitivity is available * @param observedValues Set of measurement values * @param sigma Set of measurement errors * @param func The model as a function of its parameters only * @param jac The model sensitivity to its parameters (i.e. the Jacobian matrix) as a function of its parameters only * @param startPos Initial value of the parameters * @return value of the fitted parameters */ public LeastSquareResults solve( DoubleArray observedValues, DoubleArray sigma, Function<DoubleArray, DoubleArray> func, Function<DoubleArray, DoubleMatrix> jac, DoubleArray startPos) { return solve(observedValues, sigma, func, jac, startPos, UNCONSTRAINED, null); }
private LeastSquareWithPenaltyResults finish( DoubleMatrix alpha, DecompositionResult decmp, double chiSqr, double penalty, DoubleMatrix jacobian, DoubleArray newTheta, DoubleArray sigma) { DoubleMatrix covariance = decmp.solve(DoubleMatrix.identity(alpha.rowCount())); DoubleMatrix bT = getBTranspose(jacobian, sigma); DoubleMatrix inverseJacobian = decmp.solve(bT); return new LeastSquareWithPenaltyResults(chiSqr, penalty, newTheta, covariance, inverseJacobian); }
@Override public int hashCode() { int prime = 31; int result = super.hashCode(); result = prime * result + _function.hashCode(); return result; }
private DirectIborCapletFloorletVolatilityCalibrator( VolatilityIborCapFloorLegPricer pricer, double epsilon, ReferenceData referenceData) { super(pricer, referenceData); this.solver = new NonLinearLeastSquareWithPenalty(new CholeskyDecompositionCommons(), epsilon); }
public void testPerfectFitVector() { final GeneralizedLeastSquare gls = new GeneralizedLeastSquare(); final LeastSquareResults results = gls.solve(X_TRIG, Y_TRIG, SIGMA_TRIG, VECTOR_TRIG_FUNCTIONS); assertEquals(0.0, results.getChiSq(), 1e-8); final DoubleArray w = results.getFitParameters(); for (int i = 0; i < WEIGHTS.length; i++) { assertEquals(WEIGHTS[i], w.get(i), 1e-8); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeChiSq2() { new LeastSquareResults(-1, PARAMS, COVAR, INV_JAC); }
/** * * @param <T> The type of the independent variables (e.g. Double, double[], DoubleArray etc) * @param x independent variables * @param y dependent (scalar) variables * @param sigma (Gaussian) measurement error on dependent variables * @param basisFunctions set of basis functions - the fitting function is formed by these basis functions times a set of weights * @return the results of the least square */ public <T> GeneralizedLeastSquareResults<T> solve( List<T> x, List<Double> y, List<Double> sigma, List<Function<T, Double>> basisFunctions) { return solve(x, y, sigma, basisFunctions, 0.0, 0); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeChiSq1() { new LeastSquareResults(-1, PARAMS, COVAR); }
GeneralizedLeastSquareResults<Double> solve( double[] x, double[] y, double[] sigma, List<Function<Double, Double>> basisFunctions, double lambda, int differenceOrder) { return solve(DoubleArrayMath.toObject(x), y, sigma, basisFunctions, lambda, differenceOrder); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullCovar2() { new LeastSquareResults(1, PARAMS, null, INV_JAC); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNullCovar1() { new LeastSquareResults(1, PARAMS, null); }