【问题标题】:How to make a function that gives probabilities in a Geometric distribution?如何制作一个给出几何分布概率的函数?
【发布时间】:2019-12-14 07:25:12
【问题描述】:

我正在使用 MATLAB 创建一个函数,当我输入 p、q 和尝试次数 (x) 作为输入时,该函数返回几何分布的概率质量函数 (PMF)。

我的功能:

function Probability = Geometric(p, q, x)
Probability = p*q^x-1

现在每当我尝试通过输入 pqx 的值来计算概率时,例如: p>

Geometric(0.5, 0.5, 1),

确切的错误:

几何(0.5,0.5,1)

??? 'double' 类型的输入参数的未定义函数或方法 'Geometric'。

我尝试过更改函数,并将它们简化为一个输入和一个输出。

我希望概率会被计算出来,但事实并非如此。

【问题讨论】:

    标签: matlab function probability probability-distribution


    【解决方案1】:

    出了什么问题?

    p*q^x-1       % Your original code
    

    您的原始代码采用q,将其提升为xth 次方,乘以p然后减去 1。这相当于您肯定没有的以下代码不打算。

    (p*(q^x)) - 1     % What your code was doing written differently 
    

    考虑到order of operations,更正很容易。

    p*q^(x-1)         % Your corrected code     
    

    另一个可能错误来源是您的函数未保存为独立的 m 文件“Geometric.m”,该文件也必须在您的 MATLAB 路径上(MATLAB 必须“看到”它)。如果您将函数文件“MyFunction.m”存储在文件夹中,则可以将该文件夹添加到 MATLAB 的可见路径中,只需一行(或手动导航到该路径)。详情请见how to create a function

    mypathtoMyFunction = 'C:\Users\SonnyJordan\Documents\SweetCode\FunctionFolder';
    path(path,'mypathtoMyFunction')    
    

    完整的解决方案(3 种方法)
    Geometric distribution 的参数化中,您需要对 {1, 2, 3, 4, ...} 的支持。

    两件事。 (1) 我会推荐一个anonymous function 来处理这样的事情。 (2) 由于 p + q = 1,因此一个决定另一个(即q = 1-p)。

    方法一:匿名函数

    % MATLAB R2018b
    geopmfh =@(p,k) p.*((1-p).^(k-1));     % Define pmf
    k = 5;                                 % Number of trials
    p = 0.2;                               % Prob("Success" on trial)
    geopmfh(p,k)                           % Probability
    

    以上代码完全是vectorized,因此您可以将其传递给向量和/或输入数组。

    快速检查以验证它是有效的probability mass function (pmf)

    M = 500;     
    sum(geopmfh(p,[1:M]))                % should return 1 if M large enough
    

    方法 2:函数(带错误检查)
    顺便说一句,如果您想在函数输入上添加错误检查以确保 k 是一个正整数并且 p介于 [0 1] 之间。

    function [pmf] = geopmf(p,k)
    %GEOPMF Calculates pmf for Geometric(p,k) distribution on {1,2,3,...}
    %     pmf = geopmf(p,k)
    %       p = n x d matrix of n d-dimensional success probabilities; must be [0,1]
    %       k = m x d matrix of m d-dimensional numbers of trials
    %     pmf = n x m matrix of probabilities 
    %
    % Examples:
    % k = 4; p = .5;
    % pmf = geopmf(p,k)   %  pmf = 0.0625      
    
    % Input Error Checking ****************************************************
    if isempty(p) | isempty(k), pmf = []; return, end
    if nargin ~= 2, error('Function requires two inputs.'), end
    if p < 0 | p > 1, error('p must be between 0 and 1.'), end
    if k < 1 | ~isint(k), error('k must be positive integer & k > 0.'), end   % with this parameterization
    
    n = size(p,1); d = size(p,2);
    m = size(k,1); 
    if isempty(p) | ~isnumeric(p) | ~ismatrix(p)
        error('p must be non-empty numeric scalar, vector, or 2-D matrix.');
    elseif isempty(k) | ~isnumeric(k) | ~ismatrix(k) 
        error('k must be non-empty numeric scalar, vector, or 2-D matrix.');
    elseif size(k,2) ~=d
        error('Rows of p and k must have same dimensions.');
    end
    % End (Input Error Checking) **********************************************
    
    pmf = p.*((1-p).^(k-1));
    end
    

    方法三:MATLAB的内置函数
    如果您有统计工具箱,MATLAB 有一个已经调用的函数geopdf,但请注意它是根据支持 {0,1,2,...} 的另一个“版本”参数化的(请参阅wiki page)。

    p.*((1-p).^k)          % The other parameterization
    geopdf(k,p)            % Note order of inputs
    

    您可以通过调整输入来纠正这一点。

    geopdf(k-1,p)          % Subtract 1 trial
    

    使用 MATLAB R2018b 测试的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2016-07-09
      • 2014-07-04
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多