Java Apache Commons getPercentile() 结果与 MS Excel 百分位数不同

2023-12-31

我有一个算法可以计算percentile(85) with Apache Commons一系列值(12 个值),供以后使用阈值进行评估以做出决定。结果与 Excel 给出的结果类似,但不相等,有时这对我的应用程序至关重要,因为使用 Excel 时结果未通过阈值,而使用 Apache Commons Math 中的结果未通过阈值Java确实如此,所以我得到不同的输出。

这是一个示例:每 2 小时互联网流量 (Mbps)

32,7076813360000000 41,2580429776000000 45,4453940200000000 48,8044409456000000 46,7462847936000000 49,8028100056000000 5 4,3719451144000000 41,9708134600000000 29,4371963240000000 22,4667255616000000 20,0388452248000000 28,7807757104000000

除以 1000 Mb(电缆容量)后,我计算出占用的百分比 (85):

Excel: 0,049153870117

阿帕奇共享数学:0.05003126676104001

我发现可以更改百分位的实现(它不存在官方的)setPercentileImpl(),但我找不到任何如何执行此操作的示例,也找不到 Excel 算法(这是我被告知要实现的算法)。

任何有关这方面的帮助都将受到欢迎。

谢谢。


差异是微妙的并且是由于假设造成的。用三元案例最容易解释。假设你有三个元素(N=3)a=x[0] < b=x[1] < c=x[2]。 Apache 和 Excel 方法都表示元素 b 是第 50 个百分位(中位数)。然而它们的不同之处在于a and c.

The 阿帕奇方法 http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/stat/descriptive/rank/Percentile.html (and NIST 页面引用的方法 http://www.itl.nist.gov/div898/handbook/prc/section2/prc252.htm) say a是第 25 个百分位数,并且c是 75% 的百分位数,因为它将空间分为 N+1 个块,即分为四分之一。

Excel 方法表示a是第 0 个百分位数,并且c第 100 个百分位数,因为空间被分为 N-1 个块,即一半。

因此,如果您想要 Excel 方法并且不想自己编写代码,您可以从数组中删除最小和最大元素,然后调用 Apache 方法 - 它应该给您完全相同的结果,除了超出终点的百分位数。

如果您想自己编写代码,下面给出了一种简单的方法。请注意以下问题:

  • 这对数组进行排序(因此更改它)
  • 由于排序,这需要 O(N log(N)) 时间。 Apache 方法使用快速选择算法,因此需要 O(N) 时间(如果您想了解更多信息,请谷歌“quickselect”)

代码(未经测试或什至编译,但应该给您一个想法)。

// warning - modifies data 
double excelPercentile(double [] data, double percentile) { array
    Arrays.sort(data);
    double index = percentile*(data.length-1);
    int lower = (int)Math.floor(index);
    if(lower<0) { // should never happen, but be defensive
       return data[0];
    }
    if(lower>=data.length-1) { // only in 100 percentile case, but be defensive
       return data[data.length-1);
    }
    double fraction = index-lower;
    // linear interpolation
    double result=data[lower] + fraction*(data[lower+1]-data[lower]);
    return result;
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Apache Commons getPercentile() 结果与 MS Excel 百分位数不同 的相关文章

随机推荐

  • 获取最高分配的文件描述符

    是否有一种可移植的方法 POSIX 来获取当前进程的最高分配文件描述符编号 例如 我知道有一种很好的方法可以获取 AIX 上的号码 但我正在寻找一种可移植的方法 我问的原因是我想关闭所有打开的文件描述符 我的程序是一个以 root 身份运行
  • 在 xib 的自定义单元上设置 IBAction?

    我在 xib 中创建了一个自定义单元格 在 iOS 6 中使用 Storyboard 但为单元格创建了单独的 xib 现在我尝试将扬声器按钮连接到 UITableViewController 子类中的 IBAction 我在 viewDid
  • .NET C#:如何在 AJAX 调用期间处理表单身份验证过期

    对于上下文 我在 web config 中设置了表单身份验证超时值 并且正在使用 ASP NET MVC 1 我认为将我的问题表述为 2 个用例可能是最简单的 第一个用例是在没有身份验证的情况下发生的情况超时 第二个是身份验证超时会发生什么
  • 如何在 JSF 中显示我的应用程序的错误?

    在我的 JSF Facelets 应用程序中 这是我的表单的一部分的简化版本
  • 如何使用类似于beanstalkd的cli来监控Redis作为队列引擎?

    背景 We used Laravel 队列 https laravel com docs 5 1 queues在之上豆茎 https github com kr beanstalkd在两个 ec2 实例上 在负载均衡器后面 随着系统的扩展
  • C# 超时后自动释放锁

    有谁知道实现锁定的最佳方法是什么 以便在X秒后它会自动释放 假设您正在寻找在 X 秒内触发的事件 那么我认为当前没有任何核心 Mutex 对象提供您正在寻找的功能类型 您可以通过使用 System Timer 在 X 秒内触发并释放锁定的互
  • Flutter:将文件(图像)裁剪为圆形

    我正在尝试在颤动中裁剪文件 图像文件 这就是我所拥有的 这就是我想要在裁剪后得到的 带有圆形裁剪的 png 重要的是该文件是 png 因此它没有白色边框 有支持这个的包吗 您可以使用盒子装饰 https api flutter dev fl
  • 将非常大的数字从二进制转换为十进制并打印

    我知道如何将二进制转换为十进制 我至少知道两种方法 表和幂 我想将二进制转换为十进制并打印该十进制 而且 我对这个 小数 不感兴趣 我只想打印它 但是 正如我上面所写 我只知道两种将二进制转换为十进制的方法 并且它们都需要加法 因此 我正在
  • 将预测映射回 ID - Python Scikit Learn DecisionTreeClassifier

    我有一个具有唯一标识符和其他功能的数据集 看起来像这样 ID LenA TypeA LenB TypeB Diff Score Response 123 456 51 M 101 L 50 0 2 0 234 567 46 S 49 S 3
  • 如何防止 LaTeX 在段落之间填充空格,以便下一节从下一页的顶部开始?

    我有一份两栏的论文 空间限制非常严格 我刚刚查看了手稿的最后一个版本 发现上半部分包含一个图形 如预期的那样 但在下半部分 段落之间有很多垂直空间 足以再挤 10 行 并且 LaTeX可能添加了它 以便在下一页的开头 一个新的编号部分将从页
  • 默认的 mb_internal_encoding() 值从何而来?

    如果我要编写一个新的 php 文件 并包含echo current mb internal encoding mb internal encoding 输出值从哪里来 它是如何 决定 如何管理的 背景 我编写了一个网络应用程序 我以为我已经
  • 将 JavaScript 模块或库导入 TypeScript

    多年来我一直在为同样的问题而苦苦挣扎 我似乎无法弄清楚如何可靠地使用 TypeScript 中的 JavaScript 库 我似乎是偶然让它工作的 然后继续前进 多年来都没有重新访问这些代码 直到外部变化导致破坏 就像今天我更新 VS 20
  • webRTC 数据通道消息的最大大小是多少?

    我正在尝试 webRTC 似乎每条消息中可以发送的字节数有任意限制 This guy https github com rohansingh rtc p2p我使用的示例选择了 100 加上一些 字节的限制 在我的测试中 它似乎接近 200
  • 为什么 Python 的 eval() 拒绝这个多行字符串,我该如何修复它?

    我正在尝试评估以下制表符缩进字符串 for index in range 10 os system echo str index 我得到 出现错误 语法无效 第 1 行 它在抱怨什么 我是否需要缩进以匹配 eval 语句 或者将其写入字符串
  • WPF 沿路径绘制箭头

    只是想知道我如何沿着路径绘制箭头 路径将改变方向并经过几个不同的点 箭头旨在向用户显示他们需要沿着路径行进的方向 我尝试过使用画笔 但它不起作用 因为我需要箭头来沿着路径调整它们的方向 See 路径动画概述 http msdn micros
  • 矢量push_back移动实现

    在我的教科书中 向量push back移动实现的实现是 void push back Object x if theSize theCapacity reserve 2 theCapacity 1 objects theSize std m
  • 何时处置带有子任务的 System.Threading.Task?

    我有一个启动多个子任务的任务 例如 任务 A 创建 B C D E F 我还创建了一个System Threading Timer每 10 秒轮询一次数据库以检查计划项目是否已按请求取消 如果是 则设置CancellationTokenSo
  • Java 8 和 Spring 4:在界面中使用自动装配

    Java 8 添加了一个新功能 通过该功能我们可以在接口中提供方法实现 Spring 4中有没有什么方法可以让我们在接口中注入可以在方法体内使用的bean 下面是示例代码 public interface TestWiring Autowi
  • 为什么 print("text" + str(var1) + "more text" + str(var2)) 被描述为“未批准”?

    为什么下面的代码在 Snakes and Coffee 对 Blender 的帖子的评论中被称为 古老的不被批准的打印方法 在python中打印多个参数 https stackoverflow com questions 15286401
  • Java Apache Commons getPercentile() 结果与 MS Excel 百分位数不同

    我有一个算法可以计算percentile 85 with Apache Commons一系列值 12 个值 供以后使用阈值进行评估以做出决定 结果与 Excel 给出的结果类似 但不相等 有时这对我的应用程序至关重要 因为使用 Excel