[英]How to find the shape parameters of a beta density that matches two quantiles in Python?
在 R 中有beta.select() function,它找到與分布的兩個分位數的知識相匹配的 beta 密度的形狀參數。
這是文檔中的一個示例:
quantile1=list(p=.5,x=0.25)
quantile2=list(p=.9,x=0.45)
beta.select(quantile1,quantile2)
但是,要在 Python 中做同樣的事情,我在 scipy 的beta 文檔中沒有找到任何類似的方法。
list()
生成 R 的分位數是多少? 我知道如何用np.quantile()計算給定數組的分位數,但它期望一個數組作為輸入,而不是概率(例如p=.5
)。 SciPy 中沒有等效的 function。 這是基於scipy.special.betainc
和scipy.optimize.fsolve
的實現:
from scipy.special import betainc
from scipy.optimize import fsolve
def _beta_select_equation(params, p1, x1, p2, x2):
return betainc(*params, [x1, x2]) - [p1, p2]
def beta_select(p1, x1, p2, x2):
params, info, status, mesg = fsolve(_beta_select_equation, [1, 1],
args=(p1, x1, p2, x2), xtol=1e-12,
full_output=True)
if status != 1:
raise RuntimeError(f'fsolve failed: {mesg}')
return params
例如,
In [21]: beta_select(p1=0.5, x1=0.25, p2=0.9, x2=0.45)
Out[21]: array([2.66897386, 7.36479059])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.