public void weights() { double[] wComputed = METHOD.weights(DATA_123.size()); assertEquals(wComputed.length, DATA_123.size(), "Weight size is same as sample size"); double wTotal = 0.0d; for (int i = 0; i < wComputed.length; i++) { wTotal += wComputed[i]; } assertEquals(wTotal, 1.0, TOLERANCE_WEIGHT, "Total weight should be 1."); for (int i = 0; i < wComputed.length - 1; i++) { assertEquals(wComputed[i + 1], wComputed[i] / LAMBDA, TOLERANCE_WEIGHT, "Ratio between weights."); } }
private void check_quantile(double level) { double[] w = METHOD.weights(DATA_123.size()); double qComputed = METHOD.quantileFromUnsorted(level, DATA_123); double WI1 = 0.0d; int nbW = 0; for (int i = 0; i < DATA_123.size(); i++) { if (DATA_123.get(i) > qComputed) { WI1 += w[i]; nbW++; } } assertTrue(WI1 < 1.0d - level, "Weight of tail lower than level"); double[] w2 = w.clone(); double[] data = DATA_123.toArray(); DoubleArrayMath.sortPairs(data, w2); double WI = WI1 + w2[w.length - 1 - nbW]; assertTrue(WI > 1.0d - level, "Weight of tail+1 larger than level"); double alpha = (WI - (1 - level)) / (WI - WI1); double qExpected = (1 - alpha) * data[w.length - 1 - nbW] + alpha * data[w.length - 1 - nbW + 1]; assertEquals(qComputed, qExpected, TOLERANCE_WEIGHT, "Quantile."); }
private QuantileResult quantileDetails( double level, DoubleArray sample, boolean isExtrapolated, boolean isEs) { int nbData = sample.size(); double[] w = weights(nbData); /* Sorting data and keeping weight information. The arrays are modified */ double[] s = sample.toArray(); DoubleArrayMath.sortPairs(s, w); double[] s2 = sample.toArray(); double[] order = new double[s2.length]; for (int i = 0; i < s2.length; i++) { order[i] = i; } DoubleArrayMath.sortPairs(s2, order); /* Find the index. */ double runningWeight = 0.0d; int index = nbData; while (runningWeight < 1.0d - level) { index--; runningWeight += w[index]; } if (isEs) { return esFromIndexRunningWeight(index, runningWeight, s2, w, order, level); } return quantileFromIndexRunningWeight(index, runningWeight, isExtrapolated, s2, w, order, level); }