如何在Matlab中使用cumsum获得矢量的累积分布函数



我想要得到一个值X大于x_i的概率,x_i表示累积分布函数CDF。P (X> = 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');  

我想知道是否有人可以帮助我知道我是好还是我做错了什么?

您的代码工作正常,但比它可能更复杂。由于probp1已被归一化为sum等于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),以便向量被翻转,无论它是行还是列。

相关内容

  • 没有找到相关文章

最新更新