如何找到一个值是否位于直方图的边界之间?

时间:2016-05-22 14:00:46

标签: matlab probability cumulative-frequency

我有一组经验数据(假设x=normrnd(10,3,1000,1);),其累积分布函数如下:

enter image description here

我还有一组数据x1=[11,11.1,10.1]。如果它们来自分布x1,我想找到x的值的概率。如果它是一个连续的已知函数,我可以准确地评估它,但我想从我拥有的数据中做到这一点。有什么想法吗?

我会在x轴上找到该值并追踪到该线并穿过F(x)轴(见图1)。

修改

size(x1)
10,0000

所以我现在已经找到了如何获得绘制F(x)

的数据
handles=cdfplot(X);
xdata=get(handles,'XData');
ydata=get(handles,'YData');

我认为现在可以在x的某个区间内查找xdata的位置,然后在ydata中找到该位置。

e.g。

for i=1:length(x)
    for j=1:length(xdata)
        if x(i,1)<=xdata(jj,1)
            X(i)=xdata(jj,1);
        end
    end
end
Y=ydata(X);

Is this the most elegant way?

1 个答案:

答案 0 :(得分:1)

使用bsxfun有一种更优雅的方法。此外,您可以使用ecdf而不是cdfplot计算经验CDF(除非您确实需要该图):

x = normrnd(10,3,1000,1);
[f_data, x_data] = ecdf(x);
x1 = [11, 11.1, 10.1];

idx = sum(bsxfun(@le, x_data(:)', x1(:)), 2);
y1 = f_data(idx);