从平均值拟合Gamma分布的参数b,在Python中为95%

时间:2019-03-14 17:11:49

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

此Mathematica函数可找到Gamma分布的参数b,   给定平均值和95%的值,并用平均值[Mu]进行缩放; 两个值括号[Beta]使其速度更快,并且最大pg95 = 5.8 [Mu] * gb [[Mu] ,p95 ]有一个限制。 我需要将此代码转换为Python:

<div id="homeSlides fade">

1 个答案:

答案 0 :(得分:0)

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

enter image description here

例如

enter image description here

如您所见,从更基本的功能构造的代码会产生相同的答案,尽管速度较慢。

代码

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]}]