[英]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來計算二項式系數。 這樣,您可以創建一個函數,計算給定N
和p
一組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.');
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.