【问题标题】:MATLAB | calculating parameters of gamma dist based on mean and probability intervalMATLAB |根据均值和概率区间计算 gamma dist 的参数
【发布时间】:2011-04-11 01:27:29
【问题描述】:

我有一个包含 2 个未知数的 2 个方程的系统,我想使用 MATLAB 求解,但不知道如何编程。我得到了一些关于伽马分布的信息(平均值为 1.86,1.61 和 2.11 之间的 90% 区间),最终想要得到平均值和方差。我知道我可以使用正态近似,但我宁愿求解 A 和 B,即伽马分布的形状和尺度参数,并以这种方式找到均值和方差。在伪 MATLAB 代码中我想解决这个问题:

gamcdf(2.11, A, B) - gamcdf(1.61, A, B) = 0.90;
A*B = 1.86;

你会如何解决这个问题?如果有帮助,我有符号数学工具箱。

【问题讨论】:

    标签: matlab probability gamma-distribution


    【解决方案1】:

    平均值是 A*B。那么你能根据均值(mu)和 B 来求解 A 吗?

    A = mu/B
    

    当然,除非你知道 B,否则这没有用。或者是吗?

    看看你的第一个表情。可以代替吗?

    gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) = 0.90
    

    这会让你更接近吗?可能。除了不完整的伽马函数本身之外,没有有用的符号解决方案可用。你如何在matlab中用一个未知数数值求解一个方程?使用 fzero。

    当然,fzero 会寻找零值。但是减去 0.90 就解决了。

    我们可以定义一个 fzero 可以使用的函数吗?使用函数句柄。

    >> mu = 1.86;
    >> gamfun = @(B) gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) - 0.90;
    

    那就试试吧。在我们这样做之前,我总是建议绘制一些东西。

    >> ezplot(gamfun)
    

    嗯。该图表明可能很难找到函数的零。如果您尝试过,您会发现这里需要良好的 fzero 起始值。

    对我的第一次尝试感到抱歉。为 fzero 提供更好的起始值,再加上更多的绘图,确实给出了产生所需形状的伽马分布。

    >> B = fzero(gamfun,[.0000001,.1])
    B =
            0.0124760672290871
    >> A = mu/B
    A =
              149.085442218805
    >> ezplot(@(x) gampdf(x,A,B))
    

    事实上,这是一条非常“正常”的曲线,即高斯曲线。

    【讨论】:

    • 太棒了,感谢您的详细回答。 fzero 功能很棒!不过,我对没有解决方案感到有点沮丧,因为我试图复制的一篇论文的作者说他使用了具有这些特征的分布作为 MCMC 模拟的先验分布。我想你不熟悉 MCMC,是吗?如果您是,您是否介意快速浏览一下本文的第 11 页,如果我误解了某些内容,请告诉我?这是论文的网址:bit.ly/9uWlLN
    • 我之前给出的详细信息是图表中的第一个,tau。
    • 我通读了论文,然后又玩了一些。我需要为 fzero 使用更好的起始值,加上一个包含解决方案的区间以获得收敛。
    • 非常感谢!你是救生员!
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2019-07-04
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多