1

累積分布関数 CDF を意味する x_i よりも高い値 X を取得する確率を取得したいと考えています。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 は合計が 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 に答える