【问题标题】:Non parametric estimate of cdf in MatlabMatlab中cdf的非参数估计
【发布时间】:2017-03-26 18:42:57
【问题描述】:

我在 Matlab 中有一个向量 A,维度为 Nx1。我想获得A 中每个点的非参数估计 cdf,并将所有值存储在维度为Nx1 的向量B 中。我有哪些不同的选择?

我已经阅读了ecdfksdensity 的相关信息,但我不清楚它们之间的区别、优点和缺点。任何方向将不胜感激。

【问题讨论】:

  • 我不知道你这里所说的非参数是什么意思,但是公式上写着cdf(x,mu, sigma) = 0.5*(1 + erf((x-mu)/sigma/sqrt(2)))。 Matlab内置误差函数
  • @JensMunk Parametric 表示您不假设分布的特定形状。您使用erf 的表达式假定为高斯
  • @LuisMendo 好的。如果您使用randnrand 假设均匀分布rand,然后使用表达式将输出转换为另一个分布,例如到randn 的输出。我想您所要求的基本上是对生成的直方图的值进行采样。这会给你cdf

标签: matlab statistics cdf


【解决方案1】:

这并不能完全回答您的问题,但您可以非常简单地计算经验 CDF:

A = randn(1,1e3); % example Gaussian data
x_cdf = sort(A);
y_cdf = (1:numel(A))/numel(A);
plot(x_cdf, y_cdf) % plot CDF

这是可行的,因为根据定义,每个样本对(经验)CDF 的贡献为1/N。也就是说,对于小于最小样本的值,CDF 等于0;对于最小样本和次高样本之间的值,它等于1/N,等等。

这种方法的优点是您可以确切地知道正在做什么。


如果您需要在 规定的 x 轴值处评估经验 CDF:

A = randn(1,1e3); % example Gaussian data
x_cdf = -5:.1:5;
y_cdf = sum(bsxfun(@le, A(:), x_cdf), 1)/numel(A);
plot(x_cdf, y_cdf) % plot CDF

如果您有规定的 y 轴值,则对应的 x 轴值根据定义是(经验)分布的分位数:

A = randn(1,1e3); % example Gaussian data
y_cdf = 0:.01:1;
x_cdf = quantile(A, y_cdf);
plot(x_cdf, y_cdf) % plot CDF

【讨论】:

    【解决方案2】:

    你想要的是 ecdf,而不是 ksdensity。

    ecdf 计算您的数据集的empirical distribution function。随着样本量的增加,这会收敛到基础总体的cumulative distribution function

    ksdensity 从您的数据中计算出kernel density estimation。随着样本量的增加,这会收敛到基础总体的probability density function

    PDF 告诉您获得值接近给定值的可能性有多大。它在您的域上上下摆动,在更可能的值附近上升,在不太可能的值附近下降。 CDF 告诉您获得低于给定值的值的可能性。因此,它始终在您的域的左端从零开始,并在您的域的右端单调地增加到 1。

    【讨论】:

    • ksdensity 也可用于 cdf。
    猜你喜欢
    • 2013-10-23
    • 2019-04-29
    • 1970-01-01
    • 2016-08-08
    • 2016-03-12
    • 2018-03-30
    • 1970-01-01
    • 2017-12-13
    • 2013-12-23
    相关资源
    最近更新 更多