我希望获得比X更高的值X的概率,这意味着累积分布函数CDF。 P(X&GT = X_I)。 我已尝试使用此代码在Matlab中完成此操作。
假设数据位于列向量p1中。
xp1 = linspace(min(p1), max(p1)); %range of bins
histp1 = histc(p1(:), xp1); %histogram od data
probp1 = histp1/sum(histp1); %PDF (probability distribution function)
`figure;plot(probp1, 'o') `
现在我要计算CDF,
sorncount = flipud(histp1);
cumsump1 = cumsum(sorncount);
normcumsump1 = cumsump1/max(cumsump1);
cdf = flipud(normcumsump1);
figure;plot(xp1, cdf, 'ok');
我想知道是否有人可以帮助我知道我是否正常或我做错了什么?
答案 0 :(得分:1)
您的代码正常运行,但有点复杂。由于probp1已被归一化为总和等于1,因此其累积和的最大值保证为1,因此不需要除以此最大值。这有点缩短了代码:
xp1 = linspace(min(p1), max(p1)); %range of bins
histp1 = histc(p1(:), xp1); %count for each bin
probp1 = histp1/sum(histp1); %PDF (probability distribution function)
cdf = flipud(cumsum(flipud(histp1))); %CDF (unconventional, of P(X>=a) kind)
正如Raab70指出的那样,大多数时候CDF被理解为P(X <= a),在这种情况下你不需要flipud
:只需要cumsum(histp1)
。{
此外,我可能会使用histp1(end:-1:1)
代替flipud(histp1)
,因此无论是行还是列,都会翻转向量。