Apache Commons Math3 Percentile of Number

时间:2015-03-06 18:46:11

标签: java apache-commons

我试图使用Apache Commons Math3库和Percentile类来获取分布中特定数字的百分位数:

https://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/stat/descriptive/rank/Percentile.html

(我在Scala中使用它)

如果我这样做:

new Percentile().evaluate(Array(1,2,3,4,5), 80)

然后我回到4。但是,我想转向另一个方向,并将4作为输入,并返回80作为结果,即给定数字的百分位数,而不是给定百分位数的数字。

这个类中的所有方法似乎都不适合或给出我想要的结果。我是否在滥用课程?还有我应该使用的另一课吗?

2 个答案:

答案 0 :(得分:5)

您可以使用基线值加载的EmpiricalDistribution:

@Test
public void testCalculatePercentile() {
    //given
    double[] values = new double[]{1,2,3,4,5};

    EmpiricalDistribution distribution = new EmpiricalDistribution(values.length);
    distribution.load(values);

    //when
    double percentile = distribution.cumulativeProbability(4);

    //then
    assertThat(percentile).isEqualTo(0.8);
}

答案 1 :(得分:0)

似乎不起作用,因为该测试应该通过(但实际上没有通过)

@Test
public void testCalculatePercentile() {
    //given
    double[] values = new double[]{2,3,3,3};

    EmpiricalDistribution distribution = new EmpiricalDistribution(values.length);
    distribution.load(values);

    //when
    double percentile = distribution.cumulativeProbability(2.7d);

    //then
    assertThat(percentile).isEqualTo(0.25);
}