我需要计算一系列相关但分段的数据集的第N个百分位数。

由于内存限制,合并的数据集太大而无法一次进行全部计算,但是已经可以执行分段计算的框架。那么,如何对每个数据集执行计算,然后将这些计算结合起来以找到所需的百分位数呢?

有关数据的其他信息:

  • 数据通常具有异常值。
  • 各个数据集的大小通常大致相同,但
  • 并不总是如此
  • 各个数据集不应共享相同的分布

  • 我可以计算组合的中位数,均值和标准差,然后据此估计任何百分位数吗?

    最佳答案

    仅中位数,均值和标准差不可能足够,特别是如果您有离群值。

    如果需要精确的百分位数,则这是一个并行计算问题。在这方面已经做了一些工作,例如parallel mode of the C++ STL library

    如果仅需要近似百分位数,则“交叉验证”会出现一个问题Estimation of quantile given quantiles of subset,这表明需要进行二次抽样。您将从每个数据集中获取一些(但不是全部)数据点,制作一个新的组合数据集,该数据集应足够小以适合单台计算机并计算其百分位数。

    如果每个段的百分位数已经可用,则另一种有效的近似方法(效率)是将每个段的cumulative distribution function作为百分比函数的阶跃函数进行近似。那么,总体分布将是段分布的finite mixture,而累积分布函数将是段累积分布函数的加权和。分位数函数(即百分位数)可以通过对累积分布函数进行数值反转来计算。

    07-24 18:36
    查看更多