我在维度A
的Matlab中有一个向量Nx1
。我希望在A
中的每个点获得非参数估计cdf,并将所有值存储在维B
的向量Nx1
中。我有哪些不同的选择?
我读过关于ecdf
和ksdensity
但我不清楚有什么区别,优点和缺点。任何方向都会受到赞赏。
答案 0 :(得分: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 -axis值,相应的 x -axis值根据定义是(经验)分布的分位数:
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
答案 1 :(得分:-1)
你想要ecdf,而不是ksdensity。
ecdf计算数据集的empirical distribution function。随着样本量的增加,这会收敛到基础人口的cumulative distribution function。
ksdensity会根据您的数据计算kernel density estimation。随着样本量的增加,这会收敛到基础人口的probability density function。
PDF告诉您在给定值附近的可能性。它在您的域上上下摆动,接近更可能的值并且接近不太可能的值。 CDF告诉您在给定值 以下的可能性。因此,它始终从您网域左端的零开始,并在您网域的右端单调增加到一个。