千家信息网

Java分位点计算方法是什么

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,本篇内容介绍了"Java分位点计算方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java
千家信息网最后更新 2024年11月14日Java分位点计算方法是什么

本篇内容介绍了"Java分位点计算方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    Java 分位点(分位值)计算

    有一个需求

    给出一段时间的PB(平均市净率),然后选择这段时间的某一天,计算这天的分位值.

    很简单的一个数理统计学科的问题,对于毕业多年的学渣还是有必要记录以下相关问题的计算方法.

    例如:

    取最近1.1-1.10号的pb分别是(1,1,2,2,3,3,4,4,5,5),我传入1.1号

    那么返回我值是:0%,如果传入1.10号返回100%

    那么怎么建立数学模型呢?

    注:分位值说明:

    Pn为n分位值。表示被调查群体中有n%的数据小于此数值。n的大小反应市场的不同水平,通常使用P10、P25、P50、P75、P90来表示市场的不同水平。

    • 10分位值:表示有10%的数据小于此数值,反映市场的低端水平。

    • 25分位值:表示有25%的数据小于此数值,反映市场的较低端水平。

    • 50分位值:表示有50%的数据小于此数值,反映市场的中等水平。

    • 75分位值:表示有75%的数据小于此数值,反映市场的较高端水平。

    • 90分位值:表示有90%的数据小于此数值,反映市场的高端水平。

    例:求下例一组数据的25分位,50分位,75分位值:
    A=【65 23 55 78 98 54 88 90 33 48 91 84】

    解:

    方法一:

    1、先把上面12个数按从小到大排序

    1 23
    2 33
    3 48
    4 54
    5 55
    6 65
    7 78
    8 84
    9 88
    10 90
    11 91
    12 98

    2、12个数有11个间隔,每个四分位间11/4=2.75个数

    3、

    ① 计算25分位:

    第1个四分位数为上面12个数中的第1+2.75=3.75个数

    指第3个数对应的值48及第3个数与第4个数之间的0.75位置处,即:48+(0.75)*(54-48)=52.5 (52.5为25分位值)。

    ② 计算50分位:

    第2个四分位数为上面12个数中的第1+2.752=6.5个数

    指第6个数对应的值65及第6个数与第7个数之间的0.5位置处,即:65+(0.5)(78-65)=71.5 (71.5为50分位值)。

    【中位值也可以用一种很简单的方法计算,按从小到大排列后:

    若数组中数的个数为奇数,则最中间那个数对应的值则为中位值;

    若数组中数的个数为偶数,则取中间两个数值的平均值则为中位值,如上78+65)/2=71.5】

    ③ 计算75分位:

    第3个四分位数为上面12个数中的第1+2.753=9.

    指第9个数对应的值88及第9个数与第10个数之间的0.25位置处,即:88+(0.25)(90-88)=88.5 (88.5为75分位值)。

    【将1到100分为10等分,则有10个10分位,用以上的方法可计算10分位值和90分位值。(以上实例的P10=34.5,P90=90.9)】

    下面用Java 代码实现

    相关方法

    private static double getPercentile(List dataList, double p) {        int n = dataList.size();        dataList.sort(new Comparator() {            //从小到大排序            @Override            public int compare(Double o1, Double o2) {                if(o1 == null || o2== null){                return 0;                }                return o1.compareTo(o2);            }        });        double px =  p*(n-1);        int i = (int)java.lang.Math.floor(px);        double g = px - i;        if(g==0){            return dataList.get(i);        }else{            return (1-g)*dataList.get(i)+g*dataList.get(i+1);        }    }

    测试接口

    @RequestMapping("CalcPercentile")    @ResponseBody    public R CalcPercentile(@Param("per") double per){        double[] arrs = {2,4,5,1,3,3,4,1,2,5};        List doubleList = new ArrayList<>();        for (double currArr : arrs) {            doubleList.add(currArr);        }        double percentile = getPercentile(doubleList, per);        return R.ok().message("查询服务数据");    }
    正常输出

    输入1也就是100%,正常输出5.0,输入0.5,输出3.0

    完成需求

    上面的分析是,知道百分位,求百分位对应的数值? 而我们的需求是利用样本时间里面的某个值,求对应的百分位是多少?经过查阅很多资料没有找到相关公式,当然有大佬知道可以提示一下.总归问题还是要解决的. 这边使用的解决方案是,把样本数据分成100个点,求每个百分位对应的数值,然后与样本中的目标数据一 一对比,求其最接近的那个数.就间接取到了目标数据的百分位值

    核心代码

    Java 求百分位数

    说明一下

    百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。

    java代码

     public static double percentile(double[] data,double p){  int n = data.length;  Arrays.sort(data);  double px =  p*(n-1);  int i = (int)java.lang.Math.floor(px);  double g = px - i;  if(g==0){   return data[i];  }else{   return (1-g)*data[i]+g*data[i+1];  } }

    "Java分位点计算方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

    0