List of usage examples for org.apache.commons.math3.fitting WeightedObservedPoint getX
public double getX()
From source file:edu.ucsf.valelab.saim.calculations.SaimErrorFunction.java
public SaimErrorFunction(SaimData data, Collection<WeightedObservedPoint> observedPoints) { data_ = data;/* w ww . ja v a 2s . c om*/ observedPoints_ = observedPoints; fresnelTE_ = new HashMap<Double, Complex>(observedPoints_.size()); // pre-calculate all the fresnel coefficients for (WeightedObservedPoint observedPoint : observedPoints_) { double angle = observedPoint.getX(); Complex val = SaimCalc.fresnelTE(data_.wavelength_, angle, data_.dOx_, data_.nSample_); fresnelTE_.put(angle, val); } }
From source file:edu.ucsf.valelab.saim.calculations.SaimErrorFunction.java
/** * For each observedPoint.getX calculates the predicted intensity * Returns the sum of absolute errors//w ww. ja va2s. co m * @param point {A, B, h} * @return sum of absolute errors */ @Override public double value(double[] point) { if (point.length != 3) { throw new DimensionMismatchException(point.length, 3); } double A = point[0]; double B = point[1]; double h = point[2]; double error = 0.0; for (WeightedObservedPoint observedPoint : observedPoints_) { double angle = observedPoint.getX(); Complex rTE = fresnelTE_.get(angle); double phaseDiff = SaimCalc.PhaseDiff(data_.wavelength_, angle, data_.nSample_, h); double c = rTE.getReal(); double d = rTE.getImaginary(); double val = 1 + 2 * c * Math.cos(phaseDiff) - 2 * d * Math.sin(phaseDiff) + c * c + d * d; error += Math.abs(A * val + B - observedPoint.getY()); } return error; }
From source file:edu.washington.gs.skyline.model.quantification.RegressionFit.java
public Double computeRSquared(CalibrationCurve curve, List<WeightedObservedPoint> points) { SummaryStatistics yValues = new SummaryStatistics(); SummaryStatistics residuals = new SummaryStatistics(); for (WeightedObservedPoint point : points) { Double yFitted = curve.getY(point.getX()); if (yFitted == null) { continue; }/*from w w w.jav a 2 s . c o m*/ yValues.addValue(point.getY()); residuals.addValue(point.getY() - yFitted); } if (0 == residuals.getN()) { return null; } double yMean = yValues.getMean(); double totalSumOfSquares = points.stream().mapToDouble(p -> (p.getY() - yMean) * (p.getY() - yMean)).sum(); double sumOfSquaresOfResiduals = residuals.getSumsq(); double rSquared = 1 - sumOfSquaresOfResiduals / totalSumOfSquares; return rSquared; }
From source file:eu.tango.energymodeller.energypredictor.CpuAndAcceleratorEnergyPredictor.java
/** * This performs a calculation to determine how close the fit is for a given * model./*w w w . j a v a 2 s . c om*/ * * @param function The PolynomialFunction to assess * @param observed The actual set of observed points * @return The sum of the square error. */ private double getSumOfSquareError(PolynomialFunction function, List<WeightedObservedPoint> observed) { double answer = 0; for (WeightedObservedPoint current : observed) { double error = current.getY() - function.value(current.getX()); answer = answer + (error * error); } return answer; }
From source file:eu.tango.energymodeller.energypredictor.CpuAndBiModalAcceleratorEnergyPredictor.java
/** * This performs a calculation to determine how close the fit is for a given * model.// w w w .j a v a 2s .com * * @param function The PolynomialFunction to assess * @param observed The actual set of observed points * @return The sum of the square error. */ private double getSumOfSquareError(GroupingFunction function, List<WeightedObservedPoint> observed) { double answer = 0; for (WeightedObservedPoint current : observed) { double error = current.getY() - function.value(current.getX()); answer = answer + (error * error); } return answer; }
From source file:edu.ucsf.valelab.saim.calculations.TestSaimErrorFunction.java
public void test() throws Exception { SaimData data = new SaimData(); data.wavelength_ = 488.0;/* w ww . j av a2 s.c o m*/ data.nSample_ = 1.36; data.dOx_ = 500.0; data.A_ = 1000.0; data.B_ = 5000.0; data.heights_ = new double[] { 75.0 }; double maxError = 0.0000000001; // make a collection of "observed" points ArrayList<WeightedObservedPoint> points = new ArrayList<WeightedObservedPoint>(); for (int i = -50; i <= 50; i += 1) { double angle = Math.toRadians(i); double I = data.A_ * SaimCalc.fieldStrength(data.wavelength_, angle, data.nSample_, data.dOx_, data.heights_[0]) + data.B_; WeightedObservedPoint point = new WeightedObservedPoint(1.0, angle, I); points.add(point); } // calculate the error with these ideal points (shoudle be 0) SaimErrorFunction sef = new SaimErrorFunction(data, points); double[] parameters = { data.A_, data.B_, data.heights_[0] }; double error = sef.value(parameters); System.out.println("SaimError error: " + error); assertEquals(0.0, error, maxError); // now add 1 to all the data points. Error should be number of data points ArrayList<WeightedObservedPoint> newPoints = new ArrayList<WeightedObservedPoint>(); for (WeightedObservedPoint point : points) { newPoints.add(new WeightedObservedPoint(1.0, point.getX(), point.getY() + 1.0)); } SaimErrorFunction sef2 = new SaimErrorFunction(data, newPoints); error = sef2.value(parameters); System.out.println("SaimError error: " + error); assertEquals(points.size(), error, maxError); }