List of usage examples for org.apache.commons.math3.stat.descriptive.rank Percentile evaluate
public double evaluate(final double p) throws MathIllegalArgumentException
From source file:org.jpmml.evaluator.RegressionAggregator.java
static double median(List<Double> values) { double[] data = Doubles.toArray(values); // The data must be ordered Arrays.sort(data);//from w w w . j a v a 2s. c o m Percentile percentile = new Percentile(); percentile.setData(data); return percentile.evaluate(50); }
From source file:org.orbisgis.sos.LeqStats.java
/** * Compute Leq stats using specified range.double[][] classRanges = ; * @param laOccurrencesRanges Min-Max range ex: new double[][]{{Double.MIN_VALUE, 45}, {45, 55}, {55, 65}, {65, 75},{75, Double.MAX_VALUE}} * @return LeqOccurrences instance/*from w ww . ja v a2 s . c om*/ */ public LeqOccurrences computeLeqOccurrences(double[][] laOccurrencesRanges) { // Compute invert sum of class occurrences List<Double> classList = new ArrayList<>(leqClass.size()); List<Integer> classValue = new ArrayList<>(leqClass.size()); long sum = 0; double[] values = new double[rmsSumCount]; int valCounter = 0; for (Map.Entry<Integer, AtomicInteger> entry : leqClass.entrySet()) { double leq = entry.getKey() * classStep; classList.add(leq); classValue.add(0, entry.getValue().get()); sum += entry.getValue().get(); for (int classValCount = 0; classValCount < entry.getValue().get(); classValCount++) { values[valCounter++] = leq; } } List<Double> sumClassValuePerc = new ArrayList<>(classValue.size()); double invSum = 0.; for (int classVal : classValue) { invSum += classVal / (double) sum; sumClassValuePerc.add(0, invSum); } Percentile percentile = new Percentile(); percentile.setData(values); // Fetch level at each lae double la10 = percentile.evaluate(100 - 10); double la50 = percentile.evaluate(50); double la90 = percentile.evaluate(100 - 90); // Sum percentage between provided laOccurrancesRanges List<Double> laOccurrencesRangesValue = new ArrayList<>(); if (laOccurrencesRanges != null) { for (double[] range : laOccurrencesRanges) { double min = range[0]; double max = range[1]; double sumClass = 0; for (int idClass = 0; idClass < sumClassValuePerc.size(); idClass++) { if (classList.get(idClass) >= min) { if (classList.get(idClass) < max) { sumClass += classValue.get(sumClassValuePerc.size() - 1 - idClass) / (double) sum; } else { break; } } } laOccurrencesRangesValue.add(sumClass); } } return new LeqOccurrences(la10, la50, la90, laOccurrencesRangesValue); }