Gamma 分布的拟合参数 b 来自均值,95% in Python
Fitting parameter b of the Gamma distribution from mean, 95% in Python
这个 Mathematica 函数找到 Gamma 分布的参数 b,
给定平均值和 95% 的值并按平均值 [Mu] 缩放;
两个值括号 [Beta] 使其速度很快,并且最大 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]]];
即使您找不到完全等效的伽马函数,您也应该能够将 gb
转换为 SciPy 的积分和求根函数。可以获得所需的功能,例如(用一些演示值进行说明)
例如
如您所见,由更基本的函数构造的代码产生相同的答案,尽管速度更慢。
代码
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 函数找到 Gamma 分布的参数 b, 给定平均值和 95% 的值并按平均值 [Mu] 缩放; 两个值括号 [Beta] 使其速度很快,并且最大 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]]];
即使您找不到完全等效的伽马函数,您也应该能够将 gb
转换为 SciPy 的积分和求根函数。可以获得所需的功能,例如(用一些演示值进行说明)
例如
如您所见,由更基本的函数构造的代码产生相同的答案,尽管速度更慢。
代码
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]}]