簡體   English   中英

如何在MATLAB中為二項式分布計算PMF和CDF?

[英]How do I compute a PMF and CDF for a binomial distribution in MATLAB?

我需要計算二項式分布的概率質量函數和累積分布函數。 我想使用MATLAB來做到這一點(原始MATLAB,沒有工具箱)。 我可以自己計算這些,但希望使用預定義的函數,但找不到任何函數。 那里有東西嗎?

function x = homebrew_binomial_pmf(N,p)
    x = [1];
    for i = 1:N
       x = [0 x]*p + [x 0]*(1-p);
    end

您可以使用函數NCHOOSEK來計算二項式系數。 這樣,您可以創建一個函數,計算給定Np一組k值的概率質量函數的值:

function pmf = binom_dist(N,p,k)
  nValues = numel(k);
  pmf = zeros(1,nValues);
  for i = 1:nValues
    pmf(i) = nchoosek(N,k(i))*p^k(i)*(1-p)^(N-k(i));
  end
end

要繪制概率質量函數,請執行以下操作:

k = 0:40;
pmf = binom_dist(40,0.5,k);
plot(k,pmf,'r.');

累積分布函數可以使用CUMSUM從概率質量函數中找到

cummDist = cumsum(pmf);
plot(k,cummDist,'r.');

注意:當從NCHOOSEK返回的二項式系數很大時,您可能最終會失去精度。 一個非常好的替代方法是在MathWorks文件交換上使用John D'Errico提交的“ 可變精度整數算術” 通過將數字轉換為他的vpi類型,可以避免精度損失。

倍頻程提供了良好的分布pdf,cdf,分位數的集合; 它們必須從八度轉換,但這比較簡單(將endif轉換為end ,將!=轉換為~= ,等等;)參見例如八度binocdf中的二項式cdf函數。

看起來對於二項式分布CDF ,我最好的賭注是不完全的beta函數betainc

對於PDF

x=1:15
p=.45

c=binopdf(x,15,p)

plot(x,c)

類似的CDF

D=binocdf(x,15,p) 

plot(x,D)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM