如何使用cumsum在Matlab中获取向量的累积分布函数?

时间:2014-05-08 00:00:10

标签: matlab probability distribution cdf

我希望获得比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');  

我想知道是否有人可以帮助我知道我是否正常或我做错了什么?

1 个答案:

答案 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),因此无论是行还是列,都会翻转向量。