【问题标题】:Fitting parameter b of the Gamma distribution from mean, 95% in Python从均值拟合 Gamma 分布的参数 b,Python 中为 95%
【发布时间】:2019-03-14 17:11:49
【问题描述】:

这个 Mathematica 函数找到 Gamma 分布的参数 b, 给定平均值和 95% 值并按平均值 [Mu] 缩放; 两个值括号 [Beta] 使其速度更快,并且 max pg95= 5.8[Mu]* gb[[Mu], p95] 存在限制。 我需要将这段代码翻译成 Python:

gb[\[Mu]_, p95_] := Block[{p = Min[p95/\[Mu], 5.8]},
\[Mu] FindRoot[CDF[GammaDistribution[1/\[Beta], \[Beta]], p] - .95 == 0,
  {\[Beta], 1, If[p == 1, 1.1, p]}][[1, 2]]];

【问题讨论】:

    标签: python-3.x wolfram-mathematica gamma-distribution


    【解决方案1】:

    即使您找不到完全等效的 gamma 函数,您也应该能够使用 SciPy 的集成和求根函数翻译 gb。可以获得所需的功能,例如(用一些演示值说明)

    例如

    如您所见,由更基本的函数构造的代码产生相同的答案,尽管速度更慢。

    代码

    gamma[z_] := \!\(
    \*SubsuperscriptBox[\(\[Integral]\), \(0\), \(\[Infinity]\)]\(
    \*SuperscriptBox[\(t\), \(z - 1\)] 
    \*SuperscriptBox[\(E\), \(-t\)] \[DifferentialD]t\)\)
    gamma[a_, z0_, z1_] := \!\(
    \*SubsuperscriptBox[\(\[Integral]\), \(z0\), \(z1\)]\(
    \*SuperscriptBox[\(t\), \(a - 1\)] 
    \*SuperscriptBox[\(E\), \(-t\)] \[DifferentialD]t\)\)
    gammaregularized[a_, z1_] := gamma[a, 0, z1]/gamma[a]
    cdf[\[Beta]_, p_] := 
     Piecewise[{{gammaregularized[1/\[Beta], p/\[Beta]], p > 0}}]
    p = 1.2;
    FindRoot[cdf[\[Beta], p] - .95, {\[Beta], 1, If[p == 1, 1.1, p]}]
    FindRoot[CDF[GammaDistribution[1/\[Beta], \[Beta]], 
       p] - .95, {\[Beta], 1, If[p == 1, 1.1, p]}]
    

    【讨论】:

    • 嗨,克里斯,我还有一些 Mathematica 函数需要翻译成 Python。你能帮我完成这个任务吗?我可以先把代码发给你,让你考虑一下。这是我的联系方式 Julia.derx@gmail.com
    • 您通常可以在文档中和符号评估中找到有关更高级别函数的信息,正如我所演示的。如果您需要帮助分解更高级别的功能,我建议您在这里询问:https:\\mathematica.stackexchange.com。它主要是一个 Mathematica 站点,不是 Python 的,但在更高级别的 Mathematica 函数中查找基本函数应该在主题范围内。
    猜你喜欢
    • 2019-09-17
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多