【问题标题】:How to get a percentile for an empirical data distribution and get it's x-coordinate?如何获得经验数据分布的百分位数并获得它的 x 坐标?
【发布时间】:2014-01-13 00:15:30
【问题描述】:

我有一些离散的数据值,它们一起形成某种分布。 这是其中之一,但它们不同,峰值位于所有可能的位置,从 0 到结束。

所以,我想在 Python 中使用它的分位数(百分位数)。我想我可以编写某种函数,它将所有值从零开始,直到达到所需的百分比。但可能有更好的解决方案?例如,要在 SciPy 中创建某种经验分布,然后使用 SciPy 计算百分位数的方法?

最后,我需要左百分位数和右百分位数的 x 坐标。可以使用 20% 和 80% 的百分位数作为示例,稍后我将不得不为我的案例找到最佳数字。

提前谢谢你!

编辑: 几乎我想要的一些示例代码。

import numpy as np
np.random.seed(0)
distribution = np.random.normal(0, 1, 1000)
left, right = np.percentile(distribution, [20, 80])
print left, right

这会返回百分位数本身,我需要以某种方式获取它们的 x 坐标。对于正态分布,显然这是可能的,但我有一个未知形状的分布,所以如果百分位数不等于其中一个值(显然这是最常见的事情),它会变得更加复杂。

【问题讨论】:

  • 请提供示例数据(最好使用内联代码,例如可以使用random.seed 和random sampling)和预期结果。
  • 您不能保证百分位实际上在您的数组中。它可能是两个元素的平均值。那你想要什么索引?
  • 这是个好问题。可能最好的解决方案是在最接近的数据点之间使用线性插值。

标签: python numpy statistics scipy percentile


【解决方案1】:

如果您正在寻找经验 CDF,那么您可以使用 statsmodels ECDF。对于百分位数/分位数,您可以使用 numpy percentile

【讨论】:

  • 恕我直言,这更适合作为评论,而不是答案。
  • 感谢您的回答!我查看了您的链接 - 是否可以将 numpy.percentile 与 ECDF 一起使用?
  • @Ilya 你到底想计算什么?从你的问题percentile 似乎是答案,但如果不是你在寻找什么?
  • Percentile 在这里可能非常有用,但我不知道如何将它与经验分布一起使用。以及如何获取百分位数的 x 坐标。
【解决方案2】:

好的,现在我已经编写了以下函数并现在使用它:

def percentile(distribution, percent):
    percent = 1.0*percent/100
    cum_percent = 0
    i=0
    while cum_percent <= percent:        
        cum_percent = cum_percent + distribution[i]
        i = i+1
    return i

有点粗略,因为返回所需值左侧最接近的值的索引。就我的目的而言,它是一个临时解决方案,但我希望看到一个用于精确百分位 x 坐标确定的有效解决方案。

【讨论】:

  • 这里的数据是什么?目前还不清楚你想要什么
  • 嗯。分布是一个 np.array 保存问题中显示的分布的值。 percent 是 [0-100] 中的数字,对应我想要的百分位数。
  • 让我再说一遍,什么是数据? ;) 即你总结的内容
  • 哦,对了,对不起,我在某个时候更改了命名,但没有正确执行 =) 没有 数据 =) 将编辑答案。跨度>
  • 接下来的问题:1)你求和分布,也就是积分。你以前标准化了吗?在您的示例中,distribution.sum() 产生 -45.256707490195311`
猜你喜欢
  • 2021-09-02
  • 2016-04-11
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2018-11-21
  • 2012-07-22
相关资源
最近更新 更多