【问题标题】:How to exactly match the result of cumulative distribution function and quantile function?累积分布函数和分位数函数的结果如何精确匹配?
【发布时间】:2015-08-18 06:34:32
【问题描述】:

众所周知,quantile函数是逆累积分布函数。

那么对于一个已经存在的distribute(一个向量),如何精确匹配cumulative distribution functionquantile函数的结果呢?

这是一个在 MATLAB 中给出的例子。

a = [150   154   151   153   124]
[x_count, x_val] = hist(a, unique(a));
% compute the probability cumulative distribution 
p = cumsum(n)/sum(n);
x_out = quantile(a, p)

在累积分布函数中,累积概率与x值的对应关系应该是:

x = 124   150   151   153   154
p = 0.2000    0.4000    0.6000    0.8000    1.0000

但是用pquantile计算x_out,结果和x不一样:

x_out =

  137.0000  150.5000  152.0000  153.5000  154.0000

参考

  1. quantile function
  2. matlab quantile function

【问题讨论】:

  • 请解释你是如何得到你想要的输出的(即为什么你认为你的 Matlab 代码是错误的)。
  • @Dan,我希望这两个函数具有精确映射的 x-y 对。
  • @ouxiaogu 但你为什么要这样?您尚未明确定义 your 算法来查找分位数。 Matlab 已经定义了他们的,甚至使用您的确切用例作为文档中的示例。请参阅my answer 了解更多信息。
  • 从数学的角度来看它是未定义的,因为你正在反转的函数中有一个步骤。

标签: r matlab statistics


【解决方案1】:

来自docs

对于{6,3,2,10,1}等五个元素的数据向量,排序后的元素{1,2,3,6,10}分别对应0.1,0.3,0.5,0.7, 0.9 个分位数。

因此,如果您想获得为x 输入的确切数字,并且您的x 有5 个元素,那么您的p 需要为p = [0.1, 0.3, 0.5, 0.7, 0.9]。完整的算法在文档中明确定义。

您假设要返回 xp 应该是 [0.2, 0.4, 0.6, 0.8, 1]。但是为什么不p = [0, 0.2, 0.4, 0.6, 0.8]? Matlab 的算法似乎只是取这两种方法的线性平均。

请注意R defines九种分位数的不同算法,因此需要清楚地说明您的假设。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2022-01-22
    • 2015-04-27
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多