如何解决Python 中的分析最高密度区间最好用于 Beta 分布
我想知道是否有人知道可靠且快速的分析 HDI 计算,最好用于 beta 函数。
HDI 的定义在 this question 中称为“最高后密度区域”。
输入
一种方法是加速我发现的这个脚本 在 the same said question 中(改编自 R 到 Python)并取自 John K. Kruschke 的《Doing bayesian data analysis》一书)。我用过这个方案,很可靠,但是对于多次调用来说有点太慢了。 100 倍甚至 10 倍的加速将非常有帮助!
from scipy.optimize import fmin
from scipy.stats import *
def HdiofICDF(dist_name,credMass=0.95,**args):
# freeze distribution with given arguments
distri = dist_name(**args)
# initial guess for HDIlowTailPr
incredMass = 1.0 - credMass
def intervalWidth(lowTailPr):
return distri.ppf(credMass + lowTailPr) - distri.ppf(lowTailPr)
# find lowTailPr that minimizes intervalWidth
HDIlowTailPr = fmin(intervalWidth,incredMass,ftol=1e-8,disp=False)[0]
# return interval as array([low,high])
return distri.ppf([HDIlowTailPr,credMass + HDIlowTailPr])
使用
print HdiofICDF(beta,a=5,b=4)
注意!一些解决方案将此 HDI 与等尾间隔解决方案(所述问题称为“中央可信区域”)混淆,后者更容易计算,但不回答相同的问题。 (例如,参见 Kruschke 的 Why HDI and not equal-tailed interval?)
此外,这个问题与我在 PyMC3 中看到的 MCMC 方法(pymc3.stats.hpd(a)
,其中 a
是随机变量样本)无关,而是与解析解有关。
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。