1

我想获得高于 x_i 的值 X 的概率,这意味着累积分布函数 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');  

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

4

1 回答 1

1

您的代码可以正常工作,但比它可能的要复杂一些。由于 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),这样无论它是行还是列,向量都会被翻转。

于 2016-01-29T00:20:41.703 回答