从Python中的离散CDF计算离散PDF

时间:2018-11-08 01:39:28

标签: python numpy probability-density cdf

如果我们对于类似的分位数有离散的cdf

quantiles = array([1.000e-04, 1.000e-03, 1.000e-02, 2.000e-02, 3.000e-02, 4.000e-02,
   5.000e-02, 6.000e-02, 7.000e-02, 8.000e-02, 9.000e-02, 1.000e-01,
   2.000e-01, 3.000e-01, 4.000e-01, 5.000e-01, 6.000e-01, 7.000e-01,
   8.000e-01, 9.000e-01, 9.100e-01, 9.200e-01, 9.300e-01, 9.400e-01,
   9.500e-01, 9.600e-01, 9.700e-01, 9.800e-01, 9.900e-01, 9.990e-01,
   9.999e-01])

创建反向映射线性插值是否有效?那就是从cdf分位数,我们估计满足cdf条件p(x < a) = p_a的随机变量的值。然后,我们得到从0到1的均匀分布值,并生成有问题的随机变量(考虑在cdf图上从y到x轴的映射)。 PDF会很好吗?

f = interp1d(quantiles, matching_discrete_cdf, kind='linear')
uni_rv = stats.uniform.rvs(loc=percentiles.min(), 
         scale=percentiles.max() - percentiles.min(), size=nof_items)
pdf = f(uni_rv)

1 个答案:

答案 0 :(得分:0)

我假设当您写“ pdf”时,您指的是“样本”,而不是实际的probability density function;当您编写“ matching_discrete_cdf”时,是指“百分比点函数”(PPF),它是CDF的反函数。除了术语上的混淆外,这个想法是合理的:通过PPF转换统一的样本来生成用于自定义分布的样本是一种标准方法。

内插将使分布稍微变形,因此原始分布的分位数1.000e-04和9.999e-01将变为生成数的最小值和最大值(原始分布具有一些小值)超出这些限制的机会)。但这应该是可以接受的,并且鉴于您拥有的数据,这是不可避免的。也许使用三次插值而不是线性插值?

如果您确实需要PDF而不是样本,那么PDF是CDF的派生产品。我将对CDF值(InterpolatedUnivariateSpline)使用三次样条插值,然后取其derivative