Подходящий параметр b гамма-распределения от среднего, 95% в Python - PullRequest
1 голос
/ 14 марта 2019

Эта функция Mathematica находит параметр 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]]];

1 Ответ

0 голосов
/ 15 марта 2019

Даже если вы не можете найти точно эквивалентные гамма-функции, вы должны быть в состоянии перевести gb с функциями интеграции и поиска корня SciPy.Требуемые функции могут быть получены, например, (иллюстрируя с некоторыми демонстрационными значениями)

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