我们可以创建ECDF,
import numpy as np
from statsmodels.distributions.empirical_distribution import ECDF
ecdf = ECDF([3, 3, 1, 4])
字符串
然后在点处获得ECDF,
ecdf(x)
型
但是,如果我想知道百分位数97.5%的x,该怎么办?
从http://www.statsmodels.org/stable/generated/statsmodels.distributions.empirical_distribution.ECDF.html?highlight=ecdf
,它似乎没有实现。
有什么方法可以做到这一点吗?或者其他库?
4条答案
按热度按时间cnh2zyt31#
由于经验CDF只是在每个数据点上放置1/n的质量,因此第97.5分位数就是大于所有其他点的97.5%的数据点。要找到这个值,您可以简单地按升序对数据进行排序,并找到第0.975个最大值。
字符串
它产生:
型
因为我们记得对于离散分布(如经验cdf),分位数函数定义为here,我们意识到我们必须取第0.975个(四舍五入)最大值。
6ss1mwsb2#
这是我的建议。线性插值,因为dfs只能从相当大的样本中有效地估计。插值线段可以得到,因为它们的端点出现在样本中的不同值。
字符串
它产生以下输出,
型
这张图.
kxkpmulp3#
numpy.quantile(x, q=.975)
将返回沿着数组x的值,其中ecdf为0.975。类似地,对于Series/DataFrames有
pandas.quantile(q=0.97)
。jaxagkaj4#
它插值是正确的,但在你使用的x周围的2个点之间,而不是x的最小值和最大值。
来自Numpy文档
可选的
method
参数指定当所需的分位数位于两个索引i
和j = i + 1
之间时使用的方法。来自Pandas文档
插值:'linear','lower','higher','midpoint','nearest'}此可选参数指定当所需分位数位于两个数据点
i
和j
之间时要使用的插值方法:字符串