public void es_extreme() { double level = 0.999; double es = METHOD.expectedShortfallFromUnsorted(level, DATA_123); double q = METHOD.quantileWithExtrapolationFromUnsorted(level, DATA_123); assertEquals(es, q, TOLERANCE_QUANTILE); }
public void es() { double level = 0.95; double es = METHOD.expectedShortfallFromUnsorted(level, DATA_123); double q = METHOD.quantileFromUnsorted(level, DATA_123); assertTrue(es > q); int nbPts = 20; double esExpected = 0.0d; for (int i = 0; i < nbPts; i++) { double qIntegral = level + i / (nbPts - 1.0d) * (1 - level); esExpected += ((i == 0 || i == nbPts - 1) ? 0.5 : 1.0d) * METHOD.quantileWithExtrapolationFromUnsorted(qIntegral, DATA_123); // Trapezoid method } esExpected /= (nbPts - 1); assertEquals(es, esExpected, TOLERANCE_ES_NI); }
public void es_details() { double[] level = {0.98, 0.981, 0.9811, 0.97}; for (int i = 0; i < level.length; i++) { double es = METHOD.expectedShortfallFromUnsorted(level[i], DATA_123); QuantileResult r = METHOD.expectedShortfallDetailsFromUnsorted(level[i], DATA_123); assertEquals(r.getValue(), es, TOLERANCE_QUANTILE); assertEquals(r.getIndices().length, r.getWeights().size()); double qExpected = 0.0; for (int j = 0; j < r.getIndices().length; j++) { // Recompute ES from details qExpected += DATA_123.get(r.getIndices()[j]) * r.getWeights().get(j); } assertEquals(qExpected, es, TOLERANCE_QUANTILE); } }