【问题标题】:How do I compute a PMF and CDF for a binomial distribution in MATLAB?如何在 MATLAB 中计算二项分布的 PMF 和 CDF?
【发布时间】:2010-12-25 18:37:56
【问题描述】:

我需要计算binomial distribution 的概率质量函数和累积分布函数。我想使用 MATLAB 来做到这一点(原始 MATLAB,没有工具箱)。我可以自己计算这些,但希望使用预定义的函数并且找不到任何函数。那里有东西吗?

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

【问题讨论】:

  • 太糟糕了,你不想使用统计工具箱......它有函数 BINOPDF 和 BINOCDF。 ;)
  • 我将使用我们拥有的工具箱,当 Mathworks 修复其严格的许可政策时,浮动网络许可的成本是固定的 4 倍,并且在您关闭 MATLAB 之前不会将网络许可返还给池,并且不提供手动将网络许可证返回到池的机制。对不起,你的咆哮,但你在这里触怒了。

标签: matlab probability


【解决方案1】:

您可以使用函数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 File Exchange 上使用来自John D'Errico 的提交Variable Precision Integer Arithmetic。通过将您的数字转换为他的vpi 类型,您可以避免精度损失。

【讨论】:

  • @Jason:非常正确。以防万一它最终成为您的问题,我添加了一些指向 John D'Errico 提交的 MathWorks 的链接,它允许您执行可变精度整数运算。
【解决方案2】:

octave 提供了很好的分布 pdf、cdf、quantile 集合;它们必须从八度音程翻译,但这相对微不足道(将endif 转换为end,将!= 转换为~= 等;)参见例如octave binocdf 用于二项式 cdf 函数。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      对于 PDF

      x=1:15
      p=.45
      
      c=binopdf(x,15,p)
      
      plot(x,c)
      

      类似 CDF

      D=binocdf(x,15,p) 
      
      plot(x,D)
      

      【讨论】:

      • 但是,OP 要求“原始 MATLAB,没有工具箱”; binopdfbinocdf是统计工具箱的一部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2014-09-07
      • 2018-03-30
      相关资源
      最近更新 更多