分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。
相关解释: 如何通俗地理解分位数
Java中使用分位数有对应的库:
1 2 3 4 5
| <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> <version>3.6.1</version> </dependency>
|
使用
1 2 3
| double [] values = new double[]{3,5,7,9,10,13}; double percentile25 = StatUtils.percentile(values,25); double percentile75 = StatUtils.percentile(values,75);
|
但是以上计算值与excel使用的QUARTILE.INC方法结果不一致,原因参见
总结一下excel有两种计算方式 QUARTILE.EXC 与 QUARTILE.INC ,分别对应四分位位点的两种计算方式

第一种计算方式

第二种计算方式

math3包中其实也提供了excel对应的计算方式 参见官方文档
https://commons.apache.org/proper/commons-math/javadocs/api-3.6/org/apache/commons/math3/stat/descriptive/rank/Percentile.EstimationType.html

具体实现如下,需要自己继承Percentile
1 2 3 4 5 6 7
| public class MyPercentile extends Percentile {
public MyPercentile(){ super(50.0, EstimationType.R_7, NaNStrategy.REMOVED, new KthSelector(new MedianOf3PivotingStrategy())); } }
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class PercentileKest {
public static void main(String[] args) { MyPercentile myPercentile = new MyPercentile(); double [] values = new double[]{3,5,7,9,10,13}; double percentile25 = myPercentile.evaluate(values, 25); double percentile75 = myPercentile.evaluate(values, 75);
System.out.println(percentile25); System.out.println(percentile75);
Percentile percentile = new Percentile(); double percentile25_1 = percentile.evaluate(values, 25); double percentile75_1 = percentile.evaluate(values, 75);
System.out.println(percentile25_1); System.out.println(percentile75_1); } }
|
输出