【问题标题】:Calculating discrete PDF from discrete CDF in python在python中从离散CDF计算离散PDF
【发布时间】:2018-11-08 01:39:27
【问题描述】:

如果我们有分位数的离散 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)

【问题讨论】:

    标签: python numpy probability-density cdf


    【解决方案1】:

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

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

    如果您确实需要 PDF 而不是样本 - PDF 是 CDF 的派生。我会在 CDF 值 (InterpolatedUnivariateSpline) 上使用三次样条插值,然后取其 derivative

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2016-12-16
      • 2011-06-30
      相关资源
      最近更新 更多